热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>编程开发>XML>

建立正确的XML文件

来源: 作者: 时间:2006-01-18 点击:

    不像HTML,XML 要求你一定要包含起始卷标与结束卷标。(唯一的例外是没有内容的元素,你可以使用稍后介绍的特殊空元素。)
    出现在起始卷标与结束卷标开头部份的名称(在上面的例子是TITLE),称为元素的型态(type)或通用识别代号(generic identifier:GI)。型态名称可以用来识别特殊的元素型态或元素类别,而不是特定一个元素。因此,元素可以包含多个拥有相同型态名称的元素(如列表3-1 中的BOOK 或TITLE 元素)。
    当你为XML 文件加入元素时,你可以选择任何你想要的型态名称,只要遵守下面的规则即可:
    名字必须以字母或底线开头(_),后面接着零或多个字母、数字、句号(.)、连字号(-),或底线(_)。
    XML 规格书中说明了元素的型态名称是以「xml」(以任何大写或小写字母组成)为前缀,而且将被保留成为标准规格。虽然Internet Explorer 5 并不强迫要求遵守这项限制,但最好不要使用这个前缀以避免将来产生问题。
下列是合法的元素型态名称:
Part
_1stPlace
A
B-SECTION
Street.Address.1
下列则是不合法的元素型态名称:
1stPlace <!──Digit not allowed as first character ──>
B Section <!──Space not allowed within a name ──>
B/Section <!──Slash not allowed within a name ──>
:Chapter <!──Colon not allowed as first character in IE5 ──>
A:Section <!──In IE5,allowed only if you 've declared A
as a namespace ──>
注意
    根据XML 规格书中的定义,元素名称中的冒号(:)将被保留作为命名空间(namespace)用。命名空间负责区别拥有相同名称的元素,笔者将在第七章的 <将HTML 元素加到XML 文件中并使用命名空间> 中继续讨论。只有当元素名称接在已经宣告过的命名空间之后,Internet Explorer 5 才会让你在元素名称中加入冒号。例如,A:Section 只有在你已将A 宣告成命名空间时才为合法。
    同时,起始标签中的名字必须完全与结束标签中的名字相同,包括字母的大小写。因此,底下的元素就不是格式正确的:
<Title>Chapter One</title><!──NOT well-formed.──>
    元素名字中的大小写相当重要,如同所有卷标中的文字规定一样,有大小写之分。因此,元素型态名称Ace 与ace 或ACE 并不相同。

元素内容的类型

    元素内容指的是起始卷标与结束卷标之间的文字。你可以在文件的内容包括下列型态的项目:
    套迭的元素 。在列表3-1,元素INVENTORY 与BOOK 都包含了套迭元素当作元素的内容:

    字符数据 。字符数据是表达元素内容信息的文字,例如TITLE 元素中特定的书籍标题。

    下面介绍的是一个由字符数据与套迭的元素所组成的元素内容:

    当加入字符数据到元素中时,你可以加入除了左括号(<),与连接符号(&)或字符串(] ] >)之外的字符。
    注意
    XML 解析器会扫瞄XML 卷标中元素的字符数据。你不可以加入左角括号(<)、连接符号(&),或字符串(] ] >)当作字符数据的一部份,因为解析器会将(<)当作套迭元素的起始,将(&)当作实体或字符参照的起始,以及将(] ] >)当作CDATA 区段的结束。(笔者将在第六章讨论字符参照;在第四章讨论CDATA 区段)。如果你想要加入(<)或(&)来当作字符数据的一部份,你可以使用CDATA
区段。你也可以使用字符参照来加入任何字符(包括不在键盘上的字符),而且可以借着使用预先定义的普通实体参照来加入某些字符(如<或&)。
    普通的实体参照与字符参照 。下面是一个包含普通实体参照与字符参照的元素范例:

    CDATA 区段 。CDATA 区段是一个你可以自由加入除了]] >字符串之外任何字符的文字区块。下面是一个元素中CDATA 区段的范例:

    处理指令 。处理指令提供信息给XML 应用程序使用。(请参阅 第四章 )
    批注 。批注是XML 文件的注释部分,其文字是可以阅读了解的,但XML 处理器会将之忽略。(请参阅 第四章 )
    下面是一个包含处理指令与批注的元素范例:

