发明的详细说明
综述
许多商业网络内容从更小的内容段被构建,内容以定义的方式图示地被拟合在一起。本发明提供了使得内容提供者根据这些更小段能够明确规定内容如何被构造的基础结构。基础结构包括根据内容提供者的规范动态地生成内容的绘制工具。
用作范例的计算环境
图1展示了用作范例的计算环境,本发明的方面在其中可被实现。计算系统环境100仅仅是合适的计算环境的一个例子,并且不被试图建议作为发明使用或功能的范围的限制。计算环境100应被解释为对于任何部件之一或部件组合既不具有任何依赖性,也不具有要求,这些部件在用作范例的操作环境100中被说明。
本发明可与许多其他通用或专用计算系统环境或配置一起运行。适合和本发明一起使用的众所周知的计算系统、环境、和/或配置的例子包括,而非限制,个人计算机、服务器计算机、手持式或膝上型设备、多处理系统、基于微处理机的系统、机顶盒、可编程用户电子装置、网络PC、小型计算机、大型计算机、嵌入式系统、包括任何以上系统或设备的分布式计算系统等等。
本发明可用由计算机执行的计算机可执行指令的一般上下文来描述,如程序模块。一般地,程序模块包括完成特定任务或实现特定抽象数据、类型的例程、程序、对象、部件、数据结构等。本发明也可在分布式计算环境中被实践,其中任务由远程处理设备完成,远程处理设备通过通信网络或其他数据传送媒体被链接。在分布式计算环境中,程序模块或其他数据可位于包括存储器存储设备的本地和远程计算存储媒体中。
关于图1,用于实现本发明的用作范例的系统包括以计算机110形式存在的通用计算设备。计算机110的部件可包括,但非限制,处理单元120、系统存储器130以及系统总线121,系统总线121将包括系统存储器的各种各样的系统部件耦合到处理单元120上。系统总线121可以是任何一些类型的总线结构,总线结构包括存储器总线或存储器控制器、外围总线、以及使用任何各种总线结构的本地总线。作为例子,而非限制,这样的结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)、视频电子标准协会(VESA)本地总线、以及外围部件互连(PCI)总线(也称为Mezzanine总线)。
计算机110一般包括各种计算机可读媒体。计算机可读媒体可以是可被计算机110访问的任何可用媒体,并且包括易失的和非易失的媒体,可移动的和不可移动的媒体。作为例子,而非限制,计算机可读媒体可包括计算机存储媒体和通信媒体。计算机存储媒体包括易失的和非易失的、可移动的和不可移动的媒体,这些媒体以用于诸如计算机可读指令、数据结构、程序模块或其他数据的信息存储的任何方式或技术被实现。计算机存储媒体包括,而非限制,RAM、ROM、EPROM、闪存或其他存储技术、CDROM、数字多用光盘(DVD)或其他光盘任何存储、磁盒、磁带、磁盘存储或其他磁存储设备,或可用来存储所需信息并且可被计算机110访问的任何其他媒介。通信媒体一般包含计算机可读指令、数据结构、程序模块或在诸如载波或其他传输装置的调制数据信号中的其他数据,并且包括任何信息传递媒体。术语“调制数据信号”意思是,具有一个或多个以编码信号中的信息的信号这样的方式设置或变换的特征的信号。作为例子,而非限制,通信媒体包括诸如有线网络或直接连线连接的有线媒体,以及诸如声的、RF、红外或其他无线媒体的无线媒体。以上任何的组合也应被包括在计算机可读媒体的范围内。
系统存储器130包括以易失的和/或非易失的存储器形式存在的计算机存储媒体,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS),包括帮助在计算机110中的单元之间传送信息的基本例程,如在启动期间,一般被存储在ROM131中。RAM132一般包括可被处理单元120立即访问和/或正被处理单元120操作的数据和/或程序模块。作为例子,而非限制,图1说明了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110也可包括其他可移动的/不可移动的、易失的/非易失的计算机存储媒体。仅仅作为例子,图1说明了从不可移动的、非易失的磁媒体中读取或写入的硬盘驱动140,从可移动的、非易失的磁盘152中读取或写入的磁盘驱动151,以及从可移动的、非易失的光盘156中读取或写入的光盘驱动155,光盘如CDROM或其他光媒体。可被用在用作范例的操作环境中的其他可移动的/不可移动的、易失的/非易失的计算机存储媒体包括,而非限制,磁带盒、闪存卡、数字多用光盘、数字录象带、固态RAM、固态ROM等等。硬盘驱动141一般通过诸如接口140的不可移动的存储器接口被连接至系统总线121,磁盘驱动151和光盘驱动155一般通过可移动存储器接口,如接口150,被连接至系统总线121。
以上讨论的并且在图1中被说明的驱动和与它们有关的计算机存储媒体向计算机110提供了计算机可读指令、数据结构、程序模块以及其他数据的存储。在图1中,例如,硬盘驱动141被作为存储操作系统144、应用程序145、其他程序模块146和程序数据147来说明。注意,这些部件可以与操作系统134、应用程序135、其他程序模块136和程序数据137相同或不同。操作系统144、应用程序145、其他程序模块146和程序数据147在此被给予不同的数字以说明,至少,它们是不同的复制。用户可通过诸如键盘162和指点器161的输入设备向计算机20输入命令和信息,指点器161通常指鼠标、轨迹球或触摸板。其他输入设备(未展示)可包括话筒、游戏杆、游戏板、卫星抛物面、扫描仪等等。这些或其他输入设备常通过与系统总线耦合的用户输入接口160被连接至处理单元120,但也可通过其他接口和总线结构,如并行口、游戏口或通用串行总线(USB)被连接至处理单元120。监视器191或其他类型的显示设备也经由接口,如视频接口190,被连接至系统总线121。除了监视器,计算机还可包括诸如扬声器197和打印机196的外围输出设备,它们可通过输出外围设备接口190被连接。
计算机110可运行于使用逻辑连接至一个或多个远程计算机,如远程计算机180,的联网环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其他普通的网络节点,并且一般包括以上描述的与计算机110相关的计算机许多或所有单元,尽管只有存储器存储设备181在图1中被说明。图1中所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其他网络。这样的联网环境在办公室、企业级计算机网络、内部网和因特网中是平常的。
当被用在LAN联网环境中,计算机110通过网络接口或适配器170被连接至LAN171。当被用在WAN联网环境中,计算机110一般包括调制解调器172或用于建立在WAN173,如因特网,上通信的其他装置。调制解调器172可以是内置的或外置的,可经由用户输入接口160,或其他合适的装置被连接至系统总线121。在联网环境中,所描述的与计算机110有关的程序模块,或其部分,可被存储在远程存储器存储设备中。作为例子,而非限制,图1将远程应用程序185作为驻存在存储器设备181上来说明。要理解的是,所示的网络连接是用作范例的,并且在计算机之间建立通信链接的其他装置也可被使用。
用作范例的网络浏览器
图2展示了用作范例的网络浏览器的可视接口。如本领域中所知的,网络浏览器是使得用户能够与某类型内容(如HTML内容)交互,并且能够从网络中检索这样的内容的一段软件。浏览器200可以,例如,组成存储在计算机110上(图1中所示的)、并且在处理单元120上执行(图1中所示的)的软件。浏览器200可从计算机110所连接到的广域网173(图1中所示的),例如因特网,中访问内容,。一般地,浏览器也可以访问在计算机110上本地存储的内容。
图2的用作范例浏览器向用户显示各种各样的信息。特别是,浏览器200向用户显示站点链接栏202。站点链接栏202包括框204,用户可输入统一资源定位(URL)到框中,依次点击浏览器到特定内容项目。在图2的例子中,用户输入URL
http://search.msn.com到框204中,由此表明用户希望访问由URL标识的内容。浏览器200从它可能位于的因特网的哪个地方中检索这个内容,并且在视图区域206中显示内容。在图2的例子中,内容用HTML或XHTML传送。(在URL中的词语http表示“超文本传输协议”;在URL中它的出现表明基本内容是HTML或XHTML内容)。浏览器200包含,或访问,HTML和/或XHTML解释器,解释器呈现由浏览器200接收到的HTML或XHTML内容。在图2的例子中,浏览器200在标题栏208中显示内容的标题(“MSN Search——“MoreUseful Everyday”)。
一般的浏览器,诸如浏览器200,也使得用户能够完成各种各样的功能,如:打印、邮寄、或保存已显示的内容;使用“收藏夹”或“书签”的清单来导航到其他内容;改变文本内容的默认字体等等。这个功能通过菜单栏210和/或按钮212向用户展示。
如下所述,本发明为生成内容提供了基础结构,如在视图区域206中被显示的那些。
用于创建内容呈现的数据结构
本发明提供了归纳和抽象用来创建诸如用于网页的XHTML内容的过程的基础结构。(对于这点,浏览器可呈现内容的例子应指的是作为XHTML内容的内容。但是,应该理解的是本发明可被用来生成其他类型的内容,如HTML、无线标记语言(WML)、话音可扩展标记语言(VXML)等等)。
本发明的基础结构利用了四种类型的数据结构:线框、视图、控制和配置文件。
“线框”是定义一页内容的空间区域的数据结构。每个区域被称为“槽”。
“控制”包括动态地生成XHTML内容的可执行或可解释编码,被放入由线框定义的特定的槽中。
“视图”是在特定的槽和特定的控制(或特定的一连串控制)之间建立映像的数据结构。视图也可将可扩展样式语言(XSL)标记、或另一个视图映像到槽中(视图也可将一连串XSL标记或视图映像到槽中);到槽中的XSL标记和视图的映像在下面更详细讨论。
“配置文件”包括被控制用来影响它们行为的数据。例如,控制可能能够生成特定内容段的两个或更多的不同变体,并且配置文件可包含表明这些变化中的哪个应被生成的参数。
图3展示了用作范例的线框300。线框300将内容的概念页分成区域,区域如上所注,被称为“槽”。在图3的例子中,有四个槽,304(1)、304(2)、304(3)和304(4)。每个槽有个名字;在这个例子中,从304(1)到304(4)的名字各自为“slot_header”、“slot_results”、“slot_sidebar”和“slot_footer”。线框300本身也有名字(“WireFrame_Site”,在这个例子中)。如下所要讨论的,名字被用在视图数据结构中以识别线框及其每个槽。
一般地,线框被表示为XHTML结构。因此,图3中所示的用作范例的线框可被定义为如下:
<wireframe name=”wireframe_site”>
<div><slot name=”slot_header”/></div>
<table>
<tr>
<td><slot name=”slot_results”/></td>
<td><slot name=”slot_sidebar”/></td>
</tr>
</table>
<div><slot name=”slot_footer”/></div>
</wireframe>
如所见,上述XHTML定义设计了四个内容区域:具有槽名“slot_header”的顶端区域;具有槽名“slot_footer”的底端区域;以及在顶端和底端区域之间的两列表格,其中左列被称为“slot_results”,右列被称为“slot_sidebar”。
[0050]图4展示了用作范例的控制400,它生成XHTML内容402。控制400有名字(“Control_Footer”,在这个例子中),并且,如下所述,名字被用在视图数据结构以识别控制。控制400可被用来产生将被插入到线框300中名为“slot_footer”的槽中的内容。
控制400包括可执行或可解释编码,当编码执行时被配置成动态地生成XHTML内容402。控制400可用各种各样的方式实现。例如,控制400可包括机器可执行编码(如.exe或.dll文件)、可解释脚本(如在JAVA或C#语言中的脚本),虚拟机器编码(如Java字节码)等等。
下面是描述控制400功能的伪码的例子。(将易于理解的是下列伪码可在任何上述可执行或可解释部件中被实现。)
XTHML Control_Footer()
{
String strFooter;
strFooter=_
“<TABLE WIDTH=771”HEIGHT=”16”CELLPADDING=”0”
CELLSPACING=”0”BORDER=”0”>
<TR><TD WIDTH=”770”HEIGHT=”1”BGCOLOR=”#bdbebd”>
<SPACER TYPE=”block”HEIGHT=“1”/></TD></TR>
<TD><TD HEIGHT=”15”class=”nsf”> &ndsp;&nbsp;
”
strFooter=strFooter & file_read(copyright_notice.txt);
strFooter=_
“</TD></TR></TABLE>”
reture strFooter;
}
上述伪码将控制400定义为生成和返回XHTML内容的名为“Control_Footer“的函数。在这个例子中,Control_Footer将XTHML编码返回到表格中,表格具有特定尺寸和背景颜色,并且包含诸如”Copyright 2003Microsoft Corporation-All Rights Reserved”的文本串(或不管什么文本串被包含在文件“copyright-notice.txt”中。)
如上所注明的,控制可借助于被称为“视图“的结构被映像(或“绑定”)到线框的槽中。图5展示了用作范例的控制到线框200的槽中的映像。在这个例子中,控制420(被称为“Control_Header”)映像到槽304(1),控制410(”Control_Results”)映像到槽304(2),控制430(”Control_Sidebar”)映像到槽304(3),以及控制440(”Control_Footer”,如上所述与图4有关的)映像到槽304(4)。这种映像根据线框200定义了一页XTHML内容,线框中,由槽304(1)、304(2)、304(3)、和304(4)定义的每个区域将各自地被由控制420、410、430、440生成的XHTML内容填充。这个映像表示视图500。
视图500,如图5所描述的,可由下列数据结构来表示:
<view name=”view_Classic”wireframe=”wireframe_site”>
<binding slot=”slot_header”>
<ctl:Control_Header/>
</binding>
<binding slot=”slot_results”>
<ctl:Control_Results/>
</binding>
<binding slot=”slot_sidebar”>
<ctl:Control_Sidebar/>
</binding>
<binding slot=”slot_footer”>
<ctl:Control_Footer/>
</binding>
</view>
以上所示的数据结构将名字“view_Classic”分配给视图。因为一般系统有几个视图,名字允许视图从几个视图中被识别。正如所见,数据结构包含每个槽的“绑定”,并且表明将被“绑定”到槽中的特定控制。
虽然上述例子展示被绑定到每个槽中的简单控制,但是应该注意到,多个控制可被绑定到单个槽中以被按次序地执行。因此,“slot_header”的绑定可如下被读取:
<binding slot=”slot_header”>
<ctl:Control_A/>
<ctl:Control_B/>
<ctl:Control_C/>
</binding>
这种绑定将表明名为“Control_A”、“Control_B”和“Control_C”的控制按表明的次序执行以便将内容填充slot_header中。
[0056]此外,当上述例子仅仅展示被绑定到槽中的控制,如前所注明的,本发明也允许视图或XSL标记被绑定到槽中。控制到槽的绑定是绑定的最简单例子。但是,槽绑定的概念可以被通用化,图6-12展示了这样通用化的例子。
用视图来明确规定内容的例子
如上所述,控制是生成XHTML内容的软件对象。将控制“映像”或“绑定”到槽意味着槽将被由控制生成的XHTML内容填充。然而,控制不是生成XHTML内容的唯一类型的对象。特别是,本领域所熟知的是XSL标记可被计算来产生XHTML内容。此外,当视图被计算来将合适的内容放入线框的槽中时,这个计算的结果是XHTML内容,所以视图也是产生XTHML内容的另一个对象。考虑这些事实,可看到XSL标记和视图,以及可被计算来产生XTHML内容的任何其他类型的对象,可被映像到槽。
图6-11展示如何构建视图,视图可被绑定到线框300(图3中所示的)中名为“slot_header”的槽。结合以前例子,视图包含用于特定线框的槽绑定,所以有必要定义将被用在视图中的线框。图6展示了线框600,被称为”WireFrame_Header”。线框600有四个槽,602(1)、602(2)、602(3)和602(4),各自被称为“slot_big7”、“slot_banner”、“slot_sharkfin”和“slot_querybox”。这个线框可由下列数据结构定义:
<wireframe name=”WireFrame_Header”>
<div><slot name=”slot_big7”/></div>
<div><slot name=”slot_banner”/></div>
<div><slot name=”slot_sharkfin”/></div>
<div><slot name=”slot_querybox”/></div>
</wiregrame>
图7-10展示将被绑定到线框600的槽602(1)至602(4)的各种各样的对象。
[0060]图7展示了名为“Big7”的XSL标记700。XSL标记700关联于XSL数据,它在合适的XSL处理软件的帮助下,可被用来生成XHTML内容,内容包含出现search.msn.com美国版网站的顶端的“big7”链接702。这些“big7”链接是”MSN Home”、”My MSN”、“Hotmail”、”Search”、“Shopping”、“Money”以及“People & Chat”。
图8展示了另一个XSL标记800,被称为“Banner”。XSL标记800可被XSL处理软件以与XSL标记700相同的方式计算。但是,XSL标记800产生条幅广告802。在图8的例子中,这个条幅广告是用于Redmond大学的。
图9展示了被称为“Control_Sharkfin”的控制900。控制900生成在曲线图形(参照数字902)旁边展示字母MSN的XHTML内容,内容出现在search.msn.com网站上。(图形从鲨鱼的背鳍导出其名字,曲线是它的联想)
图10展示了被称为“View_QueryBox”的视图1000。与视图500一起(上述连同图5讨论的),视图1000表示在线框的槽和将为那些槽生成内容的对象(如控制、XSL标记、或视图)之间的映像或绑定。在图10的例子中,线框1002有两个槽,1004(1)和1004(2),各自被称为“slot_searchbox”和“slot_polead”。视图1000将槽1004(1)(“slot_searchbox”)绑定到为框1006和“go”按钮1008产生XHTML内容的对象中,用户可将查询打入框1006,用户可点击“go”按钮1008向搜索引擎发送查询。槽1004(2)(“slot_polead”)被绑定到为广告1010产生XHTML内容的对象。
[0064]将XSL标记700和800、控制900、以及视图1000绑定到线框600的槽的视图可被创建(图6中所示的)。图11展示了这样的绑定。XSL标记700(”Big7”)被绑定到槽602(1)(“slot_big7”)。XSL标记800被绑定到槽602(2)(“slot_banner”)。控制900(”Control_Sharkfin”)被绑定到槽602(3)(“slot_sharkfin”)。视图1000(”View_queryBox”)被绑定到槽602(4)(“slot_querybox”)。由这种绑定定义的视图1100可如下列数据结构表示:
<view name-=”view_header”wireframe=”WireFrame header”>
<binding slot=”slot-big7”>
<xsl:Big7/>‘XSL yields Big7 HTML
</binding>
<binding slot=”slot_banner”>
<xsl:Banner/>“XSL yields Banner Ad creative
</binding>
<binding slot=”slot_sharkfin”>
<ctl:Control_Skarkfin/>
</binding>
<binding slot=”slot_querybox”>
<view:View_QueryBox/>
</binding>
</view>
上述数据结构将“view_header”的名字给于视图1000,并且创建了图11中所描述的绑定。在上面例子中,要注意的是被绑定到槽的每个类型的对象被标志预定为它的类型——例如,“xsl:Banner”,以表明“Banner”是XSL标记,并且相似的词语“ctl:Control_Skarkfin”和“view:View_QueryBox”来标志控制和视图。使用这种类型的标志是较佳的,因为控制、XSL标记、以及视图要求不同类型的处理,并且标志使得视图绘制工具(下面连同图13-14所讨论的)能够容易地识别什么类型的对象需要处理。
如上所注明的,图6-11展示了例子,其中视图(视图1100)被绑定到线框300中的槽304(1)(”slot_header”)。(另一个视图不得不被创建以将线框300的槽绑定到将填充这些槽的内容生成对象。这个视图将包括在槽304(1)和视图1000之间的绑定。这样的视图的细节能够容易地从后续讨论中被理解。)图12展示了根据这个绑定可被创建的结果内容。图12展示了线框300,及其四个槽304(1)、304(2)、304(3)和304(4)。因为槽304(1)(“slot_header”)被绑定至视图1100中,线框600(视图1100是以此为基础的)作为覆盖槽304(1)被展示。线框600,依次,有四个槽602(1)、602(2)、602(3)和602(4)。在这四个槽中,槽602(4)被绑定至视图1000(图10中所示的),视图1000,依次,是以线框1002为基础的。因此,在图12中线框1002作为覆盖槽602(4)被展示。
从图12中可理解,其中所示的内容形成了层次,其中线框1002是在线框600的一个槽中,线框600,依次,是在线框300的一个槽中。从层次底部到向上分析图12中所示的内容,可以看到视图1000生成下列内容:框1006和“go”按钮1008(在线框1002中的槽1004(1)内),以及广告1010(在槽1004(2)内)。这个内容位于线框600中的槽602(4)内。线框600也包含内容项目702、802和902,这些可从XSL标记和控制中被生成,如以上图7-9中所描述的。视图1100因此生成被包含在线框600的槽中的内容。因为视图1100已被绑定到线框300的槽304(1),由视图1100生成的内容被放入槽304(1)中。图12也展示了槽304(2)-304(4);视图可以被明确规定为以上述方式将这些槽绑定到控制、XSL标记、以及视图。虽然图6-12的例子展示被绑定到单个控制、XSL标记、或视图的每个槽,如上所注明,槽可以被绑定到多个控制、XSL标记、或视图,它们都能被计算来填充给定的槽。
应该注明的,虽然图12使用虚线来展示线框及其槽的外形,但是这些线实际上不被包括在从视图构建的内容中。这些线仅仅在图12中被展示以说明层次结构,在结构中内容可根据本发明被构建。
从视图生成内容的结构
图13展示了依据本发明被用来生成内容的各种各样部件的概述。
绘制工具1302是使用视图1304来生成XHTML内容的软件部件,内容适合于在浏览器(如浏览器200,图2中所示的)上表现。绘制工具可以,作为例子,在搜索引擎的服务器上存在,并且可以被用来动态地生成结果页面以响应用户查询。
如上所讨论的,视图,如视图1304,包括在线框1308的槽的一方和内容生成对象1308的另一方之间的映像或绑定。也如上所讨论的,内容生成对象1316可采取各种各样的形式;控制1310、XSL标记1312、以及视图1314是对象的例子,内容生成以对象为基础。
控制1310,如上所述,包括动态地生成内容的可执行或可解释编码。因为控制1310可以作为程序被实现,根据它们的输入它们能够展现不同行为。配置文件1316向控制提供这个输入。例如,根据各种各样情况,“shark fin”控制(参照数字900,图9中所示的)可被用于生成鲨鱼鳍图形的不同版本(如,更宽或更窄的版本)。例如,根据网站是正通过导航栏202(图2中所示的)被直接访问,还是通过将视图区域206分割成两个窄的子区域的搜索协助特性被访问,search.msn.com网站可生成鲨鱼鳍的或宽或窄的版本。配置文件1316可包含被鲨鱼鳍控制用来明确规定哪个鲨鱼鳍的版本将被生成的参数。如果鲨鱼鳍控制被设计来响应配置文件中的参数,那么鲨鱼鳍的不同版本可用单个控制和多个配置文件被创建;不同的配置文件可根据哪个鲨鱼鳍的版本将被产生提供给控制。此外,配置信息可作为槽绑定的部分在视图中被明确规定。例如,绑定:
<binding slot=”slot_a”>
<control_name=”header”mode=”default”>
</binding>
可被用来明确规定“header”控制将被用于默认模式,并且相似的绑定:
<binding slot=”slot_a”>
<control_name=”header”mode=”searchpane”>
</binding>
也可被用来明确规定“header”控制将被用于“searchpane”模式。这种明确规定不同模式的方式与使用不同配置文件来明确规定用于控制的不同参数的方式同样直作用。
如配置文件使用的另一个例子,在这里描述的基础结构可被搜索引擎用来生成查询和结果页面。不同用户可能希望以不同格式浏览搜索结果,——例如一个用户可能希望仅仅接收搜索结果的文本描述,而另一个用户可能希望浏览伴随文本描述的缩略图。单个“结果”控制可以被写(如,用于绑定到“slot_results”槽304(2)中,图3中所示),这能够生成各种格式的结果。由“results”控制生成的特定格式依赖于包含在配置文件1316中的参数。结果被表示的实际格式可通过改变配置文件被简单地改变。在一个例子中,一些配置文件(每个具有不同参数)可被提供,并且用户可以被给以改变结果呈现的机会。例如,当用户接收包含搜索结果的页面时,用户可使用页面上的菜单来选择用户想要接收结果的不同形式。用户的选择然后被发送至搜索引擎服务器,带有服务器用不同配置文件重新生成页面的请求。
应该注意的是配置文件1316可被作为传统的“文件”被实现(例如,被存储在文件系统中的指定对象),但不限制于这个实施例。一般地,“配置文件”表示存储在某个地方并且可被控制访问的数据,而不管这个数据是如何被存储的。
根据视图生成内容的过程
根据视图生成内容的过程可由下列伪码描述:
RendererEval()
{
For each Slot in the View’s WireFrame
{
Find Slot binding in View Bindings
If binding exists
If binding is a Control
Slot=Evaluate the control
If binding is a XSL Tag
Slot=Process XSL
If binding is a View
Slot=RendererEval(sub view)
<dp n="d15"/>
If binding does not exist
Slot=empty
}
}
上述RendererEval()方法被实现,例如,通过绘制工具1302。方法采用视图作为参数,步进通过视图的线框中的槽,并且根据什么对象被绑定到槽为每个槽生成合适的XHTML内容。如果槽被绑定到控制,控制被执行并且槽被由控制生成的XHTML内容填充。如果槽被绑定到XSL标记,那么XSL处理软件被应用到标记上以生成合适的XHTML内容。如果槽被绑定到视图,那么视图被计算来生成XHTML内容。在上面的伪码中,“子视图”是被绑定到“RendererEval()”函数正在计算的槽的视图。正如以上伪码中所见的,RendererEval()可以递归地调用自身以计算这个子视图。
图14展示了由绘制工具1302实现的过程的流程图。绘制工具得到视图(方块1402)。在以上伪码例子中,当视图被作为参数被传递到绘制工具的最高层方法时,这个步骤被完成。绘制工具然后检查第一个槽绑定(方块1404)。如果绑定是空的(方块1405),那么没有内容放入这个槽中,所以绘制工具继续到方块1414以决定是否有任何更多的槽。
然而,如果槽没有绑定,那么绘制工具进行计算绑定到槽的对象,并且根据那个对象用合适的内容填充槽。如上所注明的,绑定较佳地表明槽是否被绑定到控制、XSL标记或视图。根据什么类型的对象被绑定到槽,绘制工具出现分支(方块1408)。如果槽被绑定到控制,那么控制被执行以产生XHTML内容,并且XHTML内容被放入槽中(方块1408)。如果槽被绑定到XSL标记,那么XSL标记被处理以生成XHTML内容,并且内容被放入槽中(方块1410)。如果槽被绑定到另一个视图,那么这个其他的视图被计算来生成XHTML内容,并且那个内容被放入槽中(方块1412)。如上所注明的,当视图在槽绑定中被遇到时,计算那个视图的过程是和计算最高层视图的过程本质相同的;方块1412,事实上,可作为对完成图14过程的方法的递归调用被实现。
当前的槽被处理后,绘制工具决定在当前视图中是否有另外的槽(方块1414)。如果没有这样的槽,那么过程终止。如果有另外的槽,那么绘制工具继续到下一个槽(方块1416),并且返回到方块1405来处理下一个槽。
[0078]要注意的是,上述例子仅仅为了解释被提供,并且决不被理解为本发明的限制。当本发明参考各种实施例描述时,要理解这里所使用的词是描述和说明性的词,而不是限制的词。此外,尽管本发明参考特定装置、材料和实施例在此描述,但是本发明不试图被限制于这里揭示的特例;而是,本发明扩展至所有功能上等效的结构、方法和使用,如在后附权利要求书的范围中。那些本领域熟练的技术人员,得益于这个规范的指导,在不脱离本发明在其方面的范围和精神下,使得许多本发明的修改和变化可以被做出。