1.XML概述
1.1 XML产生背景
随着Web应用的不断发展,HTML的局限性也越来越明显地显现了出来,如HTML无法描述数据、可读性差、搜索时间长等。人们又把目光转向SGML,再次改造SGML使之适应现在的网络需求。随着先辈的努力,1998年2月10日,W3C(World WideⅥiebConsortium,万维网联盟)公布XML 1.0标准,XML诞生了。
1.2 XML基本特征
(1)可扩展性:XML允许使用者自定义的标记来描述数据。
(2)自描述性:XML具有自描述性的特点,可以使用XML语言来定义特定的文档模式,以检验XML文档是否满足特定要求。XML不仅容易阅读,许多异构等计算系统也都支持对XML的处理。XML描述数据的方式真正做到了独立于应用系统,并且使得数据能够重用。
(3)简洁性:用SGML的20%的复杂性,保留了80%的功能。
(4)数据的描述与显示相分离:使用XML技术,需要显示的数据可以独立地存放在XML文档中,只要在HTML文件中调用XML数据文档即可。
(5)易于数据的交换与共享:随着网络的不断发展,异构性问题日益突出。成异构系统之间的数据交换也是开发者极为关注的事。利用XML跨平台的特性,将待交换的数据存储在XML文档中,能够方便地实现异构系统之间数据交互。此外,将待共享的数据存储在XML文档中,可以让更多的网络系统轻松获得资源的共享。这样升级服务器、操作系统、浏览器和应用程序就更加容易。
(6)易于充分利用数据:因为XML具有跨平台且易于数据交换和共享的特点,数据可以被更多的用户和设备所利用。这些应用程序或设备可以把XML文档数据作为数据的来源,应用程序和设备可以“阅读”XML文档一样处理,使得数据得到充分利用。
(7)可用于创造新的语言:使用XML可以创造符合某一特定领域的数据描述标签,以满足特定领域数据描述的需要。例如MML(音乐领域XML)、ebXML(电子商务领域XML)、CML(化学领域XML)。XML在Web Services中的应用不容忽视,它是Web Services的基石。
1.3 XML定义
定义:XML为可扩展标记性语言。
作用:
1、保存具有自我描述性的数据。
2、为项目或模块配置文件。
3、作为网络传输数据格式。
2.XML语法简介
2.1XML元素
一个xml标签就是一个元素。
一个标签分为开始标签和结束标签。
在开始标签和结束标签之间可以包含文本内容,这样的文本内容叫做标签体。
如果标签的开始标签和结束标签之间不包含标签和子标签,则可以将开始标签和结束标签进行合并,这样的标签就叫做自闭标签,如:<a/>。
一个标签中也可以包含任意多个子标签,但是一定要注意标签一定要合理嵌套。
一个格式良好的xml要包含并且只能包含一个根标签,其他的标签都应该是这个标签的子孙标签。
元素命名规则:
① 区分大小写,例如,<P>和<p>是两个不同的标记。
②不能以数字或标点符号或"_"开头。
③不能以xml(或XML、或Xml 等)开头。
④不能包含空格。
⑤名称中间不能包含冒号(:)。
2.2 属性
一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
属性的名在定义时要遵循和xml元素相同的命名规则。
属性的值需要用单引号或双引号括起来。
2.3 注释
注释可以出现在xml文档的任意位置除了整个文档的最前面,不能出现在文档声明之前。注释不能嵌套注释。
3.XML Schema
3.1 Schema的优势
1、支持数据类型
XML Schema 最重要的能力之一就是对数据类型的支持。通过对数据类型的支持:
◆ 可更容易地描述允许的文档内容
◆ 可更容易地验证数据的正确性
◆ 可更容易地与来自数据库的数据一并工作
◆ 可更容易地定义数据约束(data facets)
◆ 可更容易地定义数据模型(或称数据格式)
◆ 可更容易地在不同的数据类型间转换数据
2、它使用 XML 语法
另一个关于XML Schema 的重要特性是,它们由XML编写。由XML编写XML Schema有很多好处:
◆ 不必学习新的语言
◆ 可使用 XML 编辑器来编辑 Schema 文件
◆ 可使用 XML 解析器来解析 Schema 文件
◆ 可通过 XML DOM 来处理 Schema
◆ 可通过 XSLT 来转换 Schema
3、可保护数据通信
◆ 当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的"期望值"。
◆ 通过 XML Schema,发送方可以用一种接受方能够明白的方式来描述数据。
一种数据,比如 “03-11-2004”,在某些国家被解释为11月3日,而在另一些国家为当作3月11日。
但是一个带有数据类型的 XML 元素,比如:2004-03-11,可确保对内容一致的理解,这是因为 XML 的数据类型 “date” 要求的格式是 “YYYY-MM-DD”。
4、可扩展性
XML Schema 是可扩展的,因为它们由 XML 编写。通过可扩展的 Schema 定义,您可以:
◆ 在其他 Schema 中重复使用您的 Schema
◆ 创建由标准类型衍生而来的您自己的数据类型
◆ 在相同的文档中引用多重的 Schema
5、可捕获到错误
◆ 即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。
请考虑下面的情况:您订购的了 5 打激光打印机,而不是 5 台。通过 XML Schema,大部分这样的错误会被您的验证软件捕获到。
3.2 Schema的缺点
◆ 虽然被写入XML是一个优势,在某些方面也是一个缺点。W3C XML Schema语言特别是可能非常冗长,而DTD可以简洁且相对容易编辑。
◆ W3C XML Schema没有实现大部分提供的数据元素到文档的DTD能力。
◆ IE不能验证XML是否符合Schema,需要通过专有的工具软件或者编程进行验证。
3.3 XML元素的声明
1.根元素
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.broadnew.com"
elementFormDefault="qualified"
attributeFormDefault="qualified">
2.元素
用于声明被校验XML文档的一个元素,主要属性有:
1)name:声明元素的名字;
2)type:声明元素的数据类型,可以使用Schema的数据类型,也可以使用自定义的数据类型。该类型要么是声明元素的属性,要么是声明元素标签之间的内容或者子元素。
3)ref:用于引用一个声明好的元素,如<xs:element ref=“cat”/>,cat是本文档中已经声明的一个元素,该语句表示这里需要填充一个cat元素,常用于声明自定义数据类型中使用。
4)minOccurs:该属性值为一个整数,表示该声明元素最少要出现的次数。
5)maxOccurs:该属性值为一个整数,表示该声明元素最多能出现的次数,如果值为unbounded,则表示无限制。
6)substitutionGroup:属性值是一个已经定义的元素名字,表示可以使用属性值对应的元素替换属性归属的元素,比较少使用。
3.4 Schema的数据类型
1.简单数据类型
(1)内置简单数据类型
schema中定义了一些简单数据类型,包括primitive原始数据类型和derived派生数据类型,这些类型都是schema中使用的
最基本的数据类型,我们可以用他们自定义简单数据类型
表:primitive原始数据类型
数据类型 | 描述 |
---|---|
string | 字符串 |
Boolean | 布尔值 |
decimal | 十进制数字 |
float | 32位浮点数 |
double | 64位浮点数 |
timeDuration | 标识持续时间 |
datetime | 特定时间 |
time | |
date | |
anyURI | 代表URI,用来定位文件 |
recurring Duration |
派生数据类型
数据类型 | 描述 |
---|---|
integer | |
long | [-263,263-1] |
nonNegativeInteger | 大于等于零的整数 |
positiveInteger | 大于零的整数 |
int | [-231,231-1] |
time | s |
date |
(2)自定义简单数据类型
<xs:simpleType name="phoneno">
<xs:restriction base="xs:string">
<xs:length value="3" />
<xs:pattern value="\d{4}-\d{3}" />
</xs:restriction>
</xs:simpleType>
simpleType元素常用子元素
子元素 | 作用 |
---|---|
enumeration | 枚举类型,供用户选择 |
fractionDigits | 限定最大的小数位,用户控制精度 |
length | 自定数据的长度 |
maxExclusive | 指定数据的最大值(小于) |
maxInclusive | 指定数据的最大值(小于等于) |
maxLength | 指定长度的最大值 |
minExclusive | 指定最小值(大于) |
minInclusive | 指定最小值(小于等于) |
minLength | 指定最小长度 |
pattern | 正则 |
e.g.
<xs:simpleType name="gender">
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration vlaue="女"/>
</xs:restriction>
</xs:simpleType>
2.复合类型(通过complexType定义)
complexType 元素
作用:定义一个符合类型。它决定了一组元素和属性值的约束和相关信息
属性:name
常用两种方式:
sequence 给一组元素一个特定序列
choice 设置选择项
作用:把一组属性声明组合在一起,以便可以被复合类型应用
数据类型的特征 | |
---|---|
enumeration 在指定的数据集中选择,限于用户的选值 | |
length 指定数据的长度 | |
maxExclusive 指定数据的最大值(小于) | |
maxInclusive 指定数据的最大值(小于等于) | |
maxLength 指定长度的最大值 | |
minExclusive 指定最小值(大于) | |
minInclusive 指定最小值(大于等于) | |
minLength 指定最小长度 |
<xs:complexType name="">
<内容模板定义(包括子元素和属性的声明)
</xs:complexType>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxRnrZWh-1671002932771)(XML基础,Schema.assets/ContractedBlock.gif)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Amz4CUyu-1671002932772)(XML基础,Schema.assets/ExpandedBlockStart.gif)]
1 <xs:complexType name="address">
2 <xs:sequence>
3 <xs:element name="street" type="xs:string" />
4 <xs:element name="city" type="xs:string" />
5 <xs:element name="state" type="xs:string" />
6 <xs:element name="zip" type="xs:decimal" />
7 </xs:sequence>
8 </xs:complexType>
3.5 XML Schema 属性声明
<attribute name="属性名"
default="缺省值"
fixed="固定值"
type="数据类型名"
use="option|required" >
e.g.
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema">
<xs:element name="name">
<xs:complexType>
<xs:element name="first" type="xs:string" />
<xs:attribute name="age" type="xs:integer" use="optional" />
</xs:complexType>
</xs:element>
</xs:schema>
4.模式重用
元素
用来包含或引用一个明确地址的外部模式
语法结构:
<include id=”ID” schemaLocation=”filename”/>
语法解析:
Id用来指定元素的ID,ID必须是唯一的。该项可选。
schemaLocation指定模式文件的物理地址。
例子:
<?xml version=”1.0” encoding=”UTF-8”?>
<xs:schema xmlns:xs=” http://www.cnblogs.com/ForEvErNoME/ XMLSchema”
targetNamespace=” http://www.cnblogs.com/ForEvErNoME/”
xmlns=” http://www.cnblogs.com”
<xs:include schemaLocation=” http://www.cnblogs.com/ForEvErNoME/1.xsd”/>
<xs:include schemaLocation=” http://www.cnblogs.com/ForEvErNoME/2.xsd”/>
<!—Schema文档中子元素的名字和类型的定义-->
</xs:schema>
(2) import元素
import和include有同样的功能,但是import允许访问来自多个不同目标名称空间的模式的组件。
语法结构:
<import id=”ID” namespace=”namespace” schemaLocation=”filename”/>
语法解析:
Id用来指定元素的ID,ID必须是唯一的。该项可选。
Namespace指定被引入模式所属的命名空间URI,它指定前缀。该前缀用来使一个元素或属性和一个特定的命名空间相关联。
ErNoME/2.xsd”/>
<!—Schema文档中子元素的名字和类型的定义–>
</xs:schema>
(2) import元素
import和include有同样的功能,但是import允许访问来自多个不同目标名称空间的模式的组件。
语法结构:
```xml
<import id=”ID” namespace=”namespace” schemaLocation=”filename”/>
语法解析:
Id用来指定元素的ID,ID必须是唯一的。该项可选。
Namespace指定被引入模式所属的命名空间URI,它指定前缀。该前缀用来使一个元素或属性和一个特定的命名空间相关联。
schemaLocation指定模式文件的物理地址。