0

私のXMLは次のようになります:

<root>
  <elt att1="bla" att2="ble">
    <subelt satt1="bli" satt2="1" />
    <subelt satt1="blo" satt2="18" />
    <subelt satt1="blu" satt2="4" />
  </elt>
</root>

任意のエルトに 1 が存在する可能性があります。elt ごとに任意の subelt に 1 が存在する可能性があります。このユーティリティに対してスキーマを検証しようとしました: http://www.utilities-online.info/xsdvalidation。これが私のxsdです:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="elt" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="att1" type="xs:string" use="required"/>
            <xs:attribute name="att2" type="xs:string" use="required"/>
            <xs:sequence>
              <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="subatt1" type="xs:string" use="required"/>
                  <xs:attribute name="subatt2" type="xs:integer"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

問題は、属性とサブ要素 (シーケンス) の両方を持つ要素から発生します。シーケンスの周りに xs:complexType を配置しようとしましたが、それでも別のエラーが発生します。私は XML スキーマの初心者なので、これをどのようにフォーマットすればよいかを理解するのは少し難しいです。それについて何かアドバイスをいただけますか?ありがとう。

(要素と属性の名前を変更したため、ファイルにタイプミスがある可能性があります)

4

1 に答える 1

1

歴史的な理由から、XSD 複合型は最初に要素のコンテンツ モデルを指定し、次に属性を指定します。したがって、elt要素の複合型は次のようになります。

<xs:complexType>
  <xs:sequence>
    <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded">
      <xs:complexType>
        <xs:attribute name="subatt1" type="xs:string" use="required"/>
        <xs:attribute name="subatt2" type="xs:integer"/>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
  <xs:attribute name="att1" type="xs:string" use="required"/>
  <xs:attribute name="att2" type="xs:string" use="required"/>
</xs:complexType>
于 2013-02-08T20:55:04.877 に答える