2016-10-07 9 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"/>를 추가 한 경우 더 이상 확인 없습니다.

내가

를 사용하여 첫 번째 제한 할 수 있습니다 .XML이 <refer-to-def n="predefined"/>이있는 경우

<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> 
하지만 물론이 실패합니다.

내가 함께 <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 값의 동적 목록을 포함하지 않습니다.

둘을 어떻게 조합합니까? 동적 목록 또는 미리 정의 된 집합에서 n을 사용할 수 있으며 내 example.xml이 유효성을 검사합니까?

답변

1

XSD 1.0에서는 수행 할 수 없습니다.

XSD 1.1에서는 어설 션을 사용하여 모든 작업을 수행 할 수 있습니다.

+0

그리고 그건 xmllint가 지원하지 않습니다. 편집 : http://stackoverflow.com/questions/32652554/does-libxml2-supports-xsd-1-1 그것이 아니라고 :( – unhammer