2016-10-07 5 views
1

私はexample.xmlxsd - 属性をキーまたは列挙型に制限できますか?

<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"/> 

S。T.を許可します//refer-to-def/@nの唯一の可能な値は//def/@n OR「事前に定義された」OR「も、事前に定義されたことにより、与えられたものであり、特に、私は<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>年代 n属性を定義することによって行うことができます第二の制限
<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はダイナミックリストまたは事前定義されたセットのいずれかになり、my example.xmlは検証されますか?

答えて

1

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

XSD 1.1では、アサーションを使用して何でもできます。

+0

これはxmllintでサポートされていないと思いますか?編集:http://stackoverflow.com/questions/32652554/does-libxml2-supports-xsd-1-1それはないと言う:( – unhammer

関連する問題