를 사용하여 순서대로 하나의 속성 사용을 제한 시퀀스.다음 인스턴스 문서를 가정하면 XML 스키마
건배
참고 : 나는 내가 누구 제목을 수정하거나 관련 태그를 배치 할 수 있습니다 더 나은 아이디어를 가지고 희망을 어떻게 표현이 문제를에, 아주 확실하지 않다. 적어도 부분적으로 가능 <xsd:unique/>
를 사용
를 사용하여 순서대로 하나의 속성 사용을 제한 시퀀스.다음 인스턴스 문서를 가정하면 XML 스키마
건배
참고 : 나는 내가 누구 제목을 수정하거나 관련 태그를 배치 할 수 있습니다 더 나은 아이디어를 가지고 희망을 어떻게 표현이 문제를에, 아주 확실하지 않다. 적어도 부분적으로 가능 <xsd:unique/>
를 사용
XSD 1.0을 사용하면 RichardTowers가 보여 주듯이 "현재"특성을 가진 요소가 하나만 존재할 수 있다고 생각할 수 있지만 하나만있는 여러 개의 "현재"특성을 허용 할 수는 없습니다.
당신은 주장을 사용하여 XSD 1.1 물론이 작업을 수행 할 수 있습니다
<xs:assert test="count(address[@current='true']) eq 1"/>
(또는 count(...) le 1
를 그 의도 된 것 인 경우).
:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="name"/>
<xs:element name="addresses">
<xs:complexType>
<xs:sequence>
<xs:element name="address" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="current" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- HERE -->
<xs:unique name="onlyOneCurrentAddress">
<xs:selector xpath="address"/>
<xs:field xpath="@current"/>
</xs:unique>
<!-- /HERE -->
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
당신이 그것을 조금 적응 할 수 있도록이 여러 current="true"
속성을 방지하지만, current="false"
unfortuantely 여러 것이다.
흥미롭지 만 빠른 검색은 ''이 아직 표준에 속하지 않는다고 알려줍니다. 그것이 사실이라면 위의 내용이 유효합니까? 솔직하게 말해서, 저는 여전히 스키마를 사용하여 모델 정보에 대한 경험이 부족합니다. 편집 : 추가 검색 내 질문에 대답 :) 감사. –
bluearth
내 대답은 실제로 모든 'current' 속성이 고유 한 값을 갖는다 고 주장합니다. current가'xs : boolean'이라고 가정하면 현재의 속성을 최대 2 개까지 허용합니다 : 하나는 true이고 다른 하나는 false입니다. XSD 1.1을 사용하는 경우 대답은 훨씬 더 나은 해결책입니다. – RichardTowers
@RichardTowers 나는 테이블에서 당신의 대안을 내놓지 않을 것이다. 아직 선택자/xpath/xquery에 익숙하지 않기 때문에 여전히 더 간단하다. 만약 내가 upvote 대답을 할 수있는 두 가지 (만약 당신이 거기에 넣어 전체 스키마에 대한 우아함을 위해 최소한). – bluearth