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

Wikiから:

XSDには、1つの属性の値または存在が他の属性の値または存在に依存していることを示す機能はありません(いわゆる共起制約)。

そしてそれはまさにあなたが望むものです:母親の年齢の値に基づいて子供の年齢の値を制限します。そのため、残念ながらXMLSchema1.0を使用することはできません。

ただし、次のような方法でXMLスキーマ1.1を使用することは可能です(非常に大まかな例であり、概念を示すためだけです)。

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

私の知る限り、通常のxsd制限ではこれを行うことはできません。これを組み込むには、schematronのようなものを使用する必要があります。

于 2012-06-29T14:16:37.290 に答える
0

私はかなり長い間 XSD を使用していませんが、私が使用したことを覚えているものの 1 つは、追加できる関数でした。

このページはいくつかのヒントを提供するはずです。プレゼンテーションは少し醜いですが、手始めに役立つはずです。

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 に答える
0

アサーションで XSD 1.1 を使用します。XSD 1.1 は現在、Saxon と Xerces に実装されています。

于 2012-06-29T15:26:01.067 に答える