我有一个像下面的xml
<parents>
<mother name="MMM" age="55" />
<children>
<child name="CCC" gender="male" age="25" />
</children>
</parents>
为了验证母亲的年龄或孩子的年龄,我们可以写下面的xsd
<xs:element name="mother">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
但如果我想验证孩子的年龄,这个年龄不应超过母亲的年龄?
答案 0 :(得分:1)
来自Wiki:
XSD没有任何设施来声明其价值或存在 属性取决于其他属性的值或存在 (所谓的共现约束)。
这正是你想要的:根据母亲年龄的价值来限制孩子年龄的价值。不幸的是,不可能使用XML Schema 1.0。
虽然可以通过类似的方式来处理XML Schema 1.1(非常粗略的例子,只是为了展示这个概念):
<xs:assert test="@age < ../../mother[@age]"/>
答案 1 :(得分:0)
据我所知,你不能用常规的xsd限制来做到这一点。你必须使用类似schematron的东西来构建它。
答案 2 :(得分:0)
我已经很长时间没有使用过XSD了,但我记得的其中一件事是你可以添加的功能。
这个页面应该给你一些提示,它的演示文稿有点难看,但应该给你一个开始。
http://msdn.microsoft.com/en-us/magazine/cc302079.aspx
此链接也非常好。
http://our.umbraco.org/wiki/reference/xslt/extend-your-xslt-with-custom-functions
答案 3 :(得分:0)
将XSD 1.1与断言一起使用。 XSD 1.1目前在Saxon和Xerces中实施。