Как расширить выбор в xs: complexType - PullRequest
0 голосов
/ 07 октября 2019

У меня есть эта маленькая XML-схема. Можно ли расширить «contentType» вместо дублирования его контента?

Я думаю, что подводным камнем является то, что элементы «contentWithInputType» могут содержать дополнительные элементы «contentWithInputType», но элементы «contentType» могут содержать только элементы «contentType».

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://meinnamespace.meinefirma.de" targetNamespace="http://meinnamespace.meinefirma.de" elementFormDefault="qualified">

    <xs:element name="ROOTNODE">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="content" type="contentType" />
                <xs:element name="contentWithInput" type="contentWithInputType" />
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="contentType" mixed="true">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="span" type="contentType" />
            <xs:element name="b" type="contentType" />
            <xs:element name="i" type="contentType" />
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="contentWithInputType" mixed="true">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="span" type="contentWithInputType" />
            <xs:element name="b" type="contentWithInputType" />
            <xs:element name="i" type="contentWithInputType" />
            <xs:element name="input" type="xs:string" />
        </xs:choice>
    </xs:complexType>

</xs:schema>

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Возможно, вам следует использовать группы замещения. Объявите абстрактный элемент с именем inline;сделать этот элемент единственным разрешенным в contentType;затем определите элементы span, i, b и т. д. с помощью substitutionGroup="inline".

Еще один полезный метод называется группами моделей. Определите xs:group, содержащий фрагмент модели контента, который будет использоваться повторно, а затем обратитесь к нему, где необходимо, используя xs:group ref="group-name".

0 голосов
/ 07 октября 2019

Возможно, у вас нет:

<xs:complexType name="contentWithInputType" mixed="true">
    <xs:sequence>
        <xs:element name="content" type="contentType" />
        <xs:element name="input" type="contentWithInputType" />
    </xs:sequence>
</xs:complexType>

Это семантически похоже на то, что вам требуется.

В конечном итоге вы не можете "расширять" типы в XSD в том же смысле, в каком вы расширяете типв ориентации объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...