2016-12-01 71 views
1

我有以下Schema。XML Schema設置特定類型的屬性值

<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"/> 

現在我想創建一個元素 「對」 包含兩個 「變種」。這些變量具有屬性「級別」設置爲0.

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

我已經做了幾次嘗試但沒有成功。任何幫助?

+0

如果您向我們展示您想要在模式中描述的XML,可能會更清楚。你的模式片段是沒有意義的,你對你想要實現的內容的描述很混亂。 –

回答

0

首先,我不會使用全局屬性聲明,因爲 當您向架構添加命名空間時會導致問題。

如果您想要全局聲明「var」元素的複雜類型 (因爲它在多個位置使用),則可以在本地限制 類型,並將「level」屬性設置爲固定值。 注意這些屬性繼承了類型限制,所以你 只需要列出你要限制的屬性:

<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> 

作爲一個更簡單的選擇,你可以聲明本地屬性 在需要的地方,像所以:

<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

我通過爲i = 0定義complexType「var」和complexType「var_i」來解決這個問題。謝謝 ! – Discipulos