有一些场景,我们需要写xml,又需要对内容进行约束,比如智能输入某个值范围,只能写入固定值

这个时候我们就需要xml schema

这个,百度解释为

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

我的个人理解是对xml进行约束,以及自动格式验证的一套结构体

网上的例子很多,我解释一下我的一点经验

内容包裹在一组xs:schema里面

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>

自定义元素格式如下

<xs:element name="Table">

Table是我们自定义的元素名称

我们要自定义的类型,标签为xs:simpleType。

可以是全局类型,也可以是局部类型

全局的类型是一个通用的类型,局部类型是针对某一个元素的内容验证

全局的类型在xs:schema标签内,在最上层的xs:element之上,如果写错了顺序,编译器会提示格式错误的

示例如下

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType>
</xs:simpleType>
<xs:element>
</xs:element>
<xs:schema>

标签xs:simpleType内name或者id两个至少得一个有值,name是他的名称,必须的id是选填的唯一ID,类似html

比如我们有个自定义类型叫Status,类型是short

  <xs:simpleType name="Status">
<xs:restriction base="xs:short">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
</xs:restriction>
</xs:simpleType>

这段代码的意思是,类型short,精确查找内容,只能1和2两个值允许输入

比如我们有个类型Level,枚举类型,定为short,可以1到10,如果精确找值,就很麻烦了

所以我们用区间元素 xs:pattern 替代掉 xs:enumeration,这个是正则表达式判断

  <xs:simpleType name="Status">
<xs:restriction base="xs:short">
<xs:pattern value="[1-9]"/>
</xs:restriction>
</xs:simpleType>

也可以用最大值,最小值判断

  <xs:simpleType name="Status">
<xs:restriction base="xs:short">
<xs:minExclusive value="1"/>
<xs:maxInclusive value="9"/>
</xs:restriction>
</xs:simpleType>

类似的验证元素还有

具体对照如下

enumeration   定义可接受值的一个列表
fractionDigits  定义所允许的最大的小数位数。必须大于等于0。
length             定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive 定义数值的上限。所允许的值必须小于此值。
maxInclusive  定义数值的上限。所允许的值必须小于或等于此值。
maxLength     定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive  定义数值的下限。所允许的值必需大于此值。
minInclusive   定义数值的下限。所允许的值必需大于或等于此值。
minLength      定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern            定义可接受的字符的精确序列。
totalDigits        定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace     定义空白字符(换行、回车、空格以及制表符)的处理方式

元素和属性可以自由组合,元素和属性都在元素内的xs:complexType下一层,不同的是,元素内的元素只能在xs:sequence之内

属性的标签为xs:attribute,属性和元素的值类型就是type元素,输入会有很多默认的类型,也可以输入我们自定义的全局类型

元素和属性的差异是,属性写在元素的自属性里,输入会自动提示,可以不填

元素必填,是上一级元素的下级标签

元素需要配置属性maxOccurs="unbounded"

这样就可以重复元素了

最后附上实例

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="ModelType">
<xs:restriction base="xs:string">
<xs:enumeration value="Id"/>
<xs:enumeration value="Id64"/>
<xs:enumeration value="Status"/>
<xs:enumeration value="nvarchar"/>
<xs:enumeration value="int"/>
<xs:enumeration value="decimal" />
<xs:enumeration value="datetimeoffset" />
</xs:restriction>
</xs:simpleType> <xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="Field" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Describe" type="xs:string" />
<xs:attribute name="Type" type="ModelType" />
<xs:attribute name="Length" type="xs:int" />
<xs:attribute name="Precision" type="xs:int" />
<xs:attribute name="IsNull" type="xs:boolean" />
</xs:complexType>
</xs:element>
<xs:element name="x">
<xs:simpleType>
<xs:restriction base="xs:int"> </xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Describe" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

调用的例子

