Проблема определения списка элементов в файле xsd, когда элементы повторяются - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь написать xsd-файл для проверки моего xml.Вот пример xml

<Record xmlns="http://example.com/FixedBinaryFile.xsd" Name="Clients">
  <Padding Size="5">
  <RecordEntry Name="Foo1" DataType ="Char"/>
  <RecordEntry Name="Foo2" DataType="AnsiString" MaxSize="8"/>
  <RecordEntry Name="Foo3" DataType="AnsiString" MaxSize="25"/> 
  <Padding Size="2"/> 
  <RecordEntry Name="Foo4" DataType="Byte"/>
  <Padding Size="1"/> 
  <RecordEntry Name="Foo5" DataType="UInt16"/>
  <RecordEntry Name="Foo6" DataType="AnsiString" MaxSize="3"/>
  <RecordEntry Name="Foo7" DataType="AnsiString" MaxSize ="3"/>
  <Padding Size="22"/>
</Record>

, а вот xsd, который его определяет

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>

Моя проблема в том, что sequence не позволяет мне помещать записи отступов, где бы я ни находилсяхочу (прямо сейчас у меня может быть столько RecordEntry записей, сколько я хочу, и столько Padding записей, сколько я хочу).

Моей первоначальной мыслью было использование all вместо последовательности.Однако это не позволит мне использовать all с maxOccurs

Что мне нужно сделать, чтобы правильно определить мой список?

РЕДАКТИРОВАТЬ: Фрик правильно понял, вот что япришлось изменить его, чтобы заставить его работать.

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>

1 Ответ

2 голосов
/ 14 июня 2011

Вы также можете установить minOccurs и maxOccurs в xs: sequence, задав соответствующие значения (вероятно, minOccurs = "0" maxOccurs = "unbounded"), чтобы решить вашу проблему.

...