我正在使用RELAX NG Compact,并遇到了两个独立父元素正在使用子元素的情况。我该如何解决这个问题?
用例1
<parent1>
<field usecase_123="test" />
</parent1>
用例2
<parent2>
<field usecase_AAA="test" />
</parent2>
这就是冲突:
parent1 = element parent1 { element field { attribute usecase_123 {text} } }
parent2 = element parent2 { element field { attribute usecase_AAA {text} } }
答案 0 :(得分:1)
RelaxNG允许元素根据其父元素具有不同的属性。
所以你可以像这样使用RelaxNG语法:
start = root
root = element root { parent1* & parent2* }
parent1 = element parent1 { element field { attribute usecase_123 {text} } }
parent2 = element parent2 { element field { attribute usecase_AAA {text} } }
并且,对于该语法有效,以下文档实例:
<root>
<parent1>
<field usecase_123="test" />
</parent1>
<parent2>
<field usecase_AAA="test" />
</parent2>
</root>
...虽然对该语法无效,但是以下文档实例:
<root>
<parent1>
<field usecase_AAA="test" />
</parent1>
</root>