8

アプリケーションですでに使用されているxml形式を検証するためのスキーマを設計しようとしています(xmlを再設計する余地はあまりありません)。

xmlスキーマディクショナリのkey要素とkeyref要素を利用して、IDの制約を検証しようとしています。

1つの特定の問題は、xmlが1対多の関係をモデル化する方法にあります

<spaceships>
    <spaceship guns="gun1 gun2 gun3"/>
</spaceships>
<guns>
    <gun id="gun1"/>
    <gun id="gun2"/>
    <gun id="gun3"/>
</guns>

スキーマでこのキー/キー参照のペアを思いついた

<xs:key name="gunKey">
    <xs:selector xpath="guns/gun" />
    <xs:field xpath="@id" />
</xs:key>

<xs:keyref name="gunRef" refer="gunKey">
    <xs:selector xpath="spaceships/spaceship" />
    <xs:field xpath="@guns" />
</xs:keyref>

これは、xercesの抗議では検証されません。

要素のID制約に対して、値が「gun1gun2gun3」のキー「gunRef」が見つかりません。

リストの値が別のエンティティへの参照のコンマ区切りリストであり、それでもID制約検証の利点を享受できることをスキーマで表現する方法はありますか?

4

1 に答える 1

1

残念ながら、属性のような参照を作成することはできません。これは、自動的に 3 つの別々の部分に分割されない単純な文字列であるguns="gun1 gun2 gun3"ためです。gun1 gun2 gun3

編集 1:そのような属性を一致させたい場合は、この QA: XML スキーマを見てください。複数の有効な属性値のリストから

于 2013-01-08T15:35:25.850 に答える