2012-07-09 2 views
0

내 XML 태그의 제한 태그에서 중복 태그를 금지하는 방법은 무엇입니까? 내 XML 파일의 예를 들어 나는 두 로케일 태그를 가지고 있지만, 그것은 단지 하나 개의 태그해야태그를 고유하게 만드는 방법은 무엇입니까?

이 내 XML 파일입니다

<app:string name="firstName"> 
     <app:restriction> 
      <app:regex>^\w*$</app:regex> 
      <app:type/> 
      <app:locale/> 
      <app:locale/> 
     </app:restriction> 
    </app:string> 

이 문자열 태그 내 XSD입니다 :

<xs:element name="string"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension base="main:BaseType"> 
       <xs:sequence> 
        <xs:element name="restriction" type="main:StringRestriction" minOccurs="0" 
           maxOccurs="1"/> 
       </xs:sequence> 
       <xs:attribute name="lang" type="main:LocaleTypes"/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="BaseType"> 
    <xs:attribute name="name" type="main:nameType" use="required"/> 
    <xs:attribute name="readonly" type="xs:boolean" use="optional" default="true"/> 
</xs:complexType> 

<xs:complexType name="StringRestriction"> 
    <xs:complexContent> 
     <xs:extension base="main:RestrictionBase"> 
      <xs:sequence> 
       <xs:choice maxOccurs="1"> 
        <xs:element type="xs:string" name="locale"/> 
        <xs:element type="xs:string" name="type"/> 
        <xs:element type="xs:string" name="regex"/> 
        <xs:element type="xs:string" name="maxLen"/> 
        <xs:element type="xs:string" name="minLen"/> 
       </xs:choice> 
      </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

답변

1

올바르게 이해한다면 restriction 태그에 반복하지 않고 태그가 포함되도록하는 스키마가 필요합니다.

이 대체하는 경우

이와

<xs:sequence> 
    <xs:choice maxOccurs="1"> 
     <xs:element type="xs:string" name="locale"/> 
     <xs:element type="xs:string" name="type"/> 
     <xs:element type="xs:string" name="regex"/> 
     <xs:element type="xs:string" name="maxLen"/> 
     <xs:element type="xs:string" name="minLen"/> 
    </xs:choice> 
</xs:sequence> 

:

<xs:all minOccurs="0"> 
    <xs:element type="xs:string" name="locale"/> 
    <xs:element type="xs:string" name="type"/> 
    <xs:element type="xs:string" name="regex"/> 
    <xs:element type="xs:string" name="maxLen"/> 
    <xs:element type="xs:string" name="minLen"/> 
</xs:all> 

스키마는 restriction 태그 내부 locale 요소를 중복 허용하지 않습니다. 여기에서 요약을 볼 수 있습니다 : http://www.w3schools.com/schema/el_all.asp 이 외에도 minOccursmaxOccurs을 사용하면 일부 요소가 항상 나타나고 다른 요소는 선택 사항이되도록 할 수 있습니다.

+0

예, 순차적으로 항목이 순차적으로 나타나야합니다. – Pooya

+1

시퀀스는 정렬 된 목록이지만 선택되지 않은 list.so를 사용해야합니다. – Pooya

+1

시퀀스를 사용했습니다.이 경우 xsd : sequence 요소를 xsd : all 요소로 대체 ​​할 수 있습니다. xsd : all은 자식 요소가 임의의 순서로 나타날 수 있고 각 자식 요소가 0 번 또는 한 번 발생할 수 있음을 지정합니다. – user1187008

관련 문제