2010-04-23 8 views
1

Мой вопрос об определении XML-схемы, которая будет проверять следующий пример XML:XSD: xs: sequence & xs: комбинация выбора для xs: элементы расширения?

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

ответ

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

+1 & check @lexicore: для вашего предложения по использованию групп подстановки - это лучший способ, чем положить 'xs: choice' в последовательность' xs: sequence'. – bguiz

Смежные вопросы