XSD: xs: sequence & xs: выбор комбинации для xs: элементы расширения? - PullRequest
1 голос
/ 23 апреля 2010

Мой вопрос касается определения схемы XML, которая будет проверять следующий образец XML:

<rules>
    <other>...</other>
    <bool>...</bool>
    <other>...</other>
    <string>...</string>
    <other>...</other>
</rules>

Порядок дочерних узлов не имеет значения.Количество дочерних узлов равно 0 .. неограничено.

Все дочерние элементы узла rules имеют общий базовый тип rule, например:

<xs:complexType name="booleanRule">
    <xs:complexContent>
        <xs:extension base="rule">
            ...
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="stringFilterRule">
    <xs:complexContent>
        <xs:extension base="filterRule">
            ...
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Моя текущая попытка определения схемы для узла rules приведена ниже.Тем не менее,

  1. Могу ли я вложить xs:choice в xs:sequence?Если, где я могу указать атрибут maxOccurs="unbounded"?
  2. Есть ли лучший способ сделать это, например xs:sequence, который указывает только базовый тип егодочерние элементы?

        <xs:element name="rules">
            <xs:complexType>
                <xs:sequence>
                    <xs:choice>
                        <xs:element name="bool" type="booleanRule" />
                        <xs:element name="string" type="stringRule" />
                        <xs:element name="other" type="someOtherRule" />
                    </xs:choice>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    

1 Ответ

3 голосов
/ 23 апреля 2010
  1. Да, вы можете. Вы можете указать maxOccurs="unbounded", где он вам больше подходит. Например, вы можете поставить его на xs:choice (я думаю, это то, что вы спрашиваете).
  2. Вы можете использовать группы замещения. См. эту схему , например. ogc:expression является абстрактным базовым элементом, который может быть заменен различными конкретными выражениями (ogc:Add и т. Д.).
...