下载第 28章 XML驱动的报纸实例作为一名资深的新闻工作者,作者热衷于使用 X M L驱动在线版新闻报纸、杂志和其他出版物。 X M L用来完成这样的任务是完美无缺的,尽管对于格式化的文章来说,使用通常的
H T M L也可做得不错,但与使用 X M L相比就逊色多了。
在线报纸应用程序被设计为用来把普通的报纸封装起来并放到 I n t e r n e t上,同时提供强大的工具软件来提高其读者的操作体验。人们通常会到他们所喜爱的当地报纸的网站上,较早地获取新闻,或仅仅是为了免付报费。
另一方面,出版者通常希望他们的读者越多越好。今天,越来越多的中小型规模的报纸上网,他们力图最终引入更好的 We b网站特征,而不再像过去那样仅仅把他们的信息扔在网站上面就不再管了。在一些大的新闻网站,像 Fox News 在线 ( w w w.foxnews.com) 和
M S N B C,c o m,新闻内容自动链接到相关条目或其他新闻事件上。
然而,绝大多数时候,网上报纸只是其印刷版本经过文字转换处理后的再生品。这就是为什么许多网上报纸质量改进缓慢的原因。出版商们已经不得不维持两种基本结构:印刷和上网。随着出版商和编辑们开始重新考虑工作的方式和广告商们变得越来越乐于在 I n t e r n e t上花钱,记者们将会首先为 We b撰写稿件然后才是印刷的报纸。
报纸的发行者会寻找最好的方式在网上传递他们的信息,而 X M L很明显是做这一工作的较好选择。
下面的实例研究将一步一步介绍创建一个 X M L驱动的在线报纸组件的过程。使用 X M L和
A S P,将创建在在线出版物中将要用到的基本特征,例如:
能访问新闻事件的小型标题列表栏。
给出每个新闻事件的第一段内容的扩展表。
新闻摘要或告示栏。
连接到相关新闻事件背景条目的词汇栏。
管理这些特征的机制。
这个应用程序的核心功能被封装在几个 V B S c r i p t程序中,名为 H e a d l i n e s,a s p的 A S P网页包含了这些程序。这个文件能够通过服务器端包含插入到任何需要调用这些程序的网页中,这些程序具有简单的名字,并且使用的参数很少,在网站中很容易使用它们。
这个程序库和名为 s e t t i n g s,x m l的 X M L“大脑”文件协同工作,s e t t i n g s,x m l控制着站点的所有事情,从新闻的显示,直至站点的颜色模式。
28.1 报纸的剖析作者虚拟的在线报纸名为 Ti m e s - H e r a l d,位于一座名为 S o u t h B e a c h的虚拟城市中。 Ti m e -
H e r a l d的外观和它给人的感觉与使它能工作的代码相比并不很重要。现在选用了一个能够覆盖报纸主要部分的水平导航条的简单布局,当然可以运用这一章中的技巧和例子,来构建与此完全不同的报纸外观。实际上,甚至可以使用已经有的在线报纸中的组件进行构建,仅是需要驻留于使用了 IIS 4.0或其更高级版本的 Microsoft Windows NT Server 4.0或 Windows 2000
中。本章的实例经微小的修改,插到代码之中即可。
这里所关心的不是指导读者如何构建在例子中所看到的完全相同的报纸,而是指导读者如何通过为插入到自己的 We b站点而创建的有用的组件来影响 X M L。也必须注意到,本章在使用“组件”这一术语时,并不是指经过编译过的 C O M组件,而是指整套工具的若干部分或若干段。
这里的每一段代码都可以被很好地使用,除非你想使你的网站的导航不同于本书的应用程序示例。改变代码并不太困难,只要能娴熟地使用 H T M L表或动态 H T M L就行了。关于导航需要记住的不在于其外表看起来如何,而在于它如何检索 X M L数据。
在本示例方案中,新闻摘要被放在右下方,但随时会被被调用的新闻所取代。当前标题栏放置在左边竖栏里,以便能较快地访问其他的新闻。这样做既简便,效率也高,界面如图
2 8 - 1所示。
图 28-1 在线报纸的首页界面这个在线报纸应用程序的每一个操作都围绕着 X M L文件 s e t t i n g s,x m l进行,s e t t i n g s,x m l是
We b站点的蓝图,它包含网站的颜色模式、导航条、新闻事件的标题和背景条目词汇等信息。
报纸的每一部分由一个 A S P页面代替,此 A S P页面通过一组定制的程序提取必要的 X M L
数据。这些程序同样也被集中放入一个库文件 h e a d l i n e s,a s p中,需要访问这些程序的页面应当包含此库文件。
下面解释一下此示例应用程序的核心组件,并看一下这些组件的功能:
830计计 ASP 3 高级编程 下载
settings.xml:包含网站的参数信息。在本章中称之为网站的“大脑” 。
h e a d l i n e s,a s p:作为一个服务器端的包含文件使用。含有四个基本程序,都可以利用
s e t t i n g s,x m l中的数据来为网站生成内容。
settings_glossary,a s p:允许报纸编辑增添或删除包含在 s e t t i n g s,x m l中的背景词汇条目。
settings_stories.asp:允许报纸编辑选择在网站上发表哪些新闻事件。
s t o r y d i s p l a y,a s p:一个强大的 A S P模板,可以产生调用包含在 h e a d l i n e s,a s p中的程序来显示一条新闻事件,可用来检验 s e t t i n g s,x m l中背景词汇的任何匹配条目。
[ S E C T I O N ],a s p:一个可定制的网页,网页能调用 h e a d l i n e s,a s p中的程序显示标题和使用
S e t t i n g s,x m l中的数据生成广告。网页的名称可指定。
n a v b a r,a s p:一个基于 s e t t i n g s,x m l中的数据动态产生的导航条。可在任意插入的地方生成一个水平的固定导航条。
global.asp:用 X M L设定的几个应用程序变量,包含网站相关的信息。
记住,这一章中的所有代码都可从 Wrox We b网站下载。
下面是在线报纸应用程序的三个基本方面:
编写。
编辑。
阅读。
这一应用程序要求记者用简单的 X M L模块来把新闻事件存档,这些新闻事件经编辑的加工,编辑或网站管理员选择在 We b网站上保留哪些新闻事件。最后,读者可以阅读新闻。在每条新闻事件的旁边给出与新闻事件相关信息的简单摘要。
在深入研究主要代码之前,让我们先简要观察一下在线报纸是如何工作的。
28.1.1 作者写稿由于在线报纸的每一步操作都与新闻事件有关,就让我们从这些新闻事件开始。报纸记者在他们上交稿件时必须做少量格式编排工作。甚至在 7 0年代末 8 0年代初的老式专用计算机系统中,记者也要考虑如何设置标题行的字体和尺寸,以及一些新闻事件需要的其他特殊格式,如斜体或下划线。
一些老式系统通常使用一些与 X M L相比比较松散的格式化符号。那些格式化符号并不是一种定制的有自己的一套语法结构的语言。在 8 0年代后期 9 0年代初,当报纸开始使用台式印刷系统后,在某种意义上,对记者编排格式的要求降低了。这是因为编辑可以通过点击鼠标来轻松地重新安排整个新闻事件的格式。
使用 X M L,新闻事件必须遵照一种相当简单的格式。实质上,它们仅告诉编辑新闻事件的哪一部分是标题、副标题(作者的介绍),写作日期、内容主体、主要段落和相应图表的名字。对本实例应用程序来讲,一条典型的新闻事件是下面这种形式的:
第 28章 XML 驱动的报纸实例 计计 831下载本例决定放弃文档类型定义( Document Type Definition,D T D )或 X M L新闻事件格式的模式,而只依赖于良好的版式。强迫 X M L处理器根据 D T D使新闻事件有效,并不能真正加强这一应用程序。记住,X M L是在服务器端处理而不是在浏览器上处理。例如,需要将新闻事件的主体文本从 X M L文档中检索出来,放入一个变量中,然后使用 R e s p o n s e,Wr i t e发送至浏览器。
当有错误,尤其是与性能有关的错误时,并不需要 D T D来告诉我们。相反,是让 A S P检测文档中的一般错误,然后向读者发送产生问题的相关消息。
< a r t s e t >元素是任选的,可以为一条新闻事件选多于一幅的图片。这个应用程序可以在每条新闻事件下面显示多幅图片。每一幅图都被列入表中,以便放置标题。在 H T M L中,如果表是向右对齐或向左对齐的,则文本被放置在 < B O D Y >元素之内,< TA B L E >元素之外,文本将环绕着表。因此,要生成一个两行单列的表,上面的单元放置图片,下面的单元放置标题文本,可以让标题文本置于图片之下,并允许网页文本围绕其流动。
这个应用程序没有为记者提供一个把新闻事件上传至服务器的方式。这里假设记者与服务器在同一网络上工作,因此,能够将新闻事件放在合适的文件夹中。为远程交付新闻事件文件,若干文件上传解决方案中的一种将会被使用,但因为这个实例研究主要是为了学习 X M L,故我们在这里就不再涉及关于文件上传的更多内容。
28.1.2 编辑修改在记者交上他们的稿件后,编辑或站点管理员用 Editorial Content管理工具来发布他想显示在 We b站点上的新闻事件。可在 We b站点的根目录的 a d m i n文件夹中找到这个工具,可以从切换板页面( switchboard page)进行访问,这个页面也在 a d m i n文件夹中。
在一个办公网络环境中让网管员负责 a d m i n目录的安全,可能是避免这些工具被
832计计 ASP 3 高级编程 下载偷窥的最好的办法了,很显然,应该只允许编辑和站点管理员访问它们。
编辑可以自由选择出现在网络报纸上的新闻事件,而且这些选择可随时更改。在 E d i t o r i a l
C o n t e n t工具中,每一条新闻事件都显示有一个伴随的复选框,并按内容分组(即新闻、运动、
社会等) 。
当编辑首次打开此工具时,所有的新闻事件都被自动地选中。编辑挑选那些他想要的。
用这个工具,编辑可以高效地提取一些新闻事件,而将其他的丢弃。此工具的界面如图 2 8 - 2
所示。
图 28-2 Editorial Content工具的界面在 2 8,4节,你将看到怎样生成 s e t t i n g s _ s t o r i e s,a s p页面。
1,告诉新闻事件的名称这个应用程序的新闻事件必须遵循严格的命名规定,使文件先依据日期排序,再按照其重要性排序。
News 19991021001.xml - Filed on October,21,1999
News 19990412011.xml - Filed on April,12,1999
在 x m l扩展名前的最后三个数字代表等级或重要性,一条新闻事件在一天的内容中越重要,
这三个数字的值越大。用三个数字,意味着编辑每天可以有 1 0 0 0条新闻事件。我们知道一天第 28章 XML 驱动的报纸实例 计计 833下载编辑 1 0 0 0条新闻事件很难办到,所以按重要性排序有助于编辑的工作。
这个程序应用采用倒序方式从每个目录中显示新闻事件,所以最近最重要的新闻案件在上面显示。因为这个原因,编辑应该明白不管他的头条新闻事件是什么,最上面的一条都是这天的新闻事件中最重要的一条。
如果有一个记者编写了有关当地警察局长受贿的热点新闻,他知道这条新闻会成为明天的头条,所以将其命名为 n e w s 1 9 9 9 11 0 4 8 0 0,x m l。通过设重要等级为 8 0 0,完全有可能使它成为明天的头条。不重要的新闻事件可能被编为 0 0 1,0 0 2等。如果一个杀手在当晚的市议会上刺杀市长和两名议员,编辑可能给这条新闻编号为 news 199911 0 4 8 5 0,x m l。但是为什么不再给它一个更高的等级,比如是 9 9 9?也许有人会刺杀总统,应留有余地。
2,Glossary Manager工具我们的报纸网站有一个小词典,它包含着重要人物、地点和组织等的简要介绍,这些或许在新闻事件中有用。 Glossary Manager工具允许编辑生成、修改和删除词典中的词汇。
Glossary Manager界面如图 2 8 - 3所示。
图 28-3 Glossary Manager界面这一特性对为新闻事件提供背景特别有用。例如,市长的名字可以加到词典中,注释他们何时被选举、属于什么党派等等。
在 2 8,4节,你将看到怎么生成 s e t t i n g s _ g l o s s a r y,a s p页面。
每当新闻事件显示给读者时,都要从词汇中检索中相应的条目,然后把结果显示在页面右边的栏中,词汇条目也可以包含到其他新闻事件的 H T M L超级链接,这使得它们很有用。
28.1.3 读者阅读网上报纸的成功与否最重要的是看读者是否喜欢它。网站必须容易使用而且功能强大。
834计计 ASP 3 高级编程 下载在网站上的任何地方所有的标题都可用,这使得事情更简单。读者不需要去找内容表,它总在页面上。
点击标题,在一个看上去和感觉起来与网站相似的模板上面显示相应的新闻事件,使读者在读一条新闻事件时不会有到了另一个地方的感觉。在每条新闻事件下面放置一个 R e t u r n
链接,不论怎样,都可以很简单地返回到前一页。
在选择新闻事件时,右边栏中的摘要被与此新闻事件相关的背景信息所替代。读者将注意到,每一条相关的词汇条目在第一次被文章引用时都有下划线。当光标划过那条内容时,
右边相对应的定义将变成黄色。
此在线报纸应用程序的重大突破是可以被精心定制,给读者带来的信息远多于新闻事件或摘要。此报纸的组件可容易地转换以服务于特殊的需要。
28.1.4 结构要求网站的结构越简单越好。应该为每一类新闻准备一个文件夹。在此应用程序中,使用了
n e w s,s p o r t s,s o c i e t y和一个称为 b r i e f s的特殊文件夹,这些文件夹用来存储属于这些类别的,x m l新闻事件文件。
你也会需要一个“头版页面”,它可能是在根目录里的 d e f a u l t,a s p,列出了所有标题。你或许想为每个类别安排一个主页,以显示其条目。在图 2 8 - 4所示的屏幕图上显示的是 n e w s,a s p,s p o r t s,a s p和 s o c i e t y,a s p。
当然,可以使用完全不同的模式命名内容文件夹。毕竟,
这个网站的一部分是可定制的。 假定想为程序员创立一个网站,
而且有一个部分针对某种程序语言,或一个运动网站有一个专门针对各项主要运动的部分。只要创立文件夹来迎合网站所要求的内容就可以了。
本例选择把 s e t t i n g s,x m l 放入 a d m i n 文件夹,而把
h e a d l i n e s,a s p放入 _ S c r i p t L i b r a r y文件夹中,但读者可以不必这样。
把管理型文件放入 a d m i n文件夹中是个好主意。同样的,
h e a d l i n e s,a s p放入 _ S c r i p t L i b r a r y文件夹,因为它是个库文件。
下面创建的工具可很容易地改变这些文件的存放位置。
所以,现在我们已经明白了这个应用程序背后的逻辑,下面看一下它如何工作。
28.2 网站的大脑,s e t t i n g s,x m l
首先,在 a d m i n文件夹中创建一个名为 s e t t i n g s,x m l的 X M L文件,其中的代码如下:
第 28章 XML 驱动的报纸实例 计计 835下载图 28-4 网站的结构
,x m l文件的每一个主要元素将管理这个网站相关的不同方面的信息。 Specifications colors、
n a v i g a t i o n是相对静态的,C o n t e n t和 g l o s s a r y每天都在变换。由于这个原因,已经为这些元素包含了基于 We b的管理工具,就是前面看到的 Editorial Content和 Glossary Managers。
28.2.1 <Specifications>元素把下面程序加入 < S p e c i f i c a t i o n s >元素,为自己的 We b站点定制信息。
注意到在这里可以设定一个名叫 d o m a i n _ n a m e的参数,但它仅作为站点的一个引用变量使用。实际上,在 A S P页面内无法改变 We b网站的域名。这些参数与 c o l o r元素的信息一起通过
g l o b a l,a s a存储在应用程序变量中,稍后将进一步介绍。
28.2.2 < colors>元素现在把下面程序加入 < c o l o r s >元素中,在整个网站中都要引用它:
因为这些值存储在应用程序变量中,只需把它们用隐式的写法插入到网站中,记住一个隐式的写法就是 R e s p o n s e对象的 Wr i t e方法的简化语法。
<body bgcolor =” <% = Application(,C o l o r _ B a c k g r o u n d” ) % >” >
具有一套颜色模式,可以使网站看起来更专业化,再加上为它定制的特别程序,使网站更加健全。
28.2.3 <navigation>元素网站的导航信息包含有在 < n a v i g a t i o n >元素中,用于填充 n a v b a r,a s p页面,它可以插入到网站的每一页。对每一个导航项,保留三条信息,n a m e,u r l和 d e s c r i p t i o n。把以下的 X M L加入到 < n a v i g a t i o n >元素中。然后,根据需要自由定制参数。
836计计 ASP 3 高级编程 下载
28.2.4 准备 g l o b a l,a s a
g l o b a l,a s a和 n a v b a r,a s p在这里同样起作用,所以让我们先来看一下这两个文件。保留对
s e t t i n g s,x m l做的变动,打开 g l o b a l,a s a,在 A p p l i c a t i o n _ O n s t a r t事件处理程序中加入以下代码,
并注意注释:
第 28章 XML 驱动的报纸实例 计计 837下载尽管这儿有许多变量,但它仅做下面两件基本的事情:
用 s e l e c t S i n g l e N o d e方法来定位指定的节点并从它的子节点中得到值。
生成应用级变量存储导航栏数据、颜色模式和其他技术信息。
注意这里使用 X M L处理器的自由线程模型。
Set objXML = server,C r e a t e O b j e c t (,M i c r o s o f t,F r e e T h r e a d e d X M L D O M” )
一个 X M L文档可以用处理器的自由线程模型或租赁线程模型( Rental threading model)
来分析。这两种方式基本相同,但用租赁线程模型得到的性能稍好一些。然而,为了将文档元素储存到应用程序变量中,必须使用自由线程模型,以便能被多用户实时访问。
记住,还需要在 g l o b a l,a s a的顶部引用适当的类型库:
或,
28.2.5 插入导航一旦 A p p l i c a t i o n(,N a v i g a t i o n” )数组中有了导航数据,n a v b a r,a s p就可生成导航栏。
在根目录中生成一个叫 n a v b a r,a s p的新页面,加入以下代码:
838计计 ASP 3 高级编程 下载随着 F o r循环的执行,从二维数组 A p p l i c a t i o n(,N a v i g a t i o n” )中检索每个链接的名字和
U R L,而用显示的 H T M L是基于这些值建立的。循环的限制是由数组的 U B o u n d属性设置的。
注意这个数组放在一个局部的 N a v i g a t i o n变量中而不是 A p p l i c a t i o n (,N a v i g a t i o n” )中。在每一页的前面部分,将应用程序变量转换为局部范围的等价变量。调用一个应用程序变量比调用一个局部变量会使用更多的系统资源,由于大部分应用程序变量在同一页上要被调用多次,将其存储在一个局部变量中会更高效。
下面是在页面文件中应该包括的头信息:
在根目录下设置一个单独的文件 g e t v a r s,a s p,写入上述代码,并在每页的顶部使用服务器端包含命令包含这个文件,这样更方便。
记住,通过 n a w b a r,a s p能完成绝大多数的定制工作。注意在这里使用动态 H T M L创建了
o n m o u s e o v e r效果:
第 28章 XML 驱动的报纸实例 计计 839下载另外,这个程序检查当前页是否与任一导航链接的名字匹配。如果匹配,就使其名字的显示与其他的不同,消除它的超级链接,改变它的背景使其与文档的背景匹配。这样生成文件夹选项卡的标签,这与大多数 M i c r o s o f e的 We b网站相似,如图 2 8 - 5所示。
图 28-5 生成文件夹选项卡的标签
28.2.6 < content>和 < glossary>元素现在,返回到 s e t t i n g s,x m l,在那里我们已建立了 < s p e c i f i c a t i o n >,< c o l o r s >和 < n a v i g a t i o n >
元素。剩下的 < c o n t e n t >元素保留新闻事件和摘要,< g l o s s a r y >中有新闻事件的背景信息。
对这两个元素我们所要做的只是把一条新闻事件和一条词汇条目放在里面。下面要创建的编辑工具会自动地生成它们。
把以下程序输入到 < c o n t e n t >元素中:
这个元素中的信息将直接从每条新闻事件的,x m l文件的等价元素中提取。新闻事件模板中也有 < h e a d l i n e >和 < b l u r b >元素。
最后,在 < g l o s s a r y >中加入以下程序:
条目的名字存储在 < c o n t e x t >标记中,其匹配信息在 < d e f i n i t i o n >中。所有种类的信息都能放入 < d e f i n i t i o n >,包括 H T M L标记。
840计计 ASP 3 高级编程 下载就像后面将看到的,新闻事件分析程序捕获 < d e f i n i t i o n >的 X M L属性而不是 t e x t属性。这样做告诉 X M L处理器返回包含在此元素中的文本和 X M L标记,用户的 We b浏览器将认出一些来自 HTML DTD 的 X M L,然后进行相应的处理。如果在 < d e f i n i t i o n >元素中放置一些格式良好的超级链接,它将像在 H T M L中那样工作。
对 s e t t i n g s,x m l已经解释得相当多了。保存这一页,下面介绍网站的躯干,h e a d l i n e s,a s p。
28.3 网站的躯干,h e a d l i n e s,a s p
这个应用程序的“肌肉”被放在一个名叫 h e a d l i n e s,a s p的包含文件中,它有四个程序。
S h o w H e a d l i n e s:以平面或立体的形式显示一个概要列表,并与 s e t t i n g s,x m l的 < c o n t e n t >
元素中的相关新闻事件建立超级链接。这个程序需要参数告诉它新闻事件来自于哪一部分、显示的风格(平面或立体的形式)和新闻事件列表的开始和结束位置。
S h o w B l u r b s:这个程序是从 S h o w H e a d l i n e s扩展来的,显示每条新闻事件的第一段落,
即新闻事件简介。这个程序需要的参数与 S h o w H e a d l i n e s相同。
S h o w B r i e f s:这里只检索内容最少的新闻条目,不采用整页。实际上,通常只有一至两个段落。它们与一般的新闻事件有相同的 X M L形式,只是所有的文本都在 < b l u r b >元素中。 S h o w B r i e f s只有一个参数 — L i m i t,它决定显示多少摘要。
S h o w S t o r y,S h o w s t o r y在这四个程序中是最重要的。它检索一条新闻事件,分析它的元素,形成新闻事件格式的各个组成部分,然后根据词典中的条目检查正文,每次匹配一条。不必担心,< g l o s s a r y >能够处理得很好。在测试期间,作者曾加载了上千条条目,
没有发现性能问题。
下面在 _ S c r i p t L i b i a r y文件夹中生成一个叫作 h e a d l i n e s,a s p的新文件,输入以下代码:
这里我们声明了一个全局变量 g Te r m L i s t,S h o w S t o r y将为它生成内容。必须在所有程序之外声明这个变量,以便它的值能在整个页面中存在。与其让 S h o w S t o r y把写 g Te r m L i s t的内容当成工作的一部分,不如在此设定 g Te r m L i s t的值以便随时取用。这给我们的页面布局带来了极大的灵活性。
尽管不是必须的,先设置此变量为长度为零的字符串,也可以决定设置一个缺省值,例如在由 H T M L显示的条目列表的顶部出现的,Matching Te r m s,< B R >” 。
用下面的四个程序声明代替,Procedures go here”注释:
第 28章 XML 驱动的报纸实例 计计 841下载
28.3.1 ShowHeadlines过程
Show Headlines过程在浏览器中产生指定部分的标题概要列表。调用 S h o w H e a d l i n e s使用下面的语句:
该语句检索,n e w s”部分的标题,由 H T M L用“平面”形式显示它们,并从这一部分的第一个标题开始到第五个结束。
调用的结果如图 2 8 - 6所示。
将下列代码输入到 S h o w H e a d l i n e s过程中,注意注释。
842计计 ASP 3 高级编程 下载图 28-6 调用 S h o w H e a d l i n e s
显示的结果另外,就像使用 g l o b a l,a s a一样,生成一个 X M L处理器的实例 o b j X M L,并加载
s e t t i n g s,x m l。下一步,用 S e l e c t S i n g l e N o d e方法来检索 < c o n t e n t >节点,过滤出与 S e c t i o n参数相匹配的标题。前三个过程都需要这样做,只是原因稍有不同。
一旦选定 < c o n t e n t >元素,就用 F o r.,,N e x t循环逐条检查新闻事件,提取每一条需要的信息。
28.3.2 ShowBlurbs过程
S h o w H e a d l i n e s仅关心检索标题和相关的超级链接,而 S h o w B l u r b s还能得到前面的段落。
把下面代码加到 S h o w B l u r b s中:
第 28章 XML 驱动的报纸实例 计计 843下载除了格式有一点不同,并且检索了 < b l u r b >元素外,没有更多需要解释的地方。新闻事件的这个列表是一个内容的详细表,而 S h o w H e a d l i n e s产生的是新闻事件内容的梗概表。
调用 S h o w B l u r b s与 S h o w H e a d l i n e s的方法几乎相同:
甚至可以在同一页面中使用这两个过程。例如,用 S h o w B l u r b s显示前五个新闻事件,用
S h o w H e a d l i n e s显示其余的。
S h o w B l u r b s在浏览器中产生的输出至少需要 3 0 0像素的宽度才适合观看,其输出结果如图
2 8 - 7所示。
图 28-7 调用 S h o w B l u r b s显示的结果
28.3.3 ShowBriefs过程这个过程检索一个指定新闻事件的“摘要”列表。同其他部分一样,有一个 b r i e f s文件夹,区
844计计 ASP 3 高级编程 下载别只在于存储于其中的新闻较短,它们的 < b o d y >元素的全部内容都包含在 < b l u r b >元素之中。例如:
由于 S h o w B r i e f s只显示在 < b l u r b >元素内的新闻内容,所以来自于其他文件夹的正常长度的新闻事件可以不加修改地复制到
b r i e f s文件夹中,允许它们作为摘要及正常新闻事件同时存在。
< b l u r b >元素之外的多余部分将会被简单地忽略。
S h o w B r i e f s与其他过程相比更易于调用,需要的唯一参数是
L i m i t,调用语法如下:
它的结果最适于用一个设置在页面左边或右边的狭长的栏目来显示,如图 2 8 - 8所示。
由加入代码后的 S h o w B r i e f s程序如下:
第 28章 XML 驱动的报纸实例 计计 845下载图 28-8 调用 S h o w B r i e f s
输出的结果
28.3.4 ShowStory过程这个过程的运行与其他过程略有不同,它运行时检索新闻事件本身。它也调用 s e t t i n g,x m l,
但是仅检索词典信息。这个过程比其他过程复杂些,它做如下工作:
获取新闻事件。
创建一个 X M L处理器对象实例。
加载需要的新闻事件。
将主要元素解析为变量。
<headline>元素。
<byline>元素。
<dataline>元素。
<body>元素。
<artwork>元素。
获得全部词汇。
使用已存在的 XML 处理器对象实例加载 s e t t i n g,x m l。
选择词汇元素作为当前节点。
收集匹配的词汇条目。
用 F o r.,,N e x t循环检查主体元素是否与 < g l e s s a r y >节点中的条目匹配。
格式化每个匹配以供 H T M L显示。
将每个格式化的匹配添加到全局字符串,以便以后使用。
格式化并写新闻事件。
标准化新闻事件的非指定字体的 H T M L。
用 R e s p o n e,Wr i t e输出到流。
在写较复杂的过程之前写出大纲是个好习惯。大纲可使工作有条理,一旦完成大纲,则只需填入代码。
在下面的 S h o w S t o r y过程中,注释了大纲。在下面的代码中也包含了其他注释。代码如下:
846计计 ASP 3 高级编程 下载第 28章 XML 驱动的报纸实例 计计 847下载
g Te r m L i s t字符串必须再次指出,因为 g Te r m L i s t是在过程外声明的,所以它的作用范围是全局的。正如将在后面的显示新闻事件的页面中看到的,在调用 S h o w S t o r y之后,可以在任何地方使用
R e s p o n s e,Write gTe r m L i s t
g Te r m L i s t是一个包含 H T M L的字符串,用来显示 S h o w S t o r y在新闻事件中找到的匹配词典条目。在 F o r.,,N e x t循环中构建 g Te r m L i s t时,在新闻事件主体内的每个相关条目同样被转换,
以便引起注意。
下面是一个使用 g Te r m L i s t的 H T M L例子。
848计计 ASP 3 高级编程 下载能够在新闻事件的主体部分找到,Newport Police Chief William Marelle”条目,但若不转换其形式,则读者可能不易找到。因此 S h o w S t o r y在,Newport Police Chief William Marelle”
字符周围加上了如下的 H T M L代码。
附加的 H T M L将条目的字符加上下划线,并将字符的颜色改变为蓝色。而且,对于微软
IE 4.0或更高版本的用户,在鼠标移动到条目上时,一条 C S S风格的语句使浏览器显示一个手形指针,脚本改变 c l a s s N a m e属性为 S e l e c t e d,这个属性是在新闻事件的显示页面的 < S T Y L E >
块中定义的。显示结果如图 2 8 - 9所示。
图 28-9 附加 H T M L后的显示结果
28.3.5 使用 S h o w S t o r y过程现在我们再来看一下新闻事件的显示页面示例,它调用 S h o w s t o r y过程。说是“示例”,
是因为这个页面与在线报纸有很大的不同,它只满足下面的最低要求。
含有用于 h e a d l i n e s,a s p的服务器端包含语句,这使得可以访问前面创建的过程。
含有一个 < S T Y L E >块用于词典的 m o u s e o v e r效果,如前所述。
含有用于 n a v b a r,a s p的服务器端包含语句(可选) 。
调用 S h o w S t o r y过程。
在调用 S h o w s t o r y之后输出( R e s p o n s e,Wr i t e)全局的 g Te r m L i s t字符串。
调用 S h o w H e a d l i n e s(可选) 。
以下的 s t o r y d i s p l a y,a s p例子已满足这些要求,记住这仅是你站点上的一个 A S P。程序代码如下:
第 28章 XML 驱动的报纸实例 计计 849下载
850计计 ASP 3 高级编程 下载第 28章 XML 驱动的报纸实例 计计 851下载
S h o w S t o r y通过 S h o w H e a d l i n e s或 S h o w B l u r s的超级链接从 Q u e r y S t r i n g中获得参数。典型的标题超级链接如下:
将 Q u e r S t r i n g的值传递到程序中使用下列代码:
再强调一次,你拥有的 s t o r y d i s p l a y,a s p,除了满足前面讲述的最小需要外,不必与本示例相同。对于你的在线报纸的其他页面,可以按照你的喜好布局。示例的显示结果如图 2 8 - 1 0所示。
28.3.6 主页如前所述,对于我们站点的每个主要内容类别都有一个主页是一个好主意(记住,在这
852计计 ASP 3 高级编程 下载里是 d e f a u l t,a s p,n e w s,a s p等等) 。在这些页里,可以使用 S h o w B l u r b s下载页面的主要部分,
页面的左边可能是 S h o w H e a d l i n e s,右边是 S h o w B r i e f s。
例如,可能需要改变 s t o r y d i s p l y,a s p显示主页面内容的部分的代码如下:
用下列语句代替对 S h o w S t o r y的调用:
不要忘记,n a v b a r,a s p要求告诉当前页面属于那部分。使用一个会话变量 C u r r e n t _ P a g e来做这个工作。
第 28章 XML 驱动的报纸实例 计计 853下载图 28-10 示例显示的结果
ShowHeadlines(...)
ShowStory(...)
Response.Write(TermList)
使用一个会话变量可以允许增加其他的页面,也许是静态内容页面,对于相应的部分,
只要插入了 n a v b a r.asp 并设置 C u r r e n t _ p a g e,就能指明当前部分。在图 2 8 - 1 0中,通过这个
C u r r e n t _ P a g e会话变量来确定 N e w s标题。
现在,已编写了这些过程,并看到了调用它们的示例,以及它们在浏览器上的输出结果。
可以在你的站点的任何位置上使用它们。
28.4 管理工具如果没有高效地编辑网站上的 s e t t i n g s,x m l内容的工具,那么这个应用程序就没有完成。
一个训练有素的编辑可以直接访问 s e t t i n g s,x m l,每当想更新站点时,都要做一些必要的改变。
这将是极为费力的,但可以建立 A S P的工具来编辑经常访问的设置。
前面,我们介绍了 s e t t i n g _ s t o r i e s,a s p和 s e t t i n g _ g l o s s a r y,a s p工具,两者都在此应用程序的
a d m i n文件夹中。如前所述,不是必须将这两个工具放在 a d m i n文件夹中,可以放在任何地方,
但必须限制访问。
28.4.1 setting_stories.asp
这一页将执行三个主要动作,我们将其分为三个过程:
D i s p l a y P u b l i s h To o l:当用户(网站的编辑或管理员)首次访问该页时,站点的主要部分文件夹内的所有内容都会被分类并显示,这样编辑可以从中选择他们需要的新闻事件。
G e t S t o r i e s:这个程序被 D i s p l a y P u b l i s h To o l多次调用,它为 D i s p l a y P u b l i s h To o l做所有的工作。
P u b l i s h S t o r i e s:这个程序处理编辑或管理员使用 D i s p l a y P u b l i s h To o l选择的内容,然后显示一个确定对话框。
在 a d m i n目录下创建一个名为 s e t t i n g s - s t o r i e s,a s p的 A S P文件,加入下列代码。这只是程序结构,以后将加入代码。
854计计 ASP 3 高级编程 下载注意客户端的 V B S c r i p t和 < S T Y L E >块部分,它们和 X M L没有任何关系,当编辑选出新闻事件后,它们一起工作来突出这些新闻事件梗概。
Select Case语句根据编辑的选择调用相应的过程。当编辑首次访问该页时,调用
D i s p l a y P u b l i s h To o l;当他做出选择后,变量 A c t i o n被设置为 P u b l i s h,引导程序调用
P u b l i s h S t o r i e s。
将下列代码加入 D i s p l a y P u b l i s h To o l和 G e t S t o r i e s程序中:
第 28章 XML 驱动的报纸实例 计计 855下载
856计计 ASP 3 高级编程 下载
D i s p l a y P u b l i s h To o l依靠在 g l o b a l,a s a中创建的 A p p l i c a t i o n (,N a v i g a t i o n” )变量确定在哪个文件夹中寻找新闻事件。一旦获取这些信息,就调用 G e t S t o r i e s。 G e t S t o r i e s可以使用
F i l e S y s t e m O b j e c t对象来获取每一个文件夹的文件列表,打开这些基于 X M L的新闻事件,并且提取出 < h e a d l i n e >,< b y l i n e >,< d a t e l i n e >和 < b l u r b >元素。这些信息被整理成 X M L格式的字符串,这些字符串将被用于相关的复选框元素的 v a l u e属性,这些复选框元素被集中到由 D i s p l a y
P u b l i s h To o l生成的一个 < F o r m >中。
通过将在每个新闻事件中搜集到的信息赋值到复选框元素的 v a l u e属性中,可以保证只处理那些选择出来的信息。通过命名所有的复选框为,B l u r b s”,建立一个可以被 P u b l i s h S t o r i e s处理的集合。
将下面的代码加到 P u b l i s h S t o r i e s中:
第 28章 XML 驱动的报纸实例 计计 857下载就像在 G e t S t o r i e s程序中的 X M L一样,将每一个 B l u r b s复选框中的值格式化,因此所要做的一切就是根据这些值创建一个新的 < c o n t e n t >节点,替代 s e t t i n g s,x m l中旧的 < c o n t e n t >。
F o r.,,L o o p循环将这些 B l u r b s汇集到一起,形成一个长字符串。然后将这个长字符串放置在 < c o n t e n t >和 < / c o n t e n t >标记之间。
同样需要包括回车和换行符号,以便 X M L文件更容易被人们理解,尽管这对处理器无所谓。
确定了 X M L n o d e字符串中包含格式良好的 X M L后,使用 D O M的 l o a d X M L方法将其加载到处理器中。通过 r e p l a c e C h i l d方法用合法的节点代替原来的节点。
当新的内容代替旧的内容后,用 s a v e方法将 X M L保存。
28.4.2 setting_glossary,a s p
这个小工具使编辑可以建立新的或者删除旧的词典条目。它与 s e t t i n g _ s t o r i e s,a s p的工作原理相似,但程序中引入了两个新方法 r e m o v e C h i l d和 a p p e n d C h i l d。
这个 A S P的功能被分配到三个过程中,D e l e t e Te r m,C r e a t e Te r m和 L i s t G l o s s a r y。
在 a d m i n文件夹中建立一个新的 A S P,并命名为 s e t t i n g _ g l o s s a r y,a s p,加入下面的代码。这只是三个程序的结构。
858计计 ASP 3 高级编程 下载第 28章 XML 驱动的报纸实例 计计 859下载这一页显示了两个 H T M L窗体:一个是删除词典条目,另一个是创建词典条目。注意,
前一个窗体直接调用 L i s t G l o s s a r y函数。
L i s t G l o s s a r y完成的正是我们在这个应用程序中所要做的事,加载一个 X M L文档,找到一个指定的元素,检索其内容,格式化内容形成在一个下拉菜单中的列表条目。
要格外注意列表条目是如何被引用的。 L i s t G l o s s a r y对每一个 < O P T I O N >元素的 v a l u e属性设置一个整数,这个整数值与检索它的节点相对应。这样通过节点的索引号引用节点的子节点,这比过滤它们的值或属性简单得多。将下面代码加到 L i s t G l o s s a r y中:
当处理窗体时,调用 D e l e t e Te r m,通过节点索引引用将被删除的条目。将下列代码加到
D e l e t e Te r m中:
860计计 ASP 3 高级编程 下载执行这个过程,全局变量 U p d a t e M e s s a g e被赋以某些文本,以确认成功。
C r e a t e Te r m比 D e l e t e Te r m要简单一些,它采集窗体的数据,并放到一个具有 X M L格式的字符串中,再用 a p p e n d C h i l d把它加到 s e t t i n g s,x m l的 < g l o s s a r y >节点上。 C r e a t e Te r m的代码如下:
再一次使用 U p d a t e M e s s a g e通知用户过程成功。
28.4.3 关于 a d m i n文件夹的其他内容到此为止,只要用这些基本的技术就可以创造自己的工具来编辑 s e t t i n g,x m l的其他部分。
这并不意味着可以用 s e t t i n g,x m l存储其他类型的与网站相关的信息。
有一样东西是必需的,就是在 a d m i n文件夹中有一个某种类型的索引页面,用以提供到管理工具的链接。
28.5 系统集成我们已经介绍了那些组成站点的组件,现在简要地回顾一下本章前面所提及的示例站点的结构概况,将所有的内容衔接在一起。图 2 8 - 11所示为文件目录列表。
将 s e t t i n g s,x m l,s e t t i n g s _ g l o s s a r y,s e t t i n g s _ s t o r i e s,a s p放到 a d m i n文件夹中,还应当建立一第 28章 XML 驱动的报纸实例 计计 861下载个非常简单的 H T M L文件作为这个文件夹的索引,它唯一的功能就是包含到上述 a d m i n文件夹中文件的链接,s e t t i n g s,x m l除外。
图 2 8 - 11 文件目录列表
s t o r y d i s p l a y,a s p页面在 We b站点的根目录下,和它一起的还有 n a v b a r,a s p,g e t v a r s,a s p(将应用程序变量转换为局部变量)和 g l o b a l,a s a。
应当为计划发布的每一部分都创建内容页。记住,它们应当与 s e t t i n g s,x m l中的
< n a v i g a t i o n >元素包含的信息相匹配,就像下面:
862计计 ASP 3 高级编程 下载不要忘记,可以随心所欲地设计你的主页部分,只要它们能满足我们前面所提出的最低要求:
含有用于 h e a d l i n e s,a s p的服务器端包含语句,这使得可以访问前面创建的程序。
含有一个 < S T Y L E >块用于词典的 m o u s e o v e r效果,如前所述。
含有用于 n a v b a r,a s p的服务器端包含语句(可选) 。
调用 S h o w S t o r y程序。
在调用 S h o w s t o r y之后输出( R e s p o n s e,Wr i t e)全局的 g Te r m L i s t字符串。
调用 S h o w H e a d l i n e s(可选) 。
每一部分页面(例子中的 n e w s,a s p,s p o r t,a s p,s o c i e t y,a s p和 i n f o,a s p)都应当有一个与包含这部分内容的 X M L格式的新闻事件相匹配的文件夹,还应当建立一个叫做 a r t w o r k的文件夹存放新闻事件的图片。
下面,用我们的 X M L新闻事件模板来建立几篇新闻事件:
第 28章 XML 驱动的报纸实例 计计 863下载站点的“肌肉”,即示例中的 h e a d l i n e s,a s p被放在 _ S c r i p t L i b r a r y文件夹中,也可以放在其他地方,只要在服务器端包含语句中指出其正确位置即可。
报纸网站的头版,不论命名为 d e f a u l t,a s p还是 i n d e x,a s p,不必受调用 S h o w B l u r b s、
S h o w H e a d l i n e s和 S h o w B r i f s的限制。典型的在线报纸的头版涉及的信息比一个内部部分多很多。另外,使用这些程序的最低要求和前面我们阐述的一样。
现在所有的关键组件都已经就绪,可以使用 s e t t i n g s _ g l o s s a r y,a s p和 s e t t i n g _ s t r o r i e s,a s p设置站点,并投入使用。
28.6 小结本章中建立的这些应用程序组件,为顺利实现这个应用程序提供了一个坚实的概念基础,
在线新闻网站离我们并不遥远。
另外需要说明的一点是,在本章运用的一些技术在一些非常拥挤的站点运行时可能会遇到性能问题,尤其是导航栏。在设计本章的示例报纸之前,作者确实设想过一份中等规模的报纸,理想的情况下,读者每天点击 4 0 0 ~ 5 0 0次。
对于扩展样式表语言( Extensible Stylesheet Language,XSL)来说,当然可以很好地完成显示新闻事件和其他内容的任务,使用微软建议标准仅需两行代码就可以按照预期的布局将
X S L转化为 X M L,这当然比用完整的脚本程序完成同样的任务要好得多。
唯一的问题是目前就微软的建议仍未达成一致的意见。实际上,当 W 3 C更好地定义 X S L
标准后,可以完全地忽视微软的建议。并且,微软的 X S L语言可以用完整的一章来讨论,当然也涉及大量相关主题的内容。
总而言之,作者认为 X M L与 A S P的结合将十分有用,让我们期待这两项技术结合的实际应用程序。
864计计 ASP 3 高级编程 下载