Xml 确保一个元素的内容等于一个键(keyref表示内容)
我在同一个XML文件中有两个不同元素的列表(Xml 确保一个元素的内容等于一个键(keyref表示内容),xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我在同一个XML文件中有两个不同元素的列表(ruleRef和rule)。 我想确保ruleRef的内容等于任何规则的名称 在我的XSD中,我已经有一个xs:key限制,比如: <xs:key name="ruleName"> <xs:selector xpath="rules/rule"/> <xs:field xpath="@name"/> </xs:key> <xs:k
ruleRef
和rule
)。
我想确保ruleRef
的内容等于任何规则的名称
在我的XSD中,我已经有一个xs:key
限制,比如:
<xs:key name="ruleName">
<xs:selector xpath="rules/rule"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref name="differentRuleRef" refer="ruleName">
<xs:selector xpath="rules/rule/differentRuleRef"/>
<xs:field xpath="@referencedRule"/>
</xs:keyref>
我以前也使用过这个键来验证另一个元素的属性,比如:
<xs:key name="ruleName">
<xs:selector xpath="rules/rule"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref name="differentRuleRef" refer="ruleName">
<xs:selector xpath="rules/rule/differentRuleRef"/>
<xs:field xpath="@referencedRule"/>
</xs:keyref>
现在我想验证元素而不是属性的实际内容。
例如,在以下XML中,第二个
元素应无效:
规则1
不存在的胃窦
我以前尝试过text()
和data(.)
,但它们在XPath子集中都无效。
我也尝试过
和ruleRef
,但它们似乎没有验证任何东西。在xs:keyref
中对xs:field
使用
应该有效,我怀疑XPath中对xs:selector
的错误匹配
在
元素上,在模式中定义以下内容正在处理您提供的XML示例:
<xs:element name="root" type="root">
<xs:key name="ruleName">
<xs:selector xpath="rules/rule"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref refer="ruleName" name="differentRuleRef">
<xs:selector xpath="ruleRefs/ruleRef"/>
<xs:field xpath="."/>
</xs:keyref>
</xs:element>
<xs:complexType name="root">
<!-- define root content type here ...-->
</xs:complexType>
这将限制规则名称的唯一性。显然,我在使用
时犯了一个不同的错误,因为现在我使用了它,它立即起作用了……无论如何,谢谢:)