1

次のクラスのXMLドキュメントをXMLスキーマとして表現することは可能ですか?

  • ルート要素「root」には、最初の子として正確に1つの要素「message」が含まれます
  • その後、任意の子要素が続く場合がありますが、それ以上の「メッセージ」要素はありません。

インスタンスの例:

<root>
  <message type="S">Order saved</message>
  <order number="4711"/>
</root>


<root>
  <message type="S">3 countries selected</message>
  <country value="ES">Spain</country>
  <country value="FR">France</country>
  <country value="IT">Italy</country>
</root>

私のアイデアは、次のように1つxs:elementのシーケンスを使用することでした。xs:any

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="message" maxOccurs="1">
           <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <xs:attribute name="type"></xs:attribute>
               </xs:extension>
             </xs:simpleContent>
           </xs:complexType>
        </xs:element>
        <xs:any processContents="skip" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

ただし、2つの「メッセージ」の子を含むドキュメントは渡されます(2番目の「メッセージ」要素はxs:anyに準拠するため)。

4

1 に答える 1

1

xs:any に一致する要素名を制限できます。XSD 1.0 では、受け入れられる名前空間を指定できます。XSD 1.1 では、より具体的に指定できます。実際、明示的なキーワード notQName="##definedSibling" があり、まさにあなたが求めていることを実行します。XSD 1.1 は現在、Saxon と Xerces でサポートされています。

于 2012-12-04T16:54:55.287 に答える