xml schema杂谈
有一些场景,我们需要写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杂谈的更多相关文章
- XML Schema and XMLspy notes
Introduction An xml documents consists of elements, attributes and text. There are two structures in ...
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
- XML Schema命名空间解析
URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee 1998].在Web体系结构中, ...
- 【转】XSD (xml Schema Definition)
来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1. 定义一个Xml文档中都有什么元 ...
- C#与XML Schema的问题
http://bbs.csdn.net/topics/50493564 weileily: 用XmlSchema.Read方法读取了一个xsd文件,请问如何遍历检索器中的ComplexType与Sim ...
- XML Schema的基本语法(转)
XML Schema的基本语法(转) XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XM ...
- Xml Schema:C#访问在complextype中插入新元素
最近用c#写Xml Schema代码,找了很久也找不到如何在已有的complextype中插入新的element,最后我充分发挥自己的聪明才智,哈哈,终于从...中找到了灵感. XmlSchemaSe ...
- [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 ...
- 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 ...
随机推荐
- C#几种单例模式
/** * 单例模式-饿汉式 */ public class Singleton { // 在定义的时候就初始化_instance, private static Singleton _instanc ...
- C++快速读写
1.主函数的最前面加入这个 std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); 2.这是一个读入数字的快读 inline int read() ...
- [BSidesCF 2020]Had a bad day
[BSidesCF 2020]Had a bad day 测试 一些猫狗的图片加上url有传参,测试到文件包含时报错了. 使用php伪协议: php伪协议 php://fliter/read=conv ...
- JavaScript学习 Ⅶ
十四. DOM(文档对象模型) 节点:Node--构成HTML文档最基本的单元 文档节点:整个HTML文档 元素节点:HTMl文档中的HTML标签 属性节点:元素的属性 文本节点:HTML标签中的文本 ...
- 如何让touchmove之后不触发touchend的事件
手机扫码看效果 不多说,直接上代码 <ul id="Ul"> <li>111</li> <li>222</li> < ...
- Maven [ERROR] 不再支持源选项 5,请使用 7 或更高版本的解决办法
刚刚学Maven,当我点击test时 就出现了这两个错误: [ERROR] 不再支持源选项 5.请使用 7 或更高版本.[ERROR] 不再支持目标选项 5.请使用 7 或更高版本. 后来在看到这篇文 ...
- 数据可视化之DAX篇(十一)Power BI度量值不能作为坐标轴?这个解决思路送给你
https://zhuanlan.zhihu.com/p/79522456 对于PowerBI使用者而言,经常碰到的一个问题是,想把度量值放到坐标轴上,却发现无法实现.尤其是初学者,更是习惯性的想这么 ...
- 基于svg的环形进度条
其实需求是这么一个基于日期的环形进度条,开始用css3写了一下感觉太麻烦了,于是抽了点时间用svg画了一个. 不多说 上代码: css: <style> circle { -webkit- ...
- 适用于IE8浏览器的bootsarp下拉菜单(支持多选,全选)
html部分代码,引用及整体项目Github项目地址:https://github.com/CNbozi/combobox 1 <!DOCTYPE html> <html lang= ...
- mysql groupby 字段合并问题(group_concat)
在我们的日常mysql查询中,我们可能会遇到这样的情况: 对表中的所有记录进行分类,并且我需要得到每个分类中某个字段的全部成员. 上面的话,大家看起来可能不太好懂,下面举一个例子来给大家说明. 现在我 ...