空元素

    你也可以加入空元素(empty element;即没有内容的元素)到你的文件中。你可以借着在起始卷标后立即放置结束卷标来建立一个空元素,如同这个范例所示:
<HR></HR>
    或者,你可以借着使用特殊的空元素卷标(empty-element tag)来省去输入,如下所示:
<HR/>
    这两个标签拥有相同的意义。
    因为空元素没有内容,你可能会质疑其用途为何。
    下面介绍的是两种可能的用途:
    你可以使用空元素告诉XML 应用程序来执行某个动作或显示对象。在HTML 中的例子BR 是空元素,它能告诉浏览器加入一个换行,而HR 空元素,则是告诉浏览器加入一个水平分界线。换言之,仅拥有元素外观与特定名称的元素-未含任何内容-还是可以提供许多重要的信息给应用程序。
    空元素可以透过属性来储存信息,你将在本章后面学到属性的知识。(你尚未见到拥有属性的元素。)在HTML 中的例子是IMG(影像)空元素,它包含了告诉处理器那里可以找到图形文件,以及如何显示图形等信息的属性。
    提示
    如同你将在第七章学到的,串接样式表(CSS)可以使用空元素来显示影像。在第八章,你将学习如何运用数据链路来使用空元素或非空元素的属性。而在第九章与第十章中,你将学习如何使用HTML script(第九章)与XSL 样式表(第十章)来使用元素(空或非空元素)及元素的相关属性并执行适当的动作。

建立不同型态的元素

    1. 在文字编辑器中 开启 一个新的、空白文字文件,并输入显示于列表3-2 中的XML文件(您可以在随书光盘的 Inventory03.xml 档案中找到)。你也可以使用你在第二章中所建立的 Inventory.xml 文件(在列表2-1 与随书光盘中都有提供)来当作出发点。
    2. 使用文字编辑器的 存盘 指令,将文件储存到本机硬盘,并指定文件名为 Inventory03.xml 。
Inventory03.xml
<?xml version="1.0"?>
<!--File Name:Inventory03.xml -->
<?xml-stylesheet type="text/css" href="Inventory02.css"?>
<INVENTORY><!--Inventory of selected 19th Century
American Literature -->
<BOOK>
<COVER_IMAGE Source="Huck.gif"/>
<TITLE>The Adventures of Huckleberry
Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<COVER_IMAGE Source="Leaves.gif" />
<TITLE>Leaves of Grass</TITLE>
<AUTHOR>Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK>
<COVER_IMAGE Source="Faun.gif" />
<TITLE>The Marble Faun</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK>
<COVER_IMAGE Source="Moby.gif" />
<TITLE>
Moby-Dick
<SUBTITLE>Or,the Whale</SUBTITLE>
</TITLE>
<AUTHOR>Herman Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
</INVENTORY>
注意
    你所输入的文件使用了一个名为 Inventory02.css 的CSS,这是你在之前的练习中所建立的(在本书的列表2-4)。确定这个样式表档案是放在与 Inventory03.xml 相同的目录中。
    3. 在Windows 档案总管或目录窗口中,利用鼠标双击你刚储存的 Inventory03.xml 档案:
    Internet Explorer 5 的显示如下图所示:

    你输入的文件包含了下列型态的元素与元素内容:
    元素中包含批注作为内容的一部份(INVENTORY)。注意浏览器并不会将批注显示出来。
    在每一个BOOK元素的开头部份有一个名为 COVER_IMAGE 的空元素。这个元素的目的是告诉XML 应用程序显示书籍封面上的特定影像。(Source 属性包含了影像档案的名称)然而,在这个范例中要能使用这样的一个空元素,你需要透过HTML 网页中的script 或XSL 样式表(将于第九章与第十章中讨论)来显示XML 文件,而不是使用简单的CSS。
    一个包含字符数据与子元素(SUBTITLE)的元素(在Moby-Dick 例子中是TITLE)。注意浏览器会将字符数据与子元素显示在同一行上,并使用相同的格式(指定到TITLE 元素的CSS 格式是由SUBTITLE 元素所继承而来的)。

