Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例)

使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例)

作者头像
用户1177503
发布于 2018-02-26 09:07:15
发布于 2018-02-26 09:07:15
1.5K00
代码可运行
举报
文章被收录于专栏:程序员的SOD蜜程序员的SOD蜜
运行总次数:0
代码可运行

    SQL-MAP是PDF.NET(PWMIS数据开发框架)具有特色的开发技术,它可以将SQL语句映射成DAL代码,而且能够做到无需IDAL和DalFactory自动切换数据库到另外一个数据库系统,比如SqlServer切换到Oralcle,有关SQL-MAP的规范请看这里,为什么要使用这种技术,请看“抽象SQL(参数化)查询 ”。

    从上面的规范看到,要手写一个SQL-MAP文件还是比较复杂,虽然框架提供了SQL-MAP配置文件管理器,但它主要适用于新手使用,用起来效率不是很高,这个时候就需要有一个可以只能提示XML文件编写的东西了,这就是SqlMap.xsd,下面贴出该文件的最新完整内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的使用声明,就能够看到智能提示的效果了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
在 XML 世界中,每天都在使用数百种标准化的 XML 格式。其中许多 XML 标准是由 XML Schema 定义的。XML Schema 是 DTD 的基于 XML 的(更强大的)替代品。
小万哥
2024/05/09
1.4K0
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
[Java拾遗一] XML的书写规范与解析.
前言 今天天气大好, 起了个大早开始总结一些常用的基础知识. XML一直来说都很陌生, 使用大多是用于配置文件, 之前并没有细究过其中的约束规范, 今天刚好没事来学习并总结下.  ---- 1,XML基础介绍   XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML.它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签。   xml的作用:     XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描
一枝花算不算浪漫
2018/05/18
1.7K0
Java知识点——xml概述
XML 1. XML概述 Extensible Markup Language 可拓展标记语言 用途: 1. 数据存储,小型数据库,存在一定的CRUD操作可行性 2. 网络端数据的传输 3. JavaWEB框架项目配置文件 Spring Druid .... w3c万维网联盟指定的规范 2. 基本语法 1. XML文件后缀名是.xml 2. XML第一行是对于当前文件的定义声明 3. XML文件中有且只有一个根标签 4. 属性值必须使用引号包含,这里推荐使用双引号 5. 标签必须正确匹配,正确
用户7073689
2020/03/18
4550
Java之XML的使用「建议收藏」
一.xml的定义和优势: (1).定义: 在描述一些有结构性的数据时应当使用XML来描述,例如:用户信息/省市结构等 XML(eXtensible Markup Language),是一种可扩展的标记语言,类似HTML。 XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于1998年发布的XML1.0规范。 HTML: 显示页面,网页. 学习里面自带的标签 XML: 传输数据,而非显示数据/少量数据存储。 XML标签没有被预定义,需要用户自行定义标签。
全栈程序员站长
2022/09/08
5880
Java之XML的使用「建议收藏」
PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范
SQL-MAP的目标: 集中管理SQL语句,所有SQL语句放在专门的配置文件中进行管理; 通过替换SQL配置文件,达到平滑切换数据库到另外一个数据库,比如从Oracle的应用移植到SQLSERVER; 由DBA来写程序,对于复杂的查询,DBA写的SQL语句和存储过程更有保障更有效率,SQL-MAP工具让DBA也能够写.NET程序; 代码自动生成,由于在SQL配置文件中指定了很多编程特性,所以可以使用专用工具将配置文件映射到.NET代码; PDF.NET 数据开发框架介绍(含实例程序下载)请看: http
用户1177503
2018/02/26
1.2K0
PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范
XML Schema <第三篇>
  验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema。本文主要介绍XML Schema。
