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>

 

 

 

posted @ 2013-12-29 20:45  nolonely  阅读(305)  评论(0编辑  收藏  举报