2009-05-31 3 views
5

Что я хочу сделать, так это создать элемент последовательности в XML-схеме, чтобы содержимое было в порядке, но может не все присутствовать. Например, схема будет выглядеть примерно так:Как вы можете сделать последовательность необязательных элементов, которые должны быть упорядочены в XML-схеме?

<xs:element name="rods" maxOccurs="1" minOccurs="1"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="green" type="xs:positiveInteger" /> 
    <xs:element name="white" type="xs:positiveInteger" /> 
    <xs:element name="blue" type="xs:positiveInteger" /> 
    <xs:element name="yellow" type="xs:positiveInteger" /> 
    <xs:element name="red" type="xs:positiveInteger" /> 
    <xs:element name="tan" type="xs:positiveInteger" /> 
    <xs:element name="gray" type="xs:positiveInteger" /> 
    <xs:element name="black" type="xs:positiveInteger" /> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

и позволит XML, как это:

<rods> 
<green>142</green> 
<white>34</white> 
<gray>65</gray> 
</rods> 

MSDN это сказать об этом:

Следующий пример показывает, элемент (zooAnimals), который может иметь нулевой или более из следующих элементов: слон, медведь, жираф, в элементе последовательности.

<xs:element name="zooAnimals"> 
     <xs:complexType> 
      <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="elephant"/> 
       <xs:element name="bear"/> 
       <xs:element name="giraffe"/> 
      </xs:sequence> 
     </xs:complexType> 
</xs:element> 

W3Schools предлагает то же самое. Однако, как визуальная студия, так и онлайн-служба проверки не любят предлагаемого.

Вот что у меня есть на данный момент:

<xs:element name="rods" maxOccurs="1" minOccurs="1"> 
<xs:complexType> 
    <xs:sequence minOccurs="0" maxOccurs="1"> 
    <xs:element name="green" type="xs:positiveInteger" /> 
    <xs:element name="white" type="xs:positiveInteger" /> 
    <xs:element name="blue" type="xs:positiveInteger" /> 
    <xs:element name="yellow" type="xs:positiveInteger" /> 
    <xs:element name="red" type="xs:positiveInteger" /> 
    <xs:element name="tan" type="xs:positiveInteger" /> 
    <xs:element name="gray" type="xs:positiveInteger" /> 
    <xs:element name="black" type="xs:positiveInteger" /> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

И вот XML:

<rods> 
<green>142</green> 
<white>34</white> 
<gray>65</gray> 
</rods> 

Visual Studio 2005 утверждает, что "серый" является недействительным, "синий" и следовало ожидать, так ясно он хочет, чтобы все дети

Спасибо,

Эрик

+0

Ваше определение схемы выглядит хорошо для меня. Хотите поделиться результатами/отзывами Visual Studio и онлайн-валидаторов? –

+0

Я добавил результаты в сообщение – Eric

ответ

10
<xs:element name="rods"> 
    <xs:complexType> 
     <xs:sequence> 
       <xs:element minOccurs="0" name="green" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="white" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="blue" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="red" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="tan" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="gray" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="black" type="xs:positiveInteger" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+0

Спасибо, что делает эту работу. Нет способа избежать ввода большого количества minOccurs = "0", есть ли? Интересно, почему W3Schools и MSDN говорят, что другой код работает, а когда нет? – Eric

+1

@ Эрик Они оба последовательности, но отличаются важными деталями, которые вы хотите. Они означают нуль или много повторений группы, но вы хотели, чтобы каждый человек был равен нулю или одному. Вы знакомы с регулярным выражением? XML-схема очень похожа. Их метод подобен (e g b) *, но то, что вы хотите, похоже на e? г? б? – 13ren

+0

А ... Должно быть, неверно истолковал, что говорил MSDN – Eric

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

  • Нет связанных вопросов^_^