3

オプション要素と必須要素の両方を許可する複雑な要素を作成する際に問題に直面しています。以下の xml では、h2 は必須で、h1 はオプションであり、順序は関係ありません。

ケース 1:

<root>
<h1/>
<h2/>
</root>

ケース 2:

<root>
<h2/>
</root>

ケース 3:

<root>
<h2/>
<h1/>
</root>

XSD:

<xs:element name="root">
    <xs:complexType>
           <xs:sequence minOccurs="1" maxOccurs="unbounded">
               <xs:element name="h1" minOccurs="0"></xs:element>
                <xs:element name="h2" minOccurs="1" />
           </xs:sequence>
     </xs:complexType>
</xs:element>

上記の 3 番目のケースはこの xsd では失敗しますが、そのようなケースは有効です。上記のすべてのケースに有効な xsd が必要です。

4

1 に答える 1

0

あなたが望むものは次のとおりであることを知っています:

h2 を最大 1 回発生させる一方で、h1 は可能な限り何度でも発生させることができます。

XML の内容が (RegExpr) のようなものである場合に XML が有効であることを定義するこの XSD を使用できます<root><h1/>*<h2/><h1/>*</root>

XSD:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="h1" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="h2" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="h1" minOccurs="0" maxOccurs="unbounded"/>        
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>


有効な XML の例:
1)

<root>
  <h1/>
  <h1/>
  <h2/>
  <h1/>
</root>

2)

<root>
  <h1/>
  <h2/>
</root>


無効な XML の例:
2 つの<h2/>要素。

<root>
  <h2/>
  <h1/>
  <h2/>
</root>

<h2/>要素なし。

<root>
  <h1/>
  <h1/>
</root>
于 2012-06-12T19:52:37.540 に答える