XML Schema import 元素
定义和用法
import 元素用于向一个文档添加带有不同目标命名空间的多个 schema。
元素信息
出现次数 | 无限制 |
父元素 | schema |
内容 | annotation |
语法
<import
id=ID
namespace=anyURI
schemaLocation=anyURI
any attributes
>
(annotation?)
</import>
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
namespace | 必需。规定要导入的命名空间的 URI。 |
schemaLocation | 可选。规定被导入的命名空间的 URI。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
(? 符号声明在 import 元素中,该元素可出现零次或一次。)
实例
下面的例子展示导入一个命名空间:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.w3school.com.cn/schema"/>
..
..
..
</xs:schema>
XML Schema include 元素
定义和用法
include 元素用于向一个文档添加带有相同目标命名空间的多个 schema。
元素信息
出现次数 | 无限制 |
父元素 | schema |
内容 | annotation |
语法
<include
id=ID
schemaLocation=anyURI
any attributes
>
(annotation?)
</include>
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
schemaLocation | 必需。规定在包含 schema 的目标命名空间中,要包括的 schema 的 URI。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
(? 符号声明在 include 元素中,该元素可出现零次或一次。)
实例
通过被包括的 schema,被包括的文件必须全部引用相同的目标命名空间。如果 schema 目标命名空间不匹配,则包括不会有效:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn/schema">
<xs:include schemaLocation="http://www.w3school.com.cn/schema/customer.xsd"/>
<xs:include schemaLocation="http://www.w3school.com.cn/schema/company.xsd"/>
..
..
..
</xs:schema>
XML Schema key 元素
定义和用法
key 元素指定属性或元素值(或一组值)必须是指定范围内的键。键的范围为实例文档中的包含 element。键意味着数据在指定范围内应是唯一的、不为零的并且始终存在的。
key 元素必须按顺序包含下列元素:
selector 元素:
必须有一个且只有一个 selector 元素。
selector 元素包含一个 XPath 表达式,该表达式指定一个元素集,在元素集中,field 指定的值必须是唯一的。
field 元素
必须有一个或多个 field 元素。
每一个 field 元素均包含一个 XPath 表达式,该表达式指定对于由 selector 元素指定的元素集而言必须唯一的值(属性或元素值)。
如果有多个 field 元素,则 field 元素的组合必须是唯一的。 在此情况下,单个 field 元素的值对于选定元素不一定是唯一的,但所有字段的组合必须是唯一的。
元素信息
出现次数 | 无限制 |
父元素 | element |
内容 | annotation、field、selector |
语法
<key
id=ID
name=NCName
any attributes
>
(annotation?,(selector,field+))
</key>
(? 符号声明在 key 元素中,元素可出现零次或一次,+ 符号声明元素必须出现一次或多次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
name | 必需。规定 key 元素的名称。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
XML Schema keyref 元素
定义和用法
keyref 元素规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。
keyref 元素必须按顺序包含下列元素:
selector 元素:
必须有一个且只有一个 selector 元素。
selector 元素包含一个 XPath 表达式,该表达式指定一个元素集,在元素集中,field 指定的值必须是唯一的。
field 元素
必须有一个或多个 field 元素。
每一个 field 元素均包含一个 XPath 表达式,该表达式指定对于由 selector 元素指定的元素集而言必须唯一的值(属性或元素值)。
如果有多个 field 元素,则 field 元素的组合必须是唯一的。 在此情况下,单个 field 元素的值对于选定元素不一定是唯一的,但所有字段的组合必须是唯一的。
元素信息
出现次数 | 一次 |
父元素 | element |
内容 | annotation、field、selector |
语法
<keyref
id=ID
name=NCName
refer=QName
any attributes
>
(annotation?,(selector,field+))
</include>
(? 符号声明在 key 元素中,元素可出现零次或一次,+ 符号声明元素必须出现一次或多次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
name | 必需。规定 key 元素的名称。 |
refer | 必需。规定在该 schema(或由指定的命名空间指示的其他 schema)中定义的 key 或 unique 元素的名称。refer 值必须是限定名 (QName)。 类型可以包括命名空间前缀。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
XML Schema list 元素
定义和用法
list 元素定义单个 simpleType 定义的集合。
该属性把简单类型定义为指定数据类型的值的一个列表。
元素信息
出现次数 | 一次 |
父元素 | simpleType |
内容 | annotation、simpleType |
语法
<list
id=ID
itemType=QName
any attributes
>
(annotation?,(simpleType?))
</list>
(? 符号声明在 list 元素中元素可出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
itemType | 在该 schema(或由指定的命名空间指示的其他 schema)中定义的内置数据类型或 simpleType 元素的名称。包含 list 元素的 simpleType 元素是从 list 值指定的简单类型派生的。list 值必须是限定名 (QName)。 如果内容包含 simpleType 元素,则不允许使用该属性,否则该属性是必需的。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
下面的例子展示了为一列整数的简单类型:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="intvalues" type="valuelist">
<xs:simpleType name="valuelist">
<xs:list itemType="xs:integer"/>
</xs:simpleType>
</xs:schema>
文档中的 "intvalues" 元素类似这样(注意这个列表有五个列表项):
<intvalues>100 34 56 -23 1567</intvalues>
注释:空格被作为列表项的分隔符。
例子 2
下面的例子展示了为一列字符串的简单类型:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="stringvalues" type="valuelist">
<xs:simpleType name="valuelist">
<xs:list itemType="xs:string"/>
</xs:simpleType>
</xs:schema>
文档中的 "stringvalues" 元素类似这样(注意这个列表有四个列表项):
<stringvalues>I love XML Schema</stringvalues>
XML Schema notation 元素
定义和用法
notation 元素描述 XML 文档中非 XML 数据的格式。
元素信息
出现次数 | 无限制 |
父元素 | schema |
内容 | annotation |
语法
<notation
id=ID
name=NCName
public=anyURI
system=anyURI
any attributes
>
(annotation?)
</notation>
(? 符号声明在 notation 元素中该元素可出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
name | 必需。为元素规定名称。 |
public | 必需。与 public 标识符相对应的 URI 引用。 |
system | 与 system 标识符相对应的 URI 引用。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
下面的例子通过使用一个查看应用程序 view.exe 来显示 gif 和 jpeg 格式的 notation:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:notation name="gif" public="image/gif" system="view.exe"/>
<xs:notation name="jpeg" public="image/jpeg" system="view.exe"/>
<xs:element name="image">
<xs:complexType>
<xs:simpleContent>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:NOTATION">
<xs:enumeration value="gif"/>
<xs:enumeration value="jpeg"/>
<xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
文档中的 "image" 元素是这样的:
<image type="gif"></image>
XML Schema redefine 元素
定义和用法
redefine 元素允许在当前 Schema 中重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。
元素信息
出现次数 | 无限制 |
父元素 | schema |
内容 | annotation、attributeGroup、complexType、group、simpleType |
语法
<redefine
id=ID
schemaLocation=anyURI
any attributes
>
(annotation|(simpleType|complexType|group|attributeGroup))*
</redefine>
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
schemaLocation | 必需。对 schema 文档位置的 URI 引用。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
下面的例子展示了一个 schema,Myschama2.xsd,其中存在由 Myschama1.xsd 规定的元素。pname 类型被重新定义。根据此 schema,被 pname 约束的元素必须以 "country" 元素结束:
Myschema1.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="pname">
<xs:sequence>
<xs:element name="firstname"/>
<xs:element name="lastname"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="pname"/>
</xs:schema>
Myschema2.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="Myschema1.xsd">
<xs:complexType name="pname">
<xs:complexContent>
<xs:extension base="pname">
<xs:sequence>
<xs:element name="country"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
<xs:element name="author" type="pname"/>
</xs:schema>
XML Schema restriction 元素
定义和用法
restriction 元素定义对 simpleType、simpleContent 或 complexContent 定义的约束。
元素信息
出现次数 | 一次 |
父元素 | complexContent |
内容 | group、all、choice、sequence、attribute、attributeGroup、anyAttribute |
语法
<restriction
id=ID
base=QName
any attributes
>
Content for simpleType:
(annotation?,(simpleType?,(minExclusive|minInclusive|
maxExclusive|maxInclusive|totalDigits|fractionDigits|
length|minLength|maxLength|enumeration|whiteSpace|pattern)*))
Content for simpleContent:
(annotation?,(simpleType?,(minExclusive |minInclusive|
maxExclusive|maxInclusive|totalDigits|fractionDigits|
length|minLength|maxLength|enumeration|whiteSpace|pattern)*)?,
((attribute|attributeGroup)*,anyAttribute?))
Content for complexContent:
(annotation?,(group|all|choice|sequence)?,
((attribute|attributeGroup)*,anyAttribute?))
</restriction>
(? 符号声明在 restriction 元素中该元素可出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
base | 必需。规定在该 schema(或由指定的命名空间指示的其他 schema)中定义的内建数据类型、simpleType 或 complexType 元素的名称。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
下面的例子定义了一个带有约束且名为 "age" 的元素。age 的值不能小于 0 或大于 100:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
例子 2
本例定义了一个名为 "initials" 的元素。"initials" 元素是带有约束的简单类型。可接受的值是三个从 a 到 z 的大写或小写字母:
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
例子 3
本例定义了一个名为 "password" 元素。"password" 元素是带有约束的简单类型。值必须为最少 5 个字符且最多 8 个字符:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
例子 4
本例展示了一个使用约束的复杂类型定义。复杂类型 "Chinese_customer" 从一个普通的 customer 复杂类型派生而来,其 country 元素的固定值是 "China":
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Chinese_customer">
<xs:complexContent>
<xs:restriction base="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string" fixed="China"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
XML Schema schema 元素
定义和用法
schema 元素定义 schema 的根元素。
元素信息
出现次数 | 一次 |
父元素 | (无父元素) |
内容 | include、import、annotation、redefine、attribute、attributeGroup、element、group、notation、simpleType、complexType |
语法
<schema
id=ID
attributeFormDefault=qualified|unqualified
elementFormDefault=qualified|unqualified
blockDefault=(#all|list of (extension|restriction|substitution))
finalDefault=(#all|list of (extension|restriction|list|union))
targetNamespace=anyURI
version=token
xmlns=anyURI
any attributes
>
((include|import|redefine|annotation)*,(((simpleType|complexType|
group|attributeGroup)|element|attribute|notation),annotation*)*)
</schema>
属性
id
可选。规定该元素的唯一的 ID。
attributeFormDefault
可选。在该 schema 的目标命名空间中声明的属性的形式。该值必须是下列字符串之一: "qualified" 或 "unqualified"。 默认值为 "unqualified"。
· "unqualified" 指示无须通过命名空间前缀限定目标命名空间的属性。
· "qualified" 指示必须通过命名空间前缀限定目标命名空间的属性。
elementFormDefault
可选。在该 schema 的目标命名空间中声明的元素的形式。该值必须是下列字符串之一: "qualified" 或 "unqualified"。 默认值为 "unqualified"。
· "unqualified" 指示无须通过命名空间前缀限定目标命名空间的元素。
· "qualified" 指示必须通过命名空间前缀限定目标命名空间的元素。
blockDefault
可选。规定在目标命名空间中 element 和 complexType 元素上的 block 属性的默认值。block 属性防止具有指定派生类型的复杂类型(或元素)被用来代替继承的复杂类型(或元素)。该值可以包含 #all 或者一个列表,该列表是 extension、restriction 或 substitution 的子集:
· extension - 防止通过扩展派生的复杂类型被用来替代该复杂类型。
· restriction - 防止通过限制派生的复杂类型被用来替代该复杂类型。
· substitution - 防止元素的替换。
· #all - 防止所有派生的复杂类型被用来替代该复杂类型。
finalDefault
可选。规定在该架构的目标命名空间中 element、simpleType 和 complexType 元素的 final 属性的默认值。final 属性防止 element、simpleType 或 complexType 元素的指定的派生类型。对于 element 和 complexType 元素,该值可以包含 #all 或一个列表,该列表是 extension 或 restriction 的子集。 对于 simpleType 元素,该值还可以包含 list 和 union:
· extension - 默认情况下,该 schema 中的元素不能通过扩展派生。仅适用于 element 和 complexType 元素。
· restriction - 防止通过限制派生。
· list - 防止通过列表派生。仅适用于 simpleType 元素。
· union - 防止通过联合派生。仅适用于 simpleType 元素。
· #all - 默认情况下,该 schema 中的元素不能通过任何方法派生。
targetNamespace
该 schema 的命名空间的 URI 引用。还可以分配该命名空间的前缀。如果没有分配任何前缀,则该命名空间的 schema 组件可以和非限定的引用一起使用。
version
可选。规定 schema 的版本。
xmlns
规定在此 schema 中使用的一个或多个命名空间的 URI 引用。如果没有分配前缀,该命名空间的 schema 组件可与未限制的引用使用。
any attributes
可选。规定带有 non-schema 命名空间的任何其他属性。
实例
例子 1
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="values" type="xs:string">
</xs:schema>
例子 2
在本例中,http://www.w3.org/2001/XMLSchema 命名空间中 schema 组件 (element name, type) 是未限制的,而 http://www.w3school.com.cn/w3schoolschema (mystring) 是通过 wsc 前缀限制的:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:wsc="http://www.w3school.com.cn/w3schoolschema">
<element name="fname" type="wsc:mystring"/>
</schema>
XML Schema selector 元素
定义和用法
selector 元素指定 XML 路径语言 (XPath) 表达式,该表达式为标识约束选择一组元素(unique、key 和 keyref 元素)。
元素信息
出现次数 | 一次 |
父元素 | key、keyref、unique |
内容 | annotation |
语法
<selector
id=ID
xpath=a subset of XPath expression
any attributes
>
(annotation?)
</selector>
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
xpath | 必需。规定相对于所声明的元素的 XPath 表达式。该表达式标识应用标识约束(所声明的元素)的子元素。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
XML Schema sequence 元素
定义和用法
sequence 元素要求组中的元素以指定的顺序出现在包含元素中。每个子元素可出现 0 次到任意次数。
元素信息
出现次数 | 在组内为一次;否则为无限制。 |
父元素 | group、choice、sequence、complexType、restriction (simpleContent)、extension (simpleContent)、restriction (complexContent)、extension (complexContent) |
内容 | annotation、any、choice、element、group、sequence |
语法
<sequence
id=ID
maxOccurs=nonNegativeInteger|unbounded
minOccurs=nonNegativeInteger
any attributes
>
(annotation?,(element|group|choice|sequence|any)*)
</sequence>
(? 声明在 sequence 元素中该元素可出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
maxOccurs | 可选。规定 any 元素在父元素中可出现的最大次数。该值可以是大于或等于零的整数。若不想对最大次数设置任何限制,请使用字符串 "unbounded"。 默认值为 1。 |
minOccurs | 可选。规定 any 元素在父元素中可出现的最小次数。该值可以是大于或等于零的整数。若要指定该 any 组是可选的,请将此属性设置为零。 默认值为 1。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
本例是一个针对 "personinfo" 元素的声明,该元素必需按顺序包含下列 5 个元素:"firstname", "lastname", "address", "city", and "country"。
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
例子 2
本例是一个针对 "pets" 元素的声明,可包含零个或多个 dog 和 cat 元素:
<xs:element name="pets">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="dog" type="xs:string"/>
<xs:element name="cat" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
XML Schema simpleContent 元素
定义和用法
simpleContent 元素包含对 complexType 元素(它以字符数据或 simpleType 元素为内容)的扩展或限制并且不包含任何元素。
元素信息
出现次数 | 一次 |
父元素 | complexType |
内容 | 可选项 — annotation 必选项 — 有并且只有一个下列元素: restriction (simpleContent) 或 extension (simpleContent)。 |
语法
<simpleContent
id=ID
any attributes
>
(annotation?,(restriction|extension))
</simpleContent>
(? 符号声明在 simpleContent 元素中该元素可出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
这是一个仅包含文本的 XML 元素 (<shoesize>):
<shoesize country="france">35</shoesize>
下面的例子声明了一个复杂类型 "shoesize",其内容被定义为整数数据类型,并带有一个 country 属性:
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
XML Schema simpleType 元素
定义和用法
simpleType 元素定义一个简单类型,规定与具有纯文本内容的元素或属性的值有关的信息以及对它们的约束。
元素信息
出现次数 | 无限制 |
父元素 | attribute、element、list、restriction (simpleType)、schema、union |
内容 | annotation、list、restriction (simpleType)、union |
语法
<simpleType
id=ID
name=NCName
any attributes
>
(annotation?,(restriction|list|union))
</simpleType>
(? 符号声明元素可在 simpleType 元素中出现零次或一次。)
属性 | 描述 |
id | 可选。规定该元素的唯一的 ID。 |
name | 类型名称。 该名称必须是在 XML 命名空间规范中定义的无冒号名称 (NCName)。 如果指定,该名称在所有 simpleType 和 complexType 元素之间必须是唯一的。 如果 simpleType 元素是 schema 元素的子元素,则为必选项,在其他时候则是不允许的。 |
any attributes | 可选。规定带有 non-schema 命名空间的任何其他属性。 |
实例
例子 1
本例声明 "age" 元素是一个带有约束的简单类型。age 的值不能小于 0 或大于 100:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>