您的位置:首页 > 其它

[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:

<?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>


六、 复杂类型:(未完待补充……)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: