如果在使用 RELAX NG Compact 时一个子元素被另外两个独立元素使用怎么办?
What if a sub element is used by two other independent elements when using RELAX NG Compact?
我正在使用 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} } }
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>
我正在使用 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} } }
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>