建立并显示您的第一份XML文件
本章也提供了本书其它部份将要探讨的主题的摘要预览。;
建立XML;文件;
因为XML;文件是以纯文字撰写,所以你可以选择喜爱的文字编辑软件来撰写XML;文件。例如,你可以使用Microsoft;Windows;提供的笔记本编辑器。或者更进一步,你可以使用拥有方便输入原始程序代码特性的程序语言编辑器来撰写,如Microsoft;Visual;Studio;的文字编辑器(该文字编辑器是伴随着Visual;C++、Microsoft;Visual;InterDev、Microsoft;Visual;J++,以及其它Visual;Studio;应用软件的)。;
建立XML;文件
1.;在文字编辑器中建立一份新的空白档案,并输入显示于列表2-1;的XML;文件。(你将在随书光盘的;Inventory.xml;档案中找到这段程序代码)。你可以省略BOOK;元素的某些部份。你不需要输入全部八个元素,只要三个或四个即可。(一个BOOK;元素是由<BOOK>与</BOOK>两个卷标加上位于卷标之间的全部文字所组成。)
2.;使用文字编辑器的;存盘;指令来将文件储存到本机硬盘,文件名取为;Inventory.xml;即可。
Inventory.xml
<?xml;version="1.0";?>
<!--File;Name:Inventory.xml-->
<INVENTORY>
<BOOK>
<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>
<TITLE>Leaves;of;Grass</TITLE>
<AUTHOR>Walt;Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Legend;of;Sleepy;Hollow</TITLE>
<AUTHOR>Washington;Irving</AUTHOR>
<BINDING>mass;market;paperback</BINDING>
<PAGES>98</PAGES>
<PRICE>$2.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Marble;Faun</TITLE>
<AUTHOR>Nathaniel;Hawthorne</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Moby-Dick</TITLE>
<AUTHOR>Herman;Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Portrait;of;a;Lady</TITLE>
<AUTHOR>Henry;James</AUTHOR>
<BINDING>mass;market;paperback</BINDING>
<PAGES>256</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Scarlet;Letter</TITLE>
<AUTHOR>Nathaniel;Hawthorne</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>253</PAGES>
<PRICE>$4.25</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Turn;of;the;Screw</TITLE>
<AUTHOR>Henry;James</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>384</PAGES>
<PRICE>$3.35</PRICE>
</BOOK>
</INVENTORY>
XML;文件的剖析
一份XML;文件,如同你之前所输入的范例,是由两个主要部份组成:序文(prolog)与文件元素(document;element)。(文件元素也称为根元素(root;element))
序文
范例文件中的序文由三行指令组成:
<?xml;version="1.0"?>
<!--File;Name:Inventory.xml-->
第一行是XML;的宣告部份,说明这个XML;文件的版本代号。(在撰写本书的时候,最新的XML版本为1.0;版。)虽然在规格中明文指出应该要有宣告部份,但XML;宣告部份是选择性的。如果你要加入XML;宣告部份,它必须放置在文件的起始位置。
序文的第二行是由空格符组成。为了加强文件的可读性,你可以在序文内各个项目之间加入大量的空白。XML;处理器在处理时会忽略这些空白。
第三行则是批注。在XML;文件中加入批注是选择性的,但加入批注可以加强文件的可读性。批注是以<!─;─字符起始,以─;─>字符结束。你可以在这两组字符之间输入任何想要的文字(除了「-」),XML;处理器会将它忽略。
注意
所有在这个章节所提到的序文(Prolog)组件都会在本章的后面做详细介绍。
序文的部份也可以包括下列选择性的要素:
文件型态宣告,负责定义文件的型态与结构。如果使用文件型态宣告,必须将这个宣告放在XML;宣告之后。
一个或多个处理指令,提供XML;处理器传输给应用程序的信息。在本章稍后,你将见到用来将样式表链接至XML;文件的处理指令。
注意
XML;处理器是负责读取XML;文件并提供对文件内容使用权的软件模块。它也提供使用权给负责管理与显示文件内容,称为应用程序(application)的软件模块。当你在Internet;Explorer;5;中显示XML;文件时,浏览器会提供XML;处理器以及少部份的应用程序。(如果你撰写HTML;与script;来显示XML;文件,你必须自己提供部份的应用程序。)注意,这里使用应用程序(application)这个名词与XML;应用程序(XML;application)(或字汇)并不相同,在第一章中笔者将XML;应用程序定义成可以用来描述特殊型态文件的一般用途元素集与文件结构。
文件元素
XML;文件的第二个主要部份是一个称为文件元素或根元素的单一元素,可以包含附加的元素。在XML;文件中,元素指的是文件的逻辑结构,并且包含文件的信息内容(在范例文件中就是书籍信息,如标题、作者姓名与价格)。典型的元素是由起始卷标、元素内容,以及结束卷标所组成。元素内容可以是字符数据、其它(巢状)元素,或两者的组合。
注意
XML;文件中的文字部份是由混和的卷标与字符数据所组成。卷标是描述文件结构的限定文字-即元素的起始卷标、元素的结束卷标、空白元素卷标、批注、文件型态宣告、处理指令、CDATA章节定义符号、实体参照,以及字符参照等(你将在后面的章节中学到每一种型态的卷标)。所有其它的文字都是字符数据-即文件真实信息的内容(在范例文件中就是标题、作者姓名、价格,以及其它书籍信息)。
在范例文件中,其文件元素是INVENTORY。它的起始卷标是<INVENTORY>,结束卷标是</INVENTORY>,而其内容则是八个巢状的BOOK;元素。
注意
XML;文件中的文件元素很类似HTML;网页中的BODY;元素,除了你可以赋予XML;元素任何合法的名称外。
每一个BOOK;元素同样也包含互相套迭的元素。
注意
出现在起始卷标与结束卷标的开头部分的名称称为元素型态。
套迭于BOOK;元素中的每一个元素,如TITLE;元素,都只包含字符数据。
在本书的第二篇;,你将学习把元素加到XML;文件,并且将属性包含在元素起始卷标中的所有相关事项。
某些基本的XML;规则
下面介绍的是少数用来建立格式正确的XML;文件的基本规则。一份格式正确的文件是文件可被浏览器或其它软件处理时符合最少规则的文件。你在本章前面所输入的文件(列表2-1)便是一个符合这些规则格式正确的XML;文件范例。
文件必须严格限定只能拥有一个顶层元素(文件元素或根元素);。所有其它的元素都必须套迭在这个元素之下。
元素必须适当地套迭;。也就是说,如果元素是在另一个元素之中开始,它必须在同一个元素之中结束。
每一个元素都必须拥有起始元素与结束元素;。不像HTML,XML;并不允许你省略结束标签-即使是浏览器能够判断元素在何处结束。(然而,在第三章中,你将学习一种简洁的卷标来使用空白元素-即没有内容的元素。)
在起始卷标中,元素型态的名称必须完全符合对应结束标签中的名称;。
元素型态的名称是区分大小写的;。事实上,所有XML;卷标中的文字都是有大小写区分的。例如,下面的元素因为起始卷标中的型态名称与结束卷标中的型态名称并不相同,所以它是不合法的。
<TITLE>Leaves;of;Grass</Title><!--illegal;element;-->
提示
在本书的第二篇,你将学习撰写格式正确的(well-formed),同时也是有效的(valid)XML文件的用法。这样的文件必须符合更多严格的要求。
显示XML;文件
你可以直接在Internet;Explorer;5;浏览器中直接开启XML;文件,就像你开启HTML;网页一样。如果XML;文件并未链接样式表,则Internet;Explorer;5;将会只显示全部文件的文字内容,包括所有卷标(例如,卷标和批注)以及字符数据。Internet;Explorer;5;会将不同的文件组件以不同颜色的程序代码来表示,来帮助你识别这些组件,并且它会将文件的元素以可收缩/伸展的树状结构清楚地指出文件的逻辑结构,并允许你以不同程度来观看文件的逻辑结构。
然而,如果XML;文件包含链接至样式表,Internet;Explorer;5;将会只显示文件元素的字符数据,而且它会根据你在样式表中指定的规则来安排这些数据。你也可以使用串接样式表(CSS-与用在HTML;网页中的样式表型式相同)或延伸样式表语言(XSL)的样式表(一个更具威力的样式表,利用XML;语法撰写,而且只能用在XML;文件)。
显示不含样式表的XML;文件
1.;在Windows;档案总管或目录窗口中,利用鼠标双击该文件名-;Inventory.xml;,该档是你在前一个练习中所建立的。
Internet;Explorer;5;将会显示该文件,如下图所示:
2.;尝试着改变显示文件元素的详细程度。按下位于起始标签左边的减号「-」会将元素收缩,而按下元素旁的加号「+」则可以展开元素。例如,如果你按下INVENTORY;元素旁边的符号,如下所示:
全部的文件元素将会收缩,如下图所示:
捕捉发生在Internet;Explorer;5;中的XML;错误
在Internet;Explorer;5;显示XML;文件之前,IE;内建的XML;解析器会解析文件的内容。如果解析器侦测到错误,Internet;Explorer;5;会显示内含错误讯息的网页,而不是企图将文件显示出来。无论XML;文件是否有链接样式表,Internet;Explorer;5;都将显示错误网页,而不是文件的内容。
注意
XML;解析器是XML;处理器的一部份,负责在XML;文件中进行扫瞄,解析其结构,并侦测任何语法上的错误。(请参阅第24;页看看;XML;处理器;的定义。)
在下面的练习中,你将故意在;Inventory.xml;文件中引发错误,来研究Internet;Explorer;5;中的错误检查功能。
1.;在文书编辑器中,;开启;你在前面范例中所建立的;Inventory.xml;文件。将第一个TITLE;元素从
<TITLE>The;Adventures;of;Huckleberry;Finn</TITLE>
改成
<TITLE>The;Adventures;of;Huckleberry;Finn</Title>
2.;将修改过的文件;储存;。
3.;在Windows;档案总管或目录窗口中,利用鼠标双击;Inventory.xml;档案。
Internet;Explorer;5;将会显示下面的错误讯息网页,而不是XML;文件的内容:
注意
当你直接在Internet;Explorer;5;中开启XML;文件,如同你在本章中所做的,解析器将只检查文件是否为格式正确的(well-formed);接着如果检测到错误,解析器就会显示错误讯息。它并不会检查文件是否为有效的(valid)。
4.;因为你将在本章稍后再次使用;Inventory.xml;,所以你应该将第一个TITLE;元素的结束卷标回存成原始格式(</TITLE>),然后再;储存;该文件。
即使你并未将样式表链接到XML文件,Internet;Explorer;5;还是会使用预设的XSL样式表来显示文件;并出现「无法使用XSL;样式表」,这个部分你将在第十章中学习。
提示
如同你在本书的各个章节中所学到的,你可以直接在Internet;Explorer;5;开启该文件,来快速地检查XML;文件是否为格式正确的。(如果你透过HTML;网页来显示一个XML;文件,如第三篇中将介绍的,含有错误的XML;文件会无法显示,除非你有明确地撰写script;来负责显示,否则你将不会看到错误讯息。)
显示使用串接样式表的XML;文件
1.;在文字编辑器中;开启;一个新的、空白的文本文件,并输入列表2-2;中所列的CSS程序代码。(你将在随书光盘的Inventory01.css;中找到。)
2.;使用文字编辑器的;存盘;指令来将样式表储存到本机硬盘上,并取名为Inventory01.css。
你所建立的CSS;将会告诉Internet;Explorer;5;如何来安排元素的字符,如下所示:
每一个BOOK;元素之间以12;Points;的空间来显示(;margin-top:12pt),并在元素的前后放置一个换行(display:block),并且使用10;Points(font-size:10pt)的字体来显示元素。
以斜体方式显示每一个TITLE;元素(font-style:italic):
以粗体方式显示每一个AUTHOR;元素(font-weight:bold):
Inventory01.css
/*File;Name:Inventory01.css;*/
BOOK
{display:block;
margin-top:12pt;
font-size:10pt}
TITLE
{font-style:italic}
AUTHOR
{font-weight:bold}
3.;在文字编辑器中,;开启;你在前面的练习中所建立的;Inventory.xml;文件。将下列的处理指令加到文件序文的结尾部份(把指令加到INVENTORY;元素之上):
<?xml-stylesheet;type="text/css";href="Inventory01.css"?>
这个处理指令会将CSS;链接到你刚建立的XML;文件。结果是,当你在Internet;Explorer;5;中开启该文件,浏览器会根据样式表中的指令来显示文件内容。
4.;为了表现你将赋予该文件的新档名,将靠近文件起始部份的批注从
<!--File;Name:Inventory.xml-->
改变成
<!--File;Name:Inventory01.xml-->
列表2-3;显示了完整的XML;文件。(你可以在随书光盘的;Inventory01.css;中找到这段程序代码)
5.;使用文字编辑器的;另存新文件;指令,将Inventory01.xml;中修改过的文件储存到本机硬盘上。确定将文件储存在与档案Inventory01.css;所在相同的目录下。
你所建立的CSS;将会告诉Internet;Explorer;5;如何来安排元素的字符,如下所示:
Inventory01.xml
<?xml;version="1.0;"?>
<!--File;Name:Inventory01.xml-->
<?xml-stylesheet;type="text/css";href="Inventory01.css"?>
<INVENTORY>
<BOOK>
<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>
<TITLE>Leaves;of;Grass</TITLE>
<AUTHOR>Walt;Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Legend;of;Sleepy;Hollow</TITLE>
<AUTHOR>Washington;Irving</AUTHOR>
<BINDING>mass;market;paperback</BINDING>
<PAGES>98</PAGES>
<PRICE>$2.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Marble;Faun</TITLE>
<AUTHOR>Nathaniel;Hawthorne</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Moby-Dick</TITLE>
<AUTHOR>Herman;Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Portrait;of;a;Lady</TITLE>
<AUTHOR>Henry;James</AUTHOR>
<BINDING>mass;market;paperback</BINDING>
<PAGES>256</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Scarlet;Letter</TITLE>
<AUTHOR>Nathaniel;Hawthorne</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>253</PAGES>
<PRICE>$4.25</PRICE>
</BOOK>
<BOOK>
<TITLE>The;Turn;of;the;Screw</TITLE>
<AUTHOR>Henry;James</AUTHOR>
<BINDING>trade;paperback</BINDING>
<PAGES>384</PAGES>
<PRICE>$3.35</PRICE>
</BOOK>
</INVENTORY>
6.;在Windows;档案总管或目录窗口中,利用鼠标双击;Inventory.xml;来开启文件。Internet;Explorer;5;将会开启Inventory01.xml;文件并根据链接其上的Inventory01.css;样式表中的规则来显示文件,如下图所示:
7.;为了体验你如何借着修改连结到文件的样式表更改XML;文件的外观,在文字编辑器中;开启;一个新的、空白的文字文件,并输入列表2-4;中修改过的CSS。(你将在随书光盘的;Inventory02.css;中找到这程序。)
8.;使用文字编辑器的;存盘;指令将新的样式表储存到本机硬盘上,取名为;Inventory02.css;。刚输入修改过的样式表,将会告诉Internet;Explorer;5;如何安排元素的字符,数据如下:
每一个BOOK;元素之间以12;Points;的空间来显示(margin-top:12pt),并在元素的前后放置一个换行(display:block),并且使用10;Points(font-size:10pt))的字体来显示元素。
显示TITLE、AUTHOR、BINDING;与PRICE;元素,每个元素放置个别的行上。(display:block)
将TITLE;元素利用字体12;大小(font-size:12pt)、粗体(fontweight:bold)、斜体(font-style:italic)字型来显示。(注意,TITLE;元素中指定的字体12;将会覆盖TITLE;元素的父元素BOOK;中所指定的字体10。)
将AUTHOR、BINDING;与PRICE;元素以字体15;大小进行缩排(;margin;-left:15pt)。
以粗体方式显示AUTHOR;元素(font-weight:bold)。
不显示PAGES;元素(display:none)。
Inventory02.css
/*File;Name:Inventory02.css;*/
BOOK
{display:block;
margin-top:12pt;
font-size:10pt}
TITLE
{display:block;
font-size:12pt;
font-weight:bold;
font-style:italic}
AUTHOR
{display:block;
margin-left:15pt;
font-weight:bold}
BINDING
{display:block;
margin-left:15pt}
PAGES
{display:none}
PRICE
{display:block;
margin-left:15pt}
9.;在文书编辑器中,;开启Inventory.xml;文件。在文件序文的结尾部份加入下列程序(就加在INVENTORY;元素之上):
<?xml-stylesheet;type="text/css";href="Inventory02.css"?>
这个处理指令会将你刚建立的新CSS;链接到XML;文件。
10.;为了显示你将指定的文件名称,请修改靠近文件起始部份的批注,从
<!--File;Name:Inventory.xml-->
修改成
<!--File;Name:Inventory02.xml-->
列表2-5;显示了完整的XML;文件。(你可在随书光盘的;Inventory02.xml;中找到这段程序代码。)
11.;使用文字编辑器的;另存新文件;指令来将档案重新命名为;Inventory02.xml;,将文件储存到本机硬盘上。并且确定文件储存在与档案;Inventory02.css;所在相同的目录下。
12.;Inventory02.css/*File;Name:Inventory02.css;*/
13.
14.;BOOK
15.;{display:block;
16.;margin-top:12pt;
17.;font-size:10pt}
18.
19.;TITLE
20.;{display:block;
21.;font-size:12pt;
22.;font-weight:bold;
23.;font-style:italic}
24.
25.;AUTHOR
26.;{display:block;
27.;margin-left:15pt;
28.;font-weight:bold}
29.
30.;BINDING
31.;{display:block;
32.;margin-left:15pt}
33.
34.;PAGES
35.;{display:none}
36.;PRICE
37.;{display:block;
margin-left:15pt}
38.;在Windows档案总管或目录窗口中,利用鼠标双击文件名;Inventory02.xml;以;开启;该档。
Internet;Explorer;5;将会开启;Inventory02.xml;文件并根据文件连结的Inventory.css;样式表中的规则来显示该文件,如下图所示(只有前五本书被显示,向下卷动将会显示剩下的三本):
提示
本书的第三篇提供了在网站上显示XML;文件的全部指令。在第七章,笔者将讨论串接样式表(CSS),就像你在这里所建立的。在第十章中,笔者将介绍XSL;样式表。而在第八、九两章,你将学习显示XML;文件的其它方法。