用于处理数据表示语言对象的编程语言扩展和相关应用的制作方法

文档序号:6426711阅读:204来源:国知局
专利名称:用于处理数据表示语言对象的编程语言扩展和相关应用的制作方法
相关申请这个专利申请是于2001年7月2日提出的非临时申请09/898,898的部分后续申请,而且要求享受也于2001年7月2日提出的临时申请60/302,892的优先权。
发明
背景技术
1.发明领域本发明涉及编程语言领域。更具体地说,本发明涉及一种用于在本机程序设计语言环境中操纵基于数据表示语言的对象的方法。
2.背景信息XML正快速地浮现为用于在软件应用和网络服务之间传输数据结构的事实上的标准。虽然大多数的软件应用和网络服务以现代程序设计语言、诸如Java或者C++编写,但是这些编程语言中没有一个提供用于表示和操作XML的本机支持。因此,程序员不得不开发或者采用用于在它们的应用和网络服务的环境内表示和操纵XML的外部程序包。
一般说来,外部程序包不能够提供为主机语言提供对于用于处理XML数据的本机支持。因而,它们以非常不同于由主机语言提供用于它的本机数据类型的方法,来表示和操作XML。经常,外部程序包使用一个通用的树形抽象表示XML数据以及提供一个基于树的应用编程接口(API)用于导航和操纵数据(例如,getParentNode(),getChildNodes(),removeChild(),等)。与被用来存取和操纵对于主机编程语言来说是本机的数据结构的方法相比,这种存取和操纵数据结构的方法是繁重和费时的。
因此,希望有一种允许以与操纵本机数据结构相同的性能和灵活性来操纵诸如XML之类的数据表示语言数据结构的编程语言。
附图简要说明将通过在附图中说明的示范性实施例、非限制性地对本发明进行描述,在附图中类似的参考符号表示类似的元素,其中

