使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例)
SQL-MAP是PDF.NET(PWMIS数据开发框架)具有特色的开发技术,它可以将SQL语句映射成DAL代码,而且能够做到无需IDAL和DalFactory自动切换数据库到另外一个数据库系统,比如SqlServer切换到Oralcle,有关SQL-MAP的规范请看这里,为什么要使用这种技术,请看“抽象SQL(参数化)查询 ”。
从上面的规范看到,要手写一个SQL-MAP文件还是比较复杂,虽然框架提供了SQL-MAP配置文件管理器,但它主要适用于新手使用,用起来效率不是很高,这个时候就需要有一个可以只能提示XML文件编写的东西了,这就是SqlMap.xsd,下面贴出该文件的最新完整内容:
SqlMap.XSD
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="enumCmdType" >
<xs:restriction base ="xs:string">
<xs:enumeration value ="Text"></xs:enumeration>
<xs:enumeration value ="StoredProcedure"></xs:enumeration>
<xs:enumeration value ="Table"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="enumResultClass" >
<xs:restriction base ="xs:string">
<xs:enumeration value ="ValueType"></xs:enumeration>
<xs:enumeration value ="DataSet"></xs:enumeration>
<xs:enumeration value ="EntityObject"></xs:enumeration>
<xs:enumeration value ="EntityList"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="enumScriptType" >
<xs:restriction base ="xs:string">
<xs:enumeration value ="Access"></xs:enumeration>
<xs:enumeration value ="SqlServer"></xs:enumeration>
<xs:enumeration value ="SqlServerCe"></xs:enumeration>
<xs:enumeration value ="Oracle"></xs:enumeration>
<xs:enumeration value ="DB2"></xs:enumeration>
<xs:enumeration value ="Sysbase"></xs:enumeration>
<xs:enumeration value ="MySql"></xs:enumeration>
<xs:enumeration value ="SQLite"></xs:enumeration>
<xs:enumeration value ="PostgreSQL"></xs:enumeration>
<xs:enumeration value ="UNKNOWN"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="SqlMap">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Script">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="CommandClass">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element maxOccurs="unbounded" name="Select">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="CommandName" type="xs:string" use="required" />
<xs:attribute name="CommandType" type="enumCmdType" use="required" />
<xs:attribute name="Method" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="required" />
<xs:attribute name="ResultClass" type="enumResultClass" use="optional" default="DataSet"/>
<xs:attribute name="ResultMap" type="xs:string" use="optional" />
<xs:attribute name="SqlPage" type="xs:string" use="optional" default="False"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Insert">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="CommandName" type="xs:string" use="required" />
<xs:attribute name="CommandType" type="enumCmdType" use="required" />
<xs:attribute name="Method" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Update">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="CommandName" type="xs:string" use="required" />
<xs:attribute name="CommandType" type="enumCmdType" use="required" />
<xs:attribute name="Method" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Delete">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="CommandName" type="xs:string" use="required" />
<xs:attribute name="CommandType" type="enumCmdType" use="required" />
<xs:attribute name="Method" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Class" type="xs:string" use="required" />
<xs:attribute name="Interface" type="xs:string" use="optional" />
<xs:attribute name="Description" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="enumScriptType" use="required" />
<xs:attribute name="Version" type="xs:string" use="optional" />
<xs:attribute name="ConnectionString" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="EmbedAssemblySource" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:schema>
注意文件中的simpleType ,它表示定义一个自定义的简单类型,在XSD文件的节点中使用 type 属性来引用它即可。
本文中定义了三个自定义类型enumCmdType,enumResultClass,enumScriptType ,而且是枚举类型(使用xs:enumeration 定义),这样在XML文件中就可以出现“下拉选择”的提示效果了。
在节点属性中,use="required" 表示必须的属性,use="optional" 表示可选的属性。
整个XSD文件的编写要注意的也就这么多,编写起来还是比较简单的。
有了这个XSD文件,在建立的Sql-Map配置文件的<sqlmap> 标签中,加入这个XSD的使用声明,就能够看到智能提示的效果了。
<SqlMap
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="SqlMap.xsd">
<!-- 在下面敲入尖括号,就能够出现当前节点区域内的应该编写的内容,来试试吧 -->
</SqlMap>
有了这个SqlMap.config文件,就能够使用代码生成器自动生成DAL代码了。
PDF.NET代码生成器下载地址(包含框架应用的完整示例),下载后请看里面的说明。
如果程序的数据库无法打开,请看看连接字符串是否正确,或者将它附加到SQLSERVER实例上:
connectionString="Data Source=.SQLEXPRESS;AttachDbFilename=~App_DataPDFTest.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
下载完成后,将本文的SqlMap.xsd内容复制下来另存为文件即可,注意文件目录,如果该XSD文件跟SqlMap.config文件不在同一个,需要修改下面的路径:
xsi:noNamespaceSchemaLocation="SqlMap.xsd"
有关PDF.NET框架的详细内容,请看我的博客相关内容或者查看官网:http://www.pwmis.com/sqlmap
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言中的Theil-Sen回归分析
- R语言关于回归系数的解释
- R语言对二分连续变量进行逻辑回归数据分析
- SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
- R语言逻辑回归预测分析付费用户
- R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
- R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
- R语言基于树的方法:决策树,随机森林,套袋Bagging,增强树
- R语言无监督学习:PCA主成分分析可视化
- 如何用r语言制作交互可视化报告图表
- R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
- R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
- R语言里的非线性模型:多项式回归、局部样条、平滑样条、广义加性模型分析
- 使用R语言进行机制检测的隐马尔可夫模型HMM
- 【Kubernetes】Octant再探...