0
複数のcomplexType要素で使用される要素間で一意の値を適用しようとしています。例えばXSDの要素間で一意の値
:
<lmt>
<lf>
<pos>1</pos>
... more elements ...
</lf>
<cdl>
<pos>1</pos>
... more elements ...
</cdl>
</lmt>
しかし
<lmt>
<lf>
<pos>1</pos>
... more elements ...
</lf>
<cdl>
<pos>2</pos>
... more elements ...
</cdl>
</lmt>
を検証し、現在の両方を検証するように見える:
<xs:element name="lmt">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="lf" maxOccurs="unbounded"/>
<xs:element ref="cdl" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
<xs:unique name="uniquePos">
<xs:selector xpath="./*/pos"/>
<xs:field xpath="."/>
</xs:unique>
</xs:element>
<xs:element name="pos">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="\d{1}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="lf">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos"/>
... more elements ...
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="cdl">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos"/>
... more elements ...
</xs:sequence>
</xs:complexType>
</xs:element>
私はのようなものを持っている場合、これは失敗したいと思います。私は./*/pos
と.//pos
の両方をセレクタに試しましたが、最初の例で検証が失敗することがあります。
になるはずです。追加の詳細レベルで質問を更新しました。あなたが提案したように私が実装しているかどうかは分かりませんが、セレクタとして '.// pos'と' ./*/ pos'の両方を使用しても、拒否したい場合は許可します。ご協力いただきありがとうございます。 – agf1997
「pos」へのXpath参照の名前空間を使用する必要があります。 ' 'は働いた –
agf1997