用于可扩展标记语言(xml)的轻量应用程序编程接口(api)的制作方法

文档序号:6568401阅读:161来源:国知局
专利名称:用于可扩展标记语言(xml)的轻量应用程序编程接口(api)的制作方法
用于可扩展标记语言(XML)的轻量应用程序编程接口 (API)背景标记语言及与之相关联的应用程序继续发展,并在当今的计算环境中变为常 见的。 一般,标记语言描述嵌入在文本中以区分一组元素或个别元素以用于显示或 标识目的的一组标记(label)。 一般,标记被称为"标签(tag)"。标记语言标 识连续文本流内的元素而非数据库中更结构化的数据。 一个特定的标记语言,即可 扩展标记语言(XML)可将文本流转换成数据库记录的等效形式。当今,XML被认为是描述数据的开放标准。通常,XML被用来定义关于网 页和/或企业对企业文档的数据元素。XML在标签结构上类似于超文本标记语言 (HTML)。然而,HTML定义了元素将如何被显示,而XML定义了元素的逻辑 内容。因此,与使用预定义标签的HTML相对,XML允许页面的开发员定义标签。 因此,可使用XML来标识基本上任何数据项目。结果,XML文档片段在功能上 可类似于数据库记录。为此,可在XML片段上采用数据库功能。作为示例,企业可使用XML来定义诸如产品、顾客和未尝还的结欠 (outstanding balance due)之类的项目。从而,通过使用XML来标识这些项目, XML文档片段可被结构化并如数据库记录一般起作用。用于标识数据的通用方法 (例如,XML)支持企业对企业事务并成为用于电子数据交换(EDI)事务的常见 格式。XML标签在XML模式中定义,该模式标识内容类型以及元素和属性名。与 已知采用容许代码编写错误的松散代码编写风格的HTML不同,常规XML页面 必须是"合式的"。因为XML以类似于数据库格式的格式来组织记录,近来的开发针对XML片 段的查询和导航。为此,创建了众多专用语言来获取信息。然而,这些专用语言需 要对传统的严格编程的片段操作的命令性机制。概述以下呈现了本发明的简化概述以便提供对本发明的某些方面的基本理解。该 概述不是本发明的详尽的概观。它不旨在标识本发明的关键/重要元素也不描绘本 发明的范围。其唯一目的在于以简化形式呈现本发明的某些概念以作为稍后呈现的 更详细描述的序言。此处公开和要求保护的本发明在其一个方面中包括利用经由轻量应用程序编 程接口 (API)来对可扩展标记语言(XML)査询的支持的系统和方法。所利用的技术允许除对此处所述的XML结构以外还对数据模型进行査询。在另一方面中, 所利用的技术也可对用原本不支持XML的语言来构造XML值进行简化。所述革新的各方面可允许将查询语言一方面被分解成对集合的一般操作,另 一方面被分解成对这些集合的元素的一组域专用操作。专用于任何集合的一般査询 操作的示例有对集合的映射(例如,投影)函数、过滤来自集合的元素、将集合归 组成分区、对集合排序以及集合上的聚集操作将其约简(reduce)成值。XML域 中域专用操作(例如,动作)的示例包括诸如选择孩子、属性、后代、兄弟等的各 种"轴"函数、创建新XML节点的元素构造以及节点修改。对于XML域专用操作,如由通用语言使用的用于导航和构造XML的常规 API当与XPath轴以及如由以XML为中心的语言提供的面向表达式的元素和属性 构造的规则性相比时,它们是非常命令性、高度复杂且不规则的。另外,传统API (例如,DOM (文档对象模型))就存储器占用大小(footprint)而言也是相当重 量的。依此,本发明的各方面公开了便于操纵(例如,构造、査询、修改)标记语 言内容(例如,XML)的轻量且合理(rational)的API,它与由底层应用程序和/ 或主机语言提供的一般査询基础架构接口。更具体地,本API的一方面可支持创 建与文档中心相对的节点中心(例如,上下文无关)的XML。换言之,节点不必 在根文档的上下文内构建。同样,各方面可启用与结合传统接口机制(例如,DOM) 使用的命令性面向语句的风格接口相对的面向表达式的接口机制。在本发明的另一方面中,元素和属性两者以类似方式来访问。换言之,在一 个方面中,对于XML文档和/或片段,可采用与用来访问属性的相同的轴来用来访 问元素。而且,其他方面采用不具有用于文本节点和属性集合的特定身份的机制。为了实现前述和相关目的,此处结合以下描述和附图描述了本发明的某些说 明性方面。然而,这些方面仅指示可采用本发明的原理的各种方式中少数几种,而 本发明旨在包括所有这样的方面及其等效方式。本发明的其他优点和新颖的特征将通过结合附图考虑以下发明的详细描述而变得显然。附图简述

