当前位置:首页>>XML教程>>XML教程>>XML新增批注、处理指令与CDATA 区段
XML新增批注、处理指令与CDATA 区段
2009/11/8 13:19:18
    在本章中,你将学习如何加入三种XML 标签到文件中:批注、处理指令,与CDATA 区段。虽然这些项目在格式正确(或有效)的XML 文件中并不是必要的,但是它们拥有极大用处。你可以使用批注来让文件更具可读性,也可以使用处理指令来修改应用软件处理或显示文件的方法。同时你也可以使用CDATA 区段来将字符的任何组合包含在元素的字符数据中。

加入批注

    如同你在第一章中学到的,XML 规格的第6 个目标就是「XML 文件应该是易读的且合理清楚的」。虽然XML 处理器通常会忽略批注,但是适当放置且具意义的批注可以大大增进XML 文件的可读性与清楚度,就像批注可以让程序的原始码如C 或BASIC 变得更容易了解。
    注意
    在Microsoft Internet Explorer 5 中,XML 处理器并不会将批注的文字解析成XML 卷标,也不会以任何其它方式来处理批注。然而,处理器让批注的文字可以被HTML 网页中的script 使用。在第九章中,你将学习如何使用script 来存取批注文字,就像使用XML 文件中其它的组件一样。
    如果你将文件于浏览器中直接开启,而且文件并没有参照的样式表,则Internet Explorer 5 会将所有的批注显示于XML 文件中。

批注的型式

    批注以<!--字符起始,并以-->字符结束。在这两个定义符号之间,你可以输入任何想要的文字-除了双连符号(--)之外。你甚至可以输入被禁止的(<)与(&)符号。下面是一段合法批注的范例:
<!--Here you can type any text except a double hyphen. The <and &characters are OK!-->

你可以放置批注的位置

    你可以将批注放在XML 文件中标签之外的任何地方。换言之,你可以将它们放在文件的序文中:
<?xml version="1.0"?>
<!--Here is a comment in the prolog.-->
<DOCELEMENT>
This is a very simple XML document.
</DOCELEMENT>
    你可以将批注接在文件的元素之后:
<?xml version="1.0"?>
<DOCELEMENT>
This is a very simple XML document.
</DOCELEMENT>
<!--This comment follows the document element.-->
    而你也可以将批注放在文件的内容中:
<?xml version="1.0"?>
<DOCELEMENT>
<!--This comment is part of the content of the root element.-->
This is a very simple XML document.
</DOCELEMENT>
    下面是一个违法的批注范例,因为批注被放在标签中:
<?xml version="1.0"?>
<DOCELEMENT <!--This is an ILLEGAL comment!-->>
This is a very simple XML document.
</DOCELEMENT>
    然而,你可以将批注放在文件型态宣告(DTD)中-虽然DTD 也是标签的一种-但只要批注不是位在DTD 里其它的标签中即可。你将在第五章学习DTD 的相关知识与如何将批注放在DTD中。

使用处理指令

    处理指令的目的是提供XML 处理器传送给应用软件的信息。
注意
    回想第二章所介绍的,XML 处理器是一个读取与储存XML 文件内容的软件模块。应用软件是一个个别的软件模块,负责从处理器取得文件的内容并管理与显示这些内容。当你在Internet Explorer 5 中显示XML 时,浏览器会提供XML 处理器与少部分的应用软件。(如果你撰写script来管理与显示XML 文件,你必须自己提供部分的应用软件)

处理指令的类型

    处理指令拥有下列一般类型:
<?target instruction ?>
    这里的target 是该指令被导引到的应用软件的名字。任何的名称都可以,只要遵守下列规则即可:
    名字必须以字母或底线(_)开始,后面接着零或多个字母、数字、句点(.)、连字号(-),或底线(_)。
    名称「xml」,不管是大写字母或小写字母组成的都会被保留。(如同你所见到的,你使用「xml」以小写字母来代表文件的XML 宣告,这也是处理指令的一种。)
    而instruction 则是被传送到应用软件的信息。它是由任何连续的字符组成,除了「?>」字符对以外(它被保留作终止处理指令用)。

如何使用处理指令

    你可以在XML 文件中使用的特殊处理指令是根据读取文件的处理器而定。如果你使用Internet Explorer 5 当作XML 处理器(如同本书中普遍使用的),你将发现处理器的两个主要用途:
    你可以使用标准的、保留的处理指令来告诉Internet Explorer 5 如何处理或显示文件。你在本书中见到的范例是处理指令告诉Internet Explorer 5 去使用特定样式表来显示文件。例如,下面的处理指令告诉Internet Explorer 5 使用Inventory01.css 的CSS 来显示文件:
<?xml-stylesheet type="text/css" href="Inventory01.css"?>
    如果你撰写网页的script 来处理与显示XML 文件,你可以将任何非保留的处理指令加入到文件中,而且你的script 会读取这些指令并做出适当的处理。例如,你可能会将下面的处理指令加到文件中来告诉你的script 要显示的详细程度:
<?MyScript detail="2" ?>
    在第九章中,你将学习如何使用script 来存取XML 文件中的组件,包括任何的处理指令。

你可以放置处理指令的地方

    你可以将处理指令加到XML 文件中标签以外的任何地方-意即,你可以将指令放在与放置批注相同的地方:在文件的序文中,后面接着文件元素,或者就放在元素的内容中。下面是一份处理指令位在每一个合法位置的XML 文件:
<?xml version="1.0"?>
<!--The following is a processing instruction in the prolog:-->
<?xml-stylesheet type="text/css" href="Inventory01.css"?>
<INVENTORY>
<BOOK>
<!--Here 's a processing instruction within an
element 's content:-->
<?ScriptA emphasize="yes" ?>
<T99vLE>The Adventures of Huckleberry Finn</T99vLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<T99vLE>Leaves of Grass</T99vLE>
<AUTHOR>Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
</INVENTORY>
<!--And here 's one following the document element:-->
<?ScriptA Category="books" Style="formal" ?>
    下面则是一个放在卷标中的违法处理指令的范例:
<!--The following element contains an ILLEGAL
processing instruction:-->
<BOOK <?ScriptA emphasize="yes" ??>>
<T99vLE>Leaves of Grass</T99vLE>
<AUTHOR>Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
    然而,你可以将处理指令放在文件型态定义(DTD)中-虽然DTD 也是一种卷标-但是只要处理指令不是放在同样位在DTD 中的其它标签之中即可。你将在第五章中学习有关DTD 的知识,以及如何将处理指令放在DTD 中。

包含CDATA 区段

    如同你在第三章中学到的,你不能直接将(<)或(&)符号放置在元素内容中的字符数据里。要避开这个限制的一种方法是使用字符参照(& #60;或& #38;)或预先定义的普通实体参照(& lt;或& amp;),如同你在第六章中将学到的。然而,如果你需要加入多个(<)或(&)字符,使用这些参照将变得不合适且会让资料变得难以阅读。在这种情况下,将包含限制字符的文字放置在CDATA 区段中将会比较容易完成工作。
    CDATA 区段的类型
    CDATA 区段以字符「