Как смешивать расширения и ограничения в определениях сложных типов XSD

У меня проблемы с созданием сложного типа, который должен быть ненулевым (null|blank) и иметь атрибут 'qualifier', который также не равен (null|blank). Это то, что я до сих пор.

<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 ответ

Невозможно иметь оба extension а также restriction в том же определении типа. Определите простой тип с ограничением, а затем расширьте этот пользовательский тип. Вы можете использовать этот простой тип как для определения элемента, так и для атрибута.

Обратите внимание, что XML (и, как следствие, если вы простите за каламбур, XML-схема) чувствителен к регистру. "Квалификатор" и "Квалификатор" не являются одинаковыми именами атрибутов.

<?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>

будет недействительным.

Другие вопросы по тегам