全栈程序员站长
2021/12/23
1.6K0
XML Schema <第三篇>
XML Schema 复杂元素类型详解:定义及示例解析
您还可以基于现有的复杂类型创建新的复杂类型,并在其中添加额外的元素,如上面的第二个示例所示。
小万哥
2024/05/18
1730
XML Schema 复杂元素类型详解:定义及示例解析
XML学习笔记
XML和HTML的区别(引用于https://www.cnblogs.com/jqant/p/9497838.html)
逆回十六夜
2020/01/30
7240
XML Schema 字符串数据类型及约束详解
normalizedString 数据类型也包含字符,但 XML 处理器将删除换行符、回车符和制表符。
小万哥
2024/05/24
2100
XML Schema 字符串数据类型及约束详解
SpringCloud组件:Eureka服务注册中心内置的REST节点列表
你有没有考虑过Eureka Client与Eureka Server是通过什么方式进行通讯的? 为什么Client启动成功后Server就会被注册到Server的服务列表内? 为什么我们在正常关闭Client后Server会有所感知?
恒宇少年
2018/10/12
3.3K0
SpringCloud组件:Eureka服务注册中心内置的REST节点列表
XML快速入门的保姆级教程!!!
首先,同样记得将对应的jar包放入一个文件夹(如libs),并将这个文件add as library。然后我们创建java的类,使用java语言来对XML文档进行解析(java可以调用用于解析XML的相关jar包的功能,从而实现XML的解析)。
大忽悠爱学习
2021/11/15
1.1K0
Oozie分布式任务的工作流——Spark篇
Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark。在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于spark的稳定运行十分重要。 Spark Action 这个Action允许执行spark任务,需要用户指定job-tracker以及name-node。先看看语法规则: 语法规则 <workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.3
用户1154259
2018/01/17
1.3K0
用xerces-c来进行xml schema校验「建议收藏」
http://xerces.apache.org/xerces-c/schema-3.html
全栈程序员站长
2022/07/08
6960
将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介
引言 今天看到一片热门的博客, .NET高级工程师面试题之SQL篇 ,要求找出每一个系的最高分,并且按系编号,学生编号升序排列。这个查询比较复杂,也比较典型,自从用了ORM后,很久没有写过SQL语句了,于是我研究了下,自己也写了一个: WITH cte1 as ( select stu.deptID, D.depName, stu.stuid , stu.stuName, score_sum.AllScore from dbo.S
用户1177503
2018/02/27
1.8K0
将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介
eclipse导入本地xsd文件(新手慎入)
eclipse使用xsd文件可以辅助编辑xml文件。如果我们自定义了schema文件,需要导入到xml catalog才可以生效。
pollyduan
2019/11/04
1.7K0
【Java 进阶篇】Java XML约束:确保数据一致性和有效性
XML(可扩展标记语言)是一种常用的数据交换格式,用于存储和交换数据。然而,为了确保数据的一致性和有效性,通常需要定义XML约束。XML约束是一种规则集,定义了XML文档的结构、元素、属性和数据类型。本篇博客将详细介绍Java中如何使用XML约束,以及如何创建、验证和应用XML约束。
繁依Fanyi
2023/10/25
4880
【Java 进阶篇】Java XML约束:确保数据一致性和有效性
用xerces-c来进行xml schema校验
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/details/46826947
血狼debugeeker
2018/09/20
9770
冲顶大会有前端什么事吗?
---- 最近的冲顶大会只是一个知识问答的模式,不过结合直播起来可能就带来不一样的效果了。总的来看主要火起来的有几个基本点: 低门槛:人人都可以答题 奖金高:差不多都是百万以上,但是不排除机器人和你分钱 :) 延时低:同时出题,同时答题。这点对于延时直播来说,压力非常大,差不多延时必须控制到 2s 之内。所以,HLS 基本上就凉了。 KOL 带节奏,比如王思聪 撒币 主播美眉 。。。 作为一个前端开发来说,我觉得直播的世界离我们太遥远,其中有两座大山,一个是 X5 ,一个是 苹果。因为,X5 和苹果这逼不提
villainhr
2018/07/03
1.8K0
XML及相关协议
XML 是满足一组良好定义规则的格式化文本,主要由标签和文本构成,可以被储存和展现为诸如通过 HTTP 传输的消息、编程语言中的字符串、数据库中的 CLOB等文本数据形式。 【注】为了方便起见,XML 文档也被用来指应用之间的字节流、数据库中的字段、XML 信息集中的对象集合。
hotarugali
2022/02/28
1.2K0
XML及相关协议
PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引
一、框架的由来  快速入门 有关框架的更多信息,请看框架官方主页! 本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格,设计了OQL查询表达式。本框架的设计思想是通用的,完全可以移植到Java 平台,现在只提供了.NET平台的实现,暂且将本框架命名为 PDF.NET 从2013.10.1日起,原PDF.NET 将更名为 SOD o
用户1177503
2018/02/27
1.7K0
相关推荐
XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档