图1说明了本发明一个实施例的概述;
图2依据本发明的一个实施例说明了解释器/编译器104的示例操作流;图3A-3F依据本发明的一个实施例说明了各种语言扩展;图4是一个说明了适于在实践本发明中使用的通信网络实施例的框图;图5A-5B依据一个实施例,说明了包括本发明的语言扩展、用于映射XML文档到ECMAScript对象以及映射ECMAScript对象到XML文档的示例函数;图6依据一个实施例说明了一个示例计算机系统,其适于驻留包含解释器/编译器104的本发明的映射服务;图7A-C说明了基于现有技术的示例功能,用于映射XML文档到Java对象以及映射Java对象到XML文档;图8A-B包括最初在图5A-5B中说明的ECMAScript功能的版本,其已经依据本发明的示教进行了修改;以及图9说明了依据本发明的一个实施例编写的功能的使用。
本发明的详细说明在下面的描述中,将描述本发明的各个方面。然而,对于本领域的那些技术人员来说,显然本发明可以仅仅用本发明的一些或者所有方面进行实践。为了说明起见,阐述了许多具体的数字、资料和配置以便提供对本发明的一个彻底了解。然而,对于本领域的技术人员来说,可以实践本发明而不用具体的细节同样是显而易见的。在其它实例中,省略或者简化众所周知的特征以便不致弄模糊本发明。
在此使用通常由那些熟悉编译器和解析器设计的人使用的概念和术语。那些不熟悉编译器和解析器内部运行机理的人可参考由AddisonWesley出版社在1985年11月出版、由A.Aho、R.Sethi和J.Ullman所著的“CompilersPrincipals,Techniques and Tools”(ISBN0201100886)。另外,假定读者基本上熟悉XML概念和术语,包括XML、XML Schema、文档对象模型(DOM)、XML查询语言和XPath。那些不熟悉这些技术的人可参考以下的万维网协会(W3C)出版物2000年10月6日发行的W3C Recommendation RE-XML-20001006,ExtensibleMarkup Language(XML)1.0(第二版);1998年10月1日发行的W3C Recommendation REC-DOM-Level-1-19981001,Document ObjectModel(DOM)Level 1 Specification;2001年12月20日发行的W3C Working Draft WD-XQUERY-20021220,XQuery 1.0An XMLQuery Language;1999年11月16日发行的W3C Recommendation REC-XPATH-19991116,XML Path Language(XPath);2001年5月2日发行的W3C Recommendation REC XMLSCHEMA-0-20010502,XML Schema Part 0Primer;2001年5月2日发行的W3CRecommendation REC-XMLSCHEMA-1-20010502,XML Schema Part1Structures;以及2001年5月2日发行的W3C RecommendationREC-XMLSCHEMA-2-20010502,XML Schema Part2Datatypes。
将依据由基于处理器的设备执行的操作,使用诸如接收、分析、确定、产生、等等的术语,与通常由本领域那些技术人员使用的方式一致地给出本描述的一部分,以把它们的运行实质传达给本领域的其它技术人员。如由本领域的那些技术人员十分理解的那样,量值采用能够被存储、被传输、被组合,以及其他通过基于处理器的设备的机械和电气部件所操纵的电、磁、或者光信号的形式;而且术语处理器包含那些是独立、附属或者嵌入的微处理器、微控制器、数字信号处理器、等等。
将以最有助于理解本发明的方式,将各种操作依次作为多个离散步骤来描述,然而描述次序不应当被认为是暗示这些操作必须是依赖次序的。尤其是,不需要按所提供的次序执行这些操作。此外,本描述重复使用措词“在一个实施例中”,其通常不涉及同一个实施例,不过这是可以的。
概述本发明包含提供以编程语言扩展形式的功能描述,以便于在本机编程环境中灵活地操纵诸如XML对象的数据表示语言结构。语言扩展包含一种本机XML数据类型和一些操作集合,这些操作允许程序员以和本机语言对象被导航和操纵大致相同的方式导航和操纵XML对象。因此,本发明提供了一种用于操纵XML和本机语言对象的机制,即非常特别适合用于越来越处处存在的问题,即将XML对象映射到以现代编程语言编写的软件应用和网络服务中以及将其映射出。
图1依据一个实施例说明了本发明的一个概述。如图所示,映射服务100包含解释器/编译器104(“解释器”),其进一步包含解析器105。在一个实施例中,包含本发明的各种语言扩展的编程语句102被提供给映射服务100以由解释器/编译器104解释/编译。映射服务100的解析器105依据在本技术领域已知的多种解析技术中的任何一种来解析编程语句102。一旦语句被解析了,解释器/编译器104把这些语句编译成为可执行代码,然后将其提供给执行引擎106。执行引擎106(例如,通过处理器)控制代码的执行并且实施常规的执行运行时间服务,诸如存储器分配请求和释放、错误/例外处理、等等。
对于所说明的这一实施例,解释器/编译器104包含一个应用编程接口(API)(没有示出),通过该API,使用本发明的语言扩展形成的编程语句可以由若干个专门的应用处理过程可编程地提交以便编译。例如,依据本发明的一个实施例,当收到XML文档时,网络服务器应用进行对映射服务100的调用,以便把XML文档对象映射为例如内部Java类,以便由网络服务器进行附加处理过程。这样的专门应用处理过程可以和映射服务100一起驻留在和映射服务100相同的“主机”系统(没有示出)中,或者位于远离“主机”系统的地方并且使用传统的跨系统通信技术和映射服务100进行通信。
图2依据本发明的一个实施例说明了解释器/编译器104的示例操作流。在操作中,块202处,解释器/编译器104读取包含本发明的一个或多个语言扩展的编程语句102中的一条。在块204 & 206处,解析器105然后使用在本技术领域已知的多种解析技术中的任何一种来解析所读取的语句,以基于由解释器/编译器104维护的语言词典或者语法识别包含在其中的一个或多个表达式和/或子表达式。解析器105在读取和解析在编程语句102中声明的符号时可以构造一个符号表,其在确定用于包含那些符号的其他编程语句的语义中使用。在块208处,解释器/编译器104持续读取语句和求表达式的值直到所有语句已经被读取和解析了为止。此外,在块210处,解释器104可以可选地对所分析了的表达式施行一次或多次优化。优化可以是在本技术领域已知的任何一个或多个可施行的编译器最优化技术。最后,不论有没有对已分析的命令进行优化,在块212处,解释器/编译器104都为已分析的表达式产生可执行代码。在一个实施例中,解释器/编译器104为分析的表达式产生字节代码。在替换实施例中,可以代之以实践其他等效的“代码生成”方法。
语言扩展如上所述,就XML文档和编程语言对象之间的互操作性和翻译而论,常规的编程语言没有提供足够的功能。因此,依据本发明的示教,提供了用于与诸如Java、C++、ECMAScript、等等的一种编程语言相结合使用的面向XML的语言扩展,并且现在将对其进行描述。为了避免混淆,以下相对于ECMAScript对语言扩展进行描述,然而,本发明的可应用性不应该被理解为仅仅限于ECMAScript。
图3A-3E依据本发明的一个实施例说明了各种ECMAScript语言扩展。首先参见图3A,其中语言扩展300说明了两种XML(数据)类型声明,其显式地指示一个给定变量(例如,x、y)与一个XML变量类别相关联。这些XML变量可以恰好和如在行300(C)和(D)中说明的那样、任何本地ECMAScript数据类型可被声明的方式相同地被声明。在一个实施例中,装备一种知道ECMAScript的解析器(例如,解析器105)以辨识XML数据类型声明并且把它们和在相应符号表中的适当条目(例如,变量、函数参数、函数返回值、等等)相关联。解释器/编译器104使用这个类型的信息来确定在XML类型值上执行的操作的语义,以及例如,决定何时隐式地强制把值转化为XML类型或者从XML类型中转化出值(在下面将进行更全面的描述)。在说明的实施例中,通过一个自我识别的前缀(例如,‘XML’)显式地声明XML类型。在一个实施例中,解释器/编译器104能够使用DOM作为用于存储和操纵XML类型值的基本数据结构,不过不需要向用户明示这种实现的细节。
语言扩展310说明了在包含XML语法的结构化表达式和XML类型变量之间进行的分配。例如,在行310(A)中,XML类型变量“p”被分配了一个表示人员元素的XML结构,该人员元素包含姓名和年龄元素(例如,分别为‘John’和‘25’)。虽然在行310(A)中的表达式包含一个明确的XML类型指示符(如上所述),当使用包含XML语法的表达式初始化的变量被用于松散类型的语言中时,不需要这样显式XML类型声明。在一个实施例中,在所有XML标记定义中使用的“<”符号,在本发明中被进一步用作一个一元操作符来向解释器/编译器指示在之后的表达式要被当作字符串而且作为XML表达式进行解析。在一个实施例中,“<”操作符的操作数是截至到匹配的末端标记并且包含匹配的末端标记的整个XML文字。因此,因为一元操作符“<”触发在XML类型值中的结果,所以不必要让被分配了XML数据符号的松散类型语言的变量显式地声明为XML类型。例如,行310(B)-(E)说明了一个XML类型变量“e”,其基于表达式的内容已经被隐式地声明为XML类型。
语言扩展320说明依据本发明的示教,部分XML数据符号能够被通过嵌入表达式的使用动态地确定。在所说明的该实施例中,本发明的映射服务动态地解析包含嵌入的ECMAScript表达式的部分XML文字。在一个实施例中,配备解释器/编译器104,以把一组花括号(例如,“{...}”)标识为一个具有比一元操作符“<”(如上所述)更高优先级的嵌入表达式操作符。然而,应当注意到不同于“{}”的操作符可以被使用作为嵌入表达式操作符而不背离本发明的精神和范围。在任何情况下,如果解析器105识别出在一个表达式内存在嵌入表达式操作符,则由嵌入表达式操作符指示的操作数被传递给解释器/编译器104以便计算,并让产生的返回值强制(如下所述)为字符串。此后,使用字符串连接,以便在该嵌入表达式之前和之后的XML数据符号之间插入返回值。一旦所有嵌入的表达式已经被计算了而且它们的结果被插入到XML数据符号中之后,一元操作符“<”的存在导致解释器/编译器104把产生的字符串转换为XML类型。
图3B中的语言扩展330说明了由解释器/编译器104实践的类型强制原理。依据本发明的一个实施例,在解析器105期望一个XML类型值的地方出现的任何字符串类型值通过把该字符串的内容解析为XML数据自动地转换为XML数据类型。在转换之前,能够使用字符串算法构造和操作字符串值而不用考虑诸如良好形式等的XML限制。例如,在行330(D)中,XML类型变量“employees”被分配了多个字符串连接的结果。更具体地说,字符串类型的变量“tagName”和两个其他字符串值(例如,“<”和“>”)连接以形成XML打开和关闭标记。产生的标记再次被当做字符串并且和变量John和Sue的值连接,尽管有这两个变量表示XML表达式(例如,如在行300(A)和(B)中说明的那样)的事实,但是它们也当做字符串进行处理。由于显式“XML”数据类型声明,由连接产生的字符串值然后强制转换回XML值。
另外,在其他期望XML的环境中,字符串值同样被自动地强制为XML值。例如,传递给期望XML参数的函数的字符串值和嵌入在XML数据符号内的字符串值将被类似地转化为XML。因此,行330(E)产生和行330(D)相同的结果。如同使用其他类型强制一样,解释器/编译器104使用符号表来确定一个特定值的‘类型’是否匹配它的目标变量、函数参数、等等的‘类型’。当在一个期望XML值的地方提供了一个字符串值时,编译器使用XML解析器来执行转换。当期望XML值而且提供的值既不是XML又不是字符串时,编译器试图把该值转换为字符串(例如,利用Java的Object.toString()方法),然后把产生的字符串解析为XML。
语言扩展340依据本发明的一个实施例说明了可以如何存取和/或分配子体元素。如说明的实施例所示,一旦一个变量包含XML值,XML变量的子体元素可以使用一个诸如句点/点(“.”)(在下文中“点操作符”)的预定义操作符进行存取和/或分配。点操作符检查它左边操作数的所有子体元素并且按次序返回那些具有和右边操作数匹配的名称的元素。这可能导致零个或更多元素被返回。在一个实施例中,如果指定的子体元素是一个叶节点(即,本身不包含任何子体元素),则返回那个子体元素的内容。
然而,如果指定的子体元素不是一个叶节点,则返回指定的子体元素及其全部后代(例如参见,340(D))。另外,点操作符左边操作数有可能是一列元素而不是单一元素(例如,考虑当连续使用两个或更多点时)。在这种情况下,点操作符在该列表上进行迭代以按次序检查每个元素的子体元素。这个处理有意模糊在单一元素和元素列表之间的区别以简化程序员的任务。
语言扩展350说明了XML元素的属性可以使用一个“属性”操作符进行存取和分配。属性操作符检查它左边操作数的所有属性,并且返回其名称和右边操作数匹配的属性的值。在一个实施例中,属性操作符由‘@’符号表示。例如,在行350(A)中,检索至少两个雇员之一的与‘id’属性相关联的值,并且把它分配给一个整数类型的变量‘empid’,而在行350(B)中,第四个雇员的‘id’属性被设置为‘10’。
依据本发明的一个实施例,由IDREF或者IDREFS属性引用(例如,由在XML模式或者文档类型定义(DTD)中的一个适当声明指示)的元素可被构造为就好象它们是属性的紧邻子体元素一样进行访问。例如,给定在行355(A)中说明的结构,在行355(B)中显示的表达式将导致所有的老板id被返回,而在行355(C)中的表达式将导致所有老板的姓名被返回,在行355(D)中显示的表达式将导致所有老板的年龄被返回。在一个实施例中,如果点操作符(即,‘.’)的左边操作数是IDREF或者IDREFS属性,则点操作符将检索左边操作数的值,在文档中搜索包含一个值等于左边操作数值中的一个的ID属性(例如,通过在XML模式或者DTD中的一个适当声明所指示的)的元素,并且返回零个或更多匹配元素的列表。在一个实施例中,解释器/编译器104可以保持一个把在文档中的每个ID值和它识别的节点相关联的有效映射,以避免在文档中重复搜索具有匹配值的ID属性。
除了提供对一个XML值紧邻子体元素的直接存取之外,本发明的语言扩展还提供了对一个XML值所有后代(即,子体、孙体、曾孙体、等)的直接存取(例如,参见图3C中的语言扩展360)。在一个实施例中,“双点”(例如,‘..’)操作符检查它左边操作数的所有后代元素,并且以文档次序返回那些名称和它的右边操作数匹配的元素。当左边操作数是一个元素列表时,‘..’操作符在列表上进行迭代以按次序检查每个元素的后代。例如,行360(E)的表达式将导致在行360(A)-(D)中定义的雇员姓名(例如,‘Joe’和‘Sue’)被返回。
语言扩展370说明了本发明的一索引属性,借此给定一个子体元素列表,能够使用一个预定义的索引操作符来识别在该列表内的单个子体元素。在一个实施例中,这通过扩展解释器/编译器104以提供在主机语言的数组类型和XML NodeList之间的自动类型强制来完成。在一个实施例中,一个方括号组“[]”被用作索引操作符。索引操作符实质上基于它在列表内的序数位置(即,由索引操作符所指示)从它的左边操作数中选择单个元素。左边操作数可以表示一个元素列表,或者单个元素。如果操作数表示单个元素,它将被当做一个具有大小等于一的列表。
如由语言扩展380说明的那样,本发明还提供了在子体元素列表上的迭代。在一个实施例中,在子体元素列表上的迭代使用在主机编程语言中、用于在数组上迭代的本地方法完成。例如,如在行380(A)-(B)中说明的那样,表达式“e..name”返回一个元素列表,而且“for”语句按次序在该列表上逐步进行。对于在该列表中的每个元素,“for”语句向元素分配变量“n”并且继续进行以打印在文本“Employee name”之前的元素。做为选择,可以使用在主机编程语言中用来确定数组长度的方法来确定子体元素列表的长度。例如,在行380(C)上的语句中,通过存取由主机ECMAScript语言使用用于确定数组长度的隐含“长度”属性(例如,“.length”)来确定子体元素列表的长度。因此,行380(C)-(D)产生和由行380(A)-(B)产生的结果相同的结果。
图3D中的语言扩展385依据本发明的一个实施例说明了用判定进行的过滤。当选择一个元素集合时,有可能过滤产生的集合,以便仅仅那些被提供的过滤判定确定为真的元素将被返回。在一个实施例中,过滤判定被封装在位于“.”(即,点)操作符之后的括号内。例如,在图3D行385(A)中说明的表达式返回具有姓名“John”的雇员元素,而行385(B)返回与具有ID等于“1”的雇员元素相关联的姓名。行385(C)说明了由一个布尔操作符和两个子表达式组成的判定的使用。在说明的示例中返回具有ID等于第一个值(例如,“0”)或者等于第二个值(例如,“1”)的雇员元素。实际上,诸如AND和NOT的其他布尔操作符也能够被使用。同样,虽然说明的过滤判定仅仅检测等同,但是依据一个实施例,诸如“<”、“<=”、“>”、“>=”、和“!”的所有标准比较操作符能够在过滤元素集合中使用。例如,表达式“emp=e..employee.(@id<2).name”能够用来返回具有ID值小于2的雇员元素。在一个实施例中,判定能够包含任何这样的表达式,这些表达式当在过滤判定左边操作数的环境中计算时产生一个布尔值。
在本发明的一个实施例中,解释器/编译器104被配备为把继之以一组括号的点操作符(例如,“.()”)识别为一个过滤判定操作符,以指示将要使用过滤判定。当进行识别时,过滤判定操作符从左边操作数中返回零个或更多元素列表,对于这些元素在括号内规定的测试条件是真的。过滤判定操作符在它的左边操作数中的元素列表中迭代并且把位于括号内部的检测应用到每个元素。如果检测成功(即,返回一个真值),则该元素被添加到返回的元素列表中。应当注意到行385(C)和385(D)语义上是相等的。
语言扩展390说明了本发明的进一步方面,借此匿名元素能够用来表示文档片段。依据说明的实施例,文档片段被表示为嵌入在一个未命名或者匿名亲体元素中的元素集合。这个记号在诸如当开发者希望在一个操作中替换一个元素的整个内容(例如,主题亲体元素的子体元素)而不是执行几个独立的操作时的情况中是便利的。例如,行390(B)说明了一个元素的内容(即雇员[1]和所有子体元素的内容)如何能够使用单个文档片段替换。更具体地说,通过使用本发明的匿名元素概念,由390(C)指示的代码行可以有利地用由行390(B)指示的单代码行替换。在本发明的一个实施例中,配备解释器/编译器104以允许XML数据符号的最外面亲体元素保持未命名(其否则在句法上将是不允许的)。解释器/编译器创建一个XML文档片段以表示未命名元素的内容。在匿名元素和命名元素之间的操作仅仅改变命名元素的子体元素,而不是元素本身。例如,在行390(B)中的表达式替换第二个雇员元素的全部子体元素,但是不改变雇员元素本身的名称或者属性。
本发明的语言扩展进一步包含一个用于当那些不同于主机编程语言的编程语言被认为比主机编程语言更适合于执行一个特定任务时,以这些语言编写可重用函数的机制。在一个实施例中,定义了一个API以利用用于一种或多种其他语言的解析器和表达式求值器扩展主机编程语言。在一个实施例中,API包含一个语言查找表格,用于把语言关键字和用于相应语言的专门外部解析器和表达式求值器相关联、一个对象标准集合,用于把一个函数的名称和主体传递给语言解析器、以及一个标准对象集合,用于把函数名和参数传递给表达式求值器以及从表达式求值器中返回表达式结果。
在本发明的一个实施例中,如例如图3E所示,在主机编程语言中引入“语言”标记以便于在不同于主机编程语言的编程语言中使用可重用的函数。每当诸如例如解析器105的解析器遇到一个前面有“语言”标记的函数说明时,解析器在主机语言的符号表中注记该函数条目和适当的语言关键字(例如,XPATH、XQUERY、等),使用语言查找表格查找适当的语言解析器、以及在传递作为参数的函数名和主体的同时激活解析器。这允许解析器产生该函数的一个有效解析表示并且在关联的函数名下面存储它。此后,每当主机编程语言表达式求值器遇到一个函数调用时,解析器通过在注记符号表中查看来确定正确的语言、通过使用语言查找表格查找适当的表达式求值器、并且使用如上所述的API激活表达式求值器以提供函数名和参数。
本发明的语言扩展还定义了一种用于使用数据类型描述语言,诸如XML模式,创建和强制XML数据类型的受限子类型的机制。在一个实施例中,这使用用于引入外部数据类型的主机编程语言结构完成。例如,ECMAScript或者Java中,这使用“import”语句完成。在这个示例中,外部XML模式文件用来以和外部Java类文件用来描述Java对象类同样的方法来描述XML对象类。引入XML模式文件创建了一个新的数据类型集合,用于操作符合在模式文件中定义的约束的XML值。这些类型中的每一个都是具有定义了这些限制的属性和范围的XML模式文件的一般XML类型的限制形式。解释器/编译器104通过用于每个操作的编译时和运行时检查组合强制这些限制。
例如,文件“car.xsd”可以包含一个描述具有以下结构的XML文档的XML模式<car vin=″...″>
<make>...</make>
<model>...</model>
<color>...</color>
<engine>
<size>...</size>
<cylinders>...</cylinders>
</engine>
</car>
能够使用“import car.xsd”语句引入这个模式以创建一个称作“car”的新XML数据类型,而语句“car mycar”可以创建一个类型为“car”、称作“mycar”的新变量,该类型包含由文件“car.xsd”指定的强制元素和缺省值。此后,新创建的变量“mycar”可以使用由当前发明描述的本地编程语言结构和XML操作符进行操纵和赋值。例如,以下的语句全部都能够用来向变量“mycar”的各个成员赋值mycar.car.@vin=″123456″;tnycar.car.make=″Ford″;
mycar.car.model=″Mustang″;mycar.car.color=″Red″;mycar.car.engine.size=2.2;mycar.car.engine.cylinders=6;在一个实施例中,解释器/编译器104(包含解析器105)被用对每一种类型模式约束的验证算法的调用扩充。因此,在上述示例中,语句“mycar.car.doors=4;”将返回一个编译时错误,这是因为基于引入的car模式“doors”是无效的元素名称。类似地,在上述示例中,如果XML模式文件“car.xsd”指定了“cylinders”必须包含整数,则语句“mycar.car.engine.cylinders=′yes′;”将返回一个错误。在一个实施例中,可以延迟运行时间验证,直到使用嵌入到XML数据类型中的validate()函数(例如,“mycar.validate()”)进行显式请求为止。
上面已经描述了便于在本机编程环境中灵活操纵XML对象,以编程语言扩展形式的各个功能描述。语言扩展包含一个本机XML数据类型和一些操作集合,这些操作允许程序员以和本机语言对象被导航和操纵大致相同的方式导航和操纵XML对象。因此依据本发明的示教,程序员能够使用本机编程语言的熟悉结构导航和操纵XML对象,同时他们自己有益于获得由XML提供的灵活性和可扩展性。更具体地说,依据本发明的一个实施例,通过把一种本机XML类型集成到诸如Java的给定编程语言中,能够得到用于在本机编程和/或脚本语言内执行普通操作的、基于XML的成员函数。例如,图3F中的表格说明了各个嵌入XML成员函数,通用本发明语言扩展的使用,这些函数能够在本机编程语言中得到。
示例应用如上面提到的那样,本发明的语言扩展特别适合用于在把来自一次数据表示语言的对象映射为一种编程语言的相应对象、以及反过来中使用。这样一个语言映射在这样的情况中可能是所希望的,这样的情况例如,一个具有基于诸如Java的编程语言的内部运行环境的系统需要和使用诸如XML的数据表示语言的其他系统交换数据。
图4是一个框图,说明了集成本发明示教的一个示例通信网络。如图所示,服务提供者405、客户110、以及终端用户415通过网络402通信地连接在一起。网络402表示诸如一个或多个局域网、广域网、因特网、等等任意多个通信网络。服务提供者405表示向客户410和终端用户415提供内容和/或服务的“增值”服务提供者。客户410表示一个或多个使用服务提供者405的增值服务以便,例如经由网络402向终端用户415提供改进的内容的实体。
情况1假定,例如服务提供者405已经开发了用于产生交互式的地理地图的新的网络服务,其突出显示以客户410利益出发的各个关注点。为了利用由服务提供者405提供这个服务,客户410经由网络402向服务提供者405传输一个关注点列表。作为响应,服务提供者405产生一个或多个交互式地理地图,其显示由客户410提供的关注点的可选表示。服务提供者405然后将一个或多个指向地图(多个)的URL(多个)返回到客户410,其接着利用URL(多个)来向终端用户415显示地图(多个)。每当一幅地图由客户410向终端用户415给出时,终端用户415可以选择一个或多个点,其然后返回到服务提供者405。服务提供者405然后将选定的点向回传输到客户410,以便客户410希望执行更进一步的处理。
客户410可以执行的处理过程属性由客户410确定并且依赖于,例如服务提供者的服务被使用的环境。例如,客户410可以表示使用这些点来向终端用户415显示人口资料和地产位置的地产公司,使用这些点来图形地显示气象服务已经收集的温度和天气现象的气象服务、使用这些点来图形地显示商店位置的产品生产商,等等。
每个这样的客户410的化身可以使用它们自己预定义的格式来传输这样的关注点。例如,天气团体可能已经同意一种用于传输有关天气现象信息的格式,房地产团体可能已经同意一种用于传输有关家庭信息的格式、以及产品厂商可能已经同意一种用于传输商店位置的格式。示例1显示一种例如由产品厂商团体使用、用于传输运送它们产品的商店位置的格式示例1<available-at>
<store>
<name>The Electronics Store</name>
<address>
<street>23 Transistor Dr.</street>
<city>Circuit</city>
<state>WA</state>
<zip>12345</zip>
</address>
</store>
<store>...</store>
<store>...</store>
</available-at>
然而,在内部,服务提供者405把关注点表示为一个点数组,每个点由下面示例2中显示的Java类定义示例2public class Point{String label;//紧接着点显示的文字LatitudeLongitude location;//点在地图上的位置}为了让大量客户团体容易地存取它们的服务,服务提供者405希望能够接受采用多种XML格式(即,诸如在示例1中显示的一种)的数据,并且然后让那个数据自动地映射到在服务提供者405本机编程语言内的相似数据结构中。
如上面依据本发明的一个实施例根据图4描述的那样,图5A-5B说明了集成本发明的语言扩展、用于映射XML文档到ECMAScript对象以及映射ECMAScript对象到XML文档的示例函数。在说明的示例中,每当服务提供者405从客户410接收一个需要被转换成为ECMAScript对象的XML文档时,服务提供者405调用函数“FromXML”(如图5A所示)。类似地,每当服务提供者405需要把内部ECMAScript对象转换成为XML以便由客户410使用时,服务提供者405调用图5B中的函数“ToXML”。
现在参见图5A,其中说明了函数“FromXML”。假定,例如,一个新的客户正处在以包含示例1所示结构的XML文档的形式向服务提供者405传输位置数据的过程中。当接收到数据时,服务提供者405启动对“FromXML”的函数调用。在这个函数内要注意的条目当中,语句500除了“.length”指令之外使用“双点”操作符(如上所述)来在接收的XML结构中导航并且为每个提供的XML地址分配一个新的点对象。接下来,为在XML数据中提供的每个地址,根据服务提供者405的内部数据约束确定显示标记和点位置(如示例2所示)。在语句505中,“availableat..address”返回一个地址元素列表,其接着被重复地分配给变量“a”。接下来,使用在点操作符之后、嵌入到XML数据类型中的parent()函数确定每个商店的名称。此外,使用点操作符确定商店所在的那个位置的街道地址、城市、州、和邮政编码。如语句510说明的那样,由后代地址元素的直接存取返回的字符串被连接在一起以形成点标记。另外,包含街道、城市、州和邮政编码的地址信息在LatitudeLongitude函数(没有示出)中使用,给定一个输入地址,该函数计算出一个地图位置。
在图5B中,说明了函数“ToXML”供在把基于ECMAScript的点位置转换成为如示例1所示的XML元素中使用。开始时,使用XML数据符号通过语句525构造根节点“<available-at>”。接下来,语句530使用ECMAScript的函数“String.split()”来解析显示标志以便为每个点确定商店名称、街道地址、城市、州和邮政编码。最后,语句535使用具有嵌入ECMAScript表达式的XML数据符号来为每个点创建商店元素。每个商店元素从语句525、使用嵌入的appendChild()函数附加到根节点。
图7A-C说明了基于在现有技术领域已知的技术,用于把XML文档映射到Java对象以及把Java对象映射到XML文档的示例函数。能够容易地看到依据现有技术使用Java和标准XML文档对象模型(DOM)实现如上所述函数所需要的代码量和复杂度,和图5A和5B中需要的相比,是显著的。此外,XML DOM操作符和用于导航本地数据结构的惯用Java操作符有很大的变化。
情况2在示例1中,描述了一种由产品厂商团体使用、用于传输运送它们产品的商店位置的XML格式。在下面的示例3中,示例1中的XML格式已经扩展到指示每个商店是否备有特定生产商的产品。
示例3<available-at>
<store>
<name>The Electronics Store</name>
<stock-item>yes</stock-item>
<address>
<street>23 Transistor Dr.</street>
<city>Circuit</city>
<state>WA</state>
<zip>12345</zip>
</address>
</store>
<store>...</store>
<store>...</store>
</available-at>
图8A-8B包含ECMAScript函数版本,其已经依据本发明的示教进行了修改以使得仅仅为那些被指示供应产品的商店产生点对象。另外在图8中,依据本发明的示教,由例如产品厂商团体开发的XML模式(例如,如在示例3中说明的那样)被使用以便于验证XML处理代码是否正确,以及正被产生的XML是否符合厂商团体的规范。在编译时间时,编译器利用这个模式规范来检测在代码中的错误,否则这些错误将直到运行时间为止才会出现,由此减少了在运行系统中的错误数量。在运行时间时,代码使用validate()函数来检测在动态构造的XML中的错误。如果验证函数检测到错误,则产生错误状况(即,异常),而不是返回无效数据。
现在参考图8A,其说明了修改了的“FromXML”函数。语句810引入一种称作“AvailableAt”、由XML模式文件“AvailableAt.xsd”描述的新XML数据类型。语句820声明传递到“FromXML”函数的第一个参数具有“AvailableAt”类型。如果它不是“AvailableAt”类型,则解释器/编译器104产生一个错误。此外,解释器/编译器104验证对函数“FromXML”的第一个参数执行的每个操作是否由在availableat.xsd中指定的约束所允许。在语句830中,表达式“availableat..store”产生包含名为“store”的变量“availableat”的所有后代元素的元素列表。表达式‘(stockitem==″yes″)’使用一个过滤判定,以从那个列表中选择仅仅包含名为“stock-item”的子体元素具有值“yes”的元素。然后表达式“address”在产生的元素列表上迭代,选择名称为“address”的子体元素。“for”语句在“address”元素的产生列表上进行迭代,把每一个分配给变量“a”,该变量用于构造点对象。解释器/编译器104验证这些操作中的每一个是否被允许以及符合在文件“AvailableAt.xsd”中定义的AvailableAt XML数据类型。
图8B说明了修改了的函数“ToXML”。语句840声明传递到“ToXML”函数的第一个参数具有“AvailableAt”类型。如果它不是“AvailableAt”类型,则解释器/编译器104产生一个错误。此外,解释器/编译器104验证对函数“ToXML”的第一个参数执行的每个操作是否由在AvailableAt.xsd中指定的约束所允许。语句850在运行时间使用函数“validate”来显式地验证“availableat”值是否符合在“AvailableAt.xsd”中指定的数据类型,而且如果它不符合的话则产生一个错误列表。当值是使用编译器不可得到的信息,诸如用户输入或者从外部源读取的数据动态地构造时,函数“validate”是有用的。在一个实施例中,解释器/编译器104可以把对validate()的隐式调用插入到产生的代码中。
情况3图9说明了使用以替换语言编写的函数来产生这样一个地图,其向消费者显示他们能够在美国的哪儿购买一个生产商的产品。不是为每个商店产生一个点,而是为每一个州产生一个点。每一这样的点还使用在相应州中备有该生产商的产品的商店数目进行标志。图9中的修改代码使用一个称作getStates()的帮助函数,其用.XQuery语言编写以识别具有备有该产品的商店的州、对每一州内的这些商店进行计数、以及产生一个具有以下形式的XML结果示例4<states>
<state>
<abbreviation>WA</abbreviation>
<stores>10</stores>
<state>
<state>
<abbreviation>CA</abbreviation>
<stores>30</stores>
</state>
<state>...</state>
<state>...</state>
</states>
现在参见图9,语句910使用“language”标记来定义一个以XQuery语言编写的、称作“getStates”的函数,其接收单个XML数据类型“AvailableAt”的参数。语句920展示了函数主体,其以上面所示的格式产生一个包含运送产品的商店的州的列表。语句930激活函数“getStates”并且在XML变量“states”中存储结果。语句940在产生的州列表上进行迭代,以便为每一个产生一个点对象。
示例主机系统图6说明了一个适于驻留本发明的映射服务100和解释器/编译器104的示例计算机系统。如图所示,计算机系统600包含一个或多个处理器602、和系统存储器604。此外,计算机系统600包含大容量存储设备606(诸如磁盘、硬盘驱动器、CDROM、等等)、输入/输出设备608(诸如键盘、光标控制等等)和通信接口610(诸如网络接口卡、调制解调器等等)。这些元件经由表示一条或多条总线的系统总线612彼此相耦合。在多条总线的情况下,它们由一个或多个总线桥接器(没有显示)桥接起来。这些元件中的每一个元件执行在该技术领域众所周知的传统功能。尤其是,系统存储器604和大容量存储器606被用来存储实现本发明的解释器/编译器和/或映射服务的编程指令的运行拷贝和永久拷贝。编程指令的永久拷贝可以在工厂中或者在现场经由例如发行介质(没有显示)或者经由通信接口610(来自一个发行服务器(没有显示)),加载到大容量存储器606中。这些元素602-612的构成是已知的,因此不用进行进一步的描述。
结论和结束语因此,能够从上述描述中看出,已经描述了对一种编程语言的新数据表示语言扩展。这个新颖的方案对于编程语言和数据表示语言之间映射数据对象是尤其有用的。虽然已经参考说明的和上面列举的实施例描述了本发明,但是本发明不局限于这些描述的实施例。可以符合如在下面权利要求中阐述的本发明的范围,进行做出许多修改和改变。因此,上述实施例仅仅是说明性的,而不是对本发明的限制。
权利要求
1.一种方法,包含接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义的语句是否包含这样一个操作符,其具有表示数据表示语言值的第一操作数和表示条件表达式的第二操作数;以及处理所述操作符,以便迭代地识别从所述数据表示语言值中挑选出来、满足由所述条件表达式规定的测试条件的一个或多个元素。
2.如权利要求1所述的方法,其中所述操作符是由一个句号(“.”)后面继之以一组括号“()”的过滤判定操作符,其中该括号至少包含所述的条件表达式。
3.如权利要求1所述的方法,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
4.如权利要求1所述的方法,其中所述一个或多个定义的语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
5.一种物品,包含一个在其中存储了多条编程指令的存储介质,所述各条编程指令被设计成编程一个装置,当所述指令被执行时使该装置能够进行如下操作接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义的语句是否包含这样一个操作符,其具有表示数据表示语言值的第一操作数和表示条件表达式的第二操作数;以及处理所述操作符,以便迭代地识别从所述数据表示语言值中挑选出来、满足由所述条件表达式规定的测试条件的一个或多个元素。
6.如权利要求5所述的物品,其中所述操作符是由一个句号(“.”)后面继之以一组括号“()”的过滤判定操作符,其中该括号至少包含所述的条件表达式。
7.如权利要求5所述的物品,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
8.如权利要求5所述的物品,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
9.一种方法,包含接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个这样的表达式,该表达式表示数据表示语言值并且包含一个或多个嵌入在未命名亲体元素内的命名子体元素;以及如果确定所述一个或多个定义语句包含一个包含嵌入在一个未命名亲体元素内的一个或多个命名子体元素的表达式,则把包含该未命名亲体元素的表达式作为XML文档片段进行处理。
10.如权利要求9所述的方法,其中在未命名亲体元素和所述一个或多个命名子体元素之间的操作仅仅影响子体元素而不影响亲体元素。
11.如权利要求9所述的方法,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
12.如权利要求9所述的方法,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
13.一种物品,包含一个在其中存储了多条编程指令的存储介质,所述编程指令被设计成编程一个装置,当所述指令被执行时使该装置能够进行如下操作接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个这样的表达式,该表达式表示数据表示语言值并且包含一个或多个嵌入在未命名亲体元素内的命名子体元素;以及如果确定所述一个或多个定义语句包含一个包含嵌入在一个未命名亲体元素内的一个或多个命名子体元素的表达式,则把包含该未命名亲体元素的表达式作为XML文档片段进行处理。
14.如权利要求13所述的物品,其中 在未命名亲体元素和所述一个或多个命名子体元素之间的操作仅仅影响子体元素而不影响亲体元素。
15.如权利要求13所述的物品,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
16.如权利要求13所述的物品,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
17.一种方法,包含接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个被设计为引入一种预定义数据类型描述的语句,所述数据类型描述用于描述与所述数据表示语言相关联的对象类;确定所述一个或多个定义语句是否把一个或多个数据表示语言值和所述数据类型描述相关联;确定所述一个或多个定义语句是否包含一个操作符,其中所述一个或多个数据表示语言值是所述操作符的操作数;确定所述操作符是否将产生一个或多个不符合由所述数据类型描述规定的约束的所述数据表示语言值;以及当产生不符合由所述数据类型规定的约束的结果时,产生一个或多个识别所述操作符的错误信息。
18.如权利要求17所述的方法,其中 所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
19.如权利要求18所述的方法,其中所述预定义数据类型描述包含XML模式和数据类型描述(DTD)中的一个。
20.如权利要求17所述的方法,进一步包含验证所述一个或多个定义语句的结构是否符合与所述预定义数据类型描述相关联的一个或多个约束。
21.如权利要求17所述的方法,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
22.一种物品,包含一个在其中存储了多条编程指令的存储介质,所述编程指令被设计成编程一个装置,当所述指令被执行时使该装置进接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个被设计为引入一种预定义数据类型描述的语句,所述数据类型描述用于描述与所述数据表示语言相关联的对象类;确定所述一个或多个定义语句是否把一个或多个数据表示语言值和所述数据类型描述相关联;确定所述一个或多个定义语句是否包含一个操作符,其中所述一个或多个数据表示语言值是所述操作符的操作数;确定所述操作符是否将产生一个或多个不符合由所述数据类型描述规定的约束的所述数据表示语言值;以及当产生不符合由所述数据类型规定的约束的结果时,产生一个或多个识别所述操作符的错误信息。
23.如权利要求22所述的物品,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
24.如权利要求23所述的物品,其中所述预定义数据类型描述包含XML模式和数据类型描述(DTD)中的一个。
25.如权利要求22所述的物品,其中所述多条编程指令进一步包含如下指令用于验证所述一个或多个定义语句的结构是否符合与所述预定义数据结构相关联的一个或多个约束。
26.如权利要求22所述的物品,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
27.一种方法,包含接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个表示数据表示语言值的表达式;确定所述一个或多个定义语句是否包含一个包含具有左操作数和右操作数的操作符的表达式,其中所述左操作数包含IDREF和IDREF属性中的一个;和处理该表达式,以便识别包含值等于所述IDREF或者IDREF属性的值的id属性的零个或多个元素。
28.如权利要求27所述的方法,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
29.如权利要求28所述的方法,其中所述IDREF和IDREF属性中的至少一个由在XML模式和文档类型声明的至少一个中的声明所指示。
30.如权利要求27所述的方法,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
31.一种物品,包含一个在其中存储了多条编程指令的存储介质,所述编程指令被设计成编程一个装置,当所述指令被执行时使该装置进行如下操作接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含一个表示数据表示语言值的表达式;确定所述一个或多个定义语句是否包含一个包含具有左操作数和右操作数的操作符的表达式,其中所述左操作数包含IDREF和IDREF属性中的一个;以及处理该表达式,以便识别包含值等于所述IDREF或者IDREF属性的值的id属性的一个或多个元素。
32.如权利要求31所述的物品,其中所述数据表示语言包含XML,并且所述编程语言包含ECMAScript。
33.如权利要求32所述的物品,其中所述IDREF和IDREF属性中的至少一个由在XML模式和文档类型声明的至少一个中的声明所指示。
34.如权利要求31所述的物品,其中 所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
35.一种方法,包含接收用第一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含这样的一个语句,该语句被设计为指示一个函数的逻辑使用来自所述第一种编程语言内的第二种编程语言加以表示;以及处理所述一个或多个定义语句,以便至少传递与所述第二种编程语言相关联的、要计算的所述函数的名称和主体。
36.如权利要求35所述的方法,其中确定所述一个或多个定义语句是否包含这样的一个语句,该语句被设计为指示一个函数的逻辑使用第二种编程语言加以表示包含确定所述一个或多个定义语句是否包含一个与所述第二编程语言相关联的语言标记;以及如果所述一个或多个定义语句包含所述语言标记,则访问与所述第二种编程语言相关联的外部解析器和表达式求值器。
37.如权利要求35所述的方法,其中所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
38.一种物品,包含一个在其中存储了多条编程指令的存储介质,所述编程指令被设计成编程一个装置,当所述指令被执行时使该装置进行如下操作接收用一种编程语言的语言元素表示的一个或多个定义的语句;确定所述一个或多个定义语句是否包含这样的一个语句,该语句被设计为指示一个函数的逻辑使用来自所述第一种编程语言内的第二种编程语言加以表示;以及处理所述一个或多个定义语句,以便至少传递与所述第二种编程语言相关联的、要计算的所述函数的名称和主体。
39.如权利要求38所述的物品,其中 确定所述一个或多个定义语句是否包含这样的一个语句,该语句被设计为指示一个函数的逻辑使用第二种编程语言加以表示包含确定所述一个或多个定义语句是否包含一个与所述第二编程语言相关联的语言标记;以及如果所述一个或多个定义语句包含所述语言标记,则访问与所述第二种编程语言相关联的外部解析器和表达式求值器。
40.如权利要求38所述的物品,其中 所述一个或多个定义语句包含一个映射定义,以把所述数据表示语言的选定元素映射为所述编程语言的选定对象,或者把所述编程语言的选定对象映射为所述数据表示语言的选定元素。
41.一种方法,包含接收在XML数据结构的选定元素和一个或多个ECMAScript对象之间映射的映射定义;确定该映射定义是否包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句;如果该映射定义确实包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句,则确定所述一个或多个定义语句是否包含这样一个操作符,其具有一个表示数据表示语言值的第一操作数和表示条件表达式的第二操作数;以及处理所述操作符,以便迭代地识别从所述数据表示语言值中挑选出来、满足由条件表达式规定的测试条件的一个或多个元素。
42.一种方法,包含接收在XML数据结构的选定元素和一个或多个ECMAScript对象之间映射的映射定义;确定该映射定义是否包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句;如果该映射定义包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句,则确定所述一个或多个定义语句是否包含一个包含嵌入在未命名亲体元素内的一个或多个元素的表达式;以及如果确定所述一个或多个定义语句包含一个包含嵌入在一个未命名亲体元素内的一个或多个元素的表达式,则把包含该未命名亲体元素的表达式当作XML文档片段进行处理。
43.一种方法,包含接收在XML数据结构的选定元素和一个或多个ECMAScript对象之间映射的映射定义;确定该映射定义是否包含用所述一个或多个ECMAScript对象的、面向数据表示的语言元素表示的一个或多个定义语句;如果该映射定义实际上确实包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句,则确定所述一个或多个定义语句是否包含一个被设计为引入一种预定义数据类型描述的语句,该数据类型描述用于描述与所述数据表示语言相关联的对象类;确定所述一个或多个定义语句是否把一个或多个数据表示语言值和所述数据类型描述相关联;确定所述一个或多个定义语句是否包含一个操作符,其中所述一个或多个数据表示语言值是所述操作符的操作数;确定所述操作符是否将产生一个或多个不符合由所述数据类型描述规定的约束的所述数据表示语言值;以及当产生不符合由所述数据类型规定的约束的结果时,产生一个或多个识别所述操作符的错误信息。
44.一种方法,包含接收在XML数据结构的选定元素和一个或多个ECMAScript对象的选定对象之间映射的映射定义;确定该映射定义是否包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句;如果该映射定义确实包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句,则确定所述一个或多个定义语句是否包含一个包含一个具有左操作数和右操作数的操作符的表达式,其中所述左操作数包含IDREF和IDREF属性中的一个;以及处理该表达式,以便识别包含值等于所述IDREF和IDREF属性的值的id属性的零个或多个所述元素。
45.一种方法,包含接收在XML数据结构的选定元素和一个或多个ECMAScript对象之间映射的映射定义;确定该映射定义是否包含用所述一个或多个ECMAScript对象的、面向数据表示的语言元素表示的一个或多个定义语句;如果该映射定义实际上确实包含用所述一个或多个ECMAScript对象的语言元素表示的一个或多个定义语句,则确定所述一个或多个定义语句是否包含这样的一个语句,该语句被设计为指示一个函数的逻辑使用来自所述一个或多个ECMAScript对象内的编程语言加以表示;以及处理所述一个或多个定义语句以至少传递与所述一个或多个ECMAScript对象相关联的、要计算的所述函数的名称和主体。
全文摘要
提供了一种用于在本机编程语言环境中操纵基于数据表示语言的对象的系统。在一个实施例中,该系统用来把数据表示语言的数据对象映射为在本机编程语言内的相应对象,以及反之亦然。在一个实施例中,配备该系统以接收这样一个映射定义,其把一种诸如XML数据结构的数据表示语言的选定元素映射为诸如ECMAScript的编程语言的选定对象。该系统被进一步配备以确定该映射定义是否包含一个或多个用一种编程语言的面向数据表示语言的语言元素表示的定义性语句。进一步,该系统被配备为依据面向数据表示语言的语言元素的句法和语义定义(100、102、104、105、106)处理包含该编程语言的面向数据表示语言的语言元素的映射定义语句。
文档编号G06F9/45GK1552026SQ02817213
公开日2004年12月1日 申请日期2002年6月28日 优先权日2001年7月2日
发明者T·L·鲁卡斯, A·博斯沃斯, J·C·施奈德, K·E·瓦斯里克, T L 鲁卡斯, 刮炙, 施奈德, 瓦斯里克 申请人:Bea系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1