根据XSD 1.1中的属性限制元素

时间:2015-06-11 16:33:47

标签: xml xsd

我需要在我的XSD架构中定义以下情况。这是我的XML的一个例子:

<initialization>

  <stat name="SelfActualization" range="" init="" tickValue="" colorR="" colorG="" colorB=""/>
  <stat name="Social" range="" init="" tickValue="" colorR="" colorG="" colorB=""/>

  <staticAction name="Study" >
    <SelfActualization reqPoints="0" gainedPoints="0" />
    <Social reqPoints="0" gainedPoints="0" />
  </staticAction>

</initialization>

我可以定义尽可能多的&#34; stat&#34;我想要的元素(在这种情况下只有2),我已经设法获得这种行为。我不知道该怎么做的是:在我的任何一个静态行动&#34;我需要所有的&#34;统计数据&#34;先前在上面定义的(再次命名)(作为元素),并且以相同的顺序在开头定义它们。 正如我们在示例中所看到的那样,确实都是&#34; SelfActualization&#34;和#34;社交&#34;在那里,并以正确的顺序。如果是另一个&#34; stat&#34;以前没有定义,或者如果其中一个&#34;统计数据&#34;如果缺少定义,或者如果顺序错误,则必须拒绝XML。提前谢谢..

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那么在初始化元素的声明中,添加断言

<xs:assert test="every $sa in staticAction 
                 satisfies deep-equal(stat/@name,
                              $sa/child::*/local-name())"/>