2016-06-03 6 views
1

요소에 속성 값 중 하나와 관련된 특정 하위 항목을 허용하는 XSD를 정의하고 싶습니다. 이 속성 값은 복수 xsd:enumeration을 사용하여 정의됩니다. 여기XSD는 속성 값에 따라 태그 내용을 제한합니다.

내 XML이 될 수있는 방법입니다 :

<root> 
    <Conversion type="Phys" /> 
    <Conversion type="Fact"> 
     <Factor>13</Factor> 
     <Offset>37</Offset> 
    </Conversion> 
    <Conversion type="List"> 
     <Item> 
      <Key>0</Key> 
      <Value>KEY_0</Value> 
     </Item> 
     <Item> 
      <Key>1</Key> 
      <Value>KEY_1</Value> 
     </Item> 
    </Conversion> 
</root> 

지금까지, 나는 단지이 3 개 속성과 어린이 (Factor/Offset 등 만이 3 개 시퀀스를 위해 Conversion 태그를 제한하는 데 성공했다; Item 목록을 ; 아무것도).

<xs:element name="Conversion"> 
    <xs:complexType> 
     <xs:choice> 
      <xs:sequence> 
       <xs:element name="Item" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Key" type="xs:decimal" /> 
          <xs:element name="Value" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:sequence> 
       <xs:element name="Factor" type="xs:double" /> 
       <xs:element name="Offset" type="xs:double" /> 
      </xs:sequence> 
      <xs:sequence /> 
     </xs:choice> 
     <xs:attribute name="Type"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="Fact" /> 
        <xs:enumeration value="List" /> 
        <xs:enumeration value="Phys" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 
</xs:element> 

내가 뭘하고 싶은 것은 혼합 속성과 내용을 금지 피하기 위해 내 속성의 값에 따라 자녀를 제한하는 것입니다 : 여기

내 XSD의 비트입니다.

답변

2

요청한 것을 정확히 수행하려면 XSD 1.1이 필요합니다. 속성 값에 따라 콘텐츠 모델을 만드십시오. 조건부 유형 지정 또는 어설 션을 사용할 수 있습니다.

<root> 
    <Phys/> 
    <Fact> 
     <Factor>13</Factor> 
     <Offset>37</Offset> 
    </Fact> 
    <List> 
     <Item> 
      <Key>0</Key> 
      <Value>KEY_0</Value> 
     </Item> 
     <Item> 
      <Key>1</Key> 
      <Value>KEY_1</Value> 
     </Item> 
    </List> 
</root> 

유형의 정보는 일반적으로 더 나은 통해보다 특정 요소 이름을 통해 전달된다 : 당신이 당신의 XML 디자인을 조정할 수있는 경우

그러나 기본 XSD 1.0 (뿐만 아니라 XSD 1.1)를 사용할 수 있습니다 유형 속성으로 일반 요소 이름을 보강합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 무슨 뜻인지 알 겠어. 사실,'Conversion' 태그는 다른 형제와 함께'Variable' 타입의 일부입니다. 따라서 변수의 "유형 변환"을 설명합니다. XSD 1.1을 사용해 보겠습니다. – PlikPlok