2012-05-21 2 views
0

를 사용하여 순서대로 하나의 속성 사용을 제한 시퀀스.다음 인스턴스 문서를 가정하면 XML 스키마

건배

참고 : 나는 내가 누구 제목을 수정하거나 관련 태그를 배치 할 수 있습니다 더 나은 아이디어를 가지고 희망을 어떻게 표현이 문제를에, 아주 확실하지 않다. 적어도 부분적으로 가능 <xsd:unique/>를 사용

답변

1

XSD 1.0을 사용하면 RichardTowers가 보여 주듯이 "현재"특성을 가진 요소가 하나만 존재할 수 있다고 생각할 수 있지만 하나만있는 여러 개의 "현재"특성을 허용 할 수는 없습니다.

당신은 주장을 사용하여 XSD 1.1 물론이 작업을 수행 할 수 있습니다

<xs:assert test="count(address[@current='true']) eq 1"/> 

(또는 count(...) le 1를 그 의도 된 것 인 경우).

+0

흥미롭지 만 빠른 검색은 ''이 아직 표준에 속하지 않는다고 알려줍니다. 그것이 사실이라면 위의 내용이 유효합니까? 솔직하게 말해서, 저는 여전히 스키마를 사용하여 모델 정보에 대한 경험이 부족합니다. 편집 : 추가 검색 내 질문에 대답 :) 감사. – bluearth

+0

내 대답은 실제로 모든 'current' 속성이 고유 한 값을 갖는다 고 주장합니다. current가'xs : boolean'이라고 가정하면 현재의 속성을 최대 2 개까지 허용합니다 : 하나는 true이고 다른 하나는 false입니다. XSD 1.1을 사용하는 경우 대답은 훨씬 더 나은 해결책입니다. – RichardTowers

+0

@RichardTowers 나는 테이블에서 당신의 대안을 내놓지 않을 것이다. 아직 선택자/xpath/xquery에 익숙하지 않기 때문에 여전히 더 간단하다. 만약 내가 upvote 대답을 할 수있는 두 가지 (만약 당신이 거기에 넣어 전체 스키마에 대한 우아함을 위해 최소한). – bluearth

0

:

<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 여러 것이다.