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