使用xsd:key和xsd:keyref,我们可以验证一个元素中的值是否在另一个元素中定义。我们在模式中执行此操作以确保使用有效值,但我们还希望能够验证在一个元素中指定的所有值都在另一个元素的子元素中使用,即:
<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 Schema验证?
答案 0 :(得分:2)
如果您不允许在操作名称中使用重复值,则可以使用;在这种情况下,只需添加另一个指向相反方向的键/ keyref对(即键现在是操作名称)。
如果可以重复,那么单独使用XSD 1.0就无法做到 - Schematron可以在这里为您提供帮助。或者,如果您在支持XSD 1.1的环境中工作,则使用XSD 1.1的xsd:assert
。