是否可以对嵌套复杂类型进行限制

时间:2014-09-08 11:39:04

标签: xml xsd schema restriction complextype

这是我天真的例子

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:complexType name="dog">
        <xs:sequence>
            <xs:element name="name">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="known" type="xs:string"/>
                        <xs:element name="unknown"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="breed" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="bigDog">
        <xs:complexContent>
            <xs:restriction base="dog">
                <xs:sequence>
                    <xs:element name="name">
                        <xs:complexType>
                            <xs:choice>
                                <xs:element name="known" type="xs:string"/>
                                <xs:element name="unknown"/>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="breed" type="xs:string" fixed="grand danois"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

氧气给我:'bigDog'类型的错误。类型的粒子不是对基础粒子的有效限制。

是否可以做这样的事情?

1 个答案:

答案 0 :(得分:0)

我真的不知道它是做什么的。可能是XSD 1.0的错误?但这是有效的

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

     <xs:complexType name="dogNameType">
         <xs:choice>
             <xs:element name="known" type="xs:string"/>
             <xs:element name="unknown"/>
         </xs:choice>
     </xs:complexType>

    <xs:complexType name="dog">
        <xs:sequence>
            <xs:element name="name" type="dogNameType"/>
            <xs:element name="breed" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="bigDog">
        <xs:complexContent>
            <xs:restriction base="dog">
                <xs:sequence>
                    <xs:element name="name" type="dogNameType"/>
                    <xs:element name="breed" type="xs:string" fixed="grand danois"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>