CN101233502A - 用于可扩展标记语言(xml)的轻量应用程序编程接口(api) - Google Patents

用于可扩展标记语言(xml)的轻量应用程序编程接口(api) Download PDF

Info

Publication number
CN101233502A
CN101233502A CNA2006800277728A CN200680027772A CN101233502A CN 101233502 A CN101233502 A CN 101233502A CN A2006800277728 A CNA2006800277728 A CN A2006800277728A CN 200680027772 A CN200680027772 A CN 200680027772A CN 101233502 A CN101233502 A CN 101233502A
Authority
CN
China
Prior art keywords
xml
type
node
expression
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2006800277728A
Other languages
English (en)
Other versions
CN101233502B (zh
Inventor
H·J·M·梅杰
A·赫杰斯伯格
D·L·瑞梅
A·A·德塞
A·加瓦哈
A·E·金保尔
D·布克斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101233502A publication Critical patent/CN101233502A/zh
Application granted granted Critical
Publication of CN101233502B publication Critical patent/CN101233502B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8358Query translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]

Abstract

一种利用经由轻量应用程序编程接口(API)来对标记语言操作,例如可扩展标记语言(XML)查询支持的体系结构。API定义了可对用原本不支持XML的语言来构造XML值进行简化的对象模型。革新可允许查询语言一方面被分解成对集合的一般操作(例如,映射、过滤、排序和/或函数投影),另一方面被分解成对这些集合的元素的一组域专用操作(例如,导航、构造和修改)。API可支持创建节点中心(例如,上下文无关)的XML数据。因此,节点不必在文档上下文内构造。各方面可启用面向表达式的接口机制而非结合传统接口机制(例如,DOM)使用的命令性面向语句风格的接口。

Description

