XSD:如何表达属性的约束?

时间:2013-09-28 23:59:46

标签: xml xsd

让我们说,我有以下元素

<Employment type ="Full">
</Employment>

这是我表达属性的方式

<xs:attribute name="Degree" type="xs:string" use="required" />

现在我想表达一个事实,即该属性只能有2个值,即完整部分

所以,我试过这个

   <xs:attribute name="Degree" type="xs:string" use="required" >
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:attribute>

我收到的错误是xs:attribute不能与SimpleType或ComplexType一起出现。

我如何表达这种约束?

感谢帮助。

1 个答案:

答案 0 :(得分:2)

这是一个XML Schema定义,演示了一个包含字符串内容和带有枚举值的属性的元素:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">

  <xs:element name="Employment">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="Degree" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="Full" />
                <xs:enumeration value="Part" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

这样的XML实例有效:

<Employment Degree="Part">string content</Employment

此XML实例无效(缺少属性):

<Employment>string content</Employment

此XML实例无效(非法属性值):

<Employment Degree="asdf">string content</Employment