BloveSaga

在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 12 文章 :: 122 评论 :: 0 Trackbacks
XML文档结构包含下面三个部分:
* 声明部分,声明该文档是一个XML文档.
* 定义部分,定义XML数据的类型以及所使用的DTD(可选).
* 内容部分,用XML标签和注释标注过的文档类容.

声明

XML文档以XML声明开头,声明本文档是一个XML文档.一般这样书写:
<? xml version encoding standalone?>
定义符<?和?>表示这是一条给XML解析器的处理指令.虽然声明这条语句是可有可无的,但考虑到以后的兼容,建议读者还是写上为好.随着语言的进一步发展,以后的浏览器如果知道文档所用的XML版本的话,将是有好处的.这天语句必须全部用小写.
在上面的声明中version表示的XML的标准版本号.encoding表示的是文档所用的编码.standalone用来指定在XML文档被解析之前,是否使用外部或内部DTD,它的值只能是yes或no.如果为no,表示使用外部DTD;如果为yes表示使用内部DTD;如果不使用DTD,则不使用这个属性.
看下面的实际例子:
<?xml version="1.0" encoding="UTF-8" standalone="yes">
在XML声明之后,紧接着是类型定义部分,定义XML文档中数据的类型.

文档定义类型(DTD)

DTD是用来定义XML文档内容的结构的,以便按统一的格式存储信息.DTD规定了XML文档中可以出现哪些元素;这些元素是必须的还是可选的;这些元素有什么属性;以及它们之间的相互位置关系,等等.XML允许用户为自己的应用程序定义专用的DTD,这样用户就可以完全检查文档结构和内容的过程了.这一检验过程称为有效化,严格依从一个DTD的XML文档被称作有效文档.
创建DTD的过程与在数据库里创建数据表是类似的.在DTD中,用户定义用来表示数据的元素,然后规定数据的结构,并规定这个元素是可选的还是必须的,这就好比创建数据表的列;然后你把数据存入XML文档,就好比添加数据表的记录.
XML文档使用的元素可以在内部DTD中定义,也可以在外部DTD中定义.

内部DTD
DTD可以作为文档的一部分直接放到文档里面,这样的DTD只能用于包含它的这个文档,别的文档就不能使用了.创建内部DTD的语法如下:
<!DOCTYPE rootelement
[element and attribute declarations]
>
<!DOCTYPE标识文档类型定义的开始,属性rootelement指明跟元素名字.

为部DTD
外部DTD是一个单独的文件,存放XML文档中可以使用的全部元素及属性的定义.你可以在多个文档中同时使用同一个DTD,以便保持多个文档之间数据结构的一致性。
在XML文档中引用外部DTD的语法如下:
<!DOCTYPE rootelement [PUBLIC|SYSTEM] "name-of-file">
其中,DOCTYPE标识这是文档类型定义部分;rootelement代表根元素;PUBLIC表示这个DTD是存放在公用服务器上的;SYSTEM表示这个DTD是存放在本地计算机系统上的;Name-of-file是被引用的DTD文件的名称.

DTD字符
下表是DTD中使用的部分专用字符及其含义.
DTD字符含义举例描述
,指定顺序中的"与"Firstname ,LastnameFirstname与Lastname,以此顺序
|"或"Firstname | LastnameFirstname或Lastname
?"可选项',只能出现一次Lastname?可以不出现Lastname,但如果使用,则只能出现一次
()用于组成元素(Firstname | Lastname),Address一个Firstname或Lastname元素必须出现在Address元素之前
*该元素可以不出现也可以出现多次(Firstname | Lastname)*可以以任何顺序出现任意个数Firstname或Lastname元素
  该元素至少出现一次也可以出现多次(Firstname +)可以出现多个Firstname元素

在DTD中定义元素

元素是XML文件的基本组成部分.每个元素都是用标签标识的一小段数据.标签包括了元素的名字和属性.
XML允许用于创建自己的元素集.因此,元素名应该取得容易记忆,并且最好有一定的含义,让人一看到它,便对里面的数据有个大概的了解.XML是大小写敏感的,所以要么你全用大写,要么就一律用小写.
定义元素的语法如下:
<!ELEMENT elementname content>
在DTD中,你通过创建一个元素内容模型(element content model)来精确的规定一个元素中是否喊有其它元素,可以出现多少次以及按什么顺序出现.如果元素中只包含别的元素,而不包含字符数据,我们就说它只含有元素内容.

XML中命名元素的规则
* 元素名至少要含有一个字母(a-z或A-Z中的一个)
* 元素名可以用下划线(_)或冒号( : )开头.
* 第一个字符后面可以是一个或多个字母,数字,连字符,下划线或句号,但不能是空格和定位符(tab),至于标点符号只能使用连字符(-)和句号(.).

对于完整的命名规则,请参看http://www.w3.org/XML/上的在线XML介绍

元素类型
元素有空元素,自由元素和容器元素三种(如下表:)
元素类型语法 
空元素(Empty)<!ELEMENT empty.element EMPTY><!ELEMENT empty.element EMPTY>
自由元素(Unrestricted)<!ELEMENT any.element ANY><!ELEMENT any.element ANY>
容器元素(Container)<!ELEMENT TITLE(#PCDATA)><!ELEMENT TITLE(#PCDATA)>
PCDATA 表示 parsable character data,既可解析的字符数据.为了避免将这一关键字与普通的元素名混淆起来,在此关键字前加前缀字符#.

分析下面的标签结构:
<student>
<firstname> Blove </firstname>
<lastname> Saga </lastname>
<rollno> 49 </rollno>
<score> 70 </score>
</student>
要使上面的文档生效,必须创建一个DTD,里面包含student,firstname,lastname,rollno,score等五个元素的定义.另外,还要规定这五个元素是必须的或可选的;以规定顺序或任意排序;以及它们出现的次数.用户为这些规定编写元素定义,每个元素的定义可能不同.
譬如,如果firstname和lastname都是必需的元素,并且firstname要在lastname后面,那么DTD可以这样编写:
<!ELEMENT student  (firstname,lastname)><!--元素内容-->
<!ELEMENT firstname (#PCDATA)><!--元素内容-->
<!ELEMENT lastname  (#CDATA)><!--元素内容-->
注意:
数据类型#CDATA表示元素包含字符型数据,解析器不解析这些数据,其中的标签是不作为标记的.
数据类型#PCDATA表示元素包含字的数据将由解析器解析,其中的标签是被作为标记处理.
posted on 2006-06-13 16:42 蓝色Saga 阅读(500) 评论(0)  编辑  收藏 所属分类: Basic XML

只有注册用户登录后才能发表评论。


网站导航: