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

  • 相关阅读:
    中国历史朝代公元对照简表
    [Solved] DashBoard – Excel Service: The data sources may be unreachable, may not be responding, or may have denied you access.
    Delete/Remove Project from TFS 2010
    Sharepoint site showing system account instead of my username on the top right corner.
    你的成功在于你每天养成的习惯
    Internet Information Services is running in 32bit emulation mode. Correct the issue listed above and rerun setup.
    Prepare to back up and restore a farm (Office SharePoint Server 2007)
    Word中字号与磅值的对应关系
    How to: Change the Frequency for Refreshing the Data Warehouse for Team System
    UI Automation in WPF/Silverlight
  • 原文地址:https://www.cnblogs.com/bluedoctor/p/2045376.html
Copyright © 2011-2022 走看看