如果使用RELAX NG Compact时其他两个独立元素使用子元素会怎样?

时间:2017-06-29 20:07:30

标签: xml relaxng relaxng-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} } }

1 个答案:

答案 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>