2016-05-10 71 views
1

如果cell @type爲fillednumberedspecialNumberedspecialUnnumbered,我希望character元素是可重複的。如果cell @type爲multiCharacterNumberedmultiCharacterUnnumbered,我希望character元素不可重複。基於XSD中的屬性枚舉的控件元素基數?

如果cell類型是blank,我想完全禁止character元素。

這是否需要XSD 1.1?我如何形成條件或測試?

<xs:element name="cell" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="character" type="xs:string" minOccurs="0"/> 
     </xs:sequence> 
     <xs:attribute name="type" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:enumeration value="filled"/> 
         <xs:enumeration value="blank"/> 
         <xs:enumeration value="numbered"/> 
         <xs:enumeration value="specialNumbered"/> 
         <xs:enumeration value="specialUnnumbered"/> 
         <xs:enumeration value="multiCharacterNumbered"/> 
         <xs:enumeration value="multiCharacterUnnumbered"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
    </xs:element> 

回答

1

是,XSD 1.1(不XSD 1.0)可以表達你的複雜的約束條件:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
      vc:minVersion="1.1"> 
    <xs:element name="cell"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="character" type="xs:string" 
        minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="type" use="required"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:enumeration value="filled"/> 
      <xs:enumeration value="blank"/> 
      <xs:enumeration value="numbered"/> 
      <xs:enumeration value="specialNumbered"/> 
      <xs:enumeration value="specialUnnumbered"/> 
      <xs:enumeration value="multiCharacterNumbered"/> 
      <xs:enumeration value="multiCharacterUnnumbered"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:attribute> 
     <xs:assert test="( (@type = 'blank' and count(character) = 0) 
         or (@type = ('multiCharacterNumbered', 'numbered', 
            'specialNumbered', 'specialUnnumbered') 
          and count(character) = (0,1)) 
         or (@type = ('filled', 'multiCharacterUnnumbered')))"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

這是一件好事。當@type'是'black'時,我怎麼也禁止'@ number'?我嘗試使用'test =「@ type ='black'而不是@ number」'但它不起作用。 '@數字= 0'也沒有工作。 – Misenus