4

私は次のようなxmlを持っています

<Search>
    <Term />
    <And />
    <Term />
    <And />
    <Term />
</Search>

示されているように、シーケンスにはn個の用語とn-1個のAnd(n> 0)が存在する可能性があります。次のxmlスキーマを試しましたが、上記のxmlはスキーマに対して検証されませんでした。 エラー:cvc-complex-type.2.4.b:要素「検索」の内容が完全ではありません。'{And}'の1つが期待されます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="Search">
        <xs:complexType>
            <xs:sequence>               
                <xs:sequence minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="Term" type="xs:string" />
                    <xs:element name="And" type="xs:string" />
                </xs:sequence>              
                <xs:element name="Term" minOccurs="1" maxOccurs="1" type="xs:string" />             
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

xmlスキーマに関するヘルプに感謝します。

4

2 に答える 2

9

このように並べ替えるとうまくいくようです。私は何かが足りないのですか?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="Search">
        <xs:complexType>
            <xs:sequence>
              <xs:element name="Term" minOccurs="1" maxOccurs="1" type="xs:string" />
                <xs:sequence minOccurs="0" maxOccurs="unbounded">
                  <xs:element name="And" type="xs:string" />
                  <xs:element name="Term" type="xs:string" />
                </xs:sequence>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
于 2012-06-16T02:00:47.170 に答える
4

コンテンツモデルの改訂された形式は、実際に記述された言語を認識します。

しかし、シーケンス用に設計された表面構文の文字通りの転写ではなく、必要な抽象構文ツリーの観点からXMLを考えた場合、XMLはもう少し慣用的であり、処理がほぼ確実に簡単になります。ツリーではなくトークンの。

用語の間に空の要素を使用する代わりに、And用語の接続詞を要素でラップしAndます。

<Search>
  <And>
    <Term>...</Term>
    <Term>...</Term>
    <Term>...</Term>
  </And>
</Search>

演算子に起因する優先順位を気にすることなく、任意のブール値の組み合わせを簡単に実行できるようになりました。

<Search>
  <Or>
    <And>
      <Term>...</Term>
      <Or>
        <Term>...</Term>
        <Term>...</Term>
      </Or>
    </And>
    <And>
       <Term>...</Term>
       <not><Term>...</Term></not>
    </And>
  </Or>
</Search>
于 2012-08-21T02:05:39.653 に答える