转载自:http://www.xgezhang.com/xml_schema_1.html
什么是XML Schema?
- XML Schema 是基于 XML 的 DTD 替代者。
- XML Schema 可描述 XML 文档的结构,并对其进行制约和校验。
- XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
它可以:
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
XML Schema 是 DTD 的继任者:
我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD,理由如下
- XML Schema 可针对未来的需求进行扩展
- XML Schema 更完善,功能更强大
- XML Schema 基于 XML 编写
- XML Schema 支持数据类型
- XML Schema 支持命名空间
一个简单例子:
1
2
3
4
5
6
7
|
<?
xml
version
=
"1.0"
?>
<
note
>
<
to
>George</
to
>
<
from
>John</
from
>
<
heading
>Reminder</
heading
>
<
body
>Don't forget the meeting!</
body
>
</
note
>
|
它对应的note.xsd的Schema文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?
xml
version
=
"1.0"
?>
elementFormDefault
=
"qualified"
>
<
xs:element
name
=
"note"
>
<
xs:complexType
>
<
xs:sequence
>
<
xs:element
name
=
"to"
type
=
"xs:string"
/>
<
xs:element
name
=
"from"
type
=
"xs:string"
/>
<
xs:element
name
=
"heading"
type
=
"xs:string"
/>
<
xs:element
name
=
"body"
type
=
"xs:string"
/>
</
xs:sequence
>
</
xs:complexType
>
</
xs:element
>
</
xs:schema
>
|
可以看到,使用XML Schema有很多好处和优势,比如它不需要学习新的语言、可使用 XML 编辑器来编辑 Schema 文件、可使用 XML 解析器来解析 Schema 文件等。它还有更多的好处在后面介绍。
XML Schema支持对DTD的引用,以及对XML Schema本身的引用,参看下面两个例子:
对外部DTD的引用:
1
2
3
4
5
|
<?
xml
version
=
"1.0"
?>
<
note
>
...
</
note
>
|
对外部XML Schema的引用:
1
2
3
4
5
6
7
8
|
<?
xml
version
=
"1.0"
?>
<
note
...
</
note
>
|
<schema> 元素是每一个 XML Schema 的根元素。
即每一个XML Schema文件都是已<schema></schema>为头和尾的,这里面可以包含属性。一个 schema 声明往往看上去类似这样:
1
2
3
4
5
6
7
8
9
10
|
<?
xml
version
=
"1.0"
?>
elementFormDefault
=
"qualified"
>
...
...
</
xs:schema
>
|
其中xmlns:xs=”http://www.w3.org/2001/XMLSchema”显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。
同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:
targetNamespace=”http://www.w3school.com.cn” 这个片段,表示被此 schema 定义的元素 (note,to,from,heading,body) 来自命名空间: “http://www.w3school.com.cn”。
xmlns=”http://www.w3school.com.cn” 这个片段表示默认的命名空间是”http://www.w3school.com.cn”。
elementFormDefault=”qualified” 这个片段表示任意XML实例文档使用并在Schema中声明过的元素必须被命名空间所限定。