Схема XML: Расширить xsd: выбор, чтобы было создано объединение (не последовательность) вариантов - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть следующая XML-схема

<xsd:complexType name="SimpleThing">
    <xsd:choice maxOccurs="unbounded">
        <xsd:group ref="simpleContent" />
    </xsd:choice>
</xsd:complexType>

<xsd:complexType name="ExtendedThing">
    <xsd:complexContent>
        <xsd:extension base="SimpleThing">
            <xsd:choice maxOccurs="unbounded">
                <xsd:element name="qux" />
            </xsd:choice>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

<xsd:group name="simpleContent">
    <xsd:choice>
        <xsd:element name="foo" />
        <xsd:element name="bar" />
    </xsd:choice>
</xsd:group>

<xsd:group name="extendedContent">
    <xsd:choice>
        <xsd:group ref="simpleContent" />
        <xsd:element name="qux" />
    </xsd:choice>
</xsd:group>

<xsd:element name="root" type="ExtendedThing" />

Я бы хотел, чтобы тип ExtendedThing содержал foo, bar и qux в произвольном порядке. Но с этой схемой qux должен идти после foo и bar, потому что из выбора супертипа и выбора подтипа создается последовательность, а не объединение выборов.

Альтернатива, заменяющая определение типа для ExtendedThing на

<xsd:complexType name="ExtendedThing">
    <xsd:complexContent>
        <xsd:extension base="SimpleThing">
            <xsd:group ref="extendedContent" />
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

тоже не работает, потому что нарушено ограничение Уникальная атрибуция частиц .

Есть ли решение этой проблемы или невозможно создать тип в XML-схеме, который является расширением другого типа, так что содержимое нового типа представляет собой набор элементов (в любом порядке), который является надмножеством содержания супертипа?

1 Ответ

2 голосов
/ 19 ноября 2010

Это невозможно по практическим соображениям. Модель содержимого супертипа всегда должна быть полностью перед моделью содержимого подтипа. Это помогает ускорить внедрение валидаторов.

...