1

考虑以下用紧凑语法编写的Relax NG模式

key = element key { type, value }
type = element type { text }
value = element value { text }

特此任何 XML 文档,如

 <key>
    <type>someType</type>
    <value>someValue</value>
 </key>

将被确认为格式正确。现在我想设置一些约束,例如元素值之间的一些依赖关系。例如

if type:text = "digit"  then value:text = "[0-9]" else
if type:text = "letter" then value:text = "[a-z]"

这将过滤掉一些无效的文档,例如

<key>
   <type>letter</type>
   <value>7</value> 
</key>
<!-- illegal - 7 is not a letter ! -->

Relax NG 的语法没有提供一个明确的机制来编写条件运算符,所以我的问题是如何模拟这种行为并实现某些元素和属性的值之间的依赖关系?

如果您向我展示一种使用经典 DTD 执行此操作的方法,我将不胜感激。

任何帮助将不胜感激。提前致谢。

4

1 回答 1

2

此架构:

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>

报道:

so.xml:3:20:错误:元素“值”的字符内容无效;必须是匹配正则表达式“[az]”的字符串

于 2011-07-16T12:53:33.353 回答