XML Schema笔记
XML Schema作用:
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪些元素是子元素
定义子元素的次序
定义子元素的数目
定义元素和属性的数据类型
定义元素和属性的默认值和固定值
XML Schema优点(相对于DTD):
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
XML Schema对命名空间的支持:
XML Schema支持命名空间,使用命名空间可以明确表示出XML文档中的元素、属性和其他
标记,避免名称冲突带来的问题。
名称冲突,例如:两个不同文档采用同样的元素或属性名称描述两个不同类型的内容
<?xml version="1.0" encoding="utf-8"?>
<info>
<student>
<name>Lucy</name>
<age>18</age>
</student>
<teacher>
<name>Brun</name>
<age>40</age>
</teacher>
</info>
不同,在使用XML文档时,可能出现命名混淆。
性进行划分,是其被设置在不同的空间中。
前置命名法:
语法规则:<元素名 xmlns:标识符="URI">
<?xml version="1.0" encoding="utf-8"?>
<student:info xmlns:student="https://www.student.net" xmlns:teacher="https://www.teacher.net">
<student:studentInfo student:id="001">
<student:name>Lucy</student:name>
<student:age>18</student:age>
</studentInfo>
<teacher:teacherInfo>
<teacher:name>Brun</teacher:name>
<teacher:age>40</teacher:age>
</teacher:teacherInfo>
</student:info>
注意:在使用前置命名法时,需要在文档中每个元素增加命名空间标识符
语法规则:<标记名 xmlns="URI">
<?xml version="1.0" encoding="utf-8"?>
<info xmlns="https://wwww.default.net" xmlns:teacher="https://www.teacher.net">
<studentInfo id="001">
<name>Lucy</name>
<age>18</age>
</studentInfo>
<teacher:teacherInfo>
<teacher:name>Brun</teacher:name>
<teacher:age>40</teacher:age>
</teacher:teacherInfo>
</info>
些元素在默认命名空间中
XML Schema文档结构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="someURI">
<!-- XML Schema文档中元素及属性 -->
<xs:element name="xxx" type="yyy"/>
...
</xs:schema>
<xs:schema xmlns:xs="someURI"> 表示在XML Schema中使用了命名空间机制,其标识符
为 xs
<根元素 xmlns:xsi="someURI"
xsi:noNamespaceSchemaLocation="xsdURI">
xsi:noNamespaceSchemaLocation="xsdURI" : 指定XML Schema文件的路径
数据类型:
通过对数据类型的支持,XML Schema:
更容易描述允许的文档内容
更容易验证数据的正确性
更容易与来自数据库的数据一起工作
更容易定义数据约束
更容易定义数据模型(数据格式)
更容易在不同数据类型间转换数据
常见数据类型:
integer 整型
string 字符串
decimal 十进制
float 单精度32位浮点数
double 双精度64为浮点数
boolean 布尔类型
date 日期类型:YYYY-MM-DD
time 时间类型:hh:mm:ss
dateTime 日期时间类型:YYYY-MM-DDhh:mm:ss
anyURI 元素中包含一个URI
XML Schema限定:
当XML Schema规定的数据类型无法满足需要时,可以为XML元素或者属性自行定义可
接受的值类型
语法规则:
<xs:simpleType>
<xs:restriction base="xs:xxx">
<xs:数据类型细节描述 value="value">
...
</xs:restriction>
<xs:simpleType>
enumeration 定义可接受值的一个列表
fractionDigits 定义所允许的最大的小数位数。必须大于等于0。
length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive 定义数值的上限。所允许的值必须小于此值。
maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。
maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive 定义数值的下限。所允许的值必需大于此值。
minInclusive 定义数值的下限。所允许的值必需大于或等于此值。
minLength 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern 定义可接受的字符的精确序列。
totalDigits 定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace 定义空白字符(换行、回车、空格以及制表符)的处理方式。
语法规则:
<xs:complexType>
<xs:某个限定作用的元素>
<xs:element name="xxx_1" type="xs:yyy_1"/>
<xs:element name="xxx_2" type="xs:yyy_2"/>
</xs:某个限定作用的元素>
</xs:complexType>
XML Schema属性:
属性的定义:
<xs:attribute name="xxx" type="xs:yyy"/>
<xs:attribute name="xxx" type="xs:yyy" default="value"/>
<xs:attribute name="xxx" type="xs:yyy" fixed="value"/>
name 表示属性名
type 表示属性数据类型
default 表示默认值
fixed 表示固定值
<xs:attribute name="xxx" type="xs:yyy" use="required"/>
use属性可选值有:
optional 表示属性可有可无,作为为默认值
required 表示属性必须存在
prohibited 表示禁止该属性
仅包含文本的元素,不包含其他元素或属性
语法规则:<xs:element name="xxx" type="xs:yyy"/>
xxx 表示元素名
yyy 表示元素类型
value 是元素 xxx 的默认值,当未给xxx某个规定值时,value就被分配给该元素
语法规则:<xs:element name="xxx" type="xs:yyy" fixed="value"/>
元素xxx值被规定为value,无法改变
具有属性或其它子元素的元素
空元素
包含其他元素的元素
仅包含文本的元素
包含元素和文本的元素
语法规则:
第一种:
<xs:element name="xxx">
<xs:complexType>
<xs:某个限定作用的元素>
<xs:element name="xxx_1" type="xs:yyy_1"/>
<xs:element name="xxx_2" type="xs:yyy_2"/>
</xs:某个限定作用的元素>
</xs:complexType>
</xs:element>
第二种:
<xs:element name="xxx" type="someType"/> <xs:complexType name="someType">
<xs:摸个限定作用的元素>
<xs:element name="xxx_1" type="xs:yyy_1"/>
<xs:element name="xxx_2" type="xs:yyy_2"/>
</xs:摸个限定作用的元素>
</xs:complexType>
元素引用,<xs:element name="xxx" type="someType"/>
<xs:element ref="子元素名">
其中 ref 属性使用已定义的元素,并将其直接指向另一个元素定义模板
常用元素:
element 声明元素
simpleType 简单类型
complexType 复杂类型
simpleContent 描述复杂类型中的简单数据内容
complexContent 描述复杂类型中的复杂数据类型
attribute 声明属性
attributeGroup 声明属性组
restriction 设定约束条件
extension 设定扩展内容
all 任意顺序
choice 选择关系
sequence 顺序关系
annotation XML文档注解
documentation annotation子元素,描述注解内容
指示器元素:
Order 指示器:定义元素顺序
all 规定子元素可以按照任意顺序出现
choice 规定可出现某个字元素或可出现另一个子元素(非此即彼)
sequence 规定子元素必须按照特定顺序出现
maxOccurs 规定某个元素可出现的最大次数
minOccurs 规定某个元素可出现的最小次数
<xs:element name="someName", type="someType", maxOccurs="value"/>
<xs:element name="someName", type="someType", minOccurs="value"/>
maxOccurs、minOccurs也可以一起使用
group 元素组
<xs:group name="GroupName">
<xs:Order>(Order指示器在定义group时必须定义)
...(元素组中的元素)
</xs:Order>
</xs:group>
attributeGroup 属性组
<xs:attributeGroup name="属性组名">
...(属性组中包含的各个属性的定义)
</xs:attributeGroup>
any元素
<xs:any/>;通过未被 schema 规定的元素来拓展 XML 文档
<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="0"/>
</xs:sequence>
</xs:complexType>
</xs:element> <person>
<firstname>David</firstname>
<lastname>Smith</lastname>
<children>
<childname>mike</childname>
</children>
</person>
anyAttribute元素
<xs:anyAttribute/> : 通过未被 schema 规定的属性来扩展 XML 文档
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element> <person gender="male">
<firstname>David</firstname>
<lastname>Smith</lastname>
</person>
元素替换:
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素,在XML文档
中使用name元素的地方可以使用navn元素替换
注意:
可替换元素的类型必须和主元素相同,或者从主元素衍生而来。假如可替换元素的类型与主
元素的类型相同,那么就不必规定可替换元素的类型
substitutionGroup 中的所有元素(主元素和可替换元素)必须被声明为全局元素
全局元素:指 "schema" 元素的直接子元素,而本地元素指嵌套在其他元素中的元素
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
在XML文档中不能再用navn元素替换name元素
XML Schema笔记的更多相关文章
- XML Schema——笔记整理
什么是 XML Schema? 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据 ...
- XML学习笔记(三) -- Schema
标签(空格分隔): 学习笔记 Schema的格式 XML Schema文档是由元素.属性.命名空间和XML文档中的其他节点构成的. XML Schema有两种重要的Schema模型:Microsoft ...
- XSD(XML Schema Definition)学习笔记
今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...
- XML学习笔记3——XSD简述
现在的语言,如果不有那么一点OO的影子,都不好意思称之为语言了.在XML的语义约束方面,DTD虽然简单,但是功能不够强大,完全是直白的描述,于是又有了替代DTD的XSD(XML Schema Defi ...
- applicationContext.xml简单笔记
applicationContext.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <bean ...
- XML学习笔记(二)-- DTD格式规范
标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...
- W3C XML Schema 教程
转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...
- day0203 XML 学习笔记
day02, 03 1. xml语言和作用 2. xml语法详解 2.1 xml 语法声明 2.1.1 encoding 属性 2.1.2 standalone 属性 2.2 xml 元素(Eleme ...
- delphi操作xml学习笔记 之一 入门必读
Delphi 对XML的支持---TXMLDocument类 Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...
随机推荐
- awk中next以及getline用法示例
在awk中,如果调用next,那么next之后的命令就都不执行了.此行文本的处理到此结束,开始读取下一条记录并操作. 实例如下: [plain] view plain copy zoer@ubuntu ...
- SPOJ-New Distinct Substrings,注意会爆int
SUBST1 - New Distinct Substrings 和上一题题意一样,只是数据范围有所改动,50000. 思路还是和上一题一样,所有字串数(len+1)*len/2.注意这里可能爆int ...
- zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽
一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...
- hdu6060[贪心+dfs] 2017多校3
/* hdu6060[贪心+dfs] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long L ...
- 【Luogu】P3758可乐(矩阵优化DP)
题目链接 一开始想到这可能能用矩阵优化,但以为暴力就能卡过……T成二十分 首先我们回顾一下我们的暴力转移方程 用f[i][j][0/1]表示在i时刻,j点,1不爆炸,0已爆炸的方案数,那么f[i][j ...
- 【Luogu】P3628特别行动队(斜率优化DP)
题目链接 设c[i]是战斗力前缀和,f[i]是考虑前i个,且最后一组分到第i个士兵为止的战斗力之和 则有朴素状态转移方程 ;i<=n;++i) ;j<i;++j){ int x=c[i]- ...
- [luoguP2606] [ZJOI2010]排列计数(DP)
传送门 如果能够根据题意看出这是一个堆的话,那么就有些思路了.. 首先堆顶必须是最小元素,然后左右儿子可以预处理出来都有多少个数, 把剩余的数任意分配给两个儿子,用排列组合即可 dp(now) = d ...
- 【DFS序+树状数组】BNUOJ 52733 Random Numbers
http://acm.bnu.edu.cn/v3/problem_show.php?pid=52733 [题意] 给定一棵树,这棵树每个点都有一个点权,标号从0开始,0是根结点 修改操作: SEED ...
- Java:Session详解
以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:1.客户端关闭浏览器2.Session过期3.服务器端调用了HttpSession的invalidate()方法. ...
- ngrinder的idea脚本开发环境配置
1.安装toriseSvn,安装一定要选择comandline (默认是没选择的) 2.下载groovy,解压缩,在开发工具(ps:idea,eclipse)中设置groovy安装路径 3.在网站处创 ...