xml学习总结(三)
复杂Schema
扩展包含简单内容的复杂类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型 --> <xs:complexType name="book_Type"> <xs:simpleContent> <!-- 从token类型派生出book_Type类型 --> <xs:extension base="xs:token"> <!-- 增加一个name属性 --> <xs:attribute name="name" type="xs:token" use="required"/> <!-- 增加一个isbn属性 --> <xs:attribute name="isbn" use="required"> <!-- 使用simpleType子元素定义isbn属性的类型 --> <xs:simpleType> <xs:restriction base="xs:int"> <xs:totalDigits value="8"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> <!-- 定义一个extended_book_Type类型 --> <xs:complexType name="extended_book_Type"> <xs:simpleContent> <!-- 从book_Type类型派生出extended_book_Type类型 --> <xs:extension base="book_Type"> <!-- 增加price属性 --> <xs:attribute name="price" use="required"> <!-- 使用simpleType子元素定义price属性的类型 --> <xs:simpleType> <xs:restriction base="xs:decimal"> <xs:maxExclusive value="100"/> <xs:minExclusive value="0"/> <xs:fractionDigits value="2"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> <!-- 定义book元素,其类型是extended_book_Type --> <xs:element name="book" type="extended_book_Type"/> </xs:schema>
限制包含简单类型的复杂类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型 --> <xs:complexType name="book_Type"> <xs:simpleContent> <xs:extension base="xs:token"> <xs:attribute name="name" type="xs:token" use="required"/> <xs:attribute name="isbn"> <!-- 使用simpleType子元素定义isbn属性的类型 --> <xs:simpleType> <xs:restriction base="xs:int"> <xs:totalDigits value="8"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> <!-- 定义一个restricted_book_Type类型 --> <xs:complexType name="restricted_book_Type"> <xs:simpleContent> <xs:restriction base="book_Type"> <!-- 定义该元素的内容只能是如下枚举值之一 --> <xs:enumeration value="疯狂Java体系"/> <xs:enumeration value="疯狂Java实训教程"/> <xs:attribute name="name" use="required"> <!-- 使用simpleType重新限定name属性的类型 --> <xs:simpleType> <xs:restriction base="xs:token"> <xs:maxLength value="14"/> <xs:minLength value="4"/> </xs:restriction> </xs:simpleType> </xs:attribute> <!-- 删除原来的isbn属性 --> <xs:attribute name="isbn" use="prohibited"/> </xs:restriction> </xs:simpleContent> </xs:complexType> <!-- 定义book元素,其类型是restricted_book_Type --> <xs:element name="book" type="restricted_book_Type"/> </xs:schema>
限制包含子元素的类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型,该类型下包含2个有序子元素 --> <xs:complexType name="book_Type"> <!-- 使用sequence定义2个子元素 --> <xs:sequence> <xs:element name="name" type="xs:token"/> <!-- 如果派生类型想删除如下子元素,必须指定minOccurs="0" --> <xs:element name="price" type="xs:decimal" minOccurs="0"/> </xs:sequence> <!-- 为该类型定义2个属性 --> <xs:attribute name="isbn" type="xs:int"/> <xs:attribute name="publish-date" type="xs:date"/> </xs:complexType> <!-- 定义restrict_book_Type类型 --> <xs:complexType name="restrict_book_Type"> <xs:complexContent> <!-- 通过限制book_Type类型派生新类型 --> <xs:restriction base="book_Type"> <xs:sequence> <!-- 为name元素的类型增加进一步约束 --> <xs:element name="name"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:maxLength value="20"/> <xs:minLength value="4"/> </xs:restriction> </xs:simpleType> </xs:element> <!-- 不再定义price元素,即可认为删除了该元素 --> </xs:sequence> <!-- 为publish-date属性的类型增加进一步约束 --> <xs:attribute name="publish-date"> <xs:simpleType> <xs:restriction base="xs:date"> <xs:maxExclusive value="2009-05-12"/> <xs:minExclusive value="2007-05-12"/> </xs:restriction> </xs:simpleType> </xs:attribute> <!-- 删除isbn属性 --> <xs:attribute name="isbn" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="book" type="restrict_book_Type"/> </xs:schema>
扩展包含子元素的类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型,该类型下包含2个有序子元素 --> <xs:complexType name="book_Type"> <!-- 使用sequence定义2个子元素 --> <xs:sequence> <xs:element name="name" type="xs:token"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> <!-- 为该类型定义2个属性 --> <xs:attribute name="isbn" type="xs:int"/> <xs:attribute name="publish-date" type="xs:date"/> </xs:complexType> <!-- 定义extend_book_Type类型 --> <xs:complexType name="extend_book_Type"> <xs:complexContent> <!-- 通过扩展book_Type类型派生新类型 --> <xs:extension base="book_Type"> <xs:sequence> <!-- 新增定义2个子元素 --> <xs:element name="type" type="xs:token"/> <xs:element name="targetMarket" type="xs:token"/> </xs:sequence> <!-- 新增一个publish-house属性 --> <xs:attribute name="publish-house" type="xs:token"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="book" type="extend_book_Type"/> </xs:schema>
限制混合内容类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型,该类型下包含2个有序子元素,指定它是混合内容类型 --> <xs:complexType name="book_Type" mixed="true"> <!-- 使用sequence定义2个子元素 --> <xs:sequence> <xs:element name="name" type="xs:token"/> <!-- 如果派生类型想删除如下子元素,必须指定minOccurs="0" --> <xs:element name="price" type="xs:decimal" minOccurs="0"/> </xs:sequence> <!-- 为该类型定义2个属性 --> <xs:attribute name="isbn" type="xs:int"/> <xs:attribute name="publish-date" type="xs:date"/> </xs:complexType> <!-- 定义mixed_book_Type类型,依然是混合内容类型 --> <xs:complexType name="mixed_book_Type" mixed="true"> <xs:complexContent> <!-- 通过限制book_Type类型派生新类型 --> <xs:restriction base="book_Type"> <xs:sequence> <!-- 为name元素的类型增加进一步约束 --> <xs:element name="name"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:maxLength value="20"/> <xs:minLength value="4"/> </xs:restriction> </xs:simpleType> </xs:element> <!-- 不再定义price元素,即可认为删除了该元素 --> </xs:sequence> <!-- 删除isbn属性 --> <xs:attribute name="isbn" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <!-- 定义restrict_book_Type类型 --> <xs:complexType name="restrict_book_Type"> <xs:complexContent> <!-- 通过限制book_Type类型派生新类型 --> <xs:restriction base="book_Type"> <xs:sequence> <!-- 为name元素的类型增加进一步约束 --> <xs:element name="name"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:maxLength value="20"/> <xs:minLength value="4"/> </xs:restriction> </xs:simpleType> </xs:element> <!-- 不再定义price元素,即可认为删除了该元素 --> </xs:sequence> <!-- 为publish-date属性的类型增加进一步约束 --> <xs:attribute name="publish-date"> <xs:simpleType> <xs:restriction base="xs:date"> <xs:maxExclusive value="2009-05-12"/> <xs:minExclusive value="2007-05-12"/> </xs:restriction> </xs:simpleType> </xs:attribute> <!-- 删除isbn属性 --> <xs:attribute name="isbn" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="book" type="restrict_book_Type"/> </xs:schema>
扩展混合内容类型
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- 定义一个book_Type类型,该类型下包含2个互斥子元素 --> <xs:complexType name="book_Type" mixed="true"> <!-- 使用choice定义2个子元素 --> <xs:choice> <xs:element name="name" type="xs:token"/> <xs:element name="price" type="xs:decimal"/> </xs:choice> </xs:complexType> <!-- 定义extend_book_Type类型,必须保留mixed="true" --> <xs:complexType name="extend_book_Type" mixed="true"> <xs:complexContent> <!-- 通过扩展book_Type类型派生新类型 --> <xs:extension base="book_Type"> <xs:choice> <!-- 新增定义2个子元素 --> <xs:element name="type" type="xs:token"/> <xs:element name="targetMarket" type="xs:token"/> </xs:choice> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="book" type="extend_book_Type"/> </xs:schema>