2015-06-11 87 views
1

我需要在我的XSD架构中定义以下情况。这是我的XML的例子:取决于XSD中属性的元素限制1.1

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

,因为我想(在这种情况下,只有2)我可以定义为许多“STAT”元素,我已经设法获得这一行为。我不知道该怎么做的是:在我的任何一个“StaticActions”中,我都需要先前定义的所有“统计”再次被命名(作为元素),并且按照它们在开始时被定义的顺序。 正如我们在例子中可以看到的那样,“SelfActualization”和“Social”都是以正确的顺序存在的。如果之前没有定义另一个“统计”,或者缺少定义的其中一个“统计”,或者订单错误,则必须拒绝XML。在此先感谢..

回答

2

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

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

巧妙地挥起,XPath 2.0中的表现力是令人愉快的。 – kjhughes

+0

非常感谢您,但是我也可以问您如何定义“Static Action”元素,因为它应该包含那些名称动态依赖于XML且不是静态的元素(“统计”)? – Tarta

+0

您可以将其定义为xs:anyType,并完全依赖断言来约束内容。 –