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 "predefined" OR "also-predefined <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 に .xml がある場合、これはもちろん失敗します<refer-to-def n="predefined"/>

<def>n属性を定義することでできる2番目の制限

  <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 値の動的リストは含まれません。

2 つを組み合わせるにはどうすればよいので、n は動的リストまたは事前定義されたセットのいずれかになり、私の example.xml は検証されますか?

4

1 に答える 1

1

XSD 1.0 では実行できません。

XSD 1.1 では、アサーションで何でもできます。

于 2016-10-07T14:54:29.573 に答える