为元素加入属性

    在元素的起始卷标中,或是在空白标签中,你可以含括一个或多个属性规格(attribute specifications)。属性规格是一个与元素结合的名称-数值对(name-value pair)。例如,下面的PRICE 元素包含了一个名为Type 的属性,其值被指定为retail:
<PRICE Type="retail">$10.95</PRICE>
    对其他的书籍而言,这项属性可能设定成其它值,例如设定成wholesale。
    下面的BOOK 元素包含了两个属性,Category 与Display:
<BOOK Category="fiction" Display="emphasize">
<TITLE>The Marble Faun</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
    下面的空元素则包含了名为Source 的属性,指出包含要被显示影像的文件名称:
<COVER_IMAGE Source="Faun.gif" />
    加入属性提供了另一种方法来为元素加入信息。一般来说,你可以放置大量你想要显示的元素数据于元素的内容中。而且,你可以使用属性来储存元素不同的特性,并不必然是那些要显示的资料。如同目录,或者是显示指令。然而,在XML 的规格书中,对于应该被储存在属性或内容的信息型态作了严格的区别。
注意
    当你使用CSS 来显示XML 文件(使用方法将在第七章讨论),浏览器并不会显示属性或属性值。然而使用数据链路(第八章)、HTML 网页中的script(第九章),或XSL 样式表(第十章)来显示XML 文件,可让你存取属性与属性值,或者执行适当的动作。

建立属性的规则

    如同你所看到的,属性规格是由属性名称后面接着等号,再接着属性值所构成的。你可以选择你想要的任何名称,只要遵循下面规则即可:
    名称必须由字母或底线所组成(_),后面接着零或多个字母、数字、句点(.)、连字号(-),或底线(_)。
    XML 规格书中陈述了属性的名称以「xml」(任何大写或小写字母的组合)作为起始,该前缀被「保留作为标准规格」。虽然Internet Explorer 5 并未执行这项限制,但最好还是不要使用该前缀以避免将来的冲突。
    特定的属性名称只能出现在起始卷标或空白卷标中一次。
    例如,下面起始卷标中的属性名称是合法的:
<ANIMATION FileName="Waldo.ani">
<LIST _1stPlace="Sam">
<ENTRY Zip.Code="94941">
    下面的属性名称则是违法的:
<!──Duplicated attribute name in same tag:──>
<ANIMATION FileName="Waldo1.ani" FileName="Waldo2.ani">
<LIST 1stPlace="Sam"><!──Digit not allowed as
first character ──>
<ITEM A:Category="cookware"><!──In IE5,allowed only if you 've
declared A as a namespace ──>
注意
    根据XML 规格,在属性的名称中冒号的使用被保留供指定命名空间用。命名空间被用来区分拥有相同名字的属性;命名空间将在第七章中的 <将HTML 元素加到XML 文件中并使用命名空间> 作讨论。只有当元素名称接在已经于文件中宣告过的命名空间之后,Internet Explorer 5 才会让你在元素名称中加入冒号。例如,只有当你已经将A 宣告成命名空间时,A:Category 才是合法的。

