XML学习之 schema
来源:互联网 发布:2016年开淘宝店怎么样 编辑:程序博客网 时间:2024/04/28 19:54
今天学习了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: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>
<!--书籍名称元素定义-->
<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!
- XML学习之 schema
- XML学习之Schema
- XML学习之Xml Schema:一、Xml Schema概述
- JavaWeb学习笔记之xml&DTD&schema
- XML学习之Xml Schema:二、Xml Schema与命名空间
- XML学习之Xml Schema:三、自定义简单类型--facet
- XML学习之Xml Schema:四、自定义简单类型
- XML学习之Xml Schema:五、复杂类型--Attribute
- XML学习之Xml Schema:六、复杂类型--模型组
- XML学习之Xml Schema:七、派生复杂类型--扩展
- XML学习之Xml Schema:八、派生复杂类型--限制
- XML学习之Xml Schema:九、派生复杂类型
- XML学习之Xml Schema:十、一致性约束
- XML学习之------>Schema约束XML文件的实例
- XML schema学习笔记
- XML Schema学习笔记
- XML schema 学习笔记
- xml schema 学习
- 传智播客 Spring学习 ,注解和AOP
- 深入剖析MFC中Windows消息处理机制
- 二叉树三种遍历的非递归算法
- 一步一步学Struts(二)
- 约瑟夫环
- XML学习之 schema
- Oracle Instant Client 配置方法
- 急需一篇数学建模论文的范文
- MFC如何建立CPU空闲处理(OnIdle )
- homework-病毒式营销
- sybase bcp导入导出遇到字符集不匹配的问题解决
- 09年.net面试题
- 电子与通信系毕业设计课题(毕业设计选题参考)
- blog转移!!!