如何使用*简单内容*的XSD复杂类型,其具有枚举值和扩展名的限制

时间:2015-04-21 08:52:54

标签: xml enums xsd

那么我如何使用带有枚举值限制的简单内容的XSD复杂类型?

(!)没有额外的简单类型:

所以...有点像这样: - 只有工作;) (请注意,这是一个简化的示例。请参阅我想要实现的xml)

        <element name="question">
            <complexType>
                <simpleContent>
                            <enumeration value="no"></enumeration>
                            <enumeration value="maybe"></enumeration>
                            <enumeration value="yes"></enumeration>
                            <xs:attribute name="name" type="xs:string" />
                    </extension>
                </simpleContent>
            </complexType>
        </element>

-

最后这是我所拥有的xml的模拟:

<question name="foo">
    yes
</question>

参考:http://www.w3schools.com/schema/el_simpleContent.asp

1 个答案:

答案 0 :(得分:3)

我认为以下是您的想法。创建一个限制允许值的简单类型,以xs:string为基础。然后,在complexType定义中扩展这个用户定义的新简单类型。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="question" type="questionType"/>

    <xs:complexType name="questionType" mixed="true">
        <xs:simpleContent>
            <xs:extension base="enumStringType">
                <xs:attribute name="name" type="xs:string">
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:simpleType name="enumStringType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="no"></xs:enumeration>
            <xs:enumeration value="maybe"></xs:enumeration>
            <xs:enumeration value="yes"></xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

注意:这只会验证以下文档:

<question name="foo">yes</question>

但不是question的文本内容包含空格的那个。要忽略任何前导或尾随空格或空格字符序列,您必须将whiteSpace方面添加到限制中:

<xs:whiteSpace value="collapse"/>