1

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

4 回答 4

1

来自维基

XSD 没有提供任何工具来说明一个属性的值或存在取决于其他属性的值或存在(所谓的共现约束)。

这正是您想要的:根据母亲年龄的值来限制孩子的年龄值。因此,不幸的是,不可能使用 XML Schema 1.0。

但是,可以通过类似这样的方式使用 XML Schema 1.1(非常粗略的示例,只是为了展示这个概念):

<xs:assert test="@age < ../../mother[@age]"/>
于 2012-06-29T14:23:30.537 回答
0

使用带有断言的 XSD 1.1。XSD 1.1 目前在 Saxon 和 Xerces 中实现。

于 2012-06-29T15:26:01.067 回答
0

据我所知,你不能用常规的 xsd 限制来做到这一点。你必须使用像 schematron 这样的东西来构建它。

于 2012-06-29T14:16:37.290 回答
0

我已经有一段时间没有使用 XSD,但我记得使用过的其中一件事是您可以添加的功能。

这个页面应该给你一些提示,它的介绍有点难看,但应该给你一个开始。

http://msdn.microsoft.com/en-us/magazine/cc302079.aspx

这个链接也很好。

http://our.umbraco.org/wiki/reference/xslt/extend-your-xslt-with-custom-functions

于 2012-06-29T14:41:39.837 回答