1.简介
XSD即XML结构定义, XML Schemas Definition。其本身就是用xml描述的, 且遵循xml语法规则。一份XML schema文件描述了XML文档的结构.
基本规则:
.必须以 XML 声明开头
.必须拥有唯一的根元素
.标签必须与结束标签相匹配
.元素对大小写敏感
.所有的元素都必须关闭
.所有的元素都必须正确地嵌套
.必须对特殊字符使用实体
<!-- xsd -->
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<!-- 对应的xml一个例子 -->
<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2.定义一个元素
<xs:element name="xxx" type="yyy"/>
<xs:element表示定义一个元素
xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型
3.定义一个属性
<xs:attribute name="xxx" type="yyy"/>
xs:attribute 表示定义一个属性
xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型
4.自定义简单类型(用于复合元素)
<xs:simpleType name="sinceType">
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="goal" type="sinceType"/>
xs:simpleType 表示接下来是简单类型的定义. 而使用此类型的元素,一般被称作复合元素
5.自定义结构体(用于复合元素)
<xs:complexType name="combinationType">
<xs:element name="Name" type="xs:string" />
<xs:element name="Age" type="xs:string" />
</xs:complexType>
<xs:element name="person" type="combinationType"/>
xs:complexType 表示接下来是结构体的定义. 而使用此类型的元素,一般被称作复合元素.
6.混合内容的自定义类型元素
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
xs:complexType mixed="true" 指明了letter里边的内容是混合内容, 其可以是如下形式:
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
7.约束条件
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
xs:restriction 表示接下来是对元素/属性的约束
8.可选的和必需出现(属性)
<xs:attribute name="lang" type="xs:string" use="required"/>
use 表示出现的要求,required/optional/prohibited, 分别是必须出现/可选/不出现
9.出现次数(元素)
<xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/>
minOccurs 表示最小出现的次数,并由数值/unbounded 来指定
maxOccurs 表示最大出现的次数,并由数值/unbounded 来指定
10.默认值和固定值(元素/属性)
<xs:element name="pen" type="xs:string" default="minipen"/>
<xs:attribute name="color" type="xs:string" fixed="red"/>
default 指定默认值, fixed 指定该元素值固定
11.数据类型限制(元素/属性)
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2" />
<xs:maxLength value="4" />
</xs:restriction>
</xs:simpleType>
</xs:element>
xs:restriction 表示对元素/属性的限制.
限制种类有以下类别:
.length // 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
.minLength // 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
.maxLength // 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
.minInclusive // 定义数值的下限。所允许的值必需大于或等于此值。
.maxInclusive // 定义数值的上限。所允许的值必须小于或等于此值。
.minExclusive // 定义数值的下限。所允许的值必需大于此值。
.maxExclusive // 定义数值的上限。所允许的值必须小于此值。
.enumeration // 定义可接受值的一个列表
.pattern // 定义可接受的字符的精确序列(规则表达式)。
.fractionDigits // 定义所允许的最大的小数位数。必须大于等于0
.totalDigits // 定义所允许的阿拉伯数字的精确位数。必须大于0。
.whiteSpace // 定义空白字符(换行、回车、空格以及制表符)的处理方式。
12.空白字符的限制
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
xs:whiteSpace 指明对空白字符的限制, 取值有preserve/collapse/replace, 一次是保留/只保留字符中间必须的空格,且多个合并为一个/全部去掉
13.子元素顺序
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
子元素顺寻有:
.xs:all // 顺序不限, 每个子元素只准出现一次
.xs:choice // 顺序不限, 每个子元素出现次数不限
.xs:sequence // 顺序固定, 每个子元素出现次数不限
14.元素组
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
xs:group 指明定义一个元素组或者引用一个已经定义的元素组. 这样可以减少不必要的重复书写.
15.属性组
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
xs:attributeGroup 指明定义一个属性组或者引用一个已经定义的属性组. 这样可以减少不必要的重复书写.
16.不限定子元素
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
xs:any 指明可以包含一个不限定子元素. 如以下xml也是符合xsd的:
<person>
<firstname>David</firstname>
<lastname>Smith</lastname>
<children>
<childname>mike</childname>
</children>
</person>
17.不限定属性
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:anyAttribute minOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
anyAttribute 指明可以包含一个不限定属性
18.替换元素
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
substitutionGroup 指明本元素可以替换的元素. 可替换元素的类型必须和主元素相同,同时两者必须是全局元素。
如以下xml片段都是合法的:
<customer>
<name>John Smith</name>
</customer>
<customer>
<navn>John Smith</navn>
</customer>
19.阻止被替换
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
block 指明阻止的内容,这里为被替换. 可替换元素的类型必须和主元素相同,同时两者必须是全局元素。
本例就阻止用任何来替换name的声明,以下xml片段是错误的:
<customer>
<navn>John Smith</navn>
</customer>
20.全局元素/本地元素
全局元素指 "schema" 元素的直接子元素
本地元素(Local elements)指嵌套在其他元素中的元素
21.xsd内置数据类型
xs:byte // 字节型,8位二进制位长
xs:unsignedByte // 无符号字节型
xs:short // 短整型, 16位二进制位长
xs:unsignedShort // 无符号短整型
xs:integer // 整型, 32位二进制位长
xs:positiveInteger // 只有正值的整型
xs:nonPositiveInteger // 只有非正值的整型
xs:negativeInteger // 只有负值的整型
xs:nonNegativeInteger // 只有非负值的整型
xs:int // 整型, 32位二进制位长
xs:long // 长整型, 64位二进制位长
xs:unsignedLong // 无符号长整型
xs:float // 浮点数, 32位二进制位长
xs:double // 双精度, 64位二进制位长
xs:string // 字符串
xs:boolean // 合法的布尔值是 true、false、1(表示 true) 以及 0(表示 false)
xs:hexBinary // 十六进制编码的二进制数据
xs:base64Binary // Base64 编码的二进制数据
xs:date // 日期
xs:decimal // 货币类型
xs:anyURI // 假如某个 URI 含有空格,请用 替换它们
22.调用其他程序/xml外部类型
<xs:notation name="gif" public="image/gif" system="view.exe"/>
xs:notation 表示此元素非xml类型, 可指定解析或执行的程序.
xml文档中的内容类似如下:
<image type="gif">demopic.gif</image>
23.注释
<xs:annotation>
<xs:documentation xml:lang="zh">
这是一份用于企业雇员信息描述的模式文档
</xs:documentation>
</xs:annotation>
"<!--"和"-->"仍可以使用,但是为了方便其他读者和应用程序来理解模式文档,XML Schema提供了三个元素来为模式提供注解:
.xs:annotation // 作为documentation/appinfo的父元素
.xs:documentation // 放置适合人阅读的信息
.xs:appinfo // 工具、样式表和其他应用程序提供信息
24.命名空间
名称空间声明的一般形式为
第一部分是一个关键字xmlns:
第二部分是名称空间的前缀(标识符)
第三部分是一个等号
第四部分是双引号
第五部分是名称空间标识URI
需要注意的是,名称空间的前缀不能为xml,因为在XML中这个字符串是保留作特殊用途的。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
25.源命名空间
在Schema中的定义和声明也可以引用其他的命名空间,我们可以把这种命名空间取名为源命名空间(source namespaces)。每一个Schema可以有多个源命名空间。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</xs:schema>
26.目标命名空间
每一个Schema可以有且只有一个目标命名空间。在一个给定的Schema中,每一个名称都是属于一个特定的名字空间的, 同时可以由targetNamespace来命名
<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema” targetNamespace=“http://www.test.com/ns/ns_test“>
</xsd:schema>
xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace
其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找
27.引入xsd命名空间
<xs:schema xmlns:xs
- XSD文件详解
XSD (xml Schema Definition) Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 3. 定义某个节点的都有什么 ...
- 针对单个 js 文件禁用 ESLint 语法校验
问题描述: 在 Vue-cli 创建的项目中,使用了 ESLint 规范代码的项目中 如何针对单个 js 文件禁用 ESLint 语法校验,但整个项目依然保留 ESLint 的校验规则? 解决方案: ...
- Destoon 模板存放规则 及 语法参考
模板存放规则及语法参考 一.模板存放及调用规则 模板存放于系统 template 目录,template 目录下的一个目录例如 template/default/ 即为一套模板 模板文件以 .htm ...
- robot.txt 文件 作用和语法
seo工作者应该不陌生,robots.txt文件是每一个搜索引擎蜘蛛到你的网站之后要寻找和访问的第一个文件,robots.txt是你对搜索引擎制定的一个如何索引你的网站的规则.通过该文件,搜索引擎就可 ...
- XSD文件生成C#VO实体类
最近公司要做一个项目,需要和现有的其他项目对接,由于不知道他们的数据库,只有XSD文件.所以,我们在修改相应的程序时,就需要根据他们提供的XSD文件,来写我们的VO实体类,由于我写过根据Oracle数 ...
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
- 如何将XSD文件以及引入import的文件生成相应的C#类。
下将微软的 Sample Code Generator 1.4.2.1 如果链接不可以用,请到google上搜索,并安装. 拷贝要生成的XSD相关文件到安装目录,MS-DOS下进入安装目录. 执行命令 ...
- 为什么在Spring的配置里,最好不要配置xsd文件的版本号
为什么dubbo启动没有问题? 原文链接:http://www.tuicool.com/articles/YRn67zM 这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站h ...
- C# 使用xsd文件验证XML 格式是否正确
C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...
随机推荐
- CSS选择器 + Xpath + 正则表达式整理(有空再整理)
选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstna ...
- day63 django-模板语言
我们的功能是需要解耦的,从开始就一直在强调这一点,所以我们的函数需要另外放到一个单独的文件里面,一般都是放到views文件里面,views叫做视图,一般术语叫做视图函数,用来进行各种逻辑判断的,需要一 ...
- ThreadPoolExecutor 入参 corePoolSize 和 maximumPoolSize 的联系
前言 我们可以通过 java.util.concurrent.ThreadPoolExecutor 来创建一个线程池: new ThreadPoolExecutor(corePoolSize, max ...
- linux 学习笔记 管道 pipe ls cp mv
如ls |less -MN 含义把ls结果输出到less [ls] ==管道== [more] ls命令 ls -a 展示隐藏的文件 <隐藏文件一般以. 开始> ls -t 以时间戳排 ...
- 自己总结的C#编码规范--3.特定场景下的命名最佳实践
特定场景下的命名最佳实践 命名空间 要使用PascalCasing,并用点号来分隔名字空间中的各个部分. 如Microsof.Office.PowerPoint 要用公司名作为命名空间的前缀,这样就可 ...
- ISP PIPLINE(零) 知识综述预热
本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...
- Java笔记(十四) 并发基础知识
并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...
- synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
/* 内容:同步代码块,目的是解决多线程中的安全问题.什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权, *还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负 ...
- 开源评测系统hustoj-代码解读
非常感谢zhblue贡献了这么美丽的代码 为了开发适合自己学校的oj,努力研读代码中,不断的百度,调试,测试 对ubutun,linux的各种文件系统,进程系统,c编程都学习了不少 给大家分享下,希望 ...
- BZOJ3736 : [Pa2013]Karty
显然只需要考虑与障碍点相邻的格子,通过旋转坐标系,可以只考虑障碍点在格子上方的情况. 悬线法求出每个点往上的最长延伸距离$x$,以及往左往右的延伸距离$y$. 那么当$r\geq x$时,$c$至多为 ...