使用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,下面贴出该文件的最新完整内容:

 

ExpandedBlockStart.gif 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_Data\PDFTest.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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值