我有以下架构。
<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"/>
现在我要创建一个元素&#34; pair&#34;包含两个&#34; var&#34;。这些变量具有属性&#34; level&#34;设为0。
<xs:element name="pair">
<xs:complexType>
<xs:sequence>
<!-- --!>
</xs:sequence>
</xs:complexType>
</xs:element>
我做过几次尝试但没有成功。有帮助吗?
答案 0 :(得分:0)
首先,我不会使用全局属性声明,因为 将名称空间添加到架构时会导致问题。
如果要声明&#34; var&#34;的复杂类型?元素全球化 (因为它在多个地方使用),那么您可以限制类型 在本地设置&#34;级别&#34;属性为固定值。 请注意,属性是在类型限制中继承的,所以您 只需要列出要限制的属性:
<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>