合法属性值的规则

    你指定到属性的值是包含在引号内的一连串字符,称为引号字符串(quoted string),或literal。你可以指定任何的literal 值到属性中,只要遵守下面的规则即可:
    字符串可以使用单引号(')或双引号(")来包围。
    字符串中不能包含用来包围字符串的引号。
    字符串可以包含字符参照或普通内部实体参照。(第六章中将讨论字符参照与实体参照)
    字符串不能包含(<)字符。(解析器会把该字符与XML 卷标的起始符号混淆)
    字符串不能包含(&)字符,除了作为字符参照或实体参照的起始外。
    你已经看过合法属性规格的范例。下面的属性规格则是违法的:
<EMPLOYEE Status=""downsized""><!--Can 't use delimiting quote within string.-->
<ALBUM Type="<CD>"><!--Can 't use <within string.-->
<WEATHER Forecast="Cold &Windy"><!--Can 't use &except to start a reference.-->
    如果你想要在属性值中包含双引号("),你可以使用单引号(')来包围界定字符串,如下面范例所示:
<EMPLOYEE Status='"downsized"'><!--Legal attribute value.-->
    同样地,要将单引号(')包含在字符串中,就使用双引号(")来将字符串包围:
<CANDIDATE name="W.T.'Bill ' Bagley""><!--Legal attribute value.-->
提示
    你可以借着使用字符参照来避开这种字符限制并输入任何字符到属性中,或是使用-如果可以的话-预先定义的普通实体参照。笔者将在第六章中解释字符参照与预先定义的普通实体参照。
    如果你建立一个不包含文件型态宣告的格式正确的文件(如你在本章中所作的),你可以赋予属性符合上述规则的任何值。然而,如同你将在第五章中学到的,当你建立文件型态宣告并将属性定义于该宣告内,你可以限制那些可以被指定到属性的值的型态。例如,你可以将属性定义成其值只能接受「yes」或「no」。因此,将某些型态的信息储存到元素的属性中而非内容中的好处,就是你可以获得更多可以被指定到属性上的数据型态上的控制权,并让解析器实行这些型态的限制(如同你将在第五章中看到的,基本的XML 规格并不提供方法来限制元素中字符数据的型态)。

将内容转换成属性

    1. 在文字编辑器中 开启 一份新的、空白的文本文件,并输入列表3-3 中显示的XML文件。(你可以在随书光盘的 Inventory04.xml 档案中找到)你也可以使用你之前输入过的 Inventory.xml 文件(在列表2-1 与随书光盘都有提供)作为起始点。
    2. 使用文字编辑器的 另存新文件 指令将文件储存于本机硬盘上,文件名为 Inventory04.xml 。
Inventory04.xml
<?xml version="1.0"?>
<!--File Name:Inventory04.xml -->
<?xml-stylesheet type="text/css" href="Inventory02.css"?>
<INVENTORY>
<BOOK Binding="mass market paperback">
<TITLE>The Adventures of Huckleberry
Finn</TITLE>
<AUTHOR Born="1835">Mark Twain</AUTHOR>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK Binding="hardcover">
<TITLE>Leaves of Grass</TITLE>
<AUTHOR Born="1819">Walt Whitman</AUTHOR>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK Binding="trade paperback">
<TITLE>The Marble Faun</TITLE>
<AUTHOR Born="1804">Nathaniel
Hawthorne</AUTHOR>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK Binding="hardcover">
<TITLE>Moby-Dick</TITLE>
<AUTHOR Born="1819">Herman Melville</AUTHOR>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
</INVENTORY>
注意
    你输入的文件使用了你在前面练习中所建立、名为的 Inventory02.css 的CSS(可以于列表2-4 与随书光盘中找到)。请确定这个样式表档案是与Inventory04.xml 位在相同的目录中。
    3. 在Windows 档案总管或目录窗口中,双击你刚储存的 Inventory04.xml 档案:Internet Explorer 5 的显示如下图所示:

    你输入的文件是以 Inventory.xml 为基础,该档案是你在之前的练习中建立的。除了拥有比 Inventory.xml 较少的元素外,新文件拥有两项修正,藉以说明属性的使用:
    在每一个BOOK 元素中,书籍的连结信息都从内容(以BINDING 套迭元素的型式)被转换成名为Binding 的属性。例如,你可能会制作这种转换,因为你想储存连结的型态,但是当使用CSS 来显示该文件时,你却不想将之与其它的书籍信息显示出来。(在上图中,请注意Internet Explorer 5 并未显示属性的值)
    一个名为Born 的属性被加到每一个AUTHOR 元素中,以储存作者的出生日期。这是一个你可能想要储存,但却不想显示的较不重要信息的范例。将这类信息隐藏并指出该信息是较不重要的的方法之一,就是将它指定到属性中,而不是放在元素的内容中。
    这些只是属性众多用途的极少部分。你将在第五章中看到更多的用法。


上一篇:DOM的结构
下一篇:xml图片的生成
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接