2010-04-14 3 views
4

의 존재에 하나 개의 속성의 존재를 결합하는 방법 나는 다음 XML 라인이 "전화"가 존재하는 경우XML 스키마 - 다른 속성

<customer id="3" phone="123456" city="" /> <!--OK--> 
<customer id="4" />       <!--OK--> 
<customer id="3" phone="123456" />   <!--ERROR--> 
<customer id="3" city="" />     <!--ERROR--> 

"전화"와 "도시"속성은 선택 사항이지만를, 또한 "도시"가 있어야하며 그 반대도 마찬가지입니다. XML 스키마에 이러한 제한을 삽입 할 수 있습니까?

감사합니다.

답변

2

XML에서 종속성 개념 ("바인딩"이라고 함)은 중첩을 통해 관리됩니다. 따라서 두 필드가 서로 종속되도록하려면 중첩 된 선택적 요소의 필수 속성으로 정의해야합니다. 스키마의 구조를 완벽하게 제어 할 수있는 경우

그래서, 당신이 뭔가를 할 수 있습니다 :

<customer id="1"> 
    <contact city="Gotham" phone="batman's red phone" /> 
</customer> 
contact 요소가 customer 내에서 선택 사항입니다

하지만 cityphonecontact 내에서 필수입니다.

<xs:element name="customer"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="contact" minOccurs="0"> 
      <xs:complexType> 
      <xs:attribute name="city" type="xs:string" use="required"/> 
      <xs:attribute name="phone" type="xs:string" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:string"/> 
    </xs:complexType> 
    </xs:element> 
+0

아마 사용 = "필요한" "ID"속성에 필요 - 그리고 XS :

그 구조에 대한 해당 XSD는 다음과 같이 될 것이다 오랫동안 유형에 대한 좋은 생각해야한다. –

+1

스키마의 구조를 완전히 제어 할 수 없다면 어떻게 될까요? 원래 게시물의 구조를 사용하여이 작업을 수행 할 수 있습니까? –