[XML]学习笔记(五)——XML Schema简单类型元素与属性
2016-04-29 16:35
489 查看
一、XML Schema简介:
a) XML Schema 是基于XML的DTD替代者。
b) XML Schema 可描述XML文档的结构。
c) XML Schema 语言也可作为XSD(XML SchemaDefinition)来引用。
二、什么是XML Schema:
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
三、为什么要使用XML Schema:
a) 支持数据类型,从而:
i. 可更容易地描述允许的文档内容
ii. 可更容易地验证数据的正确性
iii. 可更容易地与来自数据库的数据一并工作
iv. 可更容易地定义数据约束(data facets)
v. 可更容易地定义数据模型(或称数据格式)
vi. 可更容易地在不同的数据类型间转换数据
b) 使用XML语法,由XML编写:
i. 不必学习新的语言
ii. 可使用 XML 编辑器来编辑 Schema 文件
iii. 可使用 XML 解析器来解析 Schema 文件
iv. 可通过 XML DOM 来处理 Schema
v. 可通过 XSLT 来转换 Schema
c) 可以保护数据通信:当数据从发送方发送到接收方接收,重点在于双方关于内容要有相同的“期望值”。比如XML Schema带有的date数据类型,可以确保对不同日期表示方法的一致解释。
d) 可扩展性:因为其由XML编写,XML即为一种可扩展标记语言。
i. 在其他 Schema 中重复使用已有的 Schema
ii. 创建由标准类型衍生而来的自定义数据类型
iii. 在相同的文档中引用多重的 Schema
四、 一个简单的XML例子:
note.xml:
note.xsd:
五、简单类型:
a) 简易元素:仅包含文本(文本可以有很多类型,也可以是自定义的类型),但不会包含任何其他的元素或属性。
i. 定义简单元素:
ii. 常用类型:
xs:string——字符串,可含有字符、空格、回车和制表符,该数据类型值不可变,可以通过enumeration、length、maxLength、minLength等对string进行约束。
xs:decimal——十进制数字,可含有小数点和符号,最大位数18。
xs:integer——整数,可含有符号,没有边界限制,而xs:int是有符号的32位整数。
xs:Boolean——只能为true(1) or false(0)。
xs:date—— YEAR-MONTH-DAY三者缺一不可。
xs:time—— HOUR-MINUTE-SECOND 三者缺一不可,它和date都属于日期数据类型,可以通过enumeration、maxExclusive、maxInclusive、minExclusive和minInclusive等进行一定的约束。
更多数据类型参考http://www.w3schools.com/xml/schema_dtypes_string.asp
iii. 默认值:default=”…”
iv. 固定值:fixed=”…”
b) 属性:所有属性均作为简易元素来声明。简易元素无法拥有属性,只有复杂类型可以拥有属性。
i. 定义属性:
ii. 常用类型、默认值和固定值的用法与简单元素一致。
iii. 可选属性与必须属性:默认/缺省情况下属性均为可选的,使用use=“required/optional/prohibited”来规定属性的使用。
c) 限定/Facets:用于对元素或属性定义约束范围。
i. 对单个值的限定:如年龄在[0, 120]范围内
ii. 对一组值的限定:使用枚举约束
也可以将定义一个新的类型carType,这样不仅可以被car使用,还可以被其他元素使用。
iii. 模式约束:当需要将元素的内容限定为一串数字或字符时
1. 限定只有一个小写字母:
限定三个大写字母:
限定三个字母,大小写均可:
限定从xyz中选一个:
限定0或多个小写字母:
限定1或多个小写大写字母组合:
限定元素多选一:
限定具体字符个数及可选范围:
2. 限定有五个数字且每个数字为[0, 9]:
3. 对空白字符的处理:空白字符包含换行、回车、空格以及制表符
4. 对长度的限定:
六、 复杂类型:(未完待补充……)
a) XML Schema 是基于XML的DTD替代者。
b) XML Schema 可描述XML文档的结构。
c) XML Schema 语言也可作为XSD(XML SchemaDefinition)来引用。
二、什么是XML Schema:
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
三、为什么要使用XML Schema:
a) 支持数据类型,从而:
i. 可更容易地描述允许的文档内容
ii. 可更容易地验证数据的正确性
iii. 可更容易地与来自数据库的数据一并工作
iv. 可更容易地定义数据约束(data facets)
v. 可更容易地定义数据模型(或称数据格式)
vi. 可更容易地在不同的数据类型间转换数据
b) 使用XML语法,由XML编写:
i. 不必学习新的语言
ii. 可使用 XML 编辑器来编辑 Schema 文件
iii. 可使用 XML 解析器来解析 Schema 文件
iv. 可通过 XML DOM 来处理 Schema
v. 可通过 XSLT 来转换 Schema
c) 可以保护数据通信:当数据从发送方发送到接收方接收,重点在于双方关于内容要有相同的“期望值”。比如XML Schema带有的date数据类型,可以确保对不同日期表示方法的一致解释。
d) 可扩展性:因为其由XML编写,XML即为一种可扩展标记语言。
i. 在其他 Schema 中重复使用已有的 Schema
ii. 创建由标准类型衍生而来的自定义数据类型
iii. 在相同的文档中引用多重的 Schema
四、 一个简单的XML例子:
note.xml:
<?xmlversion="1.0" encoding="UTF-8"?> <note xmlns="http://www.w3school.com.cn" #默认命名空间的声明,在此xml文档中使用过的所有元素都被声明于该命名空间。 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" #实例命名空间,只有有了xsi之后才能使用schemaLocation,该值提供了需要使用的命名空间 xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> #提供命名空间使用的xml schema的位置 <to>CZ</to> <from>Jason</from> <heading>Greeting</heading> <body>Hello CZ!</body> </note>
note.xsd:
<?xmlversion="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" #表明schema中用到的元素和数据类型来自该URI的命名空间,而且规定来自该命名空间的元素和数据类型应使用前缀xs targetNamespace="http://www.w3school.com.cn" #表明此schema定义的元素来自该命名空间 xmlns="http://www.w3school.com.cn" #默认命名空间 elementFormDefault="qualified"> #任何xml实例文档所使用的且在此schema中声明过的元素必须被命名空间限定 <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>
五、简单类型:
a) 简易元素:仅包含文本(文本可以有很多类型,也可以是自定义的类型),但不会包含任何其他的元素或属性。
i. 定义简单元素:
<xs:element name="elemName" type="elemType"/>
ii. 常用类型:
xs:string——字符串,可含有字符、空格、回车和制表符,该数据类型值不可变,可以通过enumeration、length、maxLength、minLength等对string进行约束。
xs:decimal——十进制数字,可含有小数点和符号,最大位数18。
xs:integer——整数,可含有符号,没有边界限制,而xs:int是有符号的32位整数。
xs:Boolean——只能为true(1) or false(0)。
xs:date—— YEAR-MONTH-DAY三者缺一不可。
xs:time—— HOUR-MINUTE-SECOND 三者缺一不可,它和date都属于日期数据类型,可以通过enumeration、maxExclusive、maxInclusive、minExclusive和minInclusive等进行一定的约束。
更多数据类型参考http://www.w3schools.com/xml/schema_dtypes_string.asp
iii. 默认值:default=”…”
iv. 固定值:fixed=”…”
b) 属性:所有属性均作为简易元素来声明。简易元素无法拥有属性,只有复杂类型可以拥有属性。
i. 定义属性:
<xs:attribute name="attrName" type="attrType"/>
ii. 常用类型、默认值和固定值的用法与简单元素一致。
iii. 可选属性与必须属性:默认/缺省情况下属性均为可选的,使用use=“required/optional/prohibited”来规定属性的使用。
<xs:attribute name="lang" type="xs:string" use="required"/>
c) 限定/Facets:用于对元素或属性定义约束范围。
i. 对单个值的限定:如年龄在[0, 120]范围内
<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element>
ii. 对一组值的限定:使用枚举约束
<xs:element name="car"> <xs:simpleType> <xs:restrictionbase="xs:string"> <xs:enumeration value="Audi"/> <xs:enumerationvalue="Golf"/> <xs:enumerationvalue="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
也可以将定义一个新的类型carType,这样不仅可以被car使用,还可以被其他元素使用。
<xs:element name="car" type="carType"/> <xs:simpleTypename="carType"> <xs:restrictionbase="xs:string"> <xs:enumerationvalue="Audi"/> <xs:enumerationvalue="Golf"/> <xs:enumerationvalue="BMW"/> </xs:restriction> </xs:simpleType>
iii. 模式约束:当需要将元素的内容限定为一串数字或字符时
1. 限定只有一个小写字母:
<xs:element name="letter"> <xs:simpleType> <xs:restrictionbase="xs:string"> <xs:patternvalue="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element>
限定三个大写字母:
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
限定三个字母,大小写均可:
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
限定从xyz中选一个:
<xs:pattern value="[xyz]"/>
限定0或多个小写字母:
<xs:pattern value="([a-z])*"/>
限定1或多个小写大写字母组合:
<xs:pattern value="([a-z][A-Z])+"/>
限定元素多选一:
<xs:pattern value="male|female"/>
限定具体字符个数及可选范围:
<xs:pattern value="[a-zA-Z0-9]{8}"/>
2. 限定有五个数字且每个数字为[0, 9]:
<xs:element name="prodid"> <xs:simpleType> <xs:restrictionbase="xs:integer"> <xs:patternvalue="[0-9][0-9][0-9][0-9][0-9]"/> </xs:restriction> </xs:simpleType> </xs:element>
3. 对空白字符的处理:空白字符包含换行、回车、空格以及制表符
<xs:element name="address"> <xs:simpleType> <xs:restrictionbase="xs:string"> <xs:whiteSpacevalue="preserve"/> #保留 <!--<xs:whiteSpacevalue="replace"/> #移除所有 --> <!--<xs:whiteSpacevalue="collapse"/> #移除所有空白字符,多个空格会被合成为一个空格 --> </xs:restriction> </xs:simpleType> </xs:element>
4. 对长度的限定:
<xs:element name="password"> <xs:simpleType> <xs:restrictionbase="xs:string"> <xs:length value="8"/> #长度必须精确到8 <!--<xs:minLengthvalue="5"/> #最大长度为5 --> <!--<xs:maxLengthvalue="8"/> #最小长度为8 --> </xs:restriction> </xs:simpleType> </xs:element>
六、 复杂类型:(未完待补充……)
相关文章推荐
- ThinkPHP 3.1.2 URL<1>
- Android应用开发之所有动画使用详解
- 动态规划—Problem B
- C语言memcpy()的用法()
- Android Canvas绘图详解(图文)
- ScrollView滚动改变标题栏透明度
- Knockout 官网翻译
- php第九节课
- ThinkPHP 3.1.2 URL<1>
- ThinkPHP 3.1.2 URL<1>
- 【5】Zabbix添加Macros、Key
- Caused by: org.apache.zookeeper.KeeperException$AuthFailedException: KeeperErrorCode = AuthFailed fo
- 用Ext.override重写控件属性
- C#——Winform 无边框随意拖动【转载】
- 【框架】SwipeRefreshLayout下拉刷新
- jenkins email配置
- Hibernate和JPA的主键生成策略
- Appcompat 全屏问题
- mysql查询语句speed select
- openresty简记