2
我看起來有一個相當不尋常的問題。我有一個xml,大致看起來像他的:XSD驗證第n個孩子的父代中的唯一ID屬性
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="tbd">
<A>
<B id="01">
<C id="02" />
<C id="03" />
</B>
<B id="04">
<C id="05" />
</B>
</A>
<A>
<B id="01">
<C id="02" />
<C id="03" />
</B>
<B id="04">
<C id="05" />
</B>
</A>
</root>
正如你所看到的,塊A可以重複n次。我的問題是驗證id屬性對A(child,grandchild,asf。)的所有後代是唯一的。到目前爲止,我設法驗證B的ID是裏面唯一的,而C的編號爲B與上午XSD的獨特的內部看起來是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="tbd" xmlns:tbd="tbd" elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="A" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="B" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="C" maxOccurs="unbounded">
<xs:ComplexType>
<xs:attribute name="id" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:attribute name="id" type="xs:int" use="required" />
<xs:unique name="UniqueC">
<xs:selector xpath="tbd:C" />
<xs:field xpath="@id" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueB">
<xs:selector xpath="tbd:B" />
<xs:field xpath="@id" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:compleyType>
</xs:element>
</xs:schema>
我在找什麼像類型的確認=「XS:ID」,而不是整個文檔,但只有內部的A,使得下面的例子將是無效的(現在這將是有效的):
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="tbd">
<A>
<B id="01">
<C id="01" /> <!-- should be invalid -->
<C id="02" />
<C id="04" />
</B>
<B id="04"> <!-- should be invalid -->
<C id="02" /> <!-- should be invalid -->
<C id="05" />
</B>
</A>
<A>
<B id="01">
<C id="012" />
<C id="02" />
<C id="04" />
</B>
<B id="042">
<C id="05" />
</B>
</A>
</root>
非常感謝! 我在現場節點中做了這件事,並沒有奏效。這正是我所期待的:D – PowderFan
不客氣:) – sergioFC
它甚至可以與 一起使用,我也只在字段節點中使用它。 .. 但現在我實際上得到了選擇器和字段節點* facepalm * ^^之間的關係 –
PowderFan