今天学习了XML的schema,感觉schema的功能可以对文本进行相应的校验, 功能较dtd强大很多,但是难度也大很多。
综合练习:书藉信息表
字段名 | 数据类型和约束 | |
书藉编号 | 唯一 二个数字开头-三个字母结尾 /必需 作为属性 | |
书藉名称 | 1---30个字符/必需 | |
名称类型 | 作为书藉名称的属性 中文名、英文名 枚举/必需 | |
书藉类型 | 武侠小说、言情小说、软件编程、数据库入门 枚举/必需 | |
书藉价格 | 1-10000 必需 | |
价格类型 | 作为书藉价格的属性 人民币、美元、欧元、日元 | |
作者 | 原著 | 1---100个字符/必需可以多个 |
翻译 | 1---100个字符/可以多个 | |
性别 | 作为原著和翻译的属性 男、女 枚举/必需 | |
国籍 | 作为原著和翻译的属性 中国、美国、荷兰 枚举/必需 |
<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: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>