1

我想允许 example.xml

<defs>
 <def n="a"/>
 <def n="b"/>
</defs>

<refer-to-def n="a"/>
<refer-to-def n="b"/>
<refer-to-def n="predefined"/>
<refer-to-def n="also-predefined"/>

st 唯一可能的值//refer-to-def/@n//def/@nOR“预定义”或“也预定义”给出的值。特别是,如果我添加<refer-to-def n="never-defined"/>它应该不再验证。

我可以通过使用来做第一个限制

<xs:keyref name="defRef" refer="def">
  <xs:selector xpath=".//refer-to-def" />
  <xs:field xpath="@n" />
</xs:keyref>
<xs:key name="def">
  <xs:selector xpath="./defs/def" />
  <xs:field xpath="@n" />
</xs:key>

但是如果 .xml 有<refer-to-def n="predefined"/>.

我可以通过定义<def>'sn属性来做的第二个限制

  <xs:attribute name="n" use="required">
    <xs:simpleType>
      <xs:union>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="predefined"/>
            <xs:enumeration value="also-predefined"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:union>
    </xs:simpleType>
    </xs:attribute>

但这当然不包括 defs n 值的动态列表。

我如何将两者结合起来,所以 n 可以来自动态列表或预定义集合,并且我的 example.xml 验证?

4

1 回答 1

1

不能在 XSD 1.0 中完成。

在 XSD 1.1 中,您可以对断言做任何事情。

于 2016-10-07T14:54:29.573 回答