文档的二进制串行化的方法和系统的利记博彩app

文档序号:7611216阅读:246来源:国知局
专利名称:文档的二进制串行化的方法和系统的利记博彩app
技术领域
本发明涉及用于处理电子文档的方法和系统,尤其涉及用于将文档串行化和反串行化以支持传输或存储的方法和系统。
背景技术
可扩展标记语言(XML)可用来便于实现基于集成的可编程万维网(“Web”)的服务。通过XML相关消息的交换,服务可描述它们的能力,并允许其它服务、应用程序或设备容易地调用那些能力。已开发出简单对象访问协议(SOAP)来促进此目标。SOAP是在因特网上桥接不同的对象模型、并为Web服务相互通信提供一种开放式机制的一种基于XML的机制。
XML提供一种用于描述结构化数据的格式,它是一种形式上类似于超文本标记语言(HTML)的标记语言,因为它是一种基于标签的语言。但是,和HTML不同,XML标签不是预定义的,从而允许比HTML可能达到的更大的灵活性。通过提供定义标签和标签之间的结构关系的工具,XML支持富结构化Web文档的创建。
XML标准描述一类称为XML文档的数据对象,并部分地描述了处理该类对象的计算机程序的行为。XML文档是由称为实体的存储单元组成,这些实体包含经语法分析或未经语法分析的数据。经语法分析的数据是由字符组成的,其中一些构成字符数据,一些构成标记。标记将文档的存储布局和逻辑结构的描述编码。XML提供一种对存储布局和逻辑结构施加约束的机制。
XML“元素”是结构构造,其中包括开始标签、结束或关闭标签、以及标签之间所包含的信息或内容。“开始标签”被格式化为“<标签名>”,而“结束标签”被格式化为“</标签名>”。
在XML文档中,开始和结束标签可被嵌套在其它开始和结束标签内。在特定元素内出现的所有元素的开始和结束标签都出现在该特定元素的结束标签之前。这定义了一种树状结构。每个元素构成此树中的一个节点,并可能具有“子”或“分支”节点。子节点表示“父”节点的开始和结束标签之间出现的任何XML元素。
XML的一种示例性用途是诸如客户机和服务器计算机等不同实体之间请求和响应形式的数据交换。客户机可生成对信息的请求或对某个服务器动作的请求,而服务器可生成包含该信息或确认该动作是否已被执行的对客户机的响应。这些请求和响应的内容是XML文档的形式,即,符合XML规范的字符序列。
SOAP规范定义了传递经XML编码的数据的一种统一方法。它还定义了使用HTTP作为底层通信协议来执行远程过程调用(RPC)的一种方法。
SOAP消息是XML文档,它包括强制性的SOAP信封、可任选的SOAP头部、以及强制性的SOAP主体。SOAP提供用于在服务器、服务、组件和对象上调用方法的协议规范。SOAP将使用XML和HTTP的现有实施编码为一种方法调用机制。SOAP规范要求少量便于防火墙/代理过滤的HTTP头部。SOAP规范还要求用于表示方法参数、返回值和异常的XML词汇表。
SOAP提供一种开放式的、可扩展的方式,以使应用程序使用基于XML的消息在Web上通信,而无论特定的应用程序可能使用什么操作系统、对象模型或语言。SOAP通过用标准XML定义一种简单的、可扩展的消息格式并由此提供一种在HTTP上发送该XML消息的方法,来便于通用通信。
“XML信息集”(XML infoset)是XML文档的抽象表示(在例如http://www.w3.org/TR/2004/REC-xml-infoset-20040204描述)。XML文档的信息集包括信息项,信息集可被视为该XML文档的信息内容,而对该XML文档的格式没有限制。
以下是示例性信息集。示例性信息集“Book”(书)的根元素包含一个称为“Price”(价格)的属性。“Price”属性有值“35”。该根元素还包含值为“Warand Peace”的文本类型的内容。XML标准(在例如http://www.w3.org/TR/REC-xml/描述)指定如何将信息集串行化为文本。例如,该示例性信息集可被串行化如下<Book Price=”35”>War and Peace</Book>
为了传输或存储,此文本XML通常被编码成表示对应文本的字节。一些文本转换标准包括ASCII Unicode、UTF8和UTF6。例如,以上文本XML文档可经由ASCII编码来发送,如下所发送的第一字节60(‘<’的ASCII码)所发送的第二字节66(‘B’的ASCII码)所发送的第三字节111(‘o’的ASCII码)
所发送的第四字节111(‘o’的ASCII码)所发送的第五字节107(‘k’的ASCII码)等等……由此,通常,XML信息集的存储器中的表示被串行化为文本XML串;然后,文本串的字符被编码为对应的字节以进行传输。在逆向过程中,所接收的文本相关的XML字节被解码为对应的文本XML串,它被反串行化并被存储,以提供XML信息集的存储器中的表示。
XML信息集的存储器中的表示逻辑地存在,但无需物理地存在。即,与信息集相关联的项无需在串行化以前存在于任何物理位置。
例如,基于面向对象的语言的程序可包括串行化和/或反串行化XML文档的代码。例如,串行化以上示例的面向对象的代码可以是XmlWriter.WriteStartElement(“Book”);XmlWriter.WriteAttribute(“Price”,someDatabase.LookUpPriceForBook(“WarAndPeace”));XmlWriter.WriteElementContents(“War and Peace”);XmlWriter.WriteEndElement();“Xml.Writer”方法产生表示文本XML文档的字节<Book Price=”35”>War and Peace</Book>.
XML标准提供XML信息项的相对简单的串行化,以及人类可读的文本串行化的文档。但是,这些文档可能是冗长且处理效率低下的。

发明内容
本发明的一些实施例来自对以下事实的认识即,基于电子的文档能以可减少串行化的文档的大小、提高处理速度、和/或减少传递所需时间的方式被串行化和/或反串行化。在这些实施例里的一部分中,通过使用将信息与二进制数据单元标识符相关联的字典,XML文档被串行化为二进制格式。这些标识符可标识例如,已知的串、重复的串、重复的结构、原语类型、和/或构造。
一些实施例使用静态和/或动态字典。静态字典可包括预定义的关联。动态字典可包括带内和/或带外关联。带内关联可被包括在串行化的XML文档中,而带外关联可例如独立于使用带外字典条目的串行化的XML文档而发送。
由此,本发明的一些实施例为例如XML文档和SOAP消息提供替换的串行化格式,这些格式用标准XML的人类可读性和冗长性换取串行化的文档的大小、语法分析、以及生成速度的改善。
其中一些实施例通过减少或消除XML编码/解码过程中的冗余信息,来实现XML文档的二进制虚拟表示的高效流式传输。无需对整个XML的内容有先验知识即可消除冗余。串行化的文档仍可与文本XML文档具有直接对应关系。即,二进制XML格式的一个实施例允许使用其调用类似于对文本XML读出器或写入器的调用的读出器或写入器软件。这些调用的用户无需知道底层的二进制串行化过程。
由此,本发明的一个实施例的特征是一种用于在基于计算机的系统中处理XML文档的方法。该方法包括将信息项与对应的二进制数据单元相关联,并提供与包括这些信息项中的一个或多个的XML信息相关联的XML文档。该方法还包括将XML文档串行化为二进制XML格式,或将XML文档从二进制XML格式反串行化。串行化包括将XML信息集的一个或多个信息项转换成其所对应的一个或多个二进制数据单元。反串行化包括将二进制XML格式的一个或多个二进制数据单元转换成其所对应的一个或多个信息项。
本发明的另一个实施例的特征是一种用在至少一个处理器上执行的程序编码的计算机可读介质。当在该至少一个处理器上执行该程序时,它可执行上述用于处理XML文档的方法。


附图并非试图按比例绘制。在附图中,在各个图中示出的每个完全相同或几乎相同的组件由相同的标号表示。为清楚起见,可能并不在每个图中标出每个组件。在附图中图1是根据本发明的一个实施例用于处理XML文档的方法的流程图;图2是根据本发明的一个实施例对应于二进制XML格式的元素的框图;图3是根据本发明的一个实施例显示整数的编码格式的表;图4a是根据本发明的一个实施例的特殊节点类型和标识其相关联的特殊节点的二进制数据单元的对应的字节值的表;图4b是根据本发明的一个实施例的特殊节点类型和二进制数据单元的对应字节值的表;图4c是描述图4b中所示的一部分文本相关的特殊节点的一些特征的表;以及图5是根据本发明的一个实施例用于处理XML文档的方法的流程图。
具体实施例方式
本发明在其应用中不被限制于在以下描述中所阐述的、或在附图中所示出的构造的细节和组件的排列。本发明能够有其它实施例,并能够以各种方式实施或实现。同样,本文中所使用的措词和术语是为描述的目的,而不应被视为限制性的。本文中使用“包括”、“由……组成”、“具有”“包含”、“涉及”及其变体意味着包括其下所列出的项及其等价内容以及附加项。
首先参考图1来描述本发明的一个实施例的一些概括性的原理。图1是根据本发明的一个实施例用于处理XML文档的方法100的流程图。方法100包括将信息与对应的二进制数据单元相关联(110),提供(120)XML文档,以及通过使用信息项和对应的二进制数据单元之间的关联,将XML文档串行化(130)为二进制XML格式,或将XML文档从二进制XML格式反串行化(140)。
将XML文档串行化(130)为二进制XML格式包括将XML信息集的一个或多个信息项转换成其对应的一个或多个二进制数据单元。类似地,将XML文档从二进制XML格式反串行化(140)包括将二进制XML格式的一个或多个二进制数据单元转换成其对应的一个或多个信息项。这些信息项可包括本领域普通技术人员所知的信息项的类型或任何其它适用的类型。如以下将更详细描述,信息项和二进制数据单元之间的关联可提供对XML文档更高效的处理和紧凑的串行化等等。
信息项可包括例如,原语类型、串、文本和XML构造,以及在以下更详细描述的其它适用信息。为方便起见,信息项和对应的二进制数据单元之间的关联可被包括在一字典中。但是,对术语“字典”的使用并不被限制于任何特定的格式或存储偏好。
字典在串行化期间可被用作参考,以支持将信息项转换成对应的二进制数据单元。一些适用的二进制XML格式以及信息项和二进制数据单元之间的关联的字典将在以下更详细地描述。
信息集及其信息项可符合由万维网联盟(“W3C”)所建立的信息集的标准,例如由http://www.w3.org/TR/2004/REC-xml-infoset-20040204所描述。构造良好的XML文档的信息集包含至少一个文档信息项和若干个其它信息项,其中信息项是XML文档的某个部件的抽象描述。每个信息项都有一组相关联的命名特性。
现在参考图2到图4,描述了二进制XML格式的一些实施例。为方便起见,二进制数据单元的表示和二进制数据单元本身被可互换地视为其相关联的信息项的标识符。但是可以理解,根据本发明的一个实施例,实际的串行化的二进制XML文档包括对应于这些表示的二进制数据单元的实际二进制数。
此外,在此详细描述中,在二进制XML格式的一个实施例的组件起到和标准XML组件相似作用的地方通常使用标准XML命名约定。由此,XML领域普通技术人员将会认识到诸如元素和属性等组件的功能以及相关的值。
以下描述包括各种类型的信息项的字典条目的示例。这些示例可在本发明的实施例中使用,但仅仅旨在说明,而不试图将实施例局限于使用所示出的字典条目。本发明的一些实施例使用的关联少于这里所有的关联,而其它实施例则包括额外的关联。此外,分配给一些二进制数据单元的具体值中至少有一些是任意的。
首先,为提供描述一些二进制数据单元的上下文,参考图2描述二进制XML格式化的文档的结构的实施例。图2是对应于此说明性实施例的二进制格式的元素200的框图。在此实施例中,文档包括且仅包括一个元素200。但是该元素200可包含其它元素。
元素200包括开始元素结构220、一个或多个属性结构230、以及一个或多个元素内容结构240。元素200具有类似于标准XML元素的结构。例如,对应的XML元素可表现为“<ELEM...>...</ELEM>”。
元素200可用子集节点210开始,并以结束元素节点250结束。如果不存在结束元素节点250,则元素200可用包括暗示元素200的结束的特殊文本节点的最后一个元素内容结构240结束。
元素200在以下更详细地讨论。接下来描述信息项和二进制数据单元之间的、可用来串行化和反串行化元素200的内容的关联的一些示例。
串-本发明的一个实施例将串与对应的串标识符相关联,后者表现为串行化的文档中的二进制数据单元。串可被静态地或动态地放到字典中。静态字典项是那些在XML文档的串行化以前就定义好的项。在此情形中,串行化器和反串行化器可在需要静态字典项以前就静态字典项取得一致或被提供静态字典项。
相反,动态字典项是在串行化过程期间生成的。第一次碰到一个串时,串行化器可例如向该串分配一标识符号,并将该串和相关联的新串标识符号一同放到串行化的文档中。接收反串行化器随即可将该新串和相关联的标识符号放到字典中以供稍后参考。从而同一个串的重复发生可通过仅使用标识符的二进制数据单元来串行化,即,无需包含该串。
作为此过程的一个示例,在串“Hello”的第一次使用之后,该串可在一行中出现四次,即“Hello”“Hello”“Hello”“Hello”。此序列可被转换成“Hello=7,7,7,7”,其中新串“Hello”被动态地分配标识符号7。对于方法100,可用二进制形式来表达标识符号7以提供与串“Hello”相关联的二进制数据单元。
当一个串被包括在串行化的文档中时,该串可通过使用标准XML或任何其它适用的格式来串行化。例如,串可被串行化为MB-32编码的、指示该串的以字节为单位的长度的整数(以下描述),之后是以UTF8编码表示该串的字节数。UTF8是数据串行化领域普通技术人员所知的一种编码标准。还可使用其它适用的编码格式。字节数可以为零。
本发明的一个实施例对串标识符有以下使用规则。如果未随串标识符包括实际的串,则该串必定在先前已被定义。例如,该串可能在较早时候已在文档中定义,或已通过带外机制定义。带外机制包括例如,在文档的串行化过程以外作出的预定义的静态字典条目和动态字典条目。
此外,至少到文档的结束而不是仅当前XML元素的结束为止,串的定义的范围可被固定。串定义可被固定以防止其重新定义。串标识符的二进制数据单元的最后一位可指示该标识符是否是从静态字典导出的。此信息可被用来例如在文档的串行化期间防止串在静态字典中的重新定义。
原语类型-本发明的一些实施例使用原语类型的数据和标识该数据的二进制数据单元之间的关联。如XML领域普通技术人员所知,原语类型(也称为基本或简单类型)包括常数和可被表达为单值的其它数据,包括例如数字和字符。本领域普通技术人员所知的原语类型的一些示例包括字符、8位有符号整数、有符号短整数、有符号整数、有符号长整数、小数、实数(单精度)、实数(双精度)、以及布尔类型。这些实施例将一个或多个原语类型与包括标识该原语类型的一个字节和标识该原语类型的值的二进制表示的二进制数据单元相关联。以下参考图4a描述本发明的一个实施例所用的一些原语类型及其相关联的二进制数据单元。
具有高效内部表示的数据-在一些实施例中,具有高效内部表示的数据与其内部表示相关联。即,这些数据被“转换”成其本身。
例如,这些数据无需首先被编码为文本来生成串。日期和时间是通常具有高效内部表示的数据的示例。例如,日期“10/14/2004”可通过将十个字符‘1’、‘0’、‘/’、‘1’、‘4’、‘/’、‘2’、‘0’、‘0’和‘4’转换成二进制字节(例如,每个字符需要8或16位)来被串行化为二进制格式。日期典型的内部表示有64位;因此,出现在文档中的这一日期可在存储器中被串行化为其64位的表示,从而既节省了空间,又节省了处理时间。
现在参考图3,在一些实施例中,数据的内部表示的不需要的部分在相关联的二进制数据单元中被消除。例如,常规实施可能要求一个整数由4字节的数据来表示,即,要求4字节存储器。但是,许多常用的整数是可装进一个或两个字节中的很小的数。一个实施例经由本文中称为“MB32编码”的一种编码方案,将整数转换成相关联的二进制数据单元。此编码减少了提供相关联整数的二进制表示所需的空间。
图3是示出整数的MB32编码的一种实现所使用的空间的大小范围表。如所示,未被使用的字节从串行化的整数中消除。其它适用的高效转换对电子数据存储领域普通技术人员将是显而易见的。
如本领域普通技术人员所知,每个32位整数可具有从1到32个相关位。例如,十进制数3,即二进制数11,具有两个相关位,而数54,即二进制的110110,有6个相关位。在本发明的一个实施例中,MB32编码方案仅对相关位编码。此外,可将MB32整数的每个字节以最高位最先的方式编码,而MB32整数的最低字节(LSB)可最先被存储。
在一个实施例中,MB32整数的每个字节包含在需要时可用‘0’填充的七个相关位,并包含一个“继续”位,即最高位。如果继续位被设置,则有该MB32编码的整数的另一个字节紧跟着当前字节。MB32整数可被解码为32位整数,来自MB32字节的所有相关位可通过使用指示下一个字节应被包括的继续位来串接。
XML构造-现在参考图4a、4b和4c,在一些实施例中,一些二进制数据单元标识与XML构造相关联的信息项。由此,重复出现的XML构造可经由表示为简化操作(即,其相关联的二进制数据单元)来被更高效地串行化为二进制格式。标识构造的二进制数据单元在本文中称为“特殊节点”。
图4a是本发明的一个实施例所用的特殊节点类型和二进制数据单元的对应字节值的表。接下来描述特殊节点的示例。
前缀相关的构造-XML包括与“前缀”相关联的构造。例如,元素<colorsblue>具有名字“blue”和前缀“colors”。为串行化此构造和相关联的信息,常规的串行化将包括带有串“colors”和“blue”的前缀元素节点。
可使用一个字母的前缀来节省空间,诸如对本例而言的<cblue>等。但是,在本发明的一个实施例中,随串“blue”将一快捷特殊节点(“用c加前缀的元素节点”)串行化,由此在串行化中消除了一个串,即串“colors”。一些实施例为从a到z的每个字母包括类似的特殊节点。接下来参考图2给出对图4a的表中所列的一些前缀相关的特殊节点的描述。
元素200的开始元素结构220与元素200的开始相关联。开始元素结构220可具有数种形式中的一种。这些形式可使用开始元素相关的特殊节点。
这些特殊节点支持各种开始元素相关的构造的高效串行化。在此说明性实施例中的这些构造涉及前缀的存在、前缀的预定义(若有)、元素200的局部名、以及对应于元素200的局部名的串的预定义(若有)。
例如,开始元素结构220可包括无前缀但有作为非预定义串的局部名(使用特殊节点“短元素”(ShortElement));有非预定义前缀和作为非预定义串的局部名(使用特殊节点“元素”(Element));无前缀但有作为预定义串的局部名(使用特殊节点“短字典元素”(ShortDictionaryElement)和标识该串的二进制数据单元);有预定义前缀和作为预定义串的局部名(使用特殊节点“前缀字典元素A”(PrefexDictionaryElementA)到“前缀字典元素Z”(PrefixDictionaryElementZ)中的一个和标识该串的二进制数据单元);或有非预定义前缀和作为预定义串的局部名(使用特殊节点“字典元素”(DictionaryElement));以及有预定义前缀和不是预定义串的局部名(使用特殊节点“前缀元素A”(PrefixElementA)到“前缀元素Z”(PrefixElementZ)中的一个和串)。
属性相关的构造-在XML中,元素“属性”可被定义并被赋“值”。例如,文本XML代码“<book author=smith>”将值“smith”赋予“book”元素的“author”属性。为将此文档以常规方式串行化,通常将随串“author”和“smith”包括属性赋值节点。在本发明的一个实施例中,为“author”属性创建特殊节点,例如来消除每对此属性赋一次值就要将串“author”串行化的必要。
再次参考图2,元素200的属性结构230对应于XML属性起作用。如同在标准XML中一样,属性结构230可被用来例如将名字-值对与元素200相关联。类似于以上就开始元素相关的构造所描述的示例,属性相关的构造可利用属性相关的特殊节点,诸如图4a的表中所列的那些特殊节点等。
例如,为向“LocalName”属性赋值“AttributeContent”,属性结构230可包括类似于以上就开始元素220所描述的若干特殊节点中的一个。例如,图4a的表提供了八个属性有关的特殊节点,其中四个是xmlns相关的,如以下将描述。另外四个属性相关的特殊节点可在例如以下四种情况中使用该属性无前缀且无预定义的串(短属性,ShortAttribute),有非预定义的前缀但无预定义的串(属性,Attribute),名字空间无前缀但有预定义的串(短字典属性,ShortDictionaryAttribute),以及有非预定义的前缀和预定义的串(字典属性,DictionaryAttribute)。
XML中常出现的一个属性相关的构造是赋“xmlns”(即名字空间属性)值的构造。在文本XML中,这可能表现为例如“<book xmlns=http://books.org>”,以将名字空间值“http://books.org”赋给元素“book”的“xmlns”属性。常规上,在此例中,为发送此构造和相关联的值,“属性赋值节点”后通常同时跟着串“xmlns”和“http://books.org”。
但是,如图4a中所示,名字空间属性构造可由一个或多个快捷名字空间赋值特殊节点来表示。当这些特殊节点中的一个和串“http://books.org”被包括在串行化的文档中时,其中一个串,即“Xmlns”不再需要被包括。即,二进制格式串行化包括与该因特网地址相关联的特殊节点和串。
为向名字空间属性赋“xmlns”值,属性结构230可包括例如图4a的表中所示的四个名字空间赋值特殊节点中的一个。这四个快捷xmlns相关的特殊节点可在以下情况中使用名字空间无前缀且无预定义的串(短Xmlns属性(ShortXmlnsAttribute)),有非预定义的前缀但无预定义的串(Xmlns属性(XmlnsAttribute)),无前缀但有预定义的串(短字典Xmlns属性(ShortDictionaryXmlnsAttribute)),以及有非预定义的前缀和预定义的串(字典Xmlns属性(DictionaryXmlnsAttribute))。
文本相关的构造-图4b是本发明的一个实施例所用的与文本相关信息项(包括上述的一些原语类型)的特殊节点类型和二进制数据单元的对应的字节值的表。该表包括以下原语类型的关联布尔、数字(若干种变体)、列表、字符、文本、和二进制数据。
图4b的文本相关的特殊节点是成对提供的,包括特殊的结束元素节点,这将在以下更详细地描述。文本可用根据文本类型的方式来处理。例如,一个实施例为包括以下类型的文本提供关联空串、预定义的串、任意串或数据、以及诸如日期/时间相关的串等特定类型的串。
可令空串与由字节值为147的二进制数据单元所标识的特殊节点“空文本”(EmptyText)相关联,如图4b的示例中所示。字典中的串可由“字典文本”(DictionaryText)特殊节点(字节值为148)接着一标识字典中的相关联的串的MB32编码的整数(此处是二进制数据单元)来指示。
“字符...文本”(Chars...Text)和“字节...文本”(Bytes...Text)特殊节点支持任意串和数据。“字符...文本”特殊节点放在可经由例如UTF8编码来编码的字母数字字符之前。“字节...文本”特殊节点放在二进制数据之前。
这些特殊节点包括以下节点“8字符文本”(Chars8Text)或“8字节文本”(Bytes8Text),当在串行化的二进制格式文档中包括这些节点时,接着是一表示后跟的字节数的无符号字节,再接着是与文本或数据相关联的字节;“16字符文本”(Chars16Text)或“16字节文本”(Bytes16Text),接着是表示后跟的字节数的2个字节(无符号LSB最先存储),再接着是实际的字节;以及“32字符文本”(Chars32Text)或“32字节文本”(Bytes32Text),接着是表示后跟的字节数的4个字节(有符号,LSB最先存储,不允许负值),再接着是实际的字节。“字节...文本”特殊节点后面可跟着二进制数据的字节表示,而无需编码。
此实施例包括常出现的数值所用的快捷特殊节点,以更高效地串行化相关联的数值。例如,常规上,通常随数字0使用一“整数节点”来串行化数字0。但是,现在所描述的说明性实施例使用特殊节点“零文本”(ZeroText)(有二进制数据单元字节值128)来串行化值0,如图4b的表中所示。字符“0”和数字“0”可由同一特殊节点表示,因为它们在XML文档中通常具有相同含义,因此可被可互换地使用。
图4c是描述图4b中所示的一部分文本相关的特殊节点的一些特征的表。这些节点包括诸如上述的“0”文本、以及“真”和“假”、整数、浮点、十进制串、日期和时间、和列表等特定文本串的特殊节点。
如以上所提及,图4b的文本相关的特殊节点包括相关联的“...文本带结束元素”(TextWithEndElement)节点。这些节点每一个都具有对应于其相关联的特殊节点的形式,例如“字典文本带结束元素”(DictionaryTextWithEndElement)和“16位整数文本带结束元素”(Int16TextWithEndElement)。
再次参考图2,这些结构可在元素200内的最后一个元素内容结构240中使用。“...带结束元素”(WithEndElement)特殊节点可被用来指示其为代替结束元素节点250的最后一个元素内容结构240。例如,以下两种形式都串行化<foo>3</foo>短元素特殊节点,串(“foo”),8位整数文本特殊节点,字节(3),结束元素特殊节点,短元素特殊节点,串(“foo”),8位整数文本带结束元素特殊节点,字节(3)。由此,当“...带结束元素”特殊节点被用来代替相关联的“...文本”特殊节点时,无需使用结束元素节点250。
考虑到本文中所提供的对特殊节点的描述,对XML领域普通技术人员而言,可供用作二进制数据单元的许多其它特殊节点将是显而易见的。
如果元素200包括多个元素内容结构240,则结构240可被串接以进一步提高串行化的效率。例如,如果以下四种示例性元素内容结构240被包括在元素200中,1字符文本“ABC”2元素“FOO”3字符文本“X”4字符文本“YZ”则它们可被串接以表现为“<ELEM>ABC<FOO/>XYZ</ELEM>”。
图4b中的至少一部分文本相关的特殊节点可使用串接。例如,8字符文本(“A”)后接8字符文本(“BC”)在被读为串时,可被串接为“ABC”。在一些实施例中,不将诸如日期/时间串和零值串等特定的串类型与相邻节点串接。例如,当试图读取整数时,8位整数文本(23)后接8字符文本(“0”)将不会被反串行化为数字230。
在一些实施例中,相继的列表也不被串接,以保留它们单独的身份。例如,当试图读入整数数组时,列表(1,2)和列表(3,4)将不会被反串行化为{1,2,3,4}。
在本发明的一个实施例中,元素内容结构240具有三种形式中的一种。元素内容结构240本身可以是一个元素(嵌入在元素200内),可包括文本或其它数据,以及可以是包括对应于注释的串的注释节点。
现在回到首先在背景技术一节中所描述的示例性XML文档,本发明的二进制XML格式的一个实施例将此示例性文档串行化如下第一字节0(对于“简单元素的开始”特殊节点的二进制数据单元)第二字节4(要为该元素名字串行化的串的长度)第三/第四/第五/第六字节66,111,111,107(用UTF8编码的‘B’、‘o’、‘o’、‘k’)第七字节5(对于“简单属性的开始”特殊节点的二进制数据单元)第八字节5(要为该属性名字发送的串的长度)第九-第十三字节‘P’、‘r’、‘i’、‘c’、‘e’(用UTF8编码)
第十四字节131(对于“小整数文本”特殊节点的二进制数据单元)第十五字节35(整数属性的值,它无需被编码为字符‘3’和‘5’)等等……方便的是,在一些实施例中,控制信息集的串行化的面向对象的代码具有遵循和文本串行化的常规方法调用相同的模式的方法调用。由此,方法100可提供XML文档的直接二进制串行化,而不要求程序员知悉由对二进制串行化器和/或二进制反串行化器的调用所调用的处理。例如,一组对“二进制XML写入器”的函数调用将表现为BinaryXmlWriter.WriteStartElement(“Book”);BinaryXmlWriter.WriteAttribute(“Price”,someDatabase.LookUpPriceForBook(“WarAndPeace”));BinaryXmlWriter.WriteElementContents(“War and Peace”);BinaryXmlWriter.WriteEndElement();尽管这看起来和在以上背景技术部分中所描述的相似,但是“二进制XML写入器”实现方法100以产生如上所述的二进制格式化的XML。
本发明不局限于特定协议和/或格式。可用来实现本发明的原理的一种示例性协议是SOAP。
子集-在本发明的一些实施例中,子集是串行化的文档的一部分。子集是由例如文档中所包含的一个或多个标记标识的。特别地,子集是自包含的。即,子集不引用该子集外部的内容来实现该子集的反串行化。
根据本发明的一个实施例,可任选的子集节点210(若有)指示元素200及其内容(包括所包含的元素(若有)的完整的树)是一子集。在与图4a的表相关联的说明性实施例中,子集节点由字节值为15的二进制数据单元所标识。子集节点也被称为“标签”或“标记”。
在一些实施例中,子集由开始标签和结束标签来划界。一些实施例不使用结束标签。例如,一个使用字节节点210作为开始元素结构220的前缀的实施例无需任何特殊节点来指示子集的结束。在此实施例中,元素的结束即指示对应于该元素的子集的结束。
根据本发明的一个实施例,子集是XML文档中可独立于该文档的其它部分来处理而不会丢失该子集所持有的任何意义的一个部件。子集不引用该子集外部的内容。
子集可通过提供一种用于生成和保护文档中独立于包括可能在范围内的任何字典的当前范围的一个部分的机制,来提供一种有效的数字签名和验证机制。特别地,要被签署或验证的字节可串行地存在存储器中,从而它们可被转发给例如对当前串行化/反串行化范围一无所知的消耗器。
在一个实施例中,XML子集在串行化文档中由两个标记表示——一个标记子集的开始,一个标记结束。这允许例如在遇到子集时读出器/写入器重置当前字典,以确保对子集的处理对现有范围没有依赖关系。一旦结束标记被定位,先前的字典状态即可被恢复。此实施例允许反串行化二进制XML格式的读出器选择给出应用程序编程接口(API),该API在消耗器从不请求子集的情况下,以二进制XML格式维持该子集的存在对文档的消耗器不可见的状态。
子集可被视为包含该子集的文档的特殊部分。在本发明的一些实施例中,当诸如子集节点等子集边界被越过时,特殊处理被调用。在这些实施例的一部分中,该特殊处理是二进制串行化的文档的读出器所负责的。
如上所述,接收包含一个或多个子集的二进制格式化的文档的用户无需知悉这一个或多个子集的存在。由此,可带或不带子集地将文档串行化,然后将其反串行化以给出相同的原始文档。即,使用子集不改变原始的XML文档。只有消耗二进制格式化的数据的读出器或其它实体才需要认识到任何子集的存在。
类似地,如果串行化的文档包含子集,则读出器(例如,反串行化器)可揭示何处存在子集化。由此,例如,读出器可将所接收的二进制格式化的文档转换成原始的XML文档,以供由例如软件程序等处理;然后读出器还可向该软件程序指示该XML文档中被子集化的部分。
子集可具有以下有利用途中的一种或数种。子集可从一个XML文档中被“切掉”并被发送到另一个系统。接收系统可确保子集的可靠性,因为读取该子集所需的所有信息都被封装在该子集内。
如果子集被数字地签署,则可确保无人可通过改变该子集外且未被签署的项来篡改该子集的含义。同样,这是因为可保证子集不引用其外部的任何数据。子集可被嵌套,并可支持以上关于方法100所描述的特征。
串行化器和反串行化器在遇到子集时可执行特殊功能。例如,在一个实施例中,当串行化子集时,串行化器不在该子集外发出字典标识符。同样,在一个实施例中,当在子集的串行化期间发出新串时,串行化器不向字典添加该子集外部的内容。此外,在离开子集时,串行化器可恢复外部字典。在一个实施例中,串行化器为嵌套子集维护字典栈。反串行化器可执行对应于串行化器的功能的功能。
在一个实施例中,子集或者不使用父元素中所定义的任何名字空间前缀,或者在使用以前重新定义名字空间前缀。子集无需使用影响XML文档的处理的任何标准XML属性。例如,在一个实施例中,XML领域普通技术人员所知的xmllang和xmlspace属性和为属性所使用的限定名被重新发出。在此实施例中,元素内容结构240中所使用的任何限定名或者不使用父元素中所定义的任何名字空间前缀,或者在使用以前重新定义名字空间前缀。
由此,在一个实施例中,串行化器重新发出在子集以外所定义的该串行化器所知的所有可能影响子集中的数据的信息。这可包括,但不限于,名字空间前缀声明和如xmllang及xmlspace等标准XML属性。
在一个实施例中,反串行化器一进入子集,即忘记在该子集以外所定义的该反串行化器所知的所有可能影响该子集中的数据的信息。这可包括,但不限于,嵌套子集的名字空间前缀声明和如xmllang及xmlspace等标准XML属性。反串行化器一离开子集,即可记起在该子集以外所定义的该反串行化器所知的所有可能影响该子集中的数据的信息。反串行化器可维护在该子集以外所定义的该反串行化器所知的所有可能影响该子集中的数据的信息栈。
当遇到子集时,任何或所有当前所定义的字典标识符,包括那些带外定义的,可被放在一边。当离开子集时,在子集内部所定义的字典项可被忘记,而先前的字典项可被恢复。
现在参考图5,将描述一种利用子集来串行化文档的方法的示例。图5是根据本发明的一个实施例用于处理XML文档的方法500的流程图。方法500包括提供(520)与包括一个或多个信息项的XML信息集相关联的XML文档,以及将该XML文档串行化(530)为串行化的格式。串行化的格式包括至少一个含子集节点的子集元素。子集节点指示该至少一个子集元素可独立于该XML文档的其余部分来反串行化。
类似于方法100,方法500可包括将信息项与对应的二进制数据单元相关联(510),并可包括通过使用信息项和对应的二进制数据单元之间的关联将XML文档从串行化的格式反串行化(540)。
诸如上述子集元素等子集可包括反串行化该子集元素所需的所有内容。子集元素可独立于XML文档的其余部分来反串行化,和/或被提取(550),并可不带该文档的其余部分而被发送。此外,在一些实现中,子集元素的范围独立于包含该子集元素的XML文档的范围。子集元素还可具有如上所述的子集的其它特征。
本发明范围内的实施例包括用于携带或其上存储有计算机可执行指令或数据结构的计算机可读介质。这些计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例,而非限制,这些计算机可读介质可包括物理计算机可读介质,诸如RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或可用来携带或存储计算机可执行指令或数据结构的形式的所需程序代码并可由通用或专用计算机访问的任何其它介质等。
当通过网络或其它通信连接(无论是有线的、无线的,还是有线或无线的组合)向计算机传输或提供信息时,计算机可将该连接视为计算机可读介质。由此,任何此类连接可被称为计算机可读介质。以上的组合也应被包括在计算机可读介质的范围之内。计算机可执行指令包括例如,使通用计算机、专用计算机、或专用处理设备执行某个或某组功能的任何指令和数据。计算机可执行指令可以是例如,二进制代码、诸如汇编语言等中间格式的指令、或甚至是源代码。
本领域技术人员将会认识到,本发明可用许多类型的计算机系统配置在网络计算环境中实施,这些配置包括个人计算机、手持式设备、多处理器系统、基于微处理器的或可编程的消费者电子设备、网络PC、小型计算机、大型计算机、等等。本发明还可在分布式计算环境中实施,其中任务是由通过通信网络连接(无论是有线连接、无线连接、还是有线或无线连接的组合)的本地和远程处理设备执行的。在分布式计算环境中,程序模块既可位于本地记忆存储设备中,也可位于远程记忆存储设备中。
计算机可使用到一个或多个远程计算机的逻辑连接在联网环境中工作。远程计算机每一个都可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有上述元件。逻辑连接可包括例如局域网(LAN)和广域网(WAN),在本文中给出这两者是作为示例而非限制。这些网络环境常见于办公室范围或企业范围的计算机网络、内联网和因特网。
计算系统可被宽泛地定义为能够使用软件来执行一个或多个功能的任意一个或多个硬件组件。计算系统的示例包括台式计算机、膝上计算机、个人数字助理(PDA)、电话、或具有处理能力的任何其它系统或设备。
本发明的一些实施例将文档串行化为SOAP信封。如公知的,SOAP信封可通过许多传输协议来发送,诸如超文本传输协议(HTTP)、安全HTTP(HTTPS)、简单邮件传输协议(SMTP)、用户数据报协议(UDP)、传输控制协议(TCP)、蓝牙、等等。
由此以上描述了本发明的至少一个实施例的数个方面,应当认识到,对本领域技术人员而言,各种替换、修改和改进将是很容易的。本文旨在令此类替换、修改和改进成为本发明的一部分,并旨在使它们落入本发明的精神和范围之内。由此,以上描述和附图都只是示例性的。
权利要求
1.一种用于在基于计算机的系统中处理可扩展标记语言(XML)文档的方法,所述方法包括将多个信息项中的每一个与多个二进制数据单元中的对应的一个相关联;提供与包括所述多个信息项中的一个或多个的XML信息集相关联的XML文档;以及将所述XML文档串行化为二进制XML格式,其中,串行化包括将所述XML信息集的一个或多个信息项转换成其所对应的一个或多个二进制数据单元,或者将所述XML文档从所述二进制XML格式反串行化,其中,反串行化包括将所述二进制XML格式的一个或多个二进制数据单元转换成其所对应的一个或多个信息项。
2.如权利要求1所述的方法,其特征在于,所述串行化包括在无需首先将所述一个或多个信息项转换成文本的XML格式的情况下,将所述一个或多个信息项转换成其所对应的二进制数据单元。
3.如权利要求1所述的方法,其特征在于,所述反串行化包括在无需首先将所述一个或多个二进制数据单元转换成文本的XML格式的情况下,将所述二进制XML格式的一个或多个二进制数据单元转换成其所对应的信息项。
4.如权利要求1所述的方法,其特征在于,所述串行化是在无需知道所述XML文档的一个或多个信息项中正在被串行化的当前信息项以后的任何一个信息项的内容的情况下执行的。
5.如权利要求4所述的方法,其特征在于,所述串行化是在无需首先至少收集与所述XML文档相关联信息项中的大多数的情况下执行的。
6.如权利要求1所述的方法,其特征在于,所述串行化包括按照与将所述一个或多个信息项转换成文本的XML格式相关联的顺序对应的顺序来转换所述一个或多个信息项。
7.如权利要求1所述的方法,其特征在于,所述一个或多个信息项中的至少一个具有二进制存储格式,且所述关联包括将所述一个或多个信息项中的至少一个与其二进制存储格式相关联。
8.如权利要求1所述的方法,其特征在于,所述一个或多个信息项中的至少一个是从包含数字、字符、时间和日期的一组项中选择的。
9.如权利要求1所述的方法,其特征在于,所述一个或多个信息项包括一个或多个串,所述关联包括将所述一个或多个串的每一个与一个或多个串标识符中的对应的一个相关联,所述串行化包括将所述一个或多个串转换成其所对应的串标识符,且所述反串行化包括将所述一个或多个串标识符转换成其所对应的一个或多个串。
10.如权利要求9所述的方法,其特征在于,所述一个或多个串标识符中的每一个都与一个数字相关联。
11.如权利要求9所述的方法,其特征在于,还包括在串行化以前,向串行化单元和反串行化单元提供关于所述一个或多个串中的至少一部分与其所对应的一个或多个串标识符之间的关联的信息。
12.如权利要求9所述的方法,其特征在于,还包括在串行化期间,向串行化单元和反串行化单元提供关于所述一个或多个串中的至少一部分与其所对应的一个或多个串标识符之间的关联的信息。
13.如权利要求9所述的方法,其特征在于,所述关联包括在串行化所述XML文档的同时定义所述一个或多个串中的一部分的关联,并且在所述串行化的XML文档中同时包括所述一个或多个串中的一部分和其所对应的一个或多个串标识符两者,以向反串行化单元通知所述部分的关联。
14.如权利要求1所述的方法,其特征在于,所述一个或多个信息项包括一个或多个原语类型,且所述关联包括将所述一个或多个原语类型中的每一个与对应的类型标识符和对应的二进制数相关联。
15.如权利要求1所述的方法,其特征在于,所述一个或多个信息项包括一个或多个XML构造。
16.如权利要求1所述的方法,其特征在于,还包括将所述二进制XML格式从第一单元发送到第二单元,其中,所述第一单元和第二单元每一个都是从包括处理器、存储设备、客户计算机和服务器的一组单元类型中选择的。
17.如权利要求16所述的方法,其特征在于,所述第一单元串行化所述XML文档,且所述第二单元反串行化所述XML文档。
18.如权利要求1所述的方法,其特征在于,所述二进制格式的串行化的XML文档和与所述XML文档相关联的文本XML文档具有直接对应关系。
19.如权利要求1所述的方法,其特征在于,所述XML文档是SOAP信封。
20.一种用在至少一个处理器上执行的程序编码的计算机可读介质,当在所述至少一个处理器上执行所述程序时,执行一种用于处理可扩展标记语言(XML)文档的方法,所述方法包括将多个信息项中的每一个与多个二进制数据单元中的对应的一个相关联;提供与包括所述多个信息项中的一个或多个的XML信息集相关联的XML文档;以及将所述XML文档串行化为二进制XML格式,其中,串行化包括将所述XML信息集的一个或多个信息项转换成其所对应的一个或多个二进制数据单元,或者将所述XML文档从所述二进制XML格式反串行化,其中,反串行化包括将所述二进制XML格式的一个或多个二进制数据单元转换成其所对应的一个或多个信息项。
全文摘要
一种用于在基于计算机的系统中处理XML文档的方法包括将多个信息项中的每一个与多个二进制数据单元中对应的一个相关联,并提供与包括这多个信息项中的一个或多个的XML信息集相关联的XML文档。该方法包括将XML文档串行化为二进制XML格式,或将XML文档从二进制XML格式反串行化。串行化包括将XML信息集的一个或多个信息项转换成其所对应的一个或多个二进制数据单元。反串行化包括将二进制XML格式的一个或多个二进制数据单元转换成其所对应的一个或多个信息项。用在至少一个处理器上执行的程序来编码计算机可执行介质。当在该至少一个处理器上执行该程序时,它可执行该用于处理XML文档的方法。
文档编号H04L29/06GK1811753SQ200510003538
公开日2006年8月2日 申请日期2005年12月23日 优先权日2005年1月25日
发明者A·A·斯特恩, E·R·克里斯滕森, M·J·考尔森 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1