2012-05-25 6 views
1

난 그냥 하나에 해당하는 속성을 가지고 있으며, 모든 중 하나가 XML을 사용하여, 사실이있을 경우 확인해야하는 경우 내 질문입니다 :XSD 검증 XML이는 true 속성이

<addresses> 
    <address> 
     <primary>true</primary> 
     <street>One str.</street> 
     <number>111</number> 
    </address> 
    <address> 
     <primary>false</primary> 
     <street>Two str.</street> 
     <number>222</number> 
    </address> 
</addresses> 

어떻게 할 ??

ps : 영어에 대한 죄송합니다.

답변

0

이 작업을 수행하는 가장 간단한 방법은 다른 XML 구조를 사용하는 것입니다. 하나의 기본 주소와 0 개 이상의 기본 주소가 필요합니다. 모든 XML 유효성 검사 메소드 (DTD, XSD, ...)를 사용하면 요구 사항이 다른 것들에 대해 다른 이름을 사용하면 쉽게 말할 수 있습니다. XML 구조가

<addresses> 
    <primary-address> 
    <street>One str.</street> 
    <number>111</number> 
    </primary-address> 
    <address> 
    <street>Two str.</street> 
    <number>222</number> 
    </address> 
</addresses> 

이되면 그것은 정확히 하나 개의 기본 주소를 포함하는 addresses을 제한 XSD 스키마를 쓰기 쉽게, 그리고 명시 적으로 차 주소와 다른 주소가 동일한 구조를 가지고 있다는 사실 캡처 :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"> 

    <xsd:complexType name="address"> 
    <xsd:sequence> 
     <xsd:element ref="street"/> 
     <xsd:element ref="number"/> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:element name="primary-address" type="address"/> 
    <xsd:element name="address" type="address"/> 
    <xsd:element name="addresses"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="primary-address"/> 
     <xsd:element ref="address" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

    <xsd:complexType name="mixed" mixed="true"> 
    <xsd:sequence/> 
    </xsd:complexType> 

    <xsd:element name="street" type="mixed"/> 
    <xsd:element name="number" type="mixed"/> 
</xsd:schema> 

XML 구조를 변경할 수 없거나 원하지 않는 경우 XSD 1.1로 전환하고 어설 션을 사용하여 제약 조건을 적용하거나 Schematron을 사용하여이를 수행 할 수 있습니다.

또는, (2) 속성이 address 요소의 선택 사항이며, 것을, (1) primary 속성에 대한 유일한 법적 값이 true이라고 말할 수 있습니다 (이것은 약간 더러운 트릭입니다) (3) 그 primary 속성이 나타날 때마다 고유 한 값이 있어야합니다.

하지만 XML 구조를 변경하는 것이 좋습니다.