XML基础

1.XML 语法

1.1 文档声明

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

<?xml version=”1.0” ?>

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

 

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

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

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

注意: 如果同时设置了encoding 和standalone 属性,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 文件是文本格式的文件,后缀名通常为.dtd 。XML 文档通过使用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 文件的标识名称,它只在使用关键字PUBLIC 的DOCTYPE 声明语句中出现。对于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; | 公司名)>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值