脚本标记
背景
历来,标记被用于指示标记原稿副本以在用于格式化的指示诸如对类型字体和大小、间距、缩进等的使用的帮助下进行排版的过程。在当今的数字时代,标记指的是电子标记,即电子文档中描述文档格式化的内部的、有时不可见的代码。一般,用户可通过用显示电子文档的浏览器查看文档的源代码来查看电子文档的标记。文档的电子标记一般提供文本的编码以及关于文本的结构、外观和呈现及文档中的内容的详细情况。
电子文档的标记一般使用标记语言来编程。标记语言提供用于在文档中嵌入在文档由诸如Web浏览器的特殊应用程序查看时控制文本的格式化的标签的句法和过程。通常使用的电子标记语言包括HTML、XML和ASP.NET。传统上,使用标记语言来设计静态文档的内容和外观。
然而,对诸如Web应用程序的交互式应用程序,诸如Web页面的文档的内容和/或呈现可例如基于用户输入而改变。文档的标记因此需要伴有管控文档行为的信息。传统上,文档行为程序上在脚本中实现。为了提供动态文档行为,文档标记可在适当的时间调用脚本中的方法。因而,标记和对脚本方法的调用的混合使得难以为文档独立地设计标记。同时,因为脚本语言传统上是过程性且命令性的,文档的用户通常不能使用脚本语言来为文档设计特定行为。
尽管在该背景章节中示出并描述了现有系统的特定缺点,但本领域的技术人员和其他人将认识到,此处所要求保护的主题不限于用于解决任何或所有所述缺点的任何特定实现。
概述
提供该概述以简化的形式介绍一些概念,它们将在以下详细描述中进一步描述。该概述不旨在标识所要求保护的主题的关键特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的各方面使得提供用于定义与文档相关联的基于脚本的交互式行为和应用逻辑的声明性机制的脚本标记语言可用。本发明的各方面也使得与文档相关联的交互式行为和应用逻辑能被定义为与涉及该文档的内容和呈现的标记(“一般标记”)相分离的文档的独立层(“脚本标记”)。
本发明的一个方面采用脚本标记语言来为文档对脚本标记编程以定义文档的行为。脚本标记可在包含用于显示文档的标记信息的标记文档中被包括或引用。标记文档还可包括含有定义要显示的文档的内容和/或外观的一个或多个一般标记元素的一般标记部分。一般标记部分和脚本标记部分在标记文档中彼此分离,尽管脚本标记部分可定义一般标记部分中一般标记元素的行为。
根据本发明的另一方面,脚本标记部分包括一个或多个脚本标记元素。例如,脚本标记元素可包括包含引用元素和组件元素的脚本元素。引用元素可包括对由脚本标记部分使用的脚本文件的一个或多个引用。组件元素可定义用于控制要显示的文档的行为的一个或多个脚本对象。
根据本发明的另一方面,脚本对象可包含一个或多个属性,诸如特性属性、方法属性、事件属性或对标记文档中另一元素的引用。例如,脚本对象可引用一般标记部分中的一般标记元素,使得脚本对象可控制一般标记元素的行为。脚本对象也可引用由脚本标记部分定义或引用的另一脚本对象。脚本对象也可包含一个或多个子脚本对象,诸如事件对象、绑定对象和动作对象。可为事件对象提供事件句柄。事件句柄可将脚本标记与开发员定义的代码连接。
根据本发明的又一方面,脚本对象可与另一脚本对象通信。例如,与脚本对象相关联的绑定对象可以将脚本对象的特性与另一脚本对象的特性绑定。此外,与脚本对象相关联的动作对象可在特定事件发生时执行特定动作。该特定动作可以是执行与另一脚本对象相关联的方法或配置与另一脚本对象相关联的特性。
附图描述
当结合附图参考以下详细描述,前述方面和本发明众多伴随的优点将变得更容易理解且能更好地领会,附图中:
图1是示出用于实现本发明的各方面的示例性计算系统的框图;
图2是示出根据本发明的一方面的标记文档的示例性划分的框图;以及
图3是示出实现本发明的各方面的示例性标记文档的文本图。
详细描述
以下文字示出并描述了本发明的示例性实施例。然而,本领域的普通技术人员可以理解,可在其中进行各种改变而不背离本发明的精神和范围。
图1示出了用于实现本发明各方面的示例性计算系统100。计算系统100包括服务器组件102和客户机组件104。一般,浏览器106与客户机104相关联以便显示诸如Web页面的文档。在典型的场景中,当浏览器106请求显示例如Web页面的文档时,客户机104向服务器102发送文档请求。服务器102然后向客户机104发送包含用于显示所请求的文档的标记信息的标记文档108。标记文档108可存在于与服务器102相关联的数据库110中。通常,服务器102和客户机104存在于同一计算机系统上。或者,它们可存在于不同的计算机系统上,并通过网络(未示出)通信。
在本发明的实施例中,一旦接收到标记文档108,浏览器106就解析并解释标记文档108以根据标记文档108中提供的定义显示所请求的文档。
在本发明的示例性实施例中,诸如Web页面的文档的标记文档108提供定义该文档的内容和/或呈现的一般标记。标记文档108还包括或引用定义该文档行为的脚本标记。图2示出了在标记文档108中呈现的示例性信息块。如图2中所示,标记文档108包括一般标记部分202和脚本标记部分204。
一般标记部分202定义要显示的文档的内容格式和/或总体外观。一般标记部分202可定义一个或多个一般标记元素。例如,图2示出了一般标记部分202包括诸如一般标记元素A(206)、一般标记元素B(208)和一般标记元素Z(210)的多个一般标记元素。
另一方面,脚本标记部分204的内容定义了与要显示的文档相关联的交互式行为和应用逻辑。在本发明的实施例中,脚本标记部分204的内容定义或引用一个或多个脚本对象,并伴随定义脚本对象的状态、特性值的属性实例化脚本对象。如图2中所示,在本发明的实施例中,脚本标记部分204与一般标记部分202分离,并且是标记文档108中的独立部分。或者,在本发明的某些实施例中,脚本标记部分204可被包括在之后被标记文档108引用的单独的文件中。如图2中所示,脚本标记部分204的内容包括诸如脚本元素210、引用元素212和组件元素214的多个脚本标记元素。一般标记元素和脚本标记元素都被称为标记元素。
在本发明的示例性实施例中,脚本元素210定义脚本标记部分204的总体范围。脚本标记部分204中的所有其它元素,诸如引用元素212和组件元素214均被包含在脚本元素210内。回到图1,当解释脚本标记部分204时,浏览器106导航通过脚本元素210来解释所包括的定义,以便决定要显示的文档的行为。
在本发明的实施例中,引用元素212引用标记文档108之外由标记文档108中的标记元素使用的脚本文件。外部脚本文件可详细说明标记元素可使用的依存性信息。优选地,外部脚本文件还可提供在脚本标记部分204中定义或引用的脚本标记元素的实现细节。
组件元素214包含实际上定义要显示的文档的行为的一个或多个脚本对象定义。在本发明的示例性实施例中,在组件元素214中定义的一个或多个脚本对象可引用从而定义包括在一般标记部分202中的一般标记元素中的一个或多个的行为。
图3示出了实现图2所示的示例性标记元素的示例性标记文档108。如图3中所示,示例性标记文档108包含分层结构,其中一个标记元素可为另一标记元素所包含。每一标记元素包括如由<>符号表示的标签,在标签之间详细说明实际的元素。每一标记元素包括开始标签和结束标签,其中开始标签开始标记元素,结束标签结束相应的标记元素。例如,如图3中所示,脚本元素210在行3以开始标签<>开始,并在行34以结束标签</>结束。如将在以下详细描述地,标记文档108中的标记元素还包含带有赋值的一个或多个属性。
图3中所示的示例性标记文档108示出了两个计数器的脚本定义的行为。如图3中所示,行1-2示出了示例性一般标记部分202。此处,定义了两个一般标记元素——Counter(计数器)#1和Counter#2,其中Counter#1具有带有值“counterLabell(计数器标贴1)”的“id”属性,Counter#2具有带有值“counterLabel2(计数器标贴2)”的“id”属性。
行3-34示出了指定在行1-2中定义的两个计数器的行为的示例性脚本标记部分204。具体地,行3信令示例性脚本元素210的定义的开始,行34信令该定义的结束。示例性脚本元素210包括链接到两个JavaScript文件——AtlasUI.js和AtlasControls.js的示例性引用元素212(行5-8)。行9-32示出了定义多个脚本对象的示例性组件元素214。例如,行10定义了被标识为“counter1(计数器1)”的脚本对象Counter 302,而行11定义了被标识为“counter2(计数器2)”且具有值“10000”的脚本对象Counter 304。行12-16和行17-21之间的代码各自定义了周期性(例如,每500秒)启动事件对象Tick(计时)(308、318)的脚本对象Timer(定时器)(306、316)。在本发明的实施例中,脚本对象可包括一个或多个子脚本对象。例如,脚本对象Timer 306包括事件对象Tick 308,后者进一步包括动作对象invokeMethod(调用方法)310。作为另一示例,在行22-26中定义的脚本对象Label(标贴)312包括绑定对象314。
在本发明的示例性实施例中,脚本对象可与其值用来定义脚本对象的行为的一个或多个属性相关联。属性可以是例如与脚本对象相关联的特性、方法、或事件。属性也可以是对另一标记元素的引用。例如,在行11中定义的脚本对象Counter 304具有特性属性“id”和特性属性“value(值)”。在行14中定义的动作对象invokeMethod 310具有被设置为示例性“increment(递增)”方法的方法属性“Method(方法)”。例如,代替使用事件对象Tick 308,脚本对象Timer 306可具有事件属性“Tick”。行22中定义的脚本对象Label 312具有引用行1中被标识为“counterLabel1”的一般标记元素Counter#1的属性“targetElement(目标元素)”。
在本发明的示例性实施例中,脚本对象可引用在标记文档108的一般标记部分202中定义的一般标记元素,并定义与所引用的一般标记元素相关联的文档行为。例如,行22-26之间的代码定义了引用行1中定义的一般标记元素Counter#1的脚本对象Label 312。行27-31之间的代码定义了引用行2中定义的一般标记元素Counter#2的脚本对象Label 320。因此,脚本对象Label 312和Label 320可指定一般标记部分202中的一般标记元素Counter#1和Counter#2的行为。
在本发明的实施例中,脚本对象可通过在特定事件发生时执行特定动作来与另一脚本对象通信。例如,在本发明的实施例中,脚本对象可与一事件相关联,该事件的发生启动了相应的事件句柄,后者可链接至用于标记文档108中的标记元素的开发员定义的代码。在本发明的示例性实施例中,事件句柄包括将要对组件元素214中的脚本对象之一执行的一个或多个特定动作。示例性动作可以是调用与另一脚本对象相关联的方法。另一示例性动作可以是配置与另一脚本对象相关联的方法。在本发明的典型实施例中,事件和动作两者都可以是包括一个或多个属性的脚本对象。例如,脚本对象Timer 306包含事件对象Tick 308,后者的启用启动了动作对象invokeMethod 310。动作对象invokeMethod 310具有指定目标脚本对象例如“counter1”的属性“target(目标)”和指定要对目标脚本对象执行的函数的属性“method”。
用于一个脚本对象与另一脚本对象通信的另一示例性机制是将一个脚本对象的特性与另一脚本对象的特性连接的绑定机制;因此一个特性的改变被反映在另一特性上。例如,如图3中所示,脚本对象Label 312包括绑定对象314。绑定对象314具有指定脚本对象的属性“dataContext(数据上下文)”和指定脚本对象Label312将与之绑定其特性“text(文本)”的该脚本对象的特性之一的属性“dataPath(数据路径)”。作为绑定的结果,行10中定义的脚本对象Counter 302的值被反映在与脚本对象Label 312相关联的“text”特性中,从而显示在行11中定义的一般标记元素Counter#1中。在本发明的示例性实施例中,绑定对象提供将提供数据的特性的类型变换为接收数据的特性的类型的变化功能。例如,绑定对象314的变换功能可将由“dataPath”指定的特性的类型转换成由“text”指定的特性的类型。
可以理解,图3仅示出用于实现本发明的各方面的脚本标记语言的示例性格式。这些示例性格式应仅用于说明的目的。这些示例性格式不将本发明的实施例提供的脚本标记语言限于所示的特定的格式、句法和功能。例如,使用XML句法和格式示出了示例性标记文档108。然而,本领域的普通技术人言可以理解,本发明的各方面可用诸如HTML、ASP.NET、JavaScript Object Notation等不同的标记语言实现。
在本发明的实施例中,开发员可定制脚本对象模型。脚本对象模型例如指定诸如特性、方法和/或事件属性等属性,以及可与脚本对象模型相关联的任何子脚本对象模型。然后例如通过与浏览器106相关联的类型管理器向浏览器106注册脚本对象模型。浏览器106因此知道如何解释并处理基于脚本对象模型实例化的脚本对象。作为结果,由本发明各方面提供的脚本标记语言就新的脚本对象模型可被定义并向浏览器注册以便于解释包含基于脚本对象模型实例化的脚本对象的脚本标记而言是可扩展的。
尽管用结构特征和/或方法动作专用的语言描述了本发明的各方面,但可以理解所附权利要求书中定义的主题不必限于上述特定特征或动作。相反,上述特定特征和动作作为实现权利要求书的示例性形式而公开。