图1示出了根据本发明的一方面便于在应用程序与标记语言组件之间接口的 对象模型的系统。图2示出了一应用程序编程接口 (API)的框图,根据该API的一方面,它具 有导航组件、构造组件和修改组件。图3示出了根据本发明的一方面具有导航组件和接收器组件的API系统的框图。图4示出了根据本发明的一方面具有轴(axis)组件、排序组件和命名空间组 件的导航组件。图5示出了根据本发明的一方面便于在标记语言组件内的导航的过程的示例 性流程图。图6示出了根据本发明的一方面具有构造组件和接收器组件的API系统的框图。图7示出了根据本发明的一方面釆用面向表达式的语句并构造上下文无关节 点的系统。图8示出了根据一方面便于构造上下文无关(例如,以节点为中心)节点的 过程的示例性流程图。图9示出了根据本发明的一方面具有修改组件和操作符组件的API系统的框图。图IO示出了可用于执行所公开的体系结构的计算机的框图。 图11示出了根据本发明的示例性计算环境的示意性框图。详细描述现在参考附图描述本发明,其中相同的参考标号用于指示全文中相同的元素。 在以下描述中,为说明起见,描述各种特定细节以便提供对本发明的彻底理解。然 而,显然,本发明可无需这些特定细节来实现。在其他情况中,用框图形式示出了 公知的结构和设备以便于描述本发明。如本申请中所使用的,术语"组件"、"系统"等指的是计算机相关的实体, 它们或者是硬件、硬件和软件的组合、软件或者是执行中的软件。例如,组件可以是,但不限于,运行在处理器上的进程、处理器、对象、可执行代码、执行的线程、 程序和/或计算机。作为说明,运行在服务器上的应用程序和服务器本身都可以是 组件。 一个或多个组件可以驻留在进程和/或执行中的线程内,且组件可以位于一 台计算机上和/或分布在两台或多台计算机之间。如此处所使用的,术语"推断"和"推论" 一般指的是从通过事件和/或数据 捕捉到的一组观察值中推出或推断系统、环境和/或用户的状态的过程。推论例如 可以被用来标识具体的上下文或动作,或者可以生成状态上的概率分布。推论可以 是概率性的,即,基于对数据和事件的考虑进行对所关心的状态上的概率分布的计 算。推论也可以指的是用于从一组事件和/或数据中组成更高级的事件的技术。这 样的推论导致从一组观察到的事件和/或存储的事件数据中构造出新的事件或动 作,而不论原先的事件是否在时间上紧密相关,也不论原先的事件和数据是来自一 个还是若干个事件和数据源。通过对位于改变了标记语言(例如,可扩展标记语言(XML))的风貌 (landscape)的新兴程序设计语言之下的基本原理的仔细分解,本发明利用了经由 轻量API来对标记语言数据(例如,XML)査询的支持。所利用的技术允许除对 此处所述的XML结构以外还对数据模型进行査询。所利用的技术也可对用原本不 支持XML的语言来构造XML值进行简化。尽管此处所述的方面针对XML实现, 但可以理解和领会,此处公开的新颖的概念和功能也可在其他标记语言环境中应 用。因此,这些其他实现被认为是本公开及其所附的权利要求书的一部分。所述革新的各方面可允许将包括XQuery和SQL的查询语言一方面被分解成 对集合的一般操作,另一方面被分解成对这些集合的元素的一组域专用操作。专用 于任何集合的一般查询操作的示例有对集合的映射(例如,投影)函数、过滤来自 集合的元素、将集合归组成分区、对集合排序以及集合上的聚集操作将其约简 (reduce)成值。XML域中域专用操作(例如,动作)的示例包括诸如选择孩子、 属性、后代、兄弟等的各种"轴"函数、创建新XML节点的元素构造以及节点修 改。数据库研究者很早就发现这些对集合的一般操作均是函子(functor)、独异 点(monoid)或单子(monad)概念的示例。从而,这些操作满足众多代数性质, 且允许理解形式的句法好处。作为示例,XQuery品牌环境中的FLOWR表达式是 一种理解形式,且在任何方面都未绑定于在XML节点的集合上进行操作。相反, FLOWR表达式可用于表达对对象集合以及具有多行的关系表的复杂查询。代替创建用于查询XML的专门语言,可用基于单子的査询能力来扩展通用语 言,允许程序员使用广义概念的"集合"来查询任何形式的数据。本文献中描述的机制(例如,API)启用支持这些查询机制的模式和语言构造。对于XML域专用操作,如由通用语言使用的用于导航和构造XML的常规 API当与XPath轴以及如由以XML为中心的语言提供的面向表达式的元素和属性 构造的规则性相比时,它们是非常命令性、高度复杂且不规则的。另外,传统API (例如,DOM (文档对象模型))也是相当重量的。依此,本发明的各方面公开了用于操纵(例如,构造、查询、修改)XML的 轻量、合理且简单的API,它与由底层应用程序和/或主机语言提供的一般査询基 础架构接口。具体地,本发明可支持创建与文档中心相对的节点中心(例如,上下 文无关)的XML。而且,各方面可启用与传统接口机制(例如,DOM)的命令性 面向语句的风格相对的面向表达式的接口机制。一开始,参考图1,示出了便于例如主机语言的应用程序与标记语言之间的交 互的系统100。 一般,系统100可包括允许应用程序与标记语言组件104接口并通 信的应用程序编程接口 (API) 102。作为示例,API102可便于诸如査询组件的应 用程序在标记语言集合(例如,标记语言组件104)内导航,从而标识其中的所需 节点。如可以理解,可通过在应用程序(例如,查询组件)中编写函数调用来实现 API,这提供了对所需子例程的连接用于执行。因此,API可暗示,计算机中有用 于执行操作的某些程序模块或API动作组件106可用或它被链接至现有程序以执 行任务。在以上示例中,API 102可采用1到M个API动作组件,其中M为整数。如 图1中所示,1到M个API动作组件可被统称或个别称为API动作组件106。而 且,尽管图1示出了 API动作组件106集成于API 102,但可以理解和领会,API 动作组件106的全部或其子集可远离所示组件。此外,API 102可包括对象模型108。对象模型108可定义标记语言组件104 专用的节点类型。换言之,对象模型108可便于从应用程序(主机语言)映射到标 记语言组件104。如上参考API动作组件106所述,对象模型108可位于API组件 102本地或远程。API对象组件108的结构可包括以下节点类型和/或公共类。尽管以下描述了 特定命名约定,但可以理解,可采用任何命名约定而不背离此处所述的本发明的新 颖的概念以及所附权利要求书的范围。示例性对象模型的每一节点类型将在以下更详细描述。class XName该类XName表示由命名空间统一资源标识符(URI)和本地名组成的通用名。 因为,根据本发明,元素和属性是以相同方式对待的,所以该类可被用来表示元素 和属性两者的名字。系统可隐式地将串转换成这些名字。因此,用户不显式地构造 XName。相反,用户可引用串名以及API 102来将串转换成XName。class XAttribute该类XAttribute可用来表示属性。例如,XAttribute类可用来以类型化方式获 取属性的值。可以理解,属性不同于XML节点。abstract class XNode该类可用作各种XML节点类型的抽象基类。 class XComment : XNode该类可继承表示文档中的注释的节点。换言之,如果在文档中存在注释,则注释可由XComment节点表示。例如,该类可继承表示XML文档的节点,诸如<! 这是注释>。class XProcessinglristmction : XNode在示例中,该节点可用于表示XML处理指令,诸如< >。 class XDeclaration : XNode以上节点可表示XML声明,诸如〈 xml version= "1.0" encoding= "UTF-8" >。class XDocumentType : XNode该节点可用来表示XML文档类型声明,诸如〈DOCTYPE greeting SYSTEM "hello.dtd"〉。abstract class XCharacterNode : XNode class XCData : XCharacterNode这是表示XML CData部分的示例性节点〈![CDATA[这是CDATA部分]]>。 abstract class XContainer : XNode这是用于具有孩子的节点的抽象基类。class XElement : XContainer这是具有从Xnode导出的抽象基类XContainer的节点。如上所述,可以理解, XContainer表示具有孩子的所有节点。例如,注释、处理指令等仅具有一个孩子或 内容。另一方面,XElement和XDocument类可具有支持在此示例中被称为 XContainer的该抽象基类的较低层的孩子。在一个示例中,该节点可表示XML元 素,诸如〈CustomerName=,,Joe,,>...</Customer>。class XDocument : XContainer在对示例性对象模型的讨论的最后,该节点XDocument可表示完整的XML 文档。现在参考图2,示出了根据一方面的替换系统200的框图。 一般,系统200 包括API组件202和标记语言集合204。 API组件202可包括对象模型108、导航 组件206、构造组件208、修改组件210和接收器组件212。这些动作组件(206、 208、 210)中的每一个可采用对象模型108来便于对于标记语言集合204的操作。 这些组件(206、 208、 210)中的每一个参考以下附图更详细描述。现在转向图3,在一个方面中,系统300可包括启用在标记语言集合204 (例 如XML片段和/或节点集合)中导航(例如,经由导航组件206)和检索结果数据 的一般查询操作符的API 202。如图所示,标记语言集合204可包括1到N个组件,其中N为整数。可以理解,1到N个组件可被个别或统称为节点组件302。在所述 示例中,可对于本地节点集合(例如,302)采用查询。另外,可以理解,集合204 的概念可包括位于远程(例如,来自不同的机器/位置)的节点302。在此情形中, 查询机制(例如,导航组件206)可便于基于査询准则标识相关节点。其他方面针对使用表达式树来代替使用委托的实现查询。基本上,存在用户 可执行查询的两种方式。 一是对实际集合(例如,在存储器集合中),另一种是对 远程集合。在远程集合情形中,査询不由委托表示,而是可由表达式树表示。从而, 系统采用整个查询而非在不同步骤中执行查询。现在参考图4,对于XML,示出了根据对象模型108的轴概念,它表示导航 组件206的一种机制。更具体地,轴组件402表示在XML节点集合204中从给定 节点302导航至其他节点302的机制。可以理解,XML结构中的集合204可表示 由相互关联的节点302构成的分层树。从而,轴组件402是可便于导航通过该结构 的一种方法。作为示例,在结构中的某点处,该轴组件402可允许标识给定节点的 父亲、给定节点的所有孩子等。映射组件(未示出)结合对象模型108可便于这样 的导航和/或树的有向走査(walkthrough)。给定一节点或节点的集合(例如302),用户可能期望遍历树来标识孩子、父 亲等或属性。API 202包含对应于用于访问属性和元素的各轴(例如,402)的若 干新颖的方法和/或机制。例如,这些示例性轴表达式可由相应的轴函数来表示。在以下示例中,在左 侧列出了常规XPath品牌表达式。在右侧列出了根据本API 202的相应的轴表达式。<formula>formula see original document page 13</formula>一般,轴函数402可包含各个级别的功能。例如,可对于单个项目或对源集 合来采用轴函数。而且,如有需要,轴组件402可将返回值限于具有特定名字的节 点。从而,用户可限制集合上的搜索。作为其他示例,用户可在集合中査询特定节 点的所有孩子元素或共享某一名字的所有孩子元素。而且,轴函数可用来将返回值限于特定类型。这在搜索值(例如,仅给出类型串或类型整数的值)时尤其有用。结果,本发明对每一轴釆用多个重载(overload)(例如,Descendants (后代) 和SelfAndDescendants (自己和后代))。为了对讨论提供上下文,以下是XElement类上的所有轴的示例性列表。可以理解,该列表不旨在按任何方式进行限制。而且, 可以理解,根据本发明对于其他节点存在其他轴函数,且这些轴函数应被包括在本 公开及所附权利要求书的范围内。public XContainer Parent {}该函数返回节点的父亲。这对XContainer进行操作,如前关于示例性对象模 型108所述,所有XContainer均有孩子。public IEnume:rable<object> Content () {}给定节点,用户可查询节点的父亲,并通过采用该函数来询问其内容,系统 将呈现其所有孩子(例如,内容(例如,值))。本发明的一新颖特征在于,如果 存在某些串内容和某些元素内容,则将返回该混合内容。public IEnume:rable<T> Content<T> () where T : class以上是用户可查询某一类型的内容的示例性重载。XElement Element(XName name) { }该轴返回具有特定名字的元素。在操作中,它可返回具有指定名字的第一个 元素。以下五个轴具有Ienumerable的返回类型。 IEnumerable<XElement> Elements() {}该轴实现直接包含在指定元素内的所有孩子元素的呈现。IEnume:rable<XElement> Elements (XName name) { }类似地,该轴仅呈现某一名字的元素。而且,以下三个轴是上述功能的变型。staticIEnumerable<T> Elements<T>(thisIEnumerable<XElement> source) where T : class { }static IEnumerable<XElement> Elements(this IEnumerable<XElement> source) {}static IEnumerable<XElement> Elements(this IEnumerable<XElement> source, XName name) {}XAttribute Attribute(XName name) {}该轴返回具有指定名字的属性。再一次,如上关于XElement所述,XAttribute也可被重载到集合上。以下是 根据本发明的重载的示例性方面。IEnumerable<XAttribute:> Attributes () { }IEnumerable<XAttribute> Attributes(XName name) {}static IEnutnerable<XAttribute> Attributes (this IEnumerat)le<XElement> source) {}static IEnumerable<XAttribute> Attributes(this IEnume:rable<XElemeiit > source, XName name〉 {}IEnumerable<XElement> Descendants(){}该函数呈现孩子的孩子以及这些孩子的孩子的孩子等。实际上,该轴函数递 归地返回节点的所有孩子。IEnumerable<T> Descendants<T>() where T : class {}这可过滤出某一类型的后代。 其他轴示例包括以下。IEnumerable<XElement> Descendants(XName name) {}static IEnumerable<T> Descendants<T>(this IEnumerable<XElement> source) where T : classstatic IEnumerable<XElement> Descendants(this IEnume:rable<XElernerat> source) {}static IEnumerable<XElement> Descendants(this IEnumerable<XElement> source, XName name) {}IEnumerable<XElement> SelfAndDescendants() {}IEnumerable<T> SelfAndDescendants<T>() where T : class {}IEnumerable<XElement> SelfAndDescendants(XName name) {}static IEnumerable<T> SelfAndDescendants<T>(this IEnumerable<XElement> source) where T : class {}static IEnumerable<XEletnent > Self AndDescendants (this IEnumerable<XElement> source) {}static IEnumerable<:XElement > Self AndDescendants (this IEnumerable<XElement> source, XName name) {}IEnumerable<XElement> Ancestors() {}IEnumerable<XElement> Ancestors(XName name) {}static IEnumerable<XElement> Ancestors(this IEnumerable<XElenient> source) {}static IEnumerable<XElement> Ancestors(this IEnumerable<XElement> source, XName name) {}IEnumerable<XElement> SelfAndAncestors() {}IEnumerable<XElement> SelfAndAncestors(XName name) {}static IEnumerable<XElement> SelfAndAncestors(this IEnumeirable<XEleTT)ent> source) {}static IEnumerable<XElement> SelfAndAncestors(this IEnumerable<XElement> source, XName name) {}如所示,以上是根据本发明的示例性轴。可以理解,这些轴可对于单个集合 采用,且可返回集合。可以理解,本发明允许Element (元素)和Attribute (属性)之间的对称。例 如,如以上标记(signature)中所示,元素和属性以相同方式来选择而代替如传统 API中使用方法(例如,Attributes( "foo"))和索引器["bar"](例如方括号)。 然而,根据此处所述的API202,用户可用相同方式访问元素和/或属性两者。换言 之,仅有的区别在于利用了不同的轴且同时维护了所采用的方法的对称性。在操作中,用户可査询(例如,经由导航组件206)元素,反过来系统可返回 元素的集合。随后,各方面允许用户査询所返回的元素集合的所有属性。可以理解, 该新颖的功能允许用户将关于集合的轴串起来。可以理解,在查询XML时,查询可返回节点的集合(或集合的子集)。传统 上,所呈现的节点集合的顺序用文档顺序维护。例如,如果在查询结果中一个节点 比另一个先到,则说明在文档本身中该节点比后续结果节点先到。该节点将在下一 节点之前遇到。换言之,作为查询结果返回节点的顺序与原始文档本身的顺序相同。某些查询(例如,后代查询)会打乱文档顺序。例如,在XQuery品牌环境中, 语义便于在每个查询之后将结果自动排序成文档顺序。如可以理解的,按文档顺序 排序是非常昂贵的。本API 202的各方面不会自动按文档顺序排序从而查询可被适 配。而且,导航组件206可包括便于按需按文档顺序显式排序的排序组件404。与将该排序功能构建到语义中相反,各方面便于某些查询打乱文档顺序,之后允许按需显式排序。各方面不维护文档顺序是本发明的一新颖的特征。另外,文 档顺序可经由显式排序(例如,排序组件404)来实现。可以理解,将信息编码到 节点内的各种方法和机制便于按文档顺序的高效排序。这些方法和机制可由本领域 的技术人员理解,且被认为落在本说明书和所附权利要求书的范围内。如前所述,本API 202不考虑文本节点和/或属性集合的特定身份。诸如标准 DOM的常规系统以比本说明书中所述的本发明所展示的数据模型更精细的粒度来 展示标识信息项目的XML信息集(infoset)数据模型。结果,本发明的数据模型 可允许更高效的实现,尤其是对于工作集。例如,本革新的各方面采用普通(ordinary)的串而非文本节点。另外,相邻 串被自动合并,从而增加效率。换言之,与传统DOM中不同地,本发明不展示单 独的AttributeCollection (属性集合)。相反,根据本发明的各方面,每一元素直接 维护属性的(循环)链接表。因为常规系统具有非常详细的对象模型,它们可区分众多不同的节点。另外, 每一节点具有个别的命名空间集合。另外,在常规系统中,属性集合具有身份。换言之,节点的属性集合自己本 身有可被区分的东西。它们也可区分文本节点。因此,在混合内容中,各文本片段 本身是分开的节点。相反,根据本发明,混合内容中的文本片段仅是正常的串。它 们不是具有特定身份并附加诸如父亲指针和命名空间节点的性质的特殊文本节点。本发明采用比传统系统更粗略的信息视图,从而区分节点的较少性质。与需 要在节点之间区分的以往系统不同,本发明不必区分文本节点。从而,可以理解, 与常规系统相比,本系统可具有更小的存储器占用大小和更高效的实现。所有的元素和属性都有名字。特别地,在XML中,在开括号之后有一个名字。 从而,常规上,如果用户想要在文档内搜索,则必须准备好元素和/或属性的名字。 例如,用户可查询来获取特定文档的所有作者。这将返回该文档中的所有作者元素。 可以理解,将元素名或属性名作为串来比较尤其低效和昂贵。这是非常昂贵的,因 为当比较串时,有必要遍历所有串字符,直到定位了一个不同的字符。如果名字较长,这可能尤其昂贵,因为区别可能位于串的末尾。当对此考虑 时,代替将名字作为串来存储,此处所述的API 202可将串存储为被称为XName 的类型。可以理解,这通常被称为串散列。通过对所述API202采用该散列技术, 比较指针而非串。因此,每当创建新元素名时,系统可存储(例如,高速缓存)串 并将指针返回到新的XName。从而,如果两个名字由同一 XName表示,则它们使用同一指针。问题在于命名空间组件406内的表可能会增长。本发明的各方面可监控增长 (例如,速率、大小)和/或基于任何定义的准则来清除名字表。在以下示例中示出"ClearNameCache (清除名高速缓存)"。从而,当系统再次比较时,将发现 该名字不再存在,从而将重新插入该名字。这种监控和清除功能给出了对对应于命 名空间406的名字表的显式控制。另外,系统可监控增长和相应的统计数据,从而 当表增长过快时等生成事件。XML中的名字可由两部分组成,如元素(例如,书、作者)的本地名和命名 空间前缀。这两部分命名约定尤其有用,因为可能存在在同一文档中具有冲突的名 字的多个元素。从而,API 202的各方面可将这些名字置入命名空间406,通过将 其与前缀组合来具有唯一的串。因此,API 202可通过包含命名空间前缀并追加本地名来表示这些完全合格或 通用名字。每个名字可由命名空间URI和本地名来组成。API 202采用新颖的系统禾B/或方法来应用XML名和命名空间。如前所述,在 一个示例中,XName类可表示由本地元素或属性名"part"和命名空间URI "http:〃www.cars.com/xml"组成的"(http:〃www.cars.com/xml〉part"形式的通用 或扩展名。XName类可允许通过输入串并比较对象引用来进行高效的XML名比较。通 过提供串到XName的隐式转换,用户不需要显式构造XName。public sealed class XNamepublic string ExpandedNatue {} public string LocalName 。 public string NamespaceName public overricle int GetHashCode () { } public override bool Equals(object obj) {} public override string ToStringO {} public static void ClearNameCache(〉 {} public static XName Get (string expandedlSTame) {} public static XName Get(string localName, string namespaceName) {}public static implicit operator XName(string s) {}public static bool operator ==(XName nl, XName n2) public static bool operator !=(XName nl, XName n2)。如上所示,XName类输入这些串。从而,这些名字不作为串进行比较,因为 它们经由XName引用来比较。由于本API 202提供了来自串的隐式操作符,用户 不必显式创建该XName。图5示出了根据本发明的一方面用于导航标记语言(例如,XML)节点的结 构的方法的过程流程图。尽管为说明简单起见,此处例如以流程图形式示出的一个 或多个方法被示出或描述为一连串动作,但是可以理解和领会,本发明不受动作顺 序的限制,根据本发明,某些动作可按照不同顺序进行和/与此处所示和所述的其 他动作并发。例如,本领域的技术人员可以理解和领会,方法可替换地被表示为诸 如状态图中的一连串相互关联的状态或事件。而且,不是所有示出的动作都是实现 根据本发明的方法所必需的。在502,接收到导航表达式。如上所述,导航表达式可以是标识集合内所需目 标(例如,值)的轴语句。例如,导航表达式可请求特定节点的父亲。在504可分析导航表达式(例如,轴)。在不同的示例中,导航表达式可请 求特定节点的父亲、祖父亲、兄弟等。从而,在506可标识上下文节点。该上下文 节点可定义导航表达式的起始点。此外,在508处可确定导航的方向。在510处可标识满足导航表达式的节点。在512,可作出是否有其他节点存在 的判断。如果结构(例如,树)中有其他节点存在,则该过程返回至510,从而标 识其他节点。如果没有其他节点存在,则到达停止框。现在参考图6,示出了根据本发明的另一方面的系统600。更具体地,图6示 出了便于构造XML上下文无关片段、节点或节点的集合的系统600。传统上,XML API在结构上是命令性的。换言之,XML节点是经由结构化且特定序列的命令构 造的。作为示例,命令性的命令序列以定义节点开始,并以添加一个孩子、另一个 孩子等来继续。本API组件202可采用接受命令(例如,表达式)的接收组件212。构造组件 208与对象模型108 —起可将表达式转换成XML片段或集合204。图7示出了系统600的替换框图。如图所示,构造组件208可接收面向表达式语言组件702。从而,根据对象模型组件108,可采用构造组件208来将面向表 达式语言组件702转换成节点的标记语言集合704。如图所示,标记语言集合704 可包括1到P个上下文无关节点组件,其中P是整数。可以理解,1到P个上下文 无关节点组件可被个别或统称为上下文无关节点组件706。为了便于用于查询,本发明采用面向表达式的机制(例如,面向表达式语言 组件702)来构造XML节点(例如,构造组件208)。代替采用命令性语句来生 成XML集合,本发明利用创建节点的新颖的面向表达式方法。如可以理解的,在 常规系统和方法中,XML节点是以文档为中心的。换言之,常规XML节点仅生 存在文档的上下文中。这些传统节点不能独立生存。与之相反,本API202生成可 独立于文档生存的上下文无关节点。上下文无关节点组件706的一个新颖的特征在于,这些上下文无关节点组件 706可被自主创建且被用作其他节点的孩子。因此,与常规系统相反并根据本API 202,上下文无关节点组件706本身不必活在文档的上下文中。在操作中,当节点被创建时,它没有父亲。所创建的节点不作为任何其他节 点的孩子来生存,因为它是新建的。本发明的一新颖的特征在于当节点被指定为另 一节点的孩子时,或者如果存在返回要被作为孩子而包括的节点的査询时,构造组 件208可在该节点已经具有父亲时对其克隆。可以理解,这些节点仅可具有一个父 亲。从而,如果不同的节点被选作一节点的父亲,则该节点可被自动克隆,从而允 许该父子关系。相反,常规的API要求用户显式地克隆节点。系统600的构造组件208可自动检査来确定对一节点是否存在父亲。如果是, 则构造组件208可自动克隆并指定新父亲即克隆节点的父亲。克隆的结果是新颖的 上下文无关节点构造。当有父亲的节点用于构造新节点时,它们可被自动克隆来维护新构造节点的 结构。然而,节点不必有父亲,且特别地,节点可独立于文档存在。提供以下示例 来向本发明添加上下文,从而该示例不旨在以任何方式限制本公开。class Testpublic static void Main()XElement a = new XElement ( "A" ) ; < = = a没有父亲节点 XElement bl = new XElement ( "B" , a); < = = a没有得至U克隆XElement b2 = new XElement ( "B" , a); < = = a要得到克隆 a. Add (new XElement ( "C")); < ==只有bl得至lj修改Console WriteLine ( "---------------" 〉Console . WriteLine (bl),-Console . WriteLine ("---------------");Console.WriteLine(b2)7Console WriteLine ( "---------------,')以上示例呈现以下结构<B><A><C /></A> </B><B><A /> </B>以下是对根据API 202的一方面最终可创建的XML片段的讨论。如前示例所 示,XML片段和文档用功能或基于表达式的方式来代替经由语句序列的命令性方 式构造。例如,可利用以下示出的面向表达式方式来创建以下分层XML元素。<bib> <books><book year="1999"><title>TCP/lP Illustrated</title> <author><last>Stevens</last> <first>W.</first></autho:i:><pub1isher>Addison-Wesley</publishers <price>65 . 95</p;rice </book> </books> </bib>使用本发明的API 202以及相应的子组件(例如,构造组件208、对象模型108) 可创建以上XML片段。在操作中,可编写与得到的元素的结构同构的单个嵌套的 表达式。例如XElement bib =new XElement("bib",new XElement("books",new XElement (、、book",new XAttribute ( "year" , 、、1999〃〉,new XElement ( "title" , 、、TCP/IP Illustrated"new XElement("author",new XEletneiit ( "last" , 、、 St evens"), new XElement("first",new XElement ("publisher" , 、、Addison-Wesley" new XElement("price", 65.95〉使用常规API创建以上XML片段过于麻烦。使用现有的API,诸如常规XML DOM,用户首先需要构建容器文档。接着,在该文档的上下文中必须命令性地创 建元素和属性。另外,用户必须命令性地将这些节点分配为其他节点的孩子。以下 是该过程根据常规API的示例。XmlDocument doc = new XmlDocument()/ XmlElement bib = doc.CreateElement("bib"); XmlElement book = doc.CreateElement()/books.Name = "books"/ bib.appendChild(books)/XmlElement book - doc . CreateElement (、、book〃 ) books.appendChild(book)/XmlAttribute year = doc.CreateAttribute();year .Value = 、、 1999"book.SetAttributeNode(year) /XmlElement title = doc.CreateElement("title"); title . IrmerText = "TCP/IP Illustrated" book.appendChild(title)/XmlElement author = doc . CreateElement ( "author"),' book . appendChild (author)XmlElement lastName = doc.CreateElement("last"); lastName . InnerText = "Steven" author . appendChild (lastName)XmlElement f irstName = cioc . CreateElement (、、f irst〃 ); first Name , Inner Text = 、、W . 〃 / author . appendChild ( f irstName),'XmlElement publisher = doc . CreateElement ( "publisher) publisher .工rmerText = "Addison-Wesley" book.appendChild(publisher)/XmlElement price = d〇c.CreateElement("price");price . InnerText = 、、65.9 5〃,'book.appendChild(price)/doc.DocumentElement.InsertBefore(bib,doc , Document Element. Last Chi Id),'可以理解,该常规方法不能够在査询中使用,因为当用户想要返回新的XML 片段作为查询的结果时,它并不总是在特定文档的上下文中。另一方面,创建上下 文无关结构(如根据本API202所述)的能力便于对XML片段直接査询。API 202 用于査询的各方面依赖于用户可将原文(original)创作为表达式的事实。图8示出了将面向表达式语句转换成XML片段的方法。在802,接收面向表 达式语句。例如,可采用接收组件来从构造组件接受面向表达式语句。在804,所 接收的语句可被转换。如参考图7所述,可采用构造组件来转换语句。在806,可作出所创建的节点是否有父亲的判断。如果否,则在808可从经转换的表达式生成XML片段。如果在806确定要创建的节点有父亲,则在810该节点可被克隆。从而,在 812可分配父亲。可以理解,可为所创建的每一节点采用图8的方法。现在参考图9,示出了根据本发明的一方面便于修改节点的系统900。 一般, 系统900可包括便于与标记语言集合204接口的API组件202。可以理解,标记语 言集合204可包括具有上下文无关和/或以文档为中心节点的多个XML节点。API组件202可包括具有操作符组件902的修改组件210。操作符组件卯2可 便于操纵节点本身、其父亲、其孩子等。以下是更新(例如,操纵)节点的父亲的 示例性语句列表。而且,之后包括更新当前节点本身的示例。对父亲更新void AddAfterThis(object content) {}该语句向节点添加新的兄弟。更具体地,该语句便于在父亲节点中该节点之 后添加所指定的节点。其他示例如下 void AddAfterThis(params object [] content) {} void AddBeforeThis(object content) {} void AddBeforeThis(params object [] content) {} void Remove () {}-你可以将你自己从父亲容器中移除更新自身void Add(object content) {}—该语句添力口在结尾。void Add (params object[] content) { }—该语句添力口在结尾。void AddFirst (object content) { }—该语句添力口在开头。25void AddFirst (params object [] content) { }—该语句添力口在开头。 void RemoveContent() {}void ReplaceConterit (object content) {}void ReplaceContent(params object[] content) {}void RemoveAll()void RemoveAttributes () {}void SetAttribute(XName name, object value) {} void SetElement(XName name, object value) {}除构造组件208的功能以外,修改组件210结合操作符组件902允许用户执 行原地更新。换言之,修改组件210允许对文档进行除功能构造以外的命令性修改。现在参考图10,示出了用于将应用程序接口至标记语言组件(例如,XML) 的计算机的框图。为了向本发明的各方面提供附加的上下文,图10及以下讨论旨 在提供对可在其中实现本发明各方面的合适的计算环境1000的简要、一般的描述。 尽管以上在可以在一台或多台计算机上运行的计算机可执行指令的通用上下文中 描述了本发明,但是本领域的技术人员可以认识到,本发明也可以结合其它程序模 块和/或作为软硬件的组合来实现。一般而言,程序模块包括例程、程序、组件、数据结构等,它们执行特定的 任务或实现特定的抽象数据类型。而且,本领域的技术人员可以理解,本发明方法 可以使用其它计算机系统配置来实现,包括单处理器或多处理器计算机系统、小型 机、大型机、以及个人计算机、手持式计算设备、基于微处理器的或可编程消费电 子产品等,它们中的每一个都可以有效地耦合至一个或多个相关联的设备。本发明所示方面也可以在分布式计算环境中实现,在分布式计算环境中某些 任务是由通过通信网络链接的远程处理设备执行的。在分布式计算环境中,程序模 块可以位于本地或远程存储器存储设备中。计算机一般包括各种计算机可读介质。计算机可读介质可以是可由计算机访 问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为 示例,而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存 储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程 序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、 数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存 储设备、或能用于存储所需信息且可以由计算机访问的任何其它介质。通信介质通常具体化为诸如载波或其它传输机制等己调制数据信号中的计算 机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语"已 调制数据信号"指的是这样一种信号,其一个或多个特征以在信号中编码信息的方 式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或 直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中任 一个的组合也应包括在计算机可读介质的范围之内。再次参考图IO,示出了用于实现本发明各方面的示例性环境1000包括计算机 1002,计算机1002包括处理单元1004、系统存储器1006和系统总线1008。系统 总线1008将包括但不限于系统存储器1006在内的系统组件耦合至处理单元1004。 处理单元1004可以是各种市场上可购买的任何处理器。双微处理器和其它多处理 器体系结构也可以作为处理单元1004使用。系统总线1008可以是若干类型总线结构中的任一种,可进一步与存储器总线 (带有或不带有存储器控制器)、外围总线和使用各种市场上可购买的总线体系结 构中任一种的局部总线互连。系统存储器1006包括只读存储器(ROM) 1010和随 机存取存储器(RAM)1012。基本输入/输出系统(BIOS)存储在诸如ROM、EPROM、 EEPROM等非易失性存储器1010中,其中BIOS包含有助于诸如启动时在计算机 1002中元件之间传递信息的基本例程。RAM 1012还可以包括用于高速缓存数据的 诸如静态RAM的高速RAM。计算机1002还包括内部硬盘驱动器(HDD) 1014 (例如EIDE、 SATA),其 中内部硬盘驱动器1014也可被配置为在合适的机箱(未示出)中供外部使用;磁 软盘驱动器(FDD) 1016 (例如读写可移动盘1018)以及光盘驱动器1020 (例如 读CD-ROM盘1022,或者读写诸如DVD的其它高容量光介质)。硬盘驱动器1014、 磁盘驱动器1016和光盘驱动器1020可以分别通过硬盘驱动器接口 1024、磁盘驱动器接口 1026和光盘驱动器接口 1028连接到系统总线1008。用于外部驱动器实 现的接口 1024包括通用串行总线(USB)和IEEE 1394接口技术中的至少一个或 两者。其他外部驱动器连接技术也落在本发明的构想之内。驱动器及其相关联的计算机可读介质提供数据、数据结构、计算机可执行指 令等的非易失性存储。对于计算机1002,驱动器和介质容纳合适数字格式的任何 数据的存储。尽管以上计算机可读介质的描述指的是HDD、可移动磁盘和诸如CD 或DVD的可移动光介质,但本领域的技术人员应该理解,计算机可读的其它类型 的介质,诸如zip驱动器、磁带盒、闪存卡、盒式磁带等,也可以在示例性操作环 境中使用,而且,任何这样的介质可以包含用于执行本发明的方法的计算机可执行 指令。多个程序模块可存储在驱动器和RAM 1012中,包括操作系统1030、 一个或 多个应用程序1032、其它程序模块1034和程序数据1036。操作系统、应用程序、 模块和/或数据的全部或部分也可以高速缓存在RAM 1012中。可以理解,本发明 可以使用各种市场上可购买的操作系统或操作系统的组合来实现。用户可以通过一个或多个有线/无线输入设备,例如键盘1038和诸如鼠标1040 的定点设备来向计算机1002输入命令和信息。其它输入设备(未示出)可包括麦 克风、IR遥控器、操纵杆、游戏手柄、指示笔、触摸屏等。这些和其它输入设备 通常通过耦合至系统总线1008的输入设备接口 1042连接到处理单元1004,但可 以由其它接口连接,诸如并行端口、 IEEE 1394串行端口、游戏端口、 USB端口、 IR接口等。监示器1044或其它类型的显示设备也通过接口,诸如视频适配器1046连接 至系统总线1008。除监示器1044之外,计算机一般包括其它外围输出设备(未示 出),诸如扬声器、打印机等。计算机1002可使用通过有线和/或无线通信至一台或多台远程计算机,诸如远 程计算机1048的逻辑连接在网络化环境中操作。远程计算机1048可以是工作站、 服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、 对等设备或其它常见的网络节点,并且一般包括相对于计算机1002描述的多个或 全部元素,但是为了简明起见,仅示出了存储器/存储设备1050。所示逻辑连接包 括至局域网(LAN) 1052和/或较大网络,例如广域网(WAN) 1054的有线/无线 连接。这样的LAN和WAN网络环境在办公室和公司中是常见的,且促进诸如内 联网的企业范围网络,它们全部都可连接至例如因特网的全球通信网络。当在LAN网络环境中使用时,计算机1002通过有线和/或无线通信网络接口 或适配器1056连接至局域网1052。适配器1056可促进至LAN 1052的有线或无 线通信,LAN 1025也可包括部署在其上的用于与无线适配器1056通信的无线接 入点。当在WAN网络环境中使用时,计算机1002可以包括调制解调器1058,或者 连接至WAN 1054上的通信服务器,或者具有用于通过诸如因特网等WAN 1054 建立通信的其它装置。调制解调器1058可以是内置或外置的和有线或无线设备, 它通过串行端口接口 1042连接至系统总线1008。在网络化环境中,相对于计算机 1002所述的程序模块或其部分可以存储在远程存储器/存储设备1050中。可以理 解,所示的网络连接是示例性的,且可使用在计算机之间建立通信链路的其它手段。计算机1002可以用于与操作上部署在无线通信中的任何无线设备或实体通 信,例如,打印机、扫描仪、台式和/或便携式计算机、便携式数据助理、通信卫 星、与无线可检测标签(例如公共电话亭、报亭、休息室)相关联的任何设备或位 置、以及电话。这至少包括Wi-Fi和Bluetooth (蓝牙)无线技术。因此,通信 可以是使用常规网络的预先定义的结构,或仅仅是至少两个设备之间的自组织通 信。Wi-Fi即无线保真允许从家里的睡椅、旅馆房间中的床或工作单位的会议室无 线地连接至因特网。Wi-Fi是类似于蜂窝电话中使用的技术的无线技术,它使得例 如计算机等设备能够在室内外基站范围内的任何地方收发数据。Wi-Fi网络使用称 为IEEE S02.11(a、 b、 g等)的无线电技术来提供安全、可靠、快速的无线连接。 Wi-Fi网络可以用于将计算机彼此连接、连接至因特网、以及连接至有线网络(使 用IEEE 802.3或以太网)。Wi-Fi网络在非特许的2.4和5GHz无线电波段中,例 如以11 Mbps(802.11a)或54 Mbps(802.11b)数据速率运行,或者使用包括两种波段 (双波段)的产品,因此网络可以提供类似于在许多办公室中使用的基本10BaseT 有线以太网网络的真实世界性能。现在参考图11 ,示出了根据本API —方面的示例性计算环境1100的示意框图。 系统1100包括一个或多个客户机1102。客户机1102可以是硬件和/或软件(例如, 线程、进程、计算设备)。客户机1102可以例如通过使用本发明来容纳cookie和 /或相关联的上下文信息。系统1100也包括一个或多个服务器1104。服务器1104也可以是硬件和/或软 件(例如,线程、进程、计算设备)。服务器1104可以例如通过使用本发明容纳执行变换的线程。客户机1102与服务器1104之间的一种可能的通信可以是以适于在两个或多个计算机进程之间传输的数据包的形式。数据包可以包括,例如cookie 和/或相关联的上下文信息。系统1100包括通信架构1106 (例如,诸如因特网等全 球通信网络),它可以用于促进客户机1102与服务器1104之间的通信。可以通过有线(包括光纤)和/或无线技术来促进通信。客户机1102操作上连 接至可以用于存储对客户机1102本地的信息(例如,cookie和/或相关联的上下文 信息)的一个或多个客户机数据存储1108。类似地,服务器1104操作上连接至可 使用来存储对服务器1104本地的信息的一个或多个服务器数据存储1110。以上描述包括本发明的示例。当然,不可能为描述本发明而描述每个可想象 的组件或方法的组合,但是本领域的普通技术人员可以认识到,还可能有本发明的 众多其它组合和排列。从而,本发明旨在包括落入所附权利要求书精神和范围内的 所有这样的变更、修改和变化。而且,就或者在详细描述中或者在权利要求书中使 用的术语"包括"而言,当被用作权利要求书中的过渡词时,这样的术语旨在是包 含性的,类似于解释术语"包含"的方式。
权利要求
1.一种便于与可扩展标记语言(XML)数据交互的应用程序编程接口(API),包括对象模型组件,区分多个XML节点类型;接收器组件,与应用程序接口并以与所述对象模型一致的面向表达式格式来接收数据;以及动作组件,便于至少部分基于所接收的数据对所述XML数据进行构造、查询和修改的至少其中之一。
2. 如权利要求l所述的系统,其特征在于,所述多个XML节点类型包括以 下至少其中之一类型XName,表示由命名空间统一资源标识符(URI)和本地名组成的一个 或多个通用名,类型XAttribute,表示一个或多个属性,类型Xnode,表示用于一个或多个XML孩子节点类型的抽象基类,类型XComment,表示一个或多个XML注释,类型XProcessinglnstruction,表示一个或多个XML处理指令,类型XDeclaration,表示一个或多个XML声明,类型XdocumentType,表示XML文档类型声明,抽象类型XCharacterNode,表示用于字符数据的基类,抽象类型XCData,表示一个或多个XML CData部分,抽象类型XContainer,表示具有孩子的一个或多个节点,类型XElement,所述类型XContainer表示一个或多个XML元素,以及类型XDocument,表示完整的XML文档。
3. 如权利要求l所述的系统,其特征在于,所述动作组件包括至少部分基于 所接收的数据生成XML片段的构造组件。
4. 如权利要求l所述的系统,其特征在于,所生成的XML片段包括上下文 无关节点。
5. 如权利要求l所述的系统,其特征在于,所述动作组件展示包括父亲、元 素、属性、后代、自己和后代、祖先、以及自己和祖先的至少其中之一的轴。
6. 如权利要求5所述的系统,其特征在于,还包括按文档顺序对査询结果数据集显式排序的排序组件。
7. 如权利要求5所述的系统,其特征在于,所述轴对单个项目和源集合之一 进行工作,所述轴便于将返回值限于具有特定名字和特定类型的至少其中之一的节 点。
8. 如权利要求1所述的系统,其特征在于,所述动作组件包括便于至少部分 基于以所述面向表达式格式接收的数据来对所述XML数据进行变更的修改组件。
9. 如权利要求8所述的系统,其特征在于,所述修改组件包括标识对于节点 的动作的操作符组件。
10. 如权利要求9所述的系统,其特征在于,所述动作是以下至少其中之一 对接收器节点的父亲节点的更新,所述对所述父亲的更新包括以下至少其中之一在所述父亲中添加一项目、在所述父亲中添加项目的集合以及从接收器节点 父亲中移除所述接收器节点;以及对所述接收器节点和接收器节点集合的至少其中之一更新,所述对接收器节 点和接收器节点集合的至少其中之一更新包括以下至少其中之一向所述接收器节 点添加一项目、向所述接收器节点添加孩子集合、移除所述接收器节点的孩子、用 单个项目替换所述接收器节点的孩子、用项目的集合来替换所述接收器节点的孩 子、添加属性、移除属性、替换指定孩子节点的内容以及替换所述接收节点的属性。
11. 一种其上存储用于实现如权利要求1所述的系统的计算机可执行指令的 计算机可读介质。
12. —种用于将应用程序与XML数据接口的方法,包括 建立区分多个XML节点类型的对象模型;接收与所述对象模型一致的面向表达式语句,所述面向表达式语句用同一方 式对元素和属性寻址;以及至少部分基于所接收的面向表达式语句来操纵所述XML数据。
13. 如权利要求12所述的方法,其特征在于,所述操纵的动作包括对所述 XML数据进行构造、查询和修改的至少其中之一。
14. 如权利要求13所述的方法,其特征在于,所述XML片段由上下文无关 节点构成。
15. 如权利要求12所述的方法,其特征在于,所述多个XML节点类型包括 以下至少其中之一类型XName,表示由命名空间统一资源标识符(URI)和本地名组成的一个 或多个通用名,类型XAttribute,表示一个或多个属性,类型Xnode,表示用于一个或多个XML孩子节点类型的抽象基类,类型XComment,表示一个或多个XML注释,类型XProcessinglnstruction,表示一个或多个XML处理指令,类型XDeclaration,表示一个或多个XML声明,类型XdocumentType,表示XML文档类型声明,抽象类型XCharacterNode,表示用于字符数据的基类,抽象类型XCData,表示一个或多个XML CData部分,抽象类型XContainer,表示具有孩子的一个或多个节点,类型XElement,所述类型XContainer表示一个或多个XML元素,以及类型XDocument,表示完整的XML文档。
16. 如权利要求12所述的方法,其特征在于,还包括展示包含父亲、元素、 属性、后代、自己和后代、祖先、以及自己和祖先的至少其中之一的轴。
17. 如权利要求12所述的方法,其特征在于,还包括按文档顺序对査询结果 数据集显式排序。
18. —种其上存储用于执行如权利要求12所述的方法的计算机可执行指令的 计算机可读介质。
19. 一种便于应用程序与XML数据之间交互的系统,包括 用于标识对象模型的装置,所述对象模型区分多个XML节点类型; 用于采用至少部分基于所述对象模型的面向表达式语句以便于对标记语言组件采取动作的装置,所述动作包括对所述XML数据进行构造、査询和修改的至少 其中之一。
20. 如权利要求19所述的系统,其特征在于,所述多个XML节点类型包括 以下至少其中之一类型XName,表示由命名空间统一资源标识符(URI)和本地名组成的一个 或多个通用名,类型XAttribute,表示一个或多个属性,类型Xnode,表示用于一个或多个XML孩子节点类型的抽象基类, 类型XComment,表示一个或多个XML注释,类型XProcessinglnstruction,表示一个或多个XML处理指令, 类型XDeclaration,表示一个或多个XML声明, 类型XdocumentType,表示XML文档类型声明, 抽象类型XCharacterNode,表示用于字符数据的基类, 抽象类型XCData,表示一个或多个XML CData部分, 抽象类型XContainer,表示具有孩子的一个或多个节点, 类型XElement,所述类型XContainer表示一个或多个XML元素,以及 类型XDocument,表示完整的XML文档。
全文摘要
一种利用经由轻量应用程序编程接口(API)来对标记语言操作,例如可扩展标记语言(XML)查询支持的体系结构。API定义了可对用原本不支持XML的语言来构造XML值进行简化的对象模型。革新可允许查询语言一方面被分解成对集合的一般操作(例如,映射、过滤、排序和/或函数投影),另一方面被分解成对这些集合的元素的一组域专用操作(例如,导航、构造和修改)。API可支持创建节点中心(例如,上下文无关)的XML数据。因此,节点不必在文档上下文内构造。各方面可启用面向表达式的接口机制而非结合传统接口机制(例如,DOM)使用的命令性面向语句风格的接口。
文档编号G06F15/00GK101233502SQ200680027772
公开日2008年7月30日 申请日期2006年6月29日 优先权日2005年7月29日
发明者A·A·德塞, A·E·金保尔, A·加瓦哈, A·赫杰斯伯格, D·L·瑞梅, D·布克斯, H·J·M·梅杰 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1