要素の属性の一意性を強制する必要がありますが、親要素の範囲内でのみです。有効な XML の例を次に示します。
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:Test.Namespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
<ns:element1 id="002">
<ns:element2 id="002.1" order="1">
<ns:element3 id="002.1.1" />
</ns:element2>
<ns:element2 id="002.2" order="2">
<ns:element3 id="002.1.2" />
</ns:element2>
</ns:element1>
</ns:Root>
上記のように、「element1」には 2 つのセットがあり、その中で element2 ノードには「order」という属性があることに注意してください。要件は、'order' が親の 'element1' 内で一意である必要があることです。たとえば、この単純化されたバージョンは無効な XML になります。
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:Test.Namespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="1">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
</ns:Root>
これを行うために、次のスキーマを作成しました。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:Test.Namespace"
xmlns:ns="urn:Test.Namespace"
elementFormDefault="qualified">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="element1" maxOccurs="unbounded" type="ns:element1Type"/>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="uniqueElement2OrderInElement1">
<xsd:selector xpath="./ns:element1" />
<xsd:field xpath="ns:element2/@order" />
</xsd:unique>
</xsd:element>
<xsd:complexType name="element1Type">
<xsd:sequence>
<xsd:element name="element2" maxOccurs="unbounded" type="ns:element2Type"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="element2Type">
<xsd:sequence>
<xsd:element name="element3" type="ns:element3Type" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="order" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="element3Type">
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
これは、一意性を強制するという点で近いですが、ドキュメント全体です。つまり、すべての注文属性は一意でなければなりません。これは、ルートのスキーマに配置されているためだと思いますが、よりローカライズされた場所に移動するか、セレクターをより具体的にしようとしましたが、機能しません (エラーが発生します)。
私がやろうとしていることは可能ですか?
期待に感謝します