2

を使用して属性の一意性を強制しようとしていますxs:unique。ただし、XPath に問題があると思います。

文字列である属性「識別子」を持つ抽象要素 ObjectA があります。この識別子は、具体的な要素 ObjectB と ObjectC のすべてのインスタンスで一意にする必要があります。xpath="."正しくないと思います。

<xs:element name="ObjectA" type="ns:ObjectAType">
  <xs:unique name="Identifier">
    <xs:selector xpath="."/>
    <xs:field xpath="@identifier"/>
  </xs:unique>
</xs:element>

<xs:complexType name="ObjectAType" abstract="true">
  <xs:attribute ref="ns:identifier" use="required" />
</xs:complexType>

<xs:attribute name="identifier" type="xs:string" />

<xs:element name="ObjectB" type="ns:ObjectBType" substitutionGroup=ns:ObjectA" />
<xs:element name="ObjectC" type="ns:ObjectCType" substitutionGroup=ns:ObjectA" />
4

2 に答える 2

2

D 要素内のすべての A 要素に F の一意の値を持たせたい場合は、D 要素のレベルで一意の制約を定義する必要があります。セレクターは D から始まる A 要素を選択し、フィールドは A 要素から始まる F の値を選択する必要があります。あなたの間違いは、個々の A 要素が無効にならないため、 A 要素に制約を定義しようとしていることです。これは間違っています。無効はDのレベルです。

お役に立てれば。

于 2013-01-22T09:05:16.280 に答える
0

一意の制約は、個々の要素よりもコレクションで機能します。あなたが持っているスキーマ定義は多かれ少なかれ有効ですが、一意はオブジェクト全体ではなく Objectx の「内」要素でチェックされます。完全なスキーマを投稿すると、より正確な定義を提供するのに役立ちます。

于 2013-01-22T04:27:54.353 に答える