[実際に XML を示した方が、質問を理解しやすくなることに注意してください。現状では、散文記述が記述しようとしている XML 構造についての推測に部分的に基づいて回答する必要があります。次に、それらを一粒の塩で取ります。]
私があなたを理解している場合、あなたはいくつかの制約を課したいと考えています(参照用にここに番号が付けられています):
各<element>
要素は、要素の子として表示され<item>
ます。
各<element>
and<item>
要素には、number
値が識別番号である属性があります。各number
属性の値は、10 進数の有限シーケンスです。
各要素の識別番号は、識別されたコンテナー要素 (ドキュメント要素など) 内の<item>
すべての要素で一意です。<item>
各要素の識別番号は、同じコンテナー要素内の<element>
すべての要素で一意です。<element>
(または、それが含まれているアイテム内のすべての<element>
要素で一意であることを意味するのでしょうか?あなたの説明からはわかりません。)
各<element>
要素の識別番号には、親<item>
要素の識別番号がプレフィックスとして付きます。
各要素の識別番号は、親要素<element>
の識別番号より正確に 2 桁長くなります。<item>
次のスキーマは、これらの制約を課します。アサーションについて言及されているので、XSD 1.1 で作業できると思います。(1.1 を持っていない場合、アサーションはありません。)
<xs:schema
targetNamespace="http://example.com/elements-and-items"
xmlns:tns="http://example.com/elements-and-items"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test" type="tns:test">
<xs:unique name="item-unique">
<xs:annotation>
<xs:documentation>
Ensure that the number attribute on each
item is unique within the 'test' element.
(Enforces constraint 3.)
</xs:documentation>
</xs:annotation>
<xs:selector xpath=".//tns:item"/>
<xs:field xpath="@number"/>
</xs:unique>
<xs:unique name="element-unique">
<xs:annotation>
<xs:documentation>
Ensure that the number attribute on each
item is unique within the 'test' element.
(Enforces constraint 4. If 'element' elements
are only supposed to be unique within 'item'
elements, then move this to the declaration of
the 'item' element, and forget constraint
5.)
</xs:documentation>
</xs:annotation>
<xs:selector xpath=".//tns:item/tns:element"/>
<xs:field xpath="@number"/>
</xs:unique>
</xs:element>
<xs:element name="item" type="tns:item"/>
<xs:element name="element" type="tns:element"/>
<xs:complexType name="test">
<xs:annotation>
<xs:documentation>
Each 'test' element contains a sequence of
'item' elements.
(Helps enforce constraint 1.)
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="tns:item" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="item">
<xs:annotation>
<xs:documentation>
Each 'item' element contains a sequence of
'element' elements.
(Helps enforce constraint 1.)
Each 'item' element has a 'number' attribute,
of type 'tns:number'.
(Enforces constraint 2 for 'item' elements.)
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="tns:element" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="number" type="tns:number"/>
<xs:assert test="
every $id in ./@number satisfies
every $e in .//tns:element/@number satisfies
starts-with($e,$id)">
<xs:annotation>
<xs:documentation>
Each element-identifying number has the
item-identifying number of the containing item
as a prefix.
Enforces constraint 5.
</xs:documentation>
</xs:annotation>
</xs:assert>
<xs:assert test="
every $id in ./@number satisfies
every $e in .//tns:element/@number satisfies
string-length($e) = string-length($id) + 2">
<xs:annotation>
<xs:documentation>
Each element-identifying number is two
digits longer than the item-identifying
number of the containing item.
Enforces constraint 6.
</xs:documentation>
</xs:annotation>
</xs:assert>
</xs:complexType>
<xs:complexType name="element" mixed="true">
<xs:annotation>
<xs:documentation>
Each 'element' element has a 'number' attribute,
of type 'tns:number'.
(Enforces constraint 2 for 'element' elements.)
</xs:documentation>
</xs:annotation>
<xs:sequence/>
<xs:attribute name="number" type="tns:number"/>
</xs:complexType>
<xs:simpleType name="number">
<xs:restriction base="xs:string">
<xs:pattern value="\d+"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
すべての XSD 1.1 プロセッサは、アサーションで XPath 2.0 の最小限のサブセットをサポートする必要があることに注意してください。私は、そのサブセット内でアサーションをここに書こうとはしませんでした (ただし、そのサブセットにアサーションを記述できるかできないかを判断する努力もしていません)。
非XMLの例と構造的に同一の有効なインスタンス(私が知る限り):
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://example.com/elements-and-items
uniqueness.xsd"
xmlns="http://example.com/elements-and-items">
<item number="1">
<element number="101"/>
<element number="102"/>
<element number="103"/>
</item>
<item number="2">
<element number="201"/>
<element number="205"/>
<element number="206"/>
</item>
<item number="3">
<element number="303"/>
<element number="301"/>
<element number="302"/>
</item>
</test>
違反することによって各制約を示す無効なインスタンス。スキーマが機能している場合、各違反が検出され、適切な要素またはアイテムが無効になります。
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://example.com/elements-and-items
uniqueness.xsd"
xmlns="http://example.com/elements-and-items">
<item number="1">
<element number="101"/>
<element number="102"/>
<element number="103"/>
</item>
<item number="1">
<!--* duplicate item number, invalid
* (violates constraint 3)
*-->
<element number="104"/>
<element number="105"/>
<element number="106"/>
</item>
<item number="2">
<element number="107">
element number unique but doesn't match item number
(violates constraint 5)
</element>
<element number="202"/>
<element number="202">
item number not unique
(violates constraint 4)
</element>
</item>
<item number="3">
<element number="303"/>
<element number="301"/>
<element number="3141592">
item number unique and matches item number
but more than two digits longer
(violates constraint 6)</element>
</item>
</test>