在XSD中将元素值限制为XML模式基元类型

时间:2011-05-27 19:31:35

标签: xml xsd

我知道您可以通过执行以下操作来限制元素的值。

<xs:element name="DataType">
    <xs:simpleType>
        <xs:restriction base="???">
            <xs:enumeration value="integer" />
            <xs:enumeration value="string" />
            <xs:enumeration value="boolean" />
        </xs:restriction>
    </xs:simpleType>
<xs:element>

但是,如果我想将值限制为XML模式基元类型列表,例如xs:integer,xs:string,xs:boolean等,该怎么办?限制元素的@base属性应该是什么?

我想做点像......

的xs:整数

1 个答案:

答案 0 :(得分:2)

  

我想将值限制为a   XML模式基元类型列表   例如xs:integer,xs:string,   xs:boolean等。

您的意思是您希望值是某个类型的列表,还是希望拥有类型列表并允许该值可以具有该列表中提到的任何类型?

对于第一个,请使用<xs:list>作为第二个,使用<xs:union>

如何使用<xs:union>

只需在memberTypes属性中列出相应的(简单)类型即可声明联合。您还可以使用在该模式文件中定义的命名简单类型。

<xs:element name="DataType">
    <xs:simpleType>
        <xs:union memberTypes="xs:integer xs:boolean"/>
    </xs:simpleType>
<xs:element>

这允许以下类型的代码

<DataType>42</DataType>
<DataType>true</DataType>

如何使用<xs:list>

列表的声明类似于联合,但是你不能直接在同一个列表中组合多个类型(尽管可以使用union派生的类型作为列表类型的基类型)。

<xs:element name="DataType">
    <xs:simpleType>
        <xs:list itemType="xs:integer"/>
    </xs:simpleType>
<xs:element>

这允许以下类型的代码

<DataType>42</DataType>
<DataType>2 18 10794</DataType>

列表分隔符是固定的:项必须用空格字符分隔。

编辑以解决以下评论

很抱歉误解了你的问题。没有列出类型名称的内置数据类型,因此您需要列出枚举中的所有名称。

如果使用枚举,则实际上不需要使用任何特殊(更受限制)的基本类型,因为只列出了有效值。简单的旧xs:string足以支持base属性。准确地说,所有内置类型名称都是限定名称(如果未计算名称空间前缀,则为非殖民名称),因此最合适的基本类型应为xs:QNamexs:NCName。您可以使用这些类型,如果您想跳过枚举,并且只想确保内容 在语法上可以是类型的有效名称。

可以从此图像中看到内置架构数据类型(及其派生层次结构)http://www.w3.org/TR/xmlschema-2/#built-in-datatypes