我正在努力应对XSD应该对我的所有类别应用唯一约束。
我的每个类别都可以有孩子,而孩子又是孩子。这就是"类别"我的XSD的一部分看起来像;
<xsd:element name="Categories">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Category" maxOccurs="unbounded" type="Category"/>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="CategoryUnique">
<xsd:selector xpath="Category"/>
<xsd:field xpath="ID"/>
</xsd:unique>
</xsd:element>
&#34;类别&#34;类型:
<xsd:complexType name="Category">
<xsd:all>
<xsd:element name="ID" type="xsd:unsignedInt"/>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Children" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Category" type="Category" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="CategoryChildUnique">
<xsd:selector xpath="Category"/>
<xsd:field xpath="ID"/>
</xsd:unique>
</xsd:element>
</xsd:all>
</xsd:complexType>
此XSD正确处理以下事项:
如何确保 ANY &#34;类别&#34;节点不能与任何其他节点具有相同的ID#34;类别&#34;同一父容器中的节点(&#34; Categories&#34;节点包含在包装器中)
答案 0 :(得分:2)
我已经解决了这个问题!
经过多次尝试我想到的所有新增内容后,我已经想出如何让XSD检查所有子节点!
<xsd:unique name="CategoriesUnique">
<xsd:selector xpath=".//Category"/>
<xsd:field xpath="ID"/>
</xsd:unique>
这取代了&#34;类别&#34;中的唯一约束。检查节点和所有后续类别节点!
检查W3Schools以获取有关Xpath语法的信息:
//从当前节点中选择与选择匹配的文档中的节点,无论它们在何处。
。选择当前节点