이 작업을 수행하는 가장 간단한 방법은 다른 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 구조를 변경하는 것이 좋습니다.