2013-10-23 2 views
1

XML에 특정 특성 값이있는 요소의 기존을 적용하려면 어떻게해야합니까? 예를 들어Xml 스키마, 특정 요소 값이있는 요소가 하나만 존재하는지 확인하는 방법

는 :

<events> 
    <event type="system" desc="this is a system event"/> 
    <event type="bla1" desc="this is bla1 event"/> 
    <event type="bla2" desc="this is bla2 event"/> 
</events> 

나는 type 속성 = '시스템'(한 번) 존재로 확인 이벤트 요소를 만들 규칙이 필요합니다. 다른 모든 이벤트 요소는 선택 사항입니다.

답변

3

XML 스키마 1.0을 사용하는 경우 직접 제약 조건을 표현할 수 없습니다. 당신은 Schematron이나 XSLT를 통해 XML Schema 1.0 밖에서 직접 할 수있다.

당신이 XML 스키마 1.1를 사용하는 경우, 당신이 할 수 specify co-occurrence constraintsxs:assert를 통해 : 귀하의 답변에 대한

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      version="1.0"> 
    <xs:element name="events"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="event" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="type" type="xs:string"/> 
      <xs:attribute name="desc" type="xs:string"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:assert test="count(event[@type = 'system']) = 1"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+1

감사합니다. 불행히도 v1.1 스키마를 사용할 수는 없지만 Microsoft는 W3C 권장 사항을 지원하는 데있어 항상 수년 뒤처입니다. MSXML을 사용해야합니다. – pexxxy

관련 문제