2016-12-01 70 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