Можно ли использовать объединение типов в производном complexType? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть тип XSD, который содержит элемент с абстрактным типом. Есть несколько реализаций этого типа. Предоставляет ли XSD способ показать, что некоторые из производных типов могут использоваться?

В приведенном ниже примере у меня есть 3 реализации BasicSequence. Существует ли способ сказать, что только два из них могут быть использованы в RealRoot?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:complexType name="BasicSequence" abstract="true">
        <xs:sequence>
            <xs:element name="ElementA" type="xs:string"/>
            <xs:any/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BasicRoot">
        <xs:sequence>
            <xs:element name="RealRoot" type="BasicSequence"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MySequence1">
        <xs:complexContent>
            <xs:restriction base="BasicSequence">
                <xs:sequence>
                    <xs:element name="ElementA" type="xs:string"/>
                    <xs:element name="ElementB1" type="xs:string"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MySequence2">
        <xs:complexContent>
            <xs:restriction base="BasicSequence">
                <xs:sequence>
                    <xs:element name="ElementA" type="xs:string"/>
                    <xs:element name="ElementB2" type="xs:string"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MySequence3">
        <xs:complexContent>
            <xs:restriction base="BasicSequence">
                <xs:sequence>
                    <xs:element name="ElementA" type="xs:string"/>
                    <xs:element name="ElementB3" type="xs:string"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RealRoot">
        <xs:complexContent>
            <xs:restriction base="BasicRoot">
                <xs:sequence>
                    <!-- Use union of MySequence1 and MySequence2 here! -->
                    <xs:element name="RealRoot" type="BasicSequence"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
...