1

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、シーケンスの代わりに使用することでした。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>
4

1 に答える 1

2

xs:sequence に minOccurs と maxOccurs を設定することもできます。これを適切な値 (おそらく minOccurs="0" maxOccurs="unbounded") に設定すると、問題が解決します。

于 2011-06-14T17:21:22.440 に答える