用于可扩展标记语言(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系统的框图。
图10示出了可用于执行所公开的体系结构的计算机的框图。
图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。作为示例,API 102可便于诸如查询组件的应用程序在标记语言集合(例如,标记语言组件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 XProcessingInstruction  :XNode
在示例中,该节点可用于表示XML处理指令,诸如<??>。
class XDeclaration  :XNode
以上节点可表示XML声明,诸如<?xml version=“1.0”encoding=“UTF-8”?>。
class XDocumentType  :XNode
该节点可用来表示XML文档类型声明,诸如<!DOCTYPE greeting SYSTEM“hello.dtd”>。
abstractclass XCharacterNode  :XNode
class XCData  :XCharacterNode
这是表示XML CData部分的示例性节点<![CDATA[这是CDATA部分]]>。
abstract class XContainer  :XNode
这是用于具有孩子的节点的抽象基类。
class XElement  :XContainer
这是具有从Xnode导出的抽象基类XContainer的节点。如上所述,可以理解,XContainer表示具有孩子的所有节点。例如,注释、处理指令等仅具有一个孩子或内容。另一方面,XElement和XDocument类可具有支持在此示例中被称为XContainer的该抽象基类的较低层的孩子。在一个示例中,该节点可表示XML元素,诸如<Customer Name=”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可便于这样的导航和/或树的有向走查(walk through)。
给定一节点或节点的集合(例如302),用户可能期望遍历树来标识孩子、父亲等或属性。API 202包含对应于用于访问属性和元素的各轴(例如,402)的若干新颖的方法和/或机制。
例如,这些示例性轴表达式可由相应的轴函数来表示。在以下示例中,在左侧列出了常规XPath品牌表达式。在右侧列出了根据本API 202的相应的轴表达式。
bib/book           ==>bib.Element[s](″book″)
bib/*              ==>bib.Elements()
book/@year         ==>book.Attribute(″year″)
bib//book          ==>bib/Descendants(″book″)
authors/ancestor::*==>authors.Ancestors()
一般,轴函数402可包含各个级别的功能。例如,可对于单个项目或对源集合来采用轴函数。而且,如有需要,轴组件402可将返回值限于具有特定名字的节点。从而,用户可限制集合上的搜索。作为其他示例,用户可在集合中查询特定节点的所有孩子元素或共享某一名字的所有孩子元素。
而且,轴函数可用来将返回值限于特定类型。这在搜索值(例如,仅给出类型串或类型整数的值)时尤其有用。
结果,本发明对每一轴采用多个重载(overload)(例如,Descendants(后代)和SelfAndDescendants(自己和后代))。为了对讨论提供上下文,以下是XElement类上的所有轴的示例性列表。可以理解,该列表不旨在按任何方式进行限制。而且,可以理解,根据本发明对于其他节点存在其他轴函数,且这些轴函数应被包括在本公开及所附权利要求书的范围内。
public XContainer Parent  {}
该函数返回节点的父亲。这对XContainer进行操作,如前关于示例性对象模型108所述,所有XContainer均有孩子。
public IEnumerable<object>Content(){}
给定节点,用户可查询节点的父亲,并通过采用该函数来询问其内容,系统将呈现其所有孩子(例如,内容(例如,值))。本发明的一新颖特征在于,如果存在某些串内容和某些元素内容,则将返回该混合内容。
public IEnumerable<T>Content<T>()where  T  :class  {}
以上是用户可查询某一类型的内容的示例性重载。
XElement Element(XName name)(}
该轴返回具有特定名字的元素。在操作中,它可返回具有指定名字的第一个元素。
以下五个轴具有Ienumerable的返回类型。
IEnumerable<XElement>Elements(){}
该轴实现直接包含在指定元素内的所有孩子元素的呈现。
IEnumerable<XElement>Elements(XName name){}
类似地,该轴仅呈现某一名字的元素。而且,以下三个轴是上述功能的变型。
static IEnumerable<T>Elements<T>(this IEnumerable<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 IEnumerable<XAttribute>Attributes(this
IEnumerable<XElement>source){}
static IEnumerable<XAttribute>Attributes(this
IEnumerable<XElement>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:class{}
static IEnumerable<XElement>Descendants(this
IEnumerable<XElement>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<XElement>SelfAndDescendants(this
IEnumerable<XElement>source){}
static IEnumerable<XElement>SelfAndDescendants(this
IEnumerable<XElement>source,XName name){}
IEnumerable<XElement>Ancestors(){}
IEnumerable<XElement>Ancestors(XName name){}
static IEnumerable<XElement>Ancestors(this IEnumerable<XElement>
source){}
static IEhumerable<XElement>Ancestors(this IEnumerable<XElement>
source,XName name){}
IEnumerable<XElement>selfAndAncestors(){}
IEnumerable<XElement>SelfAndAncestors(XName name){}
static IEnumerable<XElement>SelfAndAncestors(this
IEnumerable<XElement>source){}
static IEnumerable<XElement>SelfAndAncestors(this
IEnumerable<XElement>source,XName name){}
如所示,以上是根据本发明的示例性轴。可以理解,这些轴可对于单个集合采用,且可返回集合。
可以理解,本发明允许Element(元素)和Attribute(属性)之间的对称。例如,如以上标记(signature)中所示,元素和属性以相同方式来选择而代替如传统API中使用方法(例如,Attributes(“foo”))和索引器[“bar”](例如方括号)。然而,根据此处所述的API 202,用户可用相同方式访问元素和/或属性两者。换言之,仅有的区别在于利用了不同的轴且同时维护了所采用的方法的对称性。
在操作中,用户可查询(例如,经由导航组件206)元素,反过来系统可返回元素的集合。随后,各方面允许用户查询所返回的元素集合的所有属性。可以理解,该新颖的功能允许用户将关于集合的轴串起来。
可以理解,在查询XML时,查询可返回节点的集合(或集合的子集)。传统上,所呈现的节点集合的顺序用文档顺序维护。例如,如果在查询结果中一个节点比另一个先到,则说明在文档本身中该节点比后续结果节点先到。该节点将在下一节点之前遇到。换言之,作为查询结果返回节点的顺序与原始文档本身的顺序相同。
某些查询(例如,后代查询)会打乱文档顺序。例如,在XQuery品牌环境中,语义便于在每个查询之后将结果自动排序成文档顺序。如可以理解的,按文档顺序排序是非常昂贵的。本API 202的各方面不会自动按文档顺序排序从而查询可被适配。而且,导航组件206可包括便于按需按文档顺序显式排序的排序组件404。
与将该排序功能构建到语义中相反,各方面便于某些查询打乱文档顺序,之后允许按需显式排序。各方面不维护文档顺序是本发明的一新颖的特征。另外,文档顺序可经由显式排序(例如,排序组件404)来实现。可以理解,将信息编码到节点内的各种方法和机制便于按文档顺序的高效排序。这些方法和机制可由本领域的技术人员理解,且被认为落在本说明书和所附权利要求书的范围内。
如前所述,本API 202不考虑文本节点和/或属性集合的特定身份。诸如标准DOM的常规系统以比本说明书中所述的本发明所展示的数据模型更精细的粒度来展示标识信息项目的XML信息集(infoset)数据模型。结果,本发明的数据模型可允许更高效的实现,尤其是对于工作集。
例如,本革新的各方面采用普通(ordinary)的串而非文本节点。另外,相邻串被自动合并,从而增加效率。换言之,与传统DOM中不同地,本发明不展示单独的AttributeCollection(属性集合)。相反,根据本发明的各方面,每一元素直接维护属性的(循环)链接表。
因为常规系统具有非常详细的对象模型,它们可区分众多不同的节点。另外,每一节点具有个别的命名空间集合。
另外,在常规系统中,属性集合具有身份。换言之,节点的属性集合自己本身有可被区分的东西。它们也可区分文本节点。因此,在混合内容中,各文本片段本身是分开的节点。相反,根据本发明,混合内容中的文本片段仅是正常的串。它们不是具有特定身份并附加诸如父亲指针和命名空间节点的性质的特殊文本节点。
本发明采用比传统系统更粗略的信息视图,从而区分节点的较少性质。与需要在节点之间区分的以往系统不同,本发明不必区分文本节点。从而,可以理解,与常规系统相比,本系统可具有更小的存储器占用大小和更高效的实现。
所有的元素和属性都有名字。特别地,在XML中,在开括号之后有一个名字。从而,常规上,如果用户想要在文档内搜索,则必须准备好元素和/或属性的名字。例如,用户可查询来获取特定文档的所有作者。这将返回该文档中的所有作者元素。可以理解,将元素名或属性名作为串来比较尤其低效和昂贵。这是非常昂贵的,因为当比较串时,有必要遍历所有串字符,直到定位了一个不同的字符。
如果名字较长,这可能尤其昂贵,因为区别可能位于串的末尾。当对此考虑时,代替将名字作为串来存储,此处所述的API 202可将串存储为被称为XName的类型。可以理解,这通常被称为串散列。通过对所述API 202采用该散列技术,比较指针而非串。因此,每当创建新元素名时,系统可存储(例如,高速缓存)串并将指针返回到新的XName。从而,如果两个名字由同一XName表示,则它们使用同一指针。
问题在于命名空间组件406内的表可能会增长。本发明的各方面可监控增长(例如,速率、大小)和/或基于任何定义的准则来清除名字表。在以下示例中示出“ClearNameCache(清除名高速缓存)”。从而,当系统再次比较时,将发现该名字不再存在,从而将重新插入该名字。这种监控和清除功能给出了对对应于命名空间406的名字表的显式控制。另外,系统可监控增长和相应的统计数据,从而当表增长过快时等生成事件。
XML中的名字可由两部分组成,如元素(例如,书、作者)的本地名和命名空间前缀。这两部分命名约定尤其有用,因为可能存在在同一文档中具有冲突的名字的多个元素。从而,API 202的各方面可将这些名字置入命名空间406,通过将其与前缀组合来具有唯一的串。
因此,API 202可通过包含命名空间前缀并追加本地名来表示这些完全合格或通用名字。每个名字可由命名空间URI和本地名来组成。
API 202采用新颖的系统和/或方法来应用XML名和命名空间。如前所述,在一个示例中,XName类可表示由本地元素或属性名“part”和命名空间URI“http://www.cars.com/xml”组成的“{http://www.cars.com/xml}part”形式的通用或扩展名。
XName类可允许通过输入串并比较对象引用来进行高效的XML名比较。通过提供串到XName的隐式转换,用户不需要显式构造XName。
    pudlic sealed class XName
    {
           public string ExpandedName  {}
           public string LocalName  {}
           public string NamespaceName  {}
           public override int GetHashCode(){}
           public override bool Equals(object obj){}
           public override string ToString(){}
           public static void ClearNameCache(){}
           public static XName Get(string expandedName){}
           public static XName Get(string localName,string
namespaceName){}
           public static implicit operator XName(string s){}
    public static bool operator  ==(XName n1,XName n2){}
    public static bool operator  !=(XName n1,XName n2){}
}
如上所示,XName类输入这些串。从而,这些名字不作为串进行比较,因为它们经由XName引用来比较。由于本API 202提供了来自串的隐式操作符,用户不必显式创建该XName。
图5示出了根据本发明的一方面用于导航标记语言(例如,XML)节点的结构的方法的过程流程图。尽管为说明简单起见,此处例如以流程图形式示出的一个或多个方法被示出或描述为一连串动作,但是可以理解和领会,本发明不受动作顺序的限制,根据本发明,某些动作可按照不同顺序进行和/与此处所示和所述的其他动作并发。例如,本领域的技术人员可以理解和领会,方法可替换地被表示为诸如状态图中的一连串相互关联的状态或事件。而且,不是所有示出的动作都是实现根据本发明的方法所必需的。
在502,接收到导航表达式。如上所述,导航表达式可以是标识集合内所需目标(例如,值)的轴语句。例如,导航表达式可请求特定节点的父亲。
在504可分析导航表达式(例如,轴)。在不同的示例中,导航表达式可请求特定节点的父亲、祖父亲、兄弟等。从而,在506可标识上下文节点。该上下文节点可定义导航表达式的起始点。此外,在508处可确定导航的方向。
在510处可标识满足导航表达式的节点。在512,可作出是否有其他节点存在的判断。如果结构(例如,树)中有其他节点存在,则该过程返回至510,从而标识其他节点。如果没有其他节点存在,则到达停止框。
现在参考图6,示出了根据本发明的另一方面的系统600。更具体地,图6示出了便于构造XML上下文无关片段、节点或节点的集合的系统600。传统上,XMLAPI在结构上是命令性的。换言之,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节点仅生存在文档的上下文中。这些传统节点不能独立生存。与之相反,本API 202生成可独立于文档生存的上下文无关节点。
上下文无关节点组件706的一个新颖的特征在于,这些上下文无关节点组件706可被自主创建且被用作其他节点的孩子。因此,与常规系统相反并根据本API202,上下文无关节点组件706本身不必活在文档的上下文中。
在操作中,当节点被创建时,它没有父亲。所创建的节点不作为任何其他节点的孩子来生存,因为它是新建的。本发明的一新颖的特征在于当节点被指定为另一节点的孩子时,或者如果存在返回要被作为孩子而包括的节点的查询时,构造组件208可在该节点已经具有父亲时对其克隆。可以理解,这些节点仅可具有一个父亲。从而,如果不同的节点被选作一节点的父亲,则该节点可被自动克隆,从而允许该父子关系。相反,常规的API要求用户显式地克隆节点。
系统600的构造组件208可自动检查来确定对一节点是否存在父亲。如果是,则构造组件208可自动克隆并指定新父亲即克隆节点的父亲。克隆的结果是新颖的上下文无关节点构造。
当有父亲的节点用于构造新节点时,它们可被自动克隆来维护新构造节点的结构。然而,节点不必有父亲,且特别地,节点可独立于文档存在。提供以下示例来向本发明添加上下文,从而该示例不旨在以任何方式限制本公开。
class Test
{
  public static void Main()
  {
    XElement a=new XElement(″A″);<==a没有父亲节点
    XElement b1=new XElement(″B″,a);<==a没有得到克隆
    XElement b2=new XElement(″B″,a);<==a要得到克隆
    a.Add(new XElement(″C″));<==只有b1得到修改
    Console.WriteLine(″---------------″);
    Console.WriteLine(b1);
    Console.WriteLine(″---------------″);
    Console.WriteLine(b2);
    Console.WriteLine(″---------------″);
    }
}
以上示例呈现以下结构:
---------------
<B>
  <A>
    <C  />
  </A>
</B>
---------------
<B>
  <A/>
</B>
---------------
以下是对根据API 202的一方面最终可创建的XML片段的讨论。如前示例所示,XML片段和文档用功能或基于表达式的方式来代替经由语句序列的命令性方式构造。例如,可利用以下示出的面向表达式方式来创建以下分层XML元素。
<bib>
  <books>
   <book year=″1999″>
    <title>TCP/IP  Illustrated</title>
    <author>
      <last>Stevens</last>
      <first>W.</first>
      </author>
      <publisher>Addison-Wesley</publisher>
      <price>65.95</price
    </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 XElement(″last″,″Stevens″),
               new XElement(″first″,″W.″)
            ),
            new XElement(″publisher″,″Addison-Wesley″),
            new XElement(″price″,65.95)
         )
      )
  );
使用常规API创建以上XML片段过于麻烦。使用现有的API,诸如常规XMLDOM,用户首先需要构建容器文档。接着,在该文档的上下文中必须命令性地创建元素和属性。另外,用户必须命令性地将这些节点分配为其他节点的孩子。以下是该过程根据常规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.InnerText=″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 firstName=doc.CreateElement(″first″);
firstName.InnerText=″W.″;
author.appendChild(firstName);
XmlElement publisher=doc.CreateElement(″publisher);
publisher.InnerText  =″Addison-Wesley″;
book.appendChild(publisher);
XmlElement price  =doc.CreateElement(″price″);
price.InnerText=″65.95″;
book.appendChild(price);
doc.DocumentElement.InsertBefore(bib,
doc.DocumentElement.LastChild);
可以理解,该常规方法不能够在查询中使用,因为当用户想要返回新的XML片段作为查询的结果时,它并不总是在特定文档的上下文中。另一方面,创建上下文无关结构(如根据本API 202所述)的能力便于对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。操作符组件902可便于操纵节点本身、其父亲、其孩子等。以下是更新(例如,操纵)节点的父亲的示例性语句列表。而且,之后包括更新当前节点本身的示例。
对父亲更新:
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){}-该语句添加在开头。
void AddFirst(params object[]content){}-该语句添加在开头。
void RemoveContent(){}
void ReplaceContent(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、红外线和其它无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
再次参考图10,示出了用于实现本发明各方面的示例性环境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和BluetoothTM(蓝牙)无线技术。因此,通信可以是使用常规网络的预先定义的结构,或仅仅是至少两个设备之间的自组织通信。
Wi-Fi即无线保真允许从家里的睡椅、旅馆房间中的床或工作单位的会议室无线地连接至因特网。Wi-Fi是类似于蜂窝电话中使用的技术的无线技术,它使得例如计算机等设备能够在室内外基站范围内的任何地方收发数据。Wi-Fi网络使用称为IEEE 802.11(a、b、g等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可以用于将计算机彼此连接、连接至因特网、以及连接至有线网络(使用IEEE 802.3或以太网)。Wi-Fi网络在非特许的2.4和5GHz无线电波段中,例如以11Mbps(802.11a)或54Mbps(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。
以上描述包括本发明的示例。当然,不可能为描述本发明而描述每个可想象的组件或方法的组合,但是本领域的普通技术人员可以认识到,还可能有本发明的众多其它组合和排列。从而,本发明旨在包括落入所附权利要求书精神和范围内的所有这样的变更、修改和变化。而且,就或者在详细描述中或者在权利要求书中使用的术语“包括”而言,当被用作权利要求书中的过渡词时,这样的术语旨在是包含性的,类似于解释术语“包含”的方式。

Claims (20)

1.一种便于与可扩展标记语言(XML)数据交互的应用程序编程接口(API),包括:
对象模型组件,区分多个XML节点类型;
接收器组件,与应用程序接口并以与所述对象模型一致的面向表达式格式来接收数据;以及
动作组件,便于至少部分基于所接收的数据对所述XML数据进行构造、查询和修改的至少其中之一。
2.如权利要求1所述的系统,其特征在于,所述多个XML节点类型包括以下至少其中之一:
类型XName,表示由命名空间统一资源标识符(URI)和本地名组成的一个或多个通用名,
类型XAttribute,表示一个或多个属性,
类型Xnode,表示用于一个或多个XML孩子节点类型的抽象基类,
类型XComment,表示一个或多个XML注释,
类型XProcessingInstruction,表示一个或多个XML处理指令,
类型XDeclaration,表示一个或多个XML声明,
类型XdocumentType,表示XML文档类型声明,
抽象类型XCharacterNode,表示用于字符数据的基类,
抽象类型XCData,表示一个或多个XML CData部分,
抽象类型XContainer,表示具有孩子的一个或多个节点,
类型XElement,所述类型XContainer表示一个或多个XML元素,以及
类型XDocument,表示完整的XML文档。
3.如权利要求1所述的系统,其特征在于,所述动作组件包括至少部分基于所接收的数据生成XML片段的构造组件。
4.如权利要求1所述的系统,其特征在于,所生成的XML片段包括上下文无关节点。
5.如权利要求1所述的系统,其特征在于,所述动作组件展示包括父亲、元素、属性、后代、自己和后代、祖先、以及自己和祖先的至少其中之一的轴。
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注释,
类型XProcessingInstruction,表示一个或多个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注释,
类型XProcessingInstruction,表示一个或多个XML处理指令,
类型XDeclaration,表示一个或多个XML声明,
类型XdocumentType,表示XML文档类型声明,
抽象类型XCharacterNode,表示用于字符数据的基类,
抽象类型XCData,表示一个或多个XML CData部分,
抽象类型XContainer,表示具有孩子的一个或多个节点,
类型XElement,所述类型XContainer表示一个或多个XML元素,以及
类型XDocument,表示完整的XML文档。
CN2006800277728A 2005-07-29 2006-06-29 用于可扩展标记语言(xml)的轻量应用程序编程接口(api) Expired - Fee Related CN101233502B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/193,567 US7409636B2 (en) 2005-07-29 2005-07-29 Lightweight application program interface (API) for extensible markup language (XML)
US11/193,567 2005-07-29
PCT/US2006/025577 WO2007018827A2 (en) 2005-07-29 2006-06-29 Lightweight application program interface (api) for extensible markup language (xml)

Publications (2)

Publication Number Publication Date
CN101233502A true CN101233502A (zh) 2008-07-30
CN101233502B CN101233502B (zh) 2011-11-23

Family

ID=37695781

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800277728A Expired - Fee Related CN101233502B (zh) 2005-07-29 2006-06-29 用于可扩展标记语言(xml)的轻量应用程序编程接口(api)

Country Status (5)

Country Link
US (1) US7409636B2 (zh)
EP (1) EP1910930A4 (zh)
JP (1) JP4384247B2 (zh)
CN (1) CN101233502B (zh)
WO (1) WO2007018827A2 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110377273A (zh) * 2019-07-01 2019-10-25 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN111125440A (zh) * 2019-12-09 2020-05-08 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN111815175A (zh) * 2020-07-08 2020-10-23 睿智合创(北京)科技有限公司 一种嵌套列表形式的五层结构xml语言交互应用方法

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7992140B2 (en) 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US7860823B2 (en) * 2006-05-04 2010-12-28 Microsoft Corporation Generic interface for deep embedding of expression trees in programming languages
US8086957B2 (en) * 2008-05-21 2011-12-27 International Business Machines Corporation Method and system to selectively secure the display of advertisements on web browsers
US8037404B2 (en) * 2009-05-03 2011-10-11 International Business Machines Corporation Construction and analysis of markup language document representing computing architecture having computing elements
US8307277B2 (en) * 2010-09-10 2012-11-06 Facebook, Inc. Efficient event delegation in browser scripts
US8813026B1 (en) * 2011-09-30 2014-08-19 Emc Corporation Methods and apparatus for storing information for components of a system in model component files to provide a world view of the system
CN103324470B (zh) * 2012-03-21 2017-09-22 阿里巴巴集团控股有限公司 一种Web系统生成的方法和装置
CN104965892B (zh) * 2015-06-17 2018-08-14 重庆邮电大学 一种无线传感器网络中基于字典的xmpp压缩方法
CN107741925B (zh) * 2017-11-07 2020-11-20 济南市市政工程设计研究院(集团)有限责任公司 地下管线勘测数据自动转换方法、装置
CN112740635B (zh) * 2019-02-21 2022-04-05 华为技术有限公司 报文解析的方法、数据发送端、数据接收端和系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6635089B1 (en) * 1999-01-13 2003-10-21 International Business Machines Corporation Method for producing composite XML document object model trees using dynamic data retrievals
US7114147B2 (en) * 2000-03-09 2006-09-26 Electronic Data Systems Corporation Method and system for reporting XML data based on precomputed context and a document object model
US6690981B1 (en) * 2000-05-04 2004-02-10 National Instruments Corporation System and method for encapsulating user interface code for a graphical program
US6993529B1 (en) * 2001-06-01 2006-01-31 Revenue Science, Inc. Importing data using metadata
US7117216B2 (en) * 2001-06-07 2006-10-03 Sun Microsystems, Inc. Method and apparatus for runtime merging of hierarchical trees
GB0119488D0 (en) * 2001-08-10 2001-10-03 Cellectivity Ltd E-commerce method for mobile telephones
US6826568B2 (en) * 2001-12-20 2004-11-30 Microsoft Corporation Methods and system for model matching
JP2005523555A (ja) * 2002-04-16 2005-08-04 サムスン エレクトロニクス カンパニー リミテッド インタラクティブコンテンツバージョン情報が記録された情報保存媒体、その記録方法及び再生方法
US7162485B2 (en) * 2002-06-19 2007-01-09 Georg Gottlob Efficient processing of XPath queries
US7574652B2 (en) * 2002-06-20 2009-08-11 Canon Kabushiki Kaisha Methods for interactively defining transforms and for generating queries by manipulating existing query data
KR100558765B1 (ko) * 2002-11-14 2006-03-10 한국과학기술원 적응형 경로 인덱스를 이용한 xml 질의 수행 방법
EP1462949A1 (en) * 2003-03-22 2004-09-29 Cegumark AB A system and method relating to access of information
US20040243921A1 (en) * 2003-05-30 2004-12-02 Carr Steven Paul Methods and systems for synchronizing document elements
US7383255B2 (en) * 2003-06-23 2008-06-03 Microsoft Corporation Common query runtime system and application programming interface
US7013311B2 (en) * 2003-09-05 2006-03-14 International Business Machines Corporation Providing XML cursor support on an XML repository built on top of a relational database system
US7185024B2 (en) * 2003-12-22 2007-02-27 International Business Machines Corporation Method, computer program product, and system of optimized data translation from relational data storage to hierarchical structure
US7523131B2 (en) * 2005-02-10 2009-04-21 Oracle International Corporation Techniques for efficiently storing and querying in a relational database, XML documents conforming to schemas that contain cyclic constructs

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110377273A (zh) * 2019-07-01 2019-10-25 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN110377273B (zh) * 2019-07-01 2023-07-28 北京字节跳动网络技术有限公司 一种数据处理的方法、装置、介质和电子设备
CN111125440A (zh) * 2019-12-09 2020-05-08 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN111125440B (zh) * 2019-12-09 2022-08-23 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN111815175A (zh) * 2020-07-08 2020-10-23 睿智合创(北京)科技有限公司 一种嵌套列表形式的五层结构xml语言交互应用方法

Also Published As

Publication number Publication date
US20070028163A1 (en) 2007-02-01
CN101233502B (zh) 2011-11-23
JP4384247B2 (ja) 2009-12-16
EP1910930A4 (en) 2011-03-02
EP1910930A2 (en) 2008-04-16
US7409636B2 (en) 2008-08-05
JP2009503679A (ja) 2009-01-29
WO2007018827A2 (en) 2007-02-15
WO2007018827A3 (en) 2007-09-13

Similar Documents

Publication Publication Date Title
CN101233502B (zh) 用于可扩展标记语言(xml)的轻量应用程序编程接口(api)
CN101258496B (zh) 用对数据库的查询自动填充
EP2943859B1 (en) System, method, and computer-readable medium for managing edge devices
CN100489849C (zh) 用于绑定数据的可编程性
US10318628B2 (en) System and method for creation of templates
CN101253476B (zh) 用于计算机编程代码的翻译系统和方法
CN100435143C (zh) 带有嵌套表格的无模式数据映射系统和方法
CN1713179B (zh) 在对象模型中的影响分析
CN1801151B (zh) 对象模型树图表
CN102999551B (zh) 数据实体的自动化划分范围
US8959428B2 (en) Method and apparatus for generating an integrated view of multiple databases
US10452607B2 (en) Reusable transformation mechanism to allow mappings between incompatible data types
US11200034B2 (en) Universal application framework for streamlined frontend development of user interface applications
US7836119B2 (en) Distributed execution model for cross-organizational declarative web applications
US7703026B2 (en) Non-pattern based user interface in pattern based environment
CN101198929B (zh) 生成屏幕组件的系统和方法
US20230353626A1 (en) System and Method to Standardize and Improve Implementation Efficiency of User Interface Content
CN102027448A (zh) 用于使软件可用于下载的系统和方法
JP2007108877A (ja) 情報管理システムおよび情報表示装置
JP2006512633A (ja) 中央XML構成ファイルにより分散Javaアプリケーションを生成させる方法と装置
da Silva et al. Towards a Web Service for Geographic and Multidimensional Processing.
CN113741953A (zh) 表单处理方法、装置、电子设备和计算机存储介质
Choi et al. A study on efficiency of markup language using DOM tree
US20150355903A1 (en) Visualization of code units across disparate systems
Nylund Implementation of a Data Acquisition Tool for Sensor Measurements

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150508

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150508

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111123

Termination date: 20200629