您的位置:首页 > 其它

XML初步认识 自己的读书笔记 为了日后复习 w3school

2011-10-20 23:00 197 查看
什么是 XML?

? XML 指可扩展标记语言(EXtensible Markup Language)

? XML 是一种标记语言,很类似 HTML

? XML 的设计宗旨是传输数据,而非显示数据

? XML 标签没有被预定义。您需要自行定义标签。

? XML 被设计为具有自我描述性。

? XML 是 W3C 的推荐标准

XML 不是对 HTML 的替代

XML 是对 HTML 的补充。

XML 不会替代 HTML,理解这一点很重要。在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。

对 XML 最好的描述是:

XML 是独立于软件和硬件的信息传输工具。

XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。

避免 XML 属性?

因使用属性而引起的一些问题:

? 属性无法包含多重的值(元素可以)

? 属性无法描述树结构(元素可以)

? 属性不易扩展(为未来的变化)

? 属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素

XML Schema

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文档的结构。

XML Schema 是 DTD 的继任者

我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。

理由如下:

? XML Schema 可针对未来的需求进行扩展

? XML Schema 更完善,功能更强大

? XML Schema 基于 XML 编写

? XML Schema 支持数据类型

? XML Schema 支持命名空间XML Schema 最重要的能力之一就是对数据类型的支持。

XML Schema 最重要的能力之一就是对数据类型的支持

通过对数据类型的支持:

o 可更容易地描述允许的文档内容

o 可更容易地验证数据的正确性

o 可更容易地与来自数据库的数据一并工作

o 可更容易地定义数据约束(data facets)

o 可更容易地定义数据模型(或称数据格式)

可更容易地在不同的数据类型间转换数据

定义简易元素

定义简易元素的语法:

<xs:element name="xxx" type="yyy"/>

此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

如何声明属性?

定义属性的语法是:

<xs:attribute name="xxx" type="yyy"/>

在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。

实例

这是带有属性的 XML 元素:

<lastname lang="EN">Smith</lastname>

这是对应的属性定义:

<xs:attribute name="lang" type="xs:string"/>

数据类型的限定

限定 描述

enumeration 定义可接受值的一个列表

fractionDigits 定义所允许的最大的小数位数。必须大于等于0。

length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。

maxExclusive 定义数值的上限。所允许的值必须小于此值。

maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。

maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。

minExclusive 定义数值的下限。所允许的值必需大于此值。

minInclusive 定义数值的下限。所允许的值必需大于或等于此值。

minLength 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。

pattern 定义可接受的字符的精确序列。

totalDigits 定义所允许的阿拉伯数字的精确位数。必须大于0。

whiteSpace 定义空白字符(换行、回车、空格以及制表符)的处理方式。

什么是复合元素?

复合元素指包含其他元素及/或属性的 XML 元素。

有四种类型的复合元素:

空元素

包含其他元素的元素

仅包含文本的元素

包含元素和文本的元素

注释:上述元素均可包含属性!

在 XML Schema 中,我们有两种方式来定义复合元素:

1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

<xs:element name="employee">

<xs:complexType>

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。您会在 XSD 指示器 这一节学习更多有关指示器的知识。

2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

<xs:element name="employee" type="personinfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

<xs:element name="employee" type="personinfo"/>

<xs:element name="student" type="personinfo"/>

<xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

指示器

有七种指示器:

Order 指示器:

All

Choice

Sequence

Occurrence 指示器:

maxOccurs

minOccurs

Group 指示器:

Group name

attributeGroup name

All 指示器

<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:

Choice 指示器

<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)

Sequence 指示器

<sequence> 规定子元素必须按照特定的顺序出现:

Occurrence 指示器

Occurrence 指示器用于定义某个元素出现的频率。

注释:对于所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1

maxOccurs 指示器

<maxOccurs> 指示器可规定某个元素可出现的最大次数:

Group 指示器

Group 指示器用于定义相关的数批元素。

属性组

属性组通过 attributeGroup 声明来进行定义:

XSD <any> 元素

<any> 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档!

XSD 元素替换(Element Substitution)

通过 XML Schema,一个元素可对另一个元素进行替换。

元素替换

让我们举例说明:我们的用户来自英国和挪威。我们希望有能力让用户选择在 XML 文档中使用挪威语的元素名称还是英语的元素名称。

为了解决这个问题,我们可以在 XML schema 中定义一个 substitutionGroup。首先,我们声明主元素,然后我们会声明次元素,这些次元素可声明它们能够替换主元素。

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" [code]substitutionGroup="name"
/>[/code]
在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素。

用 substitutionGroup

可替换元素的类型必须和主元素相同,或者从主元素衍生而来。假如可替换元素的类型与主元素的类型相同,那么您就不必规定可替换元素的类型了。

阻止元素替换

为防止其他的元素替换某个指定的元素,请使用 block 属性:

<xs:element name="name" type="xs:string" [code]block="substitution"
/>[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: