复杂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>