2016-05-10 12 views
1

cell @タイプがfilled,numbered,specialNumbered、またはspecialUnnumberedの場合、characterエレメントを繰り返し可能にします。 cell @タイプがmultiCharacterNumberedまたはmultiCharacterUnnumberedの場合、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は(1.0 XSDない)あなたの複雑な制約を表現することができます。

<?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 "ではありませんでしたが、動作しませんでした。 '@number = 0'もうまくいきませんでした。 – Misenus

関連する問題