<?xml version="1.0" encoding="utf-8" ?>
<Table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="XMLSchema.xsd"
Name="AgentUser" Describe="代理用户表"
>
<Field Name="Id" Type="int" Describe="ID" IsNull="false" Length="0" Precision="0" />
<Field Name="Code" Type="string" Describe="编码" IsNull="false" Length="255" Precision="0" />
</Table>

Name为Code这行,编辑器会提示内容无效

xml schema杂谈的更多相关文章

  1. XML Schema and XMLspy notes

    Introduction An xml documents consists of elements, attributes and text. There are two structures in ...

  2. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  3. XML Schema命名空间解析

    URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee 1998].在Web体系结构中, ...

  4. 【转】XSD (xml Schema Definition)

    来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1.  定义一个Xml文档中都有什么元 ...

  5. C#与XML Schema的问题

    http://bbs.csdn.net/topics/50493564 weileily: 用XmlSchema.Read方法读取了一个xsd文件,请问如何遍历检索器中的ComplexType与Sim ...

  6. XML Schema的基本语法(转)

    XML Schema的基本语法(转) XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XM ...

  7. Xml Schema:C#访问在complextype中插入新元素

    最近用c#写Xml Schema代码,找了很久也找不到如何在已有的complextype中插入新的element,最后我充分发挥自己的聪明才智,哈哈,终于从...中找到了灵感. XmlSchemaSe ...

  8. [BTS] System.Xml.Schema.XmlSchemaException: The complexType has already been declared when generate IDoc schema.

    I use wcf-sap adapter for generate the schema of IDoc that named "YHREMPMASTER". but throw ...

  9. onfiguration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]

    org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Una ...

随机推荐

  1. 结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 在使用spring框架的项目中,@Value是经常 ...

  2. 关于小白一天摆弄Axure产品原型的心得

    因为项目所需,被迫快速设计产品原型,制作app使用视频,这里简单分享一些一个小白第一次触碰产品原型设计的一些心得: 原型设计工具的选用 我这里针对的是贫穷学生党,分享的是自己尝试的几款.有钱大佬自行绕 ...

  3. element-ui的upload组件的clearFiles方法的调用

    element-ui使用中碰到的问题 <template> <div> <el-button @click="clearFiles">重新上传& ...

  4. 解决IOS端微信浏览器input,textarea有内上边框阴影

    box-shadow:0px 0px 0px rgba(0,0,0,0); -webkit-appearance:none;

  5. Redis安装与运行讲解

    第一步:安装Redis 打开网址:https://github.com/MicrosoftArchive/redis/releases 因为版本比较多,最新版已经是3.2.100,我们选择3.0.50 ...

  6. redis(六):Redis 字符串(String)

    Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127. ...

  7. 数据可视化之PowerQuery篇(六)PowerQuery技巧:批量合并Excel表的指定列

    本文来源于一个星友的问题,他有上百个Excel表格,格式并不完全一样,列的位置顺序也不同,但每个表都有几个共同列,这种情况下,能不能通过Power Query把这些表格共同的列批量合并呢? 当然是可以 ...

  8. MVC + EFCore 项目实战 - 数仓管理系统5 – 菜单配置及里程碑划分

    上次课程我们完成了需求的梳理. 我们根据梳理的需求把菜单配好,另外我们把项目里程碑也配置在系统中,开发和管理都在系统中,形成无文档化管理. 一.菜单配置 根据我们的归纳图,我们先将菜单配置好. 我们遵 ...

  9. 痞子衡嵌入式:SNVS Master Key仅在i.MXRT10xx Hab关闭时才能用于DCP加解密

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列中数据协处理器DCP使用SNVS Master Key加解密的注意事项. i.MXRT不仅仅是处理性能超强的MCU,也是 ...

  10. Linux 终端最全推荐(建议收藏)

    本文来自网络整理,如有侵权,则可删除. 如果你跟我一样,整天要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件,那你真是找对了文章.我这里搜集了一些非常有趣的终端 ...