`
sqe_james
  • 浏览: 262487 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XML基础

    博客分类:
  • XML
阅读更多

1.XML 语法

1.1 文档声明

一个完整的XML 文档必须包含一个XML 文档声明,且这个声明须位于文档的第一行。最简单的声明语法如下:

<?xml version=”1.0” ?>

注意: ”<””?” 之间、”?””>” 之间以及第一个”?”xml 之间不能有空格。

 

W3C XML1.0 规范规定,所有XML 解析器都必须接受UTF-8UTF-16 编码的Unicode 字符,所以只要符合XML 规范的工具都支持这两种编码。

<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

Standalone 属性用于说明文档是否独立,如果设为“yes ”,则表示该文档没有依赖外部任何文件。

注意: 如果同时设置了encodingstandalone 属性,standalone 属性要位于encoding 属性之后。

<!---->1.2  <!---->  元素定义

XML 元素标记名称中可以包含字母、数字以及其他一些可见字符,但必须遵守以下规范:

<!---->l         <!---->区分大小写

<!---->l         <!---->不能以数字或“_ ”(下划线)开头

<!---->l         <!---->不能以字符组合xml(XML 、或Xml) 开头

<!---->l         <!---->不能包含空格

<!---->l         <!---->名称中间不能包含冒号(:)

<!---->1.3  <!---->  属性的定义

一个标签可以有多个属性,每个属性都有名称和取值,如下示例:

< 重量 单位 =” 千克 ”>100</ 重量 >

注意: XML 中,属性值一定要用双引号(“)、单引号(‘)引起来,否则将被视为错误。属性不易被扩充和被程序操作,但程序处理的速度比使用子元素快。XML 处理所有空格和换行。

<!---->1.4  <!---->  CDATA

CDATA character data 的简写,即字符数据。表示一片不想被解析的程序,以”<![CDATA[“ 开始,以”]]>” 结束。

注意: CDATA 区内部不能出现字符串“]]> “,还须留意起始和结束处的空格、换行等空白字符的影响。

<!---->1.5  <!---->  特殊字符

XML 文档中,有些特殊字符需要用转义字符序列表示其原始字面意义。这类字符在XML 中称为预定义实体。当解析器碰到这样的字符时,不是把它当作一般的字符按其原始意义来处理。在XML 中有5 个预定义实体,它们与其转义字符序列的对照关系如表:

特殊字符

替代符号

&

&amp;

&lt;

&gt;

&quot;

&apos;

 

<!---->1.6  <!---->处理指令

处理指令是Processing Instruction 的中文翻译,通常简称PI ,用来为处理XMl 文档的应用程序提供指示信息。处理指令以“<? “作为开头,以”?> “作为结尾,XML 声明语句就是最常见的一种处理指令。XML 分析器把处理指令原封不动地传给应用程序来解释。如下示例:

<?xml-stylesheet type=”text/css” href=”book.css”?>

 

<!---->1.      <!---->DTD

一个DTD 文件中可以包含元素和元素之间的关系的定义,元素的属性定义,以及实体和符号的定义。DTD 文件是文本格式的文件,后缀名通常为.dtdXML 文档通过使用DOCTYPE 声明语句(文档类型定义语句)来指明它所遵循的DTD 文件。DOCTYPE 声明语句紧跟在XML 文档声明语句后面,有两种格式:

1). <!DOCTYPE 文档类型名称 SYSTEM “DTD 文件的 URL”>

2). <!DOCTYPE 文档类型名称 PUBLIC “DTD 名称 ” “DTD 文件的 URL”>

各部分的意义和作用如下:

文档类型名称 可以由XML 文档编写者自己定义,一个通用的习惯使用XML 文档的根元素名称来作为文档类型名称。

关键字SYSTEM 表明XML 文件所遵循的是一个本地或组织内部所编写和使用的DTD 文件; 关键字PUBLIC 表明该XML 文件所遵循的是一个由权威机构制定的、公开提供给特定行业或公众使用的DTD 文件。

DTD 名称 “用于指定该DTD 文件的标识名称,它只在使用关键字PUBLICDOCTYPE 声明语句中出现。对于ISO 标准的DTD 以“ISO ”三个字母开头,被改进的非ISO 标准的DTD 以“+ 开头,未被改进的非ISO 标准的DTD- 开头。紧跟”//”DTD 所有者的名称”//”DTD 描述文件说明”//” 语言种类

XML 文档中,还可以使用另外一种形式的DOCTYPE 声明语句来直接包含DTD 定义语句,基格式为:

<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

<!DOCTYPE 根元素名 [

DTD 定义语句

……

]>

并可以在引入外部文件的同时嵌入DTD 定义语句。

4. DTD 的语法细节

4.1 元素定义

DTD 定义中,每条<!ELEMENT…> 语句用于定义一个元素,通用语法格式为:

<!ELEMENT 元素名称 使用规则>

元素的使用规则定义了元素中包含的组成成分,以及每种组成成分出现的次数、次序,还可以是某些成分进行某种关系组合后出现的次数、次序。在DTD 的元素定义中,可以有以下一些形式:

<!---->l         <!---->(#PCDATA ) 表示元素中嵌套的内容是普通文本字符串,特殊字符需要用相应的预定义实体表示

<!---->l         <!---->用一对() 将元素中要嵌套的一组子元素括起来,e.g. ( 书名,作者,售价)

<!---->l         <!---->元素中也可以嵌套文本字符串与其他子元素的混合,e.g. ( 书名,#PCDATA)

<!---->l         <!---->关键字EMPTY 表示元素中不包含任何子元素和普通文本字符串

<!---->l         <!---->关键字ANY 表示元素中可以有任何类型的子元素和普通文体字符串,以及它们的混合,还可以不饮食任何内容。

 

对于DTD 文件中的元素定义,还有下面的一些补充细节说明:

1). 注释方式与XML 文档相同

2). 每条元素定义语句的顺序是无关紧要的

3). XML 文档结构中具有不同用途的元素不能使用相同的元素名,这样会引起文件各个元素的混淆,使文件的可读性变差

4). 一个元素的各个组成成分可以以任意顺序出现,也可以强制遵循一定的顺序。若元素的使用空白符分隔,那么它们的出现顺序没有严格要求;若各元素使用(,) 分隔,那它们在XML 文档中的出现顺序须与它们的排列顺序一致;若元素使用(|) 分隔,那在XML 文档中只能出现它们之中的任何一个。

5). 在元素的使用规则中可以通过正则表达式来定义子元素出现的次数。”+” 表示出现一次或多次,”?” 只能出现一次,“*” 表可不出现,也可出现一次或多次,不使用任何元字符表示该成分必须且只能出现一次。

6). 一对() 可用于将括在其中内容组合成一个可统一操作的分组,分组中可以嵌套更小的分组。

4.2 属性定义

XML 文档中可以为元素设置属性,语法格式:

<!ATTLIST 元素名

属性名1 属性类型 设置说明

属性名2 属性类型 设置说明

e.g. 有一个名为 < 电子 > 的元素,它在 XML 文档中的定义如下:

< 电子 类别 =” 笔记本 重量 =”2.1kg”>……</ 电子 >

可以使用如下形式的 DTD 定义:

<!ATTLIST 电子

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

其中, CDATA 为一种属性类型,表示值为普通文本字符串: #REQUIRED #IMPLIED 为属性设置说明信息。

DTD 中定义元素的属性时,可有以下几种设置:

1>. #REQUIRED 说明必须设置该属性

2>. #IMPLIED 说明可有可无

3>. #FIXED 说明该属性的取值固定为一个默认值

4>. 直接使用默认值

如果在属性设置说明部分没有使用上面任何一种关键字,而是直接指定一个默认值的话,那么在 XML 文件中可以设置,也可以不设置该属性。

DTD 定义元素的属性时,可以将属性设置成下面 10 种类型

1. CDATA 表普通文体字符

2. ENUMERATED 枚举类型,属性的中以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值。注意:在 DTD 定义中并不会出现关键字 ENUMERATED

e.g.

<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

<!DOCTYPE 购物篮 [

<!ENEMENT 购物篮 ANY>

<!ELEMENT EMPTY>

<!ATTLIST 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) “ 鸡肉 ”>

!>

< 购物篮>

< 肉 品种=” 鱼肉”/>

< 肉 品种=” 牛肉”/>

</ >

</ 购物篮>

在上面这个例子中,给 品种 这个属性定义的默认值是 鸡肉 ,所以,即使< 购物篮> 元素中的第三个子元素没有显式定义 品种 这个属性,但它实际也具有 品种 这个属性,且该属性的取值为 鸡肉

4.3 ID

使用关键字ID 作为属性类型时,它表示属性的设置值将用于惟一标识一个XML 文件中的某个元素。它只由字母、数字或下划线开始,其中不能出现空白字符。ID 类型的属性通常使用#REQUIRED 作为设置说明,如果应用并不要求每个元素都有自己的标识时,那也可以使用#IMPLIED 作为属性说明。

e.g.

<!ATTLIST 联系人 编号 ID #REQUIRED>

< 联系人 编号=”1”/>

 

4.4 IDREF IDREFS

一个元素的IDREF 类型的属性设置值将是同一个XML 文件中的另一个元素的ID 类型的属性的设置值。如下示例:

<!xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

<!DOCTYPE 联系人列表 [

<!ELEMENT 联系人 姓名 ,EMAIL >

<!ELEMENT 姓名 (#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ATTLIST 联系人 编号 ID #REQUIRED>

<!ATTLIST 联系人 上司 IDREF #IMPLIED>

]>

 

< 联系人列表 >

< 联系人 编号 =”2”>

< 姓名 > 张三 </ 姓名 >

<EMAIL>test@test.com</EMAIL>

</ 联系人 >

< 联系人 编号 =”1” 上司 =”2”>

< 姓名 > 李四 </ 姓名 >

<EMAIL>testsf@sun.com</EMAIL>

</ 联系人 >

</ 联系人列表 >

 

IDREFS 关键字表示IDREF 的列表类型,一个元素的IDREFS 类型的属性设置值可以是同一个XML 文件中的另外多个元素的ID 类型的属性的设置值,每个ID 属性值之间用空格分隔。

 

4.5. NMTOKEN NMTOKENS

NMTOKEN(Name Token, 名称记号), 它表示由一个或多个字母、数字、句点(.) 、连字号(-) 、或底线(_) 所组成的一个名称。除第一个字符位置外,NMTOKEN 属性的设置值中也可以包含(:)NMTOKENS 表示一种列表类型,一个元素的NMTOKENS 类型的属性设置值可以是同一个XML 文件中的另外多个元素的NMTOKEN 类型的属性的设置值,每个NMTOKEN 属性值之间用空格分隔。

e.g:

<!ELEMENT 用户 EMPTY>

<!ATTLIST 用户 姓名 NMTOKEN #REQUIRED>

<!ELEMENT 数据 (#PCDATA)>

<!ATTLIST 数据 授权用户 NMTOKENS #IMPLIED>

 

< 用户 姓名=”sam”/>

< 用户 姓名=”lisa”/>

< 数据 授权用户=”sam lisa”>

这里是一些授权访问的数据

</ 数据>

 

4.6 NOTATION ( 符号)

为了对图像、声音、影像等提供支持,XML 并不直接提供支持,但通过设置NOTATION 类型的属性来让一个外部应用程序进行处理。NOTATION 类型的属性值为在DTD 中使用<!NOTATION…> 语句定义的一个notation( 符号) ,这对使用非XML 格式的数据非常有用。Notation 定义语句分为两种情况:

<!NOTATION 符号名 SYSTEM “MIME 类型”>

<!NOTATION 符号名 SYSTEM “URL 路径名”>

第一种指定数据的MIME 类型,第二种指定处理程序的URL 路径

e.g.

<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

<!DOCTYPE 文件 [

<!NOTATION mp SYSTEM “movplayer.exe”>

<!ELEMENT 文件 ANY>

<!ELEMENT 电影 EMPTY>

<!ATTLIST 电影 演示设备 NOTATION (mp | gif) #REQUIRED>

]>

 

< 文件 >

< 电影 演示设备 =”mp”/>

</ 文件 >

上例为< 电影> 元素指定了两种可选的演示设备:一种是movplayer.exe ,另一种则用来绘制GIF 图像的应用程序。

4.7 ENTITY/ENTITYS ( 实体定义)

实体是为一段文本内容创建一个别名,以后在XML 文档中就可以多次引用这个别名,XML 解析器程序将把XML 文档中出现的别名引用转变成其所对应的文本内容。

两种实体定义类型:引用实体和参数实体

 

4.7.1 引用实体

有两语法格式:

<!ENTITY 实体名称 实体内容”>

<!ENTITY 实体名称 SYSTEM “外部XML 文档的URL”>

引用实体在XML 中的引用方式如下:& 实体名称;

若实体名称是通过第一种语法定义的,它将直接转变成实体内容;若实体名称是通过第二种语法格式定义的,它将被替换成外部XML 文档中的内容。

e.g. 在一个xml 文档中引入另外一个包含版权信息的XMl 文档

<!DOCTYPE copyright[

<!ENTITY copyright SYSTEM http://www.sun.com/copyright.xml >

]>

&copyright;

 

4.7.2 参数实体

参数实体被DTD 文件自身使用,语法格式如下:

<!ENTITY % 实体名称 实体内容”>

对参数实体进行引用的方式为:% 实体名称;

e.g.

<!ENTITY % TAG_NAMES “ 姓名 | EMAIL | 电话 | 地址”>

<!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>

<!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>

分享到:
评论
2 楼 chenahiwu 2008-10-17  
   转了
1 楼 Ethip 2008-06-01  
很基础的总结!很好。

相关推荐

Global site tag (gtag.js) - Google Analytics