如何在XSD复杂类型定义中混合扩展和限制

时间:2016-02-04 18:52:45

标签: xml xsd xml-schema-collection

我在创建复杂类型时遇到问题,复杂类型必须是非(空|空)并且具有'限定符'属性也是非(null |空格)。这是我到目前为止所做的。

<xsd:complexType name="PRODUCT">
    <xsd:simpleContent>
        <xsd:extension base="xsd:string">
            <xsd:attribute name="Qualifier" type="xsd:string" use="required" />
        </xsd:extension>
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
        </xsd:restriction>
    </xsd:simpleContent>        
</xsd:complexType>

1 个答案:

答案 0 :(得分:0)

同一类型定义中不可能同时包含extensionrestriction。使用限制定义一个简单类型,然后扩展此自定义类型。您可以将这种简单类型用于元素和属性定义。

请注意,XML(以及扩展名,如果您原谅双关语,XML Schema)区分大小写。 “限定符”和“限定符”属性名称不同。

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

    <xs:element name="PRODUCT" type="PRODUCTType"/>

    <xs:complexType name="PRODUCTType">
        <xs:simpleContent>
            <xs:extension base="restrictedType">
                <xs:attribute name="qualifier" type="restrictedType" use="required" />
            </xs:extension>
        </xs:simpleContent>        
    </xs:complexType>

    <xs:simpleType name="restrictedType">
            <xs:restriction base="xs:string">
                <xs:minLength value="1"/>
            </xs:restriction>
    </xs:simpleType>

</xs:schema>

以下XML文档对上述架构有效:

<?xml version="1.0" encoding="UTF-8"?>
<PRODUCT qualifier="value">text</PRODUCT>

而像

这样的文件
<?xml version="1.0" encoding="UTF-8"?>
<PRODUCT qualifier="">text</PRODUCT>

<?xml version="1.0" encoding="UTF-8"?>
<PRODUCT qualifier="value"></PRODUCT>

无效。