2013-02-19 27 views
1

使用xsd:key和xsd:keyref,我们可以验证一个元素中的值是在另一个元素中定义的。我们这样做是我们的模式,以确保所使用的有效价值,但我们也希望能够验证都在同一个元素中指定的值都在另一个元素的儿童使用,即:XSD可以验证元素是否包含对另一个元素的所有定义的引用

<elementList> 
    <listEntry>Entry1</listEntry> 
    <listEntry>Entry2</listEntry> 
    <listEntry>Entry3</listEntry> 
</elementList> 
<elementOperations> 
    <operation name="Entry1">Operation1</operation> 
    <operation name="Entry3">Operation3</operation> 
</elementOperations> 

在这个例子中,我们希望存在验证错误,因为没有名称属性指定Entry2的元素。这完全可以用XSD模式验证吗?

回答

2

如果您不允许在操作名称中使用重复值,在这种情况下,只需添加另一个指向相反方向的键/ keyref对(即键现在是操作名称)。

如果重复是可能的,那么你不能单独使用XSD 1.0来完成--Schematron可以帮助你。或者,如果您在支持XSD 1.1的环境中工作,请使用XSD 1.1的xsd:assert

+0

这很好地回答了这个问题,不幸的是,我发现所需的XML检查实际上比我发布的简单示例更复杂,并且需要xpath测试,XSD 1.0不允许。 – devyndraen 2013-02-19 22:43:13

相关问题