2013-08-25 4 views
1

스키마를 정의 할 때 <xs:choice>을 사용하여 보았던 모든 예제에서 요소는 항상 단순 요소이며 일부 외부 유형을 참조 할 수는 있지만 자체 하위 요소는 절대로 사용할 수 없습니다. 이것이 규칙인가, 대회인가? 예를 들어, 이렇게 할 수 있습니까? 하스켈에서XML 스키마 : 선택 요소에 복합 형식 사용?

data Shape = Circle Double Int Int 
      | Rectangle Int Int Int Int 

를 작성하는 약에 해당하는 것

<xs:element name="shape"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:element name="circle"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="radius" type="xs:decimal" /> 
      <xs:element name="x" type="xs:integer" /> 
      <xs:element name="y" type="xs:integer" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="rectangle"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="length" type="xs:integer" /> 
      <xs:element name="width" type="xs:integer" /> 
      <xs:element name="x" type="xs:integer" /> 
      <xs:element name="y" type="xs:integer" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

.

답변

1

예, 가능합니다. 나는 단지 "눈으로"그것을 점검했지만, 나에게는 괜찮아 보인다.

나는 하스켈을 모르지만 그 효과는 같지 않다고 생각합니다. XSD에서 Shape를 원 또는 사각형을 자식 요소로 포함하는 요소로 정의했습니다. 당신이 (더 그럴듯한 디자인 소리) 형상에 대한 대체 가능한 것으로 원형과 사각형을 정의하려면, 다음을 수행해야합니다

  • abstract="true"
  • 와 모양을 정의는 substitutionGroup="Shape"로 사각형을 정의 substitutionGroup="Shape"
  • 으로 원을 정의