在xsd中验证孩子的年龄与父母年龄的关系

时间:2012-06-29 13:42:56

标签: xml xsd

我有一个像下面的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>

但如果我想验证孩子的年龄,这个年龄不应超过母亲的年龄?

4 个答案:

答案 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中实施。