1

このコードの何が問題なのか理解できません。

<xs:choice>
  <xs:element name="tiles" type="tiles" minOccurs="1" maxOccurs="1"/>
  <xs:element name="tiles" type="tiles-with-key" minOccurs="2" maxOccurs="unbounded"/>
</xs:choice>

key複数のtiles要素があるとすぐに属性を要求したい:

<!-- one element, no need for the "key" attribute -->
<tiles>
    ...
</tiles>

<!-- two elements, we need the "key" to differentiate them -->
<tiles key="1">
    ...
</tiles>
<tiles key="2">
    ...
</tiles>

私は何が間違っているのですか?

4

1 に答える 1

1

これはUniqueParticleAttribution(UPA)と呼ばれ、基本的にパーサーは先を見ずにモデル内のどこにあるかを知る必要があると言います。この場合、選択したオプション間でタグ名が同じである場合、パーサーは適用するモデルを認識しません。

あなたの質問は基本的に、外部条件、ここではタイル要素の数に基づいて属性の使用を制御することです(必須とオプション)。これは、XSD1.0では不可能です。XSD1.0を搭載したSchematronは1つのオプションです。他の人はXSD1.1を提案するかもしれませんが、サポートがかなり低いため、ここで実行可能な解決策を見つけるには時期尚早です。

于 2012-04-15T15:17:49.773 に答える