2010-01-14 3 views
4

내가 XML은 다음과 같은 방법으로 표현 될 수있는 XML 스키마 작성하려고 해요 :가장 효율적인 스키마

애완 동물 모두 고양이와 개 요소를이 (가) 포함 할 수 있습니다 :

<root> 
    <pets> 
    <cat /> 
    <dog /> 
    </pets> 
</root> 

애완 동물

<root> 
    <pets> 
    <cat /> 
    </pets> 
</root> 
----------- 
<root> 
    <pets> 
    <dog /> 
    </pets> 
</root> 

경우 단지 고양이 또는 개 요소를 포함 할 수 애완 동물 더 하위 요소가 없습니다, 그것은 존재해야한다 : 이것은 항상 듯했다

<xs:element name="pets"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:sequence> 
     <xs:element name="cat"/> 
     <xs:element name="dog" minOccurs="0"/> 
     </xs:sequence> 
     <xs:sequence> 
     <xs:element name="dog"/> 
     </xs:sequence> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

:

<root> 
</root> 

나는 이러한 조건을 만족시키기 위해 마련했습니다 가장 좋은 스키마이있다 나 같은 단순한 개념을 위해 너무 많은 스키마를 좋아한다. 이 스키마를 작성하는 간단한 방법이 있습니까? 감사!

답변

2

질문에 제공 한 해결책이 가장 일반적인 해결책입니다. 다른 대답의 그룹 아이디어를 제외하고는 더 좋은 방법은 없습니다. 개인적으로 나는 귀하의 솔루션을 선호합니다.

큰 표준 스키마 (예 : FpML)는 패턴을 사용합니다.

3

xs : group 요소를 사용하는 것이 이상적인 상황이라고 생각합니다. 요소 주변을 감싸고 선택 요소로 만들면 (필수 요소의 내용을 작성하는 동안) 원하는 효과를 얻을 수 있습니다. 대신 애완 동물 요소를 사용하는

<xs:group name="pets_group"> 
    <xs:element name="pets" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:sequence> 
      <xs:element name="cat"/> 
      <xs:element name="dog" minOccurs="0"/> 
     </xs:sequence> 
     <xs:sequence> 
      <xs:element name="dog"/> 
      <xs:element name="cat" minOccurs="0"/> 
     </xs:sequence> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:group> 

는 다음, pets_group 그룹 사용을 보장 옵션 고양이 다음

<xs:element name="root"> 
    <xs:complexType> 
    <xs:group ref="pets_group"/> 
    </xs:complexType> 
</xs:element> 

옵션 개 다음에 고양이 사이에서 선택을하는 데, 그리고 개를 애완 동물 태그의 내용은 입니다. 애완 동물 꼬리표의 부재는 어떤 애완 동물도 지정하지 못하게하는 것입니다.

또는 그룹 참조를 "인라인"하여 함께 정의 할 수 있습니다. 이것은 애완 동물 태그가 한 곳에서만 사용되는 경우 아마 원하는 행동 일 것입니다.

관련 문제