Xml 如何在Relax NG中实现约束/条件运算符?
考虑以下用 任何XML文档,如Xml 如何在Relax NG中实现约束/条件运算符?,xml,xsd,dependencies,constraints,relaxng,Xml,Xsd,Dependencies,Constraints,Relaxng,考虑以下用 任何XML文档,如 <key> <type>someType</type> <value>someValue</value> </key> 这将过滤掉一些无效文档,如 <key> <type>letter</type> <value>7</value> </key> <!-- illegal - 7
<key>
<type>someType</type>
<value>someValue</value>
</key>
这将过滤掉一些无效文档,如
<key>
<type>letter</type>
<value>7</value>
</key>
<!-- illegal - 7 is not a letter ! -->
信
7.
Relax NG的语法没有提供编写条件运算符的显式机制,因此我的问题是如何模拟这种行为并实现某些元素的值与属性之间的依赖关系?如果您能告诉我一种使用经典DTD执行此操作的方法,我将不胜感激。
任何帮助都将不胜感激。提前感谢。此模式:
start = key
key = element key { (type1, value1) | (type2, value2) }
type1 = element type { "letter" }
type2 = element type { "digit" }
value1 = element value { xsd:string { pattern = "[a-z]" }}
value2 = element value { xsd:string { pattern = "[0-9]" }}
可用于验证此文档:
<key>
<type>letter</type>
<value>7</value>
</key>
信
7.
报告:
so.xml:3:20:错误:元素“value”的字符内容无效;必须是与正则表达式“[a-z]”匹配的字符串
start = key
key = element key { (type1, value1) | (type2, value2) }
type1 = element type { "letter" }
type2 = element type { "digit" }
value1 = element value { xsd:string { pattern = "[a-z]" }}
value2 = element value { xsd:string { pattern = "[0-9]" }}
<key>
<type>letter</type>
<value>7</value>
</key>