2010-02-15 3 views
5

는 다음의 예를 감안할 때 :XSD : 파생 된 복합 형식의 열거 형 값을 제한하는 방법?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="Book" abstract="true"> 
     <xs:sequence> 
      <xs:element name="titel" type="xs:string"> 
      </xs:element> 
      <xs:element name="bookCode" type="BookEnum"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="Lyric"> 
     <xs:complexContent> 
      <xs:extension base="Book"> 
       <xs:sequence> 
        <xs:element name="author" type="xs:string"> 
        </xs:element> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:simpleType name="BookEnum"> 
     <xs:restriction base="xs:int"> 
      <xs:enumeration value="Paperback"/> 
      <xs:enumeration value="Hardcover"/> 
      <xs:enumeration value="Liporello"/> 
      <xs:enumeration value="None"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

가사는 책에서 유래. complexType "Lyric"에 대한 BookEnum의 가능한 값을 "단행본"으로 제한하고 싶습니다.

"없음", "Liporello"및 "하드 커버"는 더 이상 "가사"의 유효한 값이 아니어야합니다. 이것이 xsd에서 할 수 있습니까?

답변

8

아니요, 안타깝게도 그렇게 할 수 없습니다. 이와 같은 열거 형을 제한 할 수있는 방법이 없으며 동시에 복합 유형을 확장하고 제한하는 데 어려움이 있습니다. 좋은 기사가 있습니까? 은 열거 형이 here과 같습니다.

어쩌면 상향식 작업을 고려해 볼 수도 있습니다. 거의 아무것도 사용하지 않는 기본 북 타입을 정의하십시오. 기본 유형과 더 많은 값의 합집합 인 LyricType을 정의하십시오. 하위 유형에서 bookCode를 전달하십시오. 이상적이지는 않지만 XSD가 객체 지향 언어와 항상 일치하지는 않습니다.

+0

감사합니다. 너무 좋지 않으면 "제한 사항"이 제대로 작동하지 않습니다. 어쨌든, 당신의 대답에 감사드립니다. – tobsen

+1

xpath를 사용하여 XSD 1.1에서이 작업을 수행 할 수 있다고 생각합니다. http://stackoverflow.com/questions/6472264/can-an-xsdenumeration-tag-be-made-mandatory-required – RMorrisey

1

은 궁극적으로 .. 당신은 확실히 불가능하다 어느 .. 다른 (부모 또는 형제 자매 또는 등)의 노드 사용하여 값을 검증하기 위해 노력하고있다 ..는 IBM 사이트에 링크

관련 문제