zoukankan      html  css  js  c++  java
  • 使用XSD编写具有智能提示的XML文件(以SQLMAP脚本为实例)

        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_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

  • 相关阅读:
    JAVA编程-------29、求3*3矩阵对角线元素之和
    JAVA编程---------28、对10个数进行排序(冒泡排序)
    JAVA编程-------------27、100以内的素数
    JAVA编程----------26、请输入星期几的第一个字母来判断一下星期几, 第一个字母相同,则判断第二个字母,以此类推
    JAVA编程-----------25、查找5位数的回文数
    JAVA编程---------24、输入一个数,判断位数,并逆序输出
    JAVA编程------------23、递归
    JAVA编程------------22、利用递归求5!
    JAVA编程--------21、求1!+2!+....+20!=
    JAVA编程------------20、计算2/1+3/2+5/3+8/5+...求前20项之和
  • 原文地址:https://www.cnblogs.com/bluedoctor/p/2045376.html
Copyright © 2011-2022 走看看