Как я могу иметь подэлементы сложного / смешанного типа с неограниченным порядком и количеством? - PullRequest
0 голосов
/ 06 мая 2010

Я работаю с XML, где некоторые элементы будут содержать текст с дополнительной разметкой. Это похоже на этот пример в W3Schools . Однако мне нужно, чтобы теги разметки появлялись в любом порядке и, возможно, несколько раз.

Чтобы изменить их пример для иллюстрации:

<letter>
  Dear Mr.<name>John Smith</name>.
  Your order <orderid>1032</orderid>
  will be shipped on <shipdate>2001-07-13</shipdate>.
  Thank you, <name>Bob Adams</name>
</letter>

Ни одна из опций, представленных W3Schools (на странице, следующей за связанным примером), не позволяет этот XML из-за второго элемента <name>. Их объяснение «показателей» и мои тесты согласуются.

<xs:sequence> - нарушает порядок элементов

<xs:choice> - используется более одного вида элементов.

<xs:all> - maxOccurs ограничен "1".

Кажется, это должно быть просто, в конце концов, XHTML допускает такие вещи. Как мне определить мою схему, чтобы разрешить это?

1 Ответ

0 голосов
/ 06 мая 2010

После дополнительных поисков я нашел [этот] [1] ответ, который решен с помощью задачи. @jelovirt проголосовал!

По сути, комбинируя индикаторы sequence и choice.

<xs:complexType name="textItem" mixed="true">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="tag_1" type="xs:string" />
    ...
    <xs:element name="tag_n" type="xs:string" />
  </xs:choice>
</xs:complexType>
...