您的位置:首页 > 其它

XML学习之 schema

2009-04-25 22:03 302 查看
今天学习了XML的schema,感觉schema的功能可以对文本进行相应的校验, 功能较dtd强大很多,但是难度也大很多。

首先将dtd与XML做一个简单的比较:
1. dtd不遵循xml语法
2. dtd数据类型有限
3. dtd不可扩展
4. dtd不支持命名空间。

刚完成的一个XML schema的习题

综合练习:书藉信息表

字段名
数据类型和约束
书藉编号
唯一 二个数字开头-三个字母结尾 /必需 作为属性
书藉名称
1---30个字符/必需
名称类型
作为书藉名称的属性 中文名、英文名 枚举/必需
书藉类型
武侠小说、言情小说、软件编程、数据库入门 枚举/必需
书藉价格
1-10000 必需
价格类型
作为书藉价格的属性 人民币、美元、欧元、日元
作者
原著
1---100个字符/必需可以多个
翻译
1---100个字符/可以多个
性别
作为原著和翻译的属性 男、女 枚举/必需
国籍
作为原著和翻译的属性 中国、美国、荷兰
枚举/必需
做题思路步骤如下:
1、 根据题意对所有的元素进行分类,分为简单类型元素与复杂类型元素两大类。 简单元素类型
是指元素开始之间只有文本而没有属性的元素。
2、 再将简单类型元素分成对文本没有限制于对文本有限制的两类。 对文本类型有限制的简单元素类型
要通过自定义简单类型做相应的限制约束。
3、 对复杂类型的元素进行分类, 分为含有子元素的元素; 含有属性、子元素的元素; 含有属性
、文本的元素; 含有属性的空元素共四类。
最后对照上述分类再分别进行相应的处理即OK。建议构造schema的xsd文件时按从小到大,从简单到复杂的
顺序进行构造。

现在草纸上画好结构草图,然后编码.xsd文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--名称类型-->
<xs:attribute name="nameType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="中文名"/>
<xs:enumeration value="英文名"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:simpleType name="bookNameRistriction">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
<!--书籍名称元素定义-->

<xs:element name="bookName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="bookNameRistriction">
<xs:attribute ref="nameType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

<!--定义书籍类型-->
<xs:element name="bookType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="武侠小说"/>
<xs:enumeration value="言情小说"/>
<xs:enumeration value="软件编程"/>
<xs:enumeration value="数据库入门"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

<!--定义价格类型属性-->
<xs:attribute name="priceType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="日元"/>
<xs:enumeration value="美元"/>
<xs:enumeration value="人民币"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<!--定义书籍价格-->
<xs:simpleType name="priceRestriction">
<xs:restriction base="xs:float">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="10000"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="bookPrice">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="priceRestriction">
<xs:attribute ref="priceType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

<!--定义属性组-->
<xs:attributeGroup name="authorAttribute">
<xs:attribute name="sex" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="national" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="中国"/>
<xs:enumeration value="美国"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>

<xs:simpleType name="authorNameLength">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<!--定义原著-->
<xs:element name="originalAuthor">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="authorNameLength">
<xs:attributeGroup ref="authorAttribute"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

<!--定义翻译-->
<xs:element name="translator">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="authorNameLength">
<xs:attributeGroup ref="authorAttribute"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!--定义作者-->
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element ref="originalAuthor" maxOccurs="unbounded"/>
<xs:element ref="translator" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<!--定义书籍编号属性-->
<xs:attribute name="bookId">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}[a-zA-Z]{3}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element ref="bookName"/>
<xs:element ref="bookType"/>
<xs:element ref="bookPrice"/>
<xs:element ref="author"/>
</xs:sequence>
<xs:attribute ref="bookId" use="required"/>
</xs:complexType>
</xs:element>

<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element ref="book" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueBook">
<xs:selector xpath="book"></xs:selector>
<xs:field xpath="@bookId"></xs:field>
</xs:unique>
</xs:element>
</xs:schema>

最后再新建一个.xml文件,并在其中导入.xsd文件, 写好相应的xml文件OK!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: