BloveSaga

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

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 12 文章 :: 119 评论 :: 0 Trackbacks

2006年6月13日 #

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 @ 2006-06-13 16:42 蓝色Saga 阅读(136) | 评论 (0)编辑 收藏

  XML 文档是一个含XML标记的ASCII文本文件,它的扩展名是.xml, 如: employee.xml在开始编写XML文档之前,你应该了解组成XML文档的各个部分.一个XML文档的主要成分包括:

 * 元素
 * 内容
 * 属性
 * 注释

 元素
 元素是XML文件的基本构造块,作为主要的标注组件,用来描述文件的内容.每一个元素用一个标签来表示一段文本信息.大部分标签是成对出现的,开始标签在数据的开始处,结束标签放在数据的末尾.开始标签和结束标签之间嵌有信心的元素称为容器元素.例如:
    <Title> My Title </Title>
我们知道,上面语句中的Title是HTML里的元素,用来显示浏览器窗口的标题.在XML里,你可以创建自己的元素,如:
   <empname> John Rambo </empname>
在上面的语句中,empname是由开始标记(<>)和结素标记(</>)定义的元素,嵌在这两个标签中的信息就是这个元素的内容.利用元素嵌套,你可以构建一个分层的结构.
也有一些标签不是成对出现的,被称作空元素.空元素不能包含的元素或数据,因为它没有开始和结束标签.最简单的空元素例子是用<BR>标签表示的断行元素.
在一个XML文件中,可以有一个或多个元素,但只能有一个根元素,根元素下面允许有多个子元素.

内容
在XML中,由元素表示的信息,称为内容.请看下面的例子:
  <TITLE> LION KING </TITLE>
上面这行语句中,LION KING就是TITLE元素所表示的内容.

属性
属性提供元素的补充信息.每个属性有一个属性名和属性值,属性值可以是数字,单词,或URL.

在HTML中,我们经常使用字体元素的颜色属性,如:
<Font color="red">Displayed in red</Font>
其中,color是属性名,其属性值是red.
在XML中,属性值一律要加上引号.例如:
<empname doj="2006">John Rambo</empname>
这里,"2006"是doj属性(data of joining)的属性值,用来描述元素empname.

注释
注释是用来给XML文档加上注释的,浏览器和XML处理器都忽略注释,不加处理.使用注释的好处是能使所有使用XML文档的人都对文档中各种元素的用法一目了然.

要在XML文件中输入注释,可以依次输入一个小于号,一个感叹号和两个横杠,再输入注释的文本内容,并确保文本中没有两个横杠.这一点W3C规定的,以保持XML与SGML的兼容.最后输入两个横杠和一个大于号来结束注释.例如:
<!-- Writing comments in XML Documents-->
这就是注释.


结构良好的XML文档
一个结构良好的XML文档应该遵守以下五个基本规则:

* 标签不能隐含,必须显式出现.每一个起始标签必须有对应的结束标签;每一个结束标签也必须有对应的起始标签,对比一下HTML和XML的不同:

在HTML中,可以用下面的这段代码创建一个编号列表:
<OL>
<LI> Number list item one
<LI> Number list item two
<LI> Number list item three
</OL>
在上诉代码中,用<OL>和</OL>来表示这是一个顺序列表,用<LI>表示当前列表项的开始,而列表项的结束,则是靠后一列表项的开始来暗示的.如果这段代码出现在XML文档中,浏览器是不会正确解析这个页面的,
因为它并不是一个结构良好的文档.
XML文档中的标签必须显式出现,不能隐含.如果用XML实现上面的例子,必须这样书写:
<OL>
<LI> Number list item one</LI>
<LI> Number list item two</LI>
<LI> Number list item three</LI>
</OL>
从上面这个例子中,你能看到,第一个列表必须包含在开始标签和结束标签之间,以满足结构良好的XML文档的第一个规则.

* 空标签的结束字符'>'前必须使用'/'字符.
所谓空标签,是指标签的所有信息都放在它的分界符里,没有任何属于它的文本信息.比如象HTML中的<BR>和<IMG>,都不需要结束标签,因为标签里已经包含了所有的信息.

HTML中的标签全部是预定义的,浏览器能够直接识别.但是必须记住,XML中没有任何预定义的标签,用户为自己的页面定义自己的语言.正因为这样,XML并不能知道<BR>,<IMG>是空标签,你必须在标签的结束处加上斜杠(/),来指明他们是空标签.就像这样:
<BR/>
<IMG SRC="image.gif"/>

* 所有的属性值必须用双引号括起来.
在HTML当中,下面的语法是正确的:
<TD WIDTH="25%">
<TD WIDTH=25%>
然而在XML当中,由于属性值必须用引号括起来,所以只有前面一句和</TD>配合起来才是合法的.

* 标签不能交叠使用
比如说,下面这行语句就交叠起来了:
<CITY>Chicago<STATE>Michigan</CITY></STATE>
在XML中,必须从里到外地关闭标签,正确的顺序是:
<CITY>Chicago<STATE>Michigan</STATE></CITY>

* 标签大小写敏感,每次都必须严格匹配
在XML文档中,必须区分大小写,如果你写了如下的语句,将导致一个致命的错误(fatal error):
<P> Able was I, ere I saw Elba</p>
标签<P>不能用来关闭标签</p>,因为两者的大小写是不同的.所有的标签必须大小写严格匹配.

一个结构良好的XML文档,就是一个严格遵循XML标签规则,但没有文档类型定义(DTD, Document Type Definition)的文档.

posted @ 2006-06-13 13:08 蓝色Saga 阅读(42) | 评论 (0)编辑 收藏

理解XML
 
    XML表示可扩展标记语言(eXtensible Markup Language).其中,"可扩展"这个词意味着开发者能够自由扩展在描述文件方面的能力,可以为自己的应用程序定义有实际意义的标签.XML是基于文本的,允许开发者在各种应用程序之间传递和交换结构化数据,同时大大便利了不同服务器之间的数据传输.用XML表注的数据能够被所有的设备识别,从带主机的大型机和微型机,到掌上电脑和蜂窝电话.
    与诸如HTML,DHTML,CSS等其他网页技术相比,XML更注重数据的结构,而不是数据的表现形式.让我们看看下面的这段代码:
 <B>XML Bible</B>
 <P>
Elliotte Rusty Harold <BR>
IDG Books Worldwide <BR>
$39.99
    稍微看一下,你可能已经知道了,它将的是一本关于书的基本信息:作者,出版社,价格.但是,这里用作标记的元素,比如<B>,<P>等,并没有揭示出这是一本有关书的信息,它只是描述了这几行信息是如何显示的.比如,在第一行中用了<B>,就表示浏览器处理的时候,要以粗体字显示这行文本.
    同样对这些信息,我们用XML标注如下:
<BOOK>
<NAME>XML Bible</NAME>
<AUTHOR>Elliotte Rusty Harold</AUTHOR>
<PUBLISHER>IDG Books Worldwide</PUBLISHER>
<PRICE>$39.99</PRICE>
</BOOK>
    上面的小例子揭示出,通过定义一些有含义的标签,XML扩展了用户描述文件的能力.你可以根据应用程序的需要,定义任意多个标签.在上面的代码段中,没有任何关于如何显示信息的描述.XML将数据的结果与显示分离开来,这似乎不太合理,其实很有益处的.

使用XML的优越性

 
    XML不仅对数据从服务器到客户端的传输大有好处,对于应用程序之间的数据传输,也是十分理想的.我们将它的优越性列举如下:
* 可使用特定领域的词汇
*  数据交换
*  智能化查询
*  让用户选择显示的数据
*  局部更新

可使用特定领域的词汇
    XML是没有预定义标签的,你必须自己定义标签,用来标注你的数据.也就是说,你可以用XML创建自己的表注语言(称为XML词汇表).XML允许每个特定的行业根据需要定义自己的标签集合,这样浏览器就不必处理成千上万的标签集了.利用XML,已经创建了若干新的标记语言,比如W3C特别推荐的MathML,一种用于显示数学公式和科学数据的专用标记语言,就是基于XML的.

数据交换
    数据交换在进行电子商务的交易时是极为重要.数据交换的关键在于企业之间或企业内部部门之间的标准数据接口,使用存储格式不同的数据能够进行交换.XML为以文本格式式存储的数据提供了对于结构的定义和管理,可以作为数据交换的标准格式或协议,是数据交换双方的系统差异变得无关紧要,并且产生清晰易读的文件.XML避免了同类产品的一些常见弊病,如扩展性差,缺乏国际化和本地化的支持,平台相关等.作为一种非常健壮的数据交换格式,XML将继续发展,不断完善.

智能化查询
    由于XML的出现,只能搜索引擎将成为现实,可将XML文档中的数据进行智能化搜索,得到更精确的查询结果.为了更好的理解XML实现内容定义的意义,我们来比较一下下面的两个例子:
例1: The best pricture award in 1998 went to the film <I>Titanic</I>.
例2: The best pricture award in 1998 went to the film  <FILM>Titanic<FILM>.
在第一例子中,搜索引擎并不能确定所涉及的一艘轮船,一场表演,一部电影,抑或是一个形容词.这样的搜索精度比较低.而在第二个例子中,你能知道"Titanic"是一部电影的名字.如果现在搜索引擎要搜索的是电影 "Titanic",那么在这个文档中就能找到一个精确的匹配项.

 让用户选择显示的数据
      XML支持用户端的数据处理.用户可以选择一个,若干或全部数据记录,也可以按照不同的属性进行排序,或者切换到图形化查看方式,而且不需要服务器针对每一次操作发送数据.相同的数据可以用不同的方式来显示,也可以仅仅显示数据的一个子集,这些都取决于用户与这些数据的相对关系.比如,会计部门是可以访问财务信息的,而购买东西的顾客却不能反问这部分信息.

 局部更新
      当需要更新XML文档中的数据时,并不需要更新整个页面,而只要重新下载那些变化了的数据,这显然加快了更新的速度.例如:股票交易中的数据是动态的,如果每次都更新整个页面的话,都需要很多时间.而使用XML,将只改变变化了的数据.

XML的设计目标
     
XML是针对大规模的电子出版物的挑战来设计的,同时在Web数据的交换中也充当着越来越重要的角色.
根据W3C的有关文件,XML将在如下几个方面发挥重要作用:
* 实现国际化,独立于媒体的电子出版.
* 允许个产业部门制订与平台无关的数据交换协议,尤其针对电子商务数据交换的协议.
* 使用允许自动处理的格式,将信息传递给用户代理商
* 让人们用低价软件就可以实现数据处理
* 允许人们按照自己的方式显示信息
* 提供一种有关信息的数据(写作 metadata),以帮助人们寻找和发现信息,实现信息的生产者和消费者之间的双向寻找.

  任何形式电子商务的成功,都有赖于一个公共词汇表的广泛使用.部分XML词汇表列举如下:

  频道定义格式(CDF, Channel Definition Format)-一种基于XML的,用于创建web频道的数据格式.所谓web频道,是一种实现web服务器到客户端的数据自动发送的技术.
 
  开放软件描述(OSD, Open Software Description)-用于网上自动安装软件,而不需要任何人工干预.

  开放式金融交易(OFX, Open financial Exchange)-被个人金融应用程序用来作为个人和金融组织之间进行网上交流的工具.

  Meta内容框架(MCF, Meta Content Framework)-用来定义关于信息的数据,以实现对信息的编目和搜索.

  资源描述框架(RDF, Resource Description Framework)-用于描述各种类型的资源,以实现对资源的编目,搜索和引用.

  无线标记语言(WML, Wireless Markup Language)-用于在无线网络上的数据奋发,采用无线访问协议.

  化学标记语言(CML, Chemical Markup Language)-用来定义化学公式.
 
   数学标记语言(MathML, Mathematical Markup Language)-用来定义复杂的数学公式.

posted @ 2006-06-13 12:02 蓝色Saga 阅读(51) | 评论 (0)编辑 收藏