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

问题描述

| 我知道您可以通过执行以下操作来限制元素的值。
<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等)的列表,怎么办?strict元素的@base属性应该是什么? 我想做类似... xs:整数     

解决方法

           我想将值限制为   XML模式原语类型列表   例如xs:integer,xs:string,   xs:boolean等 您是要让值成为某种类型的列表,还是要有类型的列表并允许该值具有该列表中提到的任何类型? 对于第一个,使用
<xs:list>
,第二个使用
<xs:union>
。 ѭ2的使用方法 只需通过在
memberTypes
属性中列出适当的(简单)类型即可声明并集。您也可以使用在该模式文件中定义的命名简单类型。
<xs:element name=\"DataType\">
    <xs:simpleType>
        <xs:union memberTypes=\"xs:integer xs:boolean\"/>
    </xs:simpleType>
<xs:element>
这允许以下类型的代码
<DataType>42</DataType>
<DataType>true</DataType>
ѭ1的使用方法 列表的声明与联合的声明类似,但是您不能在同一列表中直接组合多个类型(不过,可以将联合派生的类型用作列表类型的基本类型)。
<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
属性。准确地说,所有内置类型名称都是限定名称(如果不计算名称空间前缀,则为非冒号名称),因此最合适的基本类型应为“ 12”或“ 13”。如果您想跳过枚举而只想确保内容在语法上可以是该类型的有效名称,则可以使用这些类型。 可以从此图像中看到内置模式数据类型(及其派生层次结构)http://www.w3.org/TR/xmlschema-2/#built-in-datatypes