要素が繰り返されたときにXSDファイルの要素のリストを定義するのに問題

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

  •  27-10-2019
  •  | 
  •  

質問

XMLを検証するためにXSDファイルを書き込もうとしています。これが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 シーケンスの代わりに。しかし、それは私を使用させません allmaxOccurs

リストを正しく定義するために何をする必要がありますか?

編集: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>
役に立ちましたか?

解決

また、XS:シーケンスにMinoccursとMaxoccursを設定することもできます。適切な値(おそらくMinoccurs = "0" maxoccurs = "unbounded")に設定することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top