2010-04-06 1 views
8

У меня есть документ XML, как:Опишите повторяющиеся узлы XML в XML-схеме W3C?

<Root> 
    <Bravo /> 
    <Alpha /> 
    <Charlie /> 
    <Charlie /> 
    <Delta /> 
    <Foxtrot /> 
    <Charlie /> 
</Root> 

Порядок узлов не имеет значения. Каждый узел может отображаться ноль или один раз, за ​​исключением Чарли. Чарли может появляться ноль, один или произвольно много раз. Простой способ выразить это в XSD является:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Root"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="Alpha" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Bravo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Charlie" minOccurs="0" maxOccurs="unbounded" /> 
       <xsd:element name="Delta" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Echo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Foxtrot" minOccurs="0" maxOccurs="1" /> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Но это не работает, потому что XSD: все не позволяет MaxOccurs больше 1. Так как я не могу использовать XSD: все, что я должен использовать?

+0

Мой вопрос очень похож на отредактированную версию «XSD - как разрешить элементы в любом порядке сколько угодно раз?». Никто не смог предоставить ответ XSD для этого. – NotMyName

ответ

2

Schematron. :)

Я не уверен на 100%, но я думаю, что эта модель не может быть выражена в XML-схеме.

+0

Это можно выразить в XSD 1.0, но неудобно: по существу вам нужно рассчитать все возможные порядки для элементов, а затем лево-факторное регулярное выражение, чтобы избежать проблем с правилами детерминизма. В XSD 1.1 ограничения на все группы несколько смягчены; в частности 'maxOccurs' больше не должно быть 1. –

1

Вы можете использовать xsd: sequence, но тогда заказ будет важным, о котором вы заявили в вопросе, не будет гарантирован.

Глядя на: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group кажется, что нет группы моделей, которую вы можете использовать, хотя, может быть, вы могли бы просто определить их в complexType без использования группы контента?

+0

Должен быть индикатор: последовательность, выбор, все. Тем не менее, ни один из них не соответствует тем, что мне нужно. – NotMyName

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