2016-12-01 5 views
1

私は以下のスキーマを持っています。XMLスキーマは特定のタイプの属性の値を設定します

<xs:attribute name="level"> 
<xs:simpleType> 
    <xs:restriction base="xs:integer"> 
     <xs:pattern value="[0-3]"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:complexType name="var">   
    <xs:attribute ref="level" use="required"/> 
    <xs:attribute ref="name" use="required"/> 
</xs:complexType> 

<xs:attribute name="name" type="xs:string"/> 

今、私は2つの "VAR" を含む要素 "ペア" を作成します。これらの変数の属性「レベル」は0に設定されています。

<xs:element name="pair"> 
    <xs:complexType> 
    <xs:sequence>  
     <!-- --!> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

私はいくつか試行しましたが、成功しませんでした。どんな助け?

+0

スキーマに記述したいXMLを表示すると、より明確になる場合があります。スキーマフラグメントは意味をなさないので、達成しようとしていることの説明は非常に混乱します。 –

答えて

0

まず、グローバル属性宣言は使用しません。 は、スキーマに名前空間を追加するときに問題が発生するためです。あなたは(それが複数の場所で使用されているため) グローバル「VAR」要素の複合型を宣言する場合は、ローカルでタイプ を制限し、固定値に「レベル」属性を設定することができます

。よりシンプルな代替案として

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:simpleType name="LevelType"> 
    <xs:restriction base="xs:integer"> 
     <xs:pattern value="[0-3]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:complexType name="VarType"> 
    <xs:attribute name="level" type="LevelType" use="required"/> 
    <xs:attribute name="name" type="xs:string" use="required"/> 
    </xs:complexType> 

    <xs:element name="pair"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="var" minOccurs="2" maxOccurs="2"> 
      <xs:complexType> 
      <xs:complexContent> 
       <xs:restriction base="VarType"> 
       <xs:attribute name="level" type="LevelType" use="required" fixed="0"/> 
       </xs:restriction> 
      </xs:complexContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

必要な場所のように、あなただけのローカル属性 を宣言することができ、:あなた だけあなたが制限したい属性を表示する必要があるので、属性 注、型の制限に継承されていますso:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:simpleType name="LevelType"> 
    <xs:restriction base="xs:integer"> 
     <xs:pattern value="[0-3]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="pair"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="var" minOccurs="2" maxOccurs="2"> 
      <xs:complexType> 
      <xs:attribute name="level" type="LevelType" use="required" fixed="0"/> 
      <xs:attribute name="name" type="xs:string" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 
+0

私は、complexType "var"とcomplexType "var_i"をi = 0、.. 3として定義して解決しました。ありがとうございました ! – Discipulos

関連する問題