2012-07-09 69 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强制一些elementes总是出现,其他只是可选的。

+0

是的,但顺序的项目应该顺序出现。 – Pooya 2012-07-09 17:53:24

+1

序列是一个排序列表,但我需要一个未排序的list.so,我使用的序列与选择 – Pooya 2012-07-09 17:54:21

+1

在这种情况下,您可以用xsd:all元素替换xsd:sequence元素。 xsd:all指定子元素可以以任何顺序出现,并且每个子元素可以出现零次或一次。 – user1187008 2012-07-10 07:46:41