Проблемы с определением списка элементов в файле XSD, когда элементы повторяют

StackOverflow https://stackoverflow.com/questions/6347365

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать файл 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

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

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

  <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>
Это было полезно?

Решение

Вы также можете установить Minoccurs и Maxoccurs на xs: последовательность, устанавливая это на соответствующие значения (вероятно, minoccurs = "0" maxoccurs = "неограниченное") должны решить вашу проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top