压缩文档的结构化描述的方法和系统的制作方法

文档序号:7531278阅读:383来源:国知局
专利名称:压缩文档的结构化描述的方法和系统的制作方法
技术领域
本发明总的来说涉及计算机系统领域,具体来说,涉及使用符合诸如SGML(标准通用标记语言)和XML(可扩展标记语言)之类的通用标记语言的文档描述来对结构化文档进行压缩的方法和系统。这样的文档可以包含多媒体信息。
背景技术
近年来,计算机网络已经成为进行通信的主要媒介。现在计算机可以插入到共享网络,操作系统可以允许应用程序轻松地交换信息,因特网基础结构可以允许计算机找到它们的对话者,应用程序可以使用复杂的算法来同步它们本身。
在这样的可以进行互操作的环境下,通用标记语言提供了进行文档处理的解决方案。实际上,文档的结构在文档使用中扮演着主要角色。文档的格式编排、打印或索引本质上都是根据其结构来进行的。最初发明SGML是为了轻松地将文档呈现与文件结构和内容分离。由于其对结构进行编码的能力,XML引起了对非文档应用程序有兴趣的社会各界的注意。XML的受众范围扩大,包括了(但不限于)电子商务、数据库和知识表达界。
XML和更一般的标记语言现在广泛地用于描述和配置文档(元数据(metadata))。结构化文档包括多个可以彼此嵌套的信息元素。信息元素彼此是通过标记来标识和分离的,标记用于标识信息元素的元素类型。结构化文档一般包括代表整个文档并由标记文档的开始和结束的标记来标识的第一信息元素或基元素。此第一元素包括信息子元素,例如,文本的段落,每一个信息子元素都由标记元素的开始和结束的标记来标识。标记可以与规定信息元素的一个或多个特征的标记属性关联。
标记内容代表一般用于显示或者由用户进行操作的信息。根据标记类型,标记内容可以是可选的,也可以是必需的,并可以包含其他嵌套的信息子元素,而该嵌套的信息子元素又可以由标记分隔,并具有内容和属性。
结构化文档可以与一种模式关联,该模式反映应该验证结构化文档以便被视为“有效的”的规则。它也包含有关默认值、元素、属性类型和类型层次结构的信息。有效性可以确保接收到的文档符合该模式,因此,具有计划的含义。此外,它还确定每一个描述项(信息元素或属性)的特性,即,类型。XML标准包括XML模式语言,该语言是为了给一类具有类似结构的XML文档规定语法而设计。
然而,XML是一种冗长的语言,因此,处理起来效率比较低,传输起来开销也比较大。由于这个缘故,ISO/IEC 15938-1,具体来说,是MPEG-7(活动图像专家组)提出了一种用于对结构化文档的描述进行编码(压缩)的方法和二进制格式以及对这样的二进制格式进行解码的方法。此标准是为处理诸如多媒体数据之类的高度结构化的数据而特别设计的。
为了获得压缩效率,此方法依靠模式分析阶段。在此阶段,计算内部表以将二进制代码与每一个XML元素、类型和属性关联。此方法命令编码器和对应的解码器完全了解的相同的模式。
当用于对结构化文档进行编码的模式需要扩展时,最佳的解决方案是使解码器可以使用扩展的模式。然而在特定的情况下,不可能轻松地更新解码器以便让它们能够访问该扩展的模式。

发明内容
本发明的目的是提供一种以这样的方式对结构化文档进行编码的方法,以便即使解码器不知道每个所需要的模式,也可以对文档部分地进行解码。
本发明的另一个目的是提供这样一种编码方法,该方法可以确保正向和反向兼容性,即,允许解码器至少部分地对结构化文档进行解码,该结构化文档具有解码器不能访问的至少第一模式中定义的结构,并由解码器能够访问的至少第二模式中的变化产生,该结构化文档包括彼此嵌套的信息元素,文档的信息元素在至少第一和第二模式中与相应的元素类型关联,该元素类型的每一个定义信息元素的相应的元素结构,第一模式不能被解码器访问,第二模式可以被解码器访问,第一模式定义至少一个由第二模式中定义的对应元素派生而来的派生信息元素。
根据本发明的编码方法包括下列步骤使用所述的第一和第二模式将文档编码为二进制流,对于文档的每一个信息元素,该二进制流包括对信息元素进行编码的二进制序列,以及在对派生信息元素进行编码的二进制序列中插入一个指定第一模式的引用,在该第一模式中,定义了该派生元素的结构,所述的指定第一模式的引用在一个包含对用于编码文档的所有模式的引用的模式引用列表中进行定义,该模式引用列表可以被解码器访问。
根据本发明的一个方面,对文档的每一个元素进行编码的二进制序列包括内容字段,该内容字段中包含元素的编码值,放在内容字段前面的长度字段,该长度字段其中包含内容字段的长度的编码值。
根据本发明的另一个方面,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被限制,对派生元素进行编码的二进制序列包括内容字段和追加到该内容字段上的在第二模式中定义的对第一模式的引用和对派生元素的结构类型的引用。
根据本发明的再一个方面,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被进行扩展,派生信息元素的结构类型包括具有第二模式中定义的对应的信息元素的结构类型的第一部分,以及对该派生信息元素是特定的并具有第一模式中定义的结构类型的第二部分,对派生元素进行编码的二进制序列包括内容字段,其中该内容字段包括包含对第二模式的引用的字段,包含对第二模式中的对应元素的结构类型的结构类型引用的字段,包含第一部分的编码值的字段,包含对第一模式的引用的字段,包含对第二部分的结构类型的结构类型引用的字段,以及包含所述的第二部分的编码值的字段。
根据本发明的再一个方面,对信息元素进行编码的二进制序列包括替换字段,该替换字段包括指出该信息元素的名称是否更改的替换标志,如果替换标志指出更改,则还包括元素名称引用字段,该元素名称引用字段包含指定信息元素的新名称的引用,以及模式引用字段,该模式引用字段包含对其中定义了新名称引用的模式的引用。
根据本发明的再一个方面,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,以及指出信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,当模式状态方式字段处于第一状态时,编码的信息元素包括任何模式引用和任何其他更改信息,当模式状态方式字段处于第二状态时,信息元素的所有子元素都不包括模式引用和任何其他更改信息。
根据本发明的再一个方面,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,指出信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,以及指出信息元素在第一模式中相对于第二模式中的对应元素更改,并且信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第四状态,当模式状态模式字段处于第一状态时,编码的信息元素包括任何模式引用和任何其他更改信息,当模式状态方式字段处于第二状态或第四状态时,信息元素的所有子元素都不包括模式引用和任何其他更改信息。
根据本发明的再一个方面,包括对用于编码结构化文档的所有模式的引用的模式引用列表插入在与对结构化文档进行编码的二进制流相关联的标头(header)中。
本发明的另一个目的是提供这样的一种方法,该方法用于至少部分地对二进制流进行解码,该二进制流对结构化文档进行编码,该结构化文档具有在解码器不能访问的至少第一模式中定义的结构,并由解码器能够访问的至少第二模式中的变化产生,该结构化文档包括彼此嵌套的信息元素,该文档的信息元素在至少第一和第二模式中与相应的元素类型关联,该元素类型的每一个定义信息元素的相应的元素结构,该第一模式不能被解码器访问,该第二模式可以被解码器访问,第一模式定义至少一个由第二模式中定义的对应元素派生而来的派生信息元素。
根据本发明,该解码方法包括下列步骤使用第二模式连续地读取和解码对结构化文档进行编码的二进制流,并在该二进制流中检测对文档的每一个信息元素进行编码的二进制序列,在编码的信息元素的一个二进制序列中检测对第一模式的引用,如解码器所知道的在模式引用列表中所定义的那样,从所述的模式引用的检测中标识相对于所述的第一模式的二进制数据,以及在所述的二进制流的连续读取和解码期间相对于所述的第一模式跳过所述的二进制数据。
根据本发明的再一个方面,对文档的每一个元素进行编码的二进制序列包括内容字段,该内容字段中包含元素的编码值,以及放在内容字段前面的长度字段,该长度字段中包含长度编码值,该长度编码值被解码器用来确定对元素进行编码的二进制序列的结尾。
根据本发明的再一个方面,该解码方法进一步包括下列步骤读取和解码包含对第一模式的引用的二进制序列中的长度编码值,以及确定作为解码的长度值和对第一模式的引用的二进制序列中的位置的函数的要跳过的二进制数据的长度。
根据本发明的再一个方面,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被限制,对派生元素进行编码的二进制序列包括内容字段和追加到该内容字段的,在第二模式中定义的对第一模式的引用和对派生元素的结构类型的引用。
根据本发明的再一个方面,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被扩展,该派生信息元素的结构类型包括具有第二模式中定义的对应的信息元素的结构类型的第一部分,以及对于该派生信息元素是特定的并具有第一模式中定义的结构类型的第二部分,对该派生元素进行编码的二进制序列包括内容字段,其中该内容字段包括包含对第二模式的引用的字段,包含对第二模式中的对应元素的结构类型的结构类型引用的字段,包含第一部分的编码值的字段,包含对第一模式的引用的字段,包含对第二部分的结构类型的结构类型引用的字段,以及包含所述的第二部分的编码值的字段。
根据本发明的再一个方面,派生信息元素在第一模式中包括相对于第二模式中的对应的信息元素的名称已经更改的名称,对派生元素进行编码的二进制序列包括替换字段,该替换字段包括指出派生信息元素的名称是否更改的替换标志,如果替换标志指出更改,则还包括模式引用字段,该模式引用字段包含对第一模式的引用,以及指定第一模式中的派生信息元素的名称的元素名称引用。
根据本发明的再一个方面,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,以及指出信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,当模式状态方式字段处于第一状态时,编码的信息元素不包括任何模式引用和任何其他更改信息,当模式状态方式字段处于第二状态时,信息元素的所有子元素都不包括模式引用和任何其他更改信息。
根据本发明的再一个方面,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,指出信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,以及指出信息元素在第一模式中相对于第二模式中的对应元素已经更改,并且信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第四状态,当模式状态方式字段处于第一状态时,编码的信息元素包括任何模式引用和任何其他更改信息,当模式状态方式字段处于第二状态或第四状态时,信息元素的所有子元素都不包括模式引用和任何其他更改信息。
根据本发明的再一个方面,包括对用于编码结构化文档的所有模式的引用的模式引用列表在与编码结构化文档的二进制流相关联的标头中读取。


通过参考下面的描述和附图,本发明的各种特点以及其优选的实施例可以更好地理解,其中图1描述了根据MPEG-7标准的结构化文档的树结构的二进制格式;图2描述了MPEG-7解码器的方框图;图2a描述了图2中表示的解码器的详细部分的方框图;图3描述了根据本发明的编码信息元素的二进制格式;图4描述了在树结构中相对于彼此定义的元素类型;图5描述了包括以树结构组织的信息元素的结构化文档。
具体实施例方式
请参看图1,根据MPEG-7标准的编码结构化文档1的二进制格式包括规定编码模式的文档标头2,至少一个结构化信息元素或元素集3。
文档标头2对下列参数进行编码-″allows_skipping″此参数规定是否在编码文档中对元素长度进行编码;此参数可以具有下列值00-不对长度进行编码,01-可选地对长度进行编码,10-对长度进行编码是必需的。
--″allows_partial_instantiation″此参数规定文档中的所有子树或结构化信息元素是否完全实例化;此参数可以具有下列值0-不允许部分实例化文档的所有元素都存在于编码文档中,1-允许部分实例化。
--″allows_subtyping″此参数规定子树是否可以包含多形性,即,可具有数据类型的可能的不同子类型的信息元素或元素属性;此参数可以具有下列值0-在子树中不对多形性进行编码,1-允许多形性。
在图1中,一组结构化信息元素3包括元素集标头31和元素32和/或元素集3。元素集标头31包括--一个关键字,用于在解码阶段澄清有关元素类型的任何可能的歧义,以及--下一个较高的层次级别的元素3中的类似的元素或元素集的出现次数Nb。
如果定义文档结构的模式为元素或元素集的类型规定单个必需的值,则出现次数不存在于编码文档中。
元素32包括下列字段--以元素的编码值的位数规定长度的长度参数33,--类型35,包含规定元素值的结构和元素的属性的数据类型号码,-元素的属性值36,这些值例如可以按字母顺序排列,以及-值37,它对元素本身的值进行编码;此字段可以包含具有元素32或元素集3的结构的一个或多个元素,当元素具有诸如Integer、String之类的简单类型时,其为一个简单的值。
取决于编码文档的标头2中的“allows_skipping”参数的值,可以没有长度参数33。当长度在元素32中编码时,通过使用长度信息跳过文档中以前的元素,可以对文档中的特定元素进行快速访问。
编码的元素中可以没有字段35、36、37。如果元素的可能的数据类型在文档的模式中是唯一的,则类型号码35不被编码。如果模式中规定的类型没有属性,则属性值36不被编码。例如在文档的部分实例化的情况下,如果元素是空的,则该元素的值37不被编码。
现在请参看图2,MPEG-7解码器10包括模式编译器11,其被设计为用于接收和处理诸如XML模式之类的模式9,以便获得二进制语法代码13,该代码被执行用于对解码器10的输入中应用的编码文档7进行解码,解码器10例如以XML格式在输出中提供解码文档8。
模式的编译过程依赖以前的模式分析阶段,并用于生成以二进制语法代码形式定义的有限状态自动操作12。在处理过的模式中定义的每一个复杂类型被转换成表达复杂类型编码规则的有限状态自动操作。输入的编码文档7以二进制流形式应用于解码器,在二进制流中执行二进制语法代码。
在图2a中,模式编译过程11包括四个阶段。模式实现的第一阶段在于平化类型继承和解决命名空间(namespace)支持。此阶段生成实现的模式15。第二阶段在于从每一个复杂类型生成语法树。然后,转换如此生成的语法树16,以便减轻二进制编码和改善压缩比。第三阶段在于规范化前一阶段生成的语法树以便为每一个树节点以及之后规范化的语法树17产生签名。这些签名在下面的阶段用于生成出现在元素标头31中的标头关键字和树节点之间的对应关系。第四阶段在于生成在解码过程中使用的有限状态自动操作12。
在模式实现阶段,对模式进行分析,以列出在模式中使用的所有名称,以便将扩展名称归因于每一个元素、属性、类型和元素组,这些名称构成了所谓的“命名空间”。扩展名称是作为命名空间标识符和项目名的连接构建的。然后,通过以引用的元素的定义替换每一种复杂类型中的元素引用来生成实现的复杂类型。
在语法树生成阶段,通过将元素名称与元素的类型关联来生成项目节点。通过包含关系链接起来的项目节点到组节点构成了为每一个复杂类型生成的语法树。在特定的情况下,减少语法树以改善结果二进制格式的紧密度,此过程在于以非破坏性的方式简化复杂类型定义。
语法树规范化的目的在于给予语法树中的每个组节点唯一的名称。此过程在于对节点进行排序,并最后给予它们一个关键字,此关键字是在自动操作构建阶段所需要的。
为每个元素或元素组生成签名。每个节点签名是通过其子节点签名的连接而生成的。在节点的备用组或非有序组的情况下,节点签名按字母顺序进行排序,然后附加。在有序节点组的情况下,节点签名在模式中是按定义的顺序附加的。项目节点签名等于它们的元素名称。
在有限状态自动操作生成阶段,按照下面的规则递归地定义复杂类型自动操作1.语法树的每个节点产生一个自动操作,2.复杂类型自动操作是由其根节点产生的自动操作,3.每个节点自动操作是通过合并其子自动操作生成的,这种合并的特性依赖于节点的特性。
在该过程的结尾,实现自动操作以便产生它们的过渡编码关键字。这些自动操作包括两种类型状态和元素过渡(elementtransition),用于为语法树中的每一项目节点链接元素过渡。当对应元素出现在要解码的文档的输入流中时,交叉元素过渡。当激活特定的解码器(该解码器在简单类型的情况下可以是特定的数据类型解码器,在复杂类型的情况下可以是通用或特定的解码器),一个类型状态被触发。
在某些情况下,定义文档结构的模式需要扩展或修改。如果应用于解码器的编码文档的新模式可用,则该解码器可以为文本和二进制格式两者提供完全的前向和反向兼容性。实际上,可以验证整个描述,命名空间可以附属于每一个元素和属性。此外,类型的层次结构是可用的,并且可以让扩展性点对于应用程序更为明确。这样的模式更新解决了许多由扩展性和兼容性所带来的技术问题。然而,标准MPEG-7目前没有提供有关将用于对编码文档进行解码的任何信息。如此,被配置为使用模式的解码器无法对用经过修改的模式编码的文档进行解码(没有前向兼容性)。此问题可以仅通过在对编码文档进行解码之前给解码器提供有关要使用的模式的信息即可解决。或者,这样的自动操作或语法树可以被转换成二进制语法代码,该代码由解码器执行以便以输入二进制流的形式对文档进行解码。
在特定的情况下,模式更新所导致的复杂性可能是有问题的。当不可能轻松地更新解码器以便让它们能够访问经过修改的模式(前向兼容性)时会发生这样的情况,例如,当要更新的解码器数量很高或者当解码器不是设计为使用其他模式时。为了处理这些特定的情况,本发明的目的是提出一种信息元素二进制格式,以及编码和解码方法,其允许解码器至少“部分地”对具有相对于解码器知道的模式而修改或扩展结构的文档进行解码。
在这一方面,在编码阶段选择兼容性级别。此级别用应该确保其兼容性的一组模式的字眼来表示。编码过程添加了必要的冗余以确保预期的兼容性。在极端的情况下,如果只需要与一个当前模式兼容,则除去冗余,结果二进制编码文档符合当前模式。
基本上,编码过程在编码文档中添加了有关在编码阶段使用的模式的信息。此信息包括模式标识符和长度信息,以允许使用对解码器不可用的模式跳过编码的文档中的一个元素。
模式标识符由解码器知道的模式标识符词典进行定义,该模式标识符例如插入在编码文档的标头2中或插入在由解码器所使用的解码器初始化和配置文件中。此模式标识符词典包含由解码器用于对接收到的编码文档进行解码的所有可能的模式标识符。此词典可以由解码器使用下面的二进制语法来读取表1

其中“NumberOfSchemaIdentifiers”和“SchemaIdentifier[]”分别代表词典中的模式标识符的数量和包含模式标识符的阵列,“UINT_VLC”规定要对无限大小的无符号整数进行编码的格式。在格式“UINT_VLC”中,通过整数块的无限集对整数进行编码,每一个块都由5个位构成。每一个块的第一位都规定其他块是否跟随在当前块之后,块的最后4位对整数进行编码。
此二进制语法表示模式词典包括数字,后面是一个字符串形式的模式标识符列表,该列表中的每一个模式标识符的位置都自动定义可以在编码文档中使用以便标识特定的模式的模式号码。词典的读取过程按顺序包括在词典中读取模式的数量“NumberOfSchemaIdentifiers”的步骤、初始化计数器i的步骤,包括读取“SchemaIdentifier[]”阵列中的第i个值的步骤和增大计数器i的步骤的循环指令,其中0≤i<NumberOfSchemaIdentifiers。在下表中,词典包含三个模式标识符,每一个模式都隐式地与由词典中的模式标识符的等级定义的二进制模式号码关联。
表2

二进制模式号码的长度(位数)被定义为词典中的模式标识符的数量的函数,并等于E(log2(Nu mberOfSchemaIdentifiers)),E(x)等于四舍五入到下一个较高整数的x。
如图3所示,编码文档中的每一个类型号码字段35都与模式号码字段38关联,模式号码对应于模式词典中定义的模式标识符,此模式号码标识在其中定义关联的类型的模式。
以这种方式,根据本发明的编码器和解码器可以使用多个模式来对一个文档进行编码和解码。
假设在XML语言中在模式S0和修改的模式S1之间有三个更改类型,这些更改类型可能结合在一起。第一个更改类型是全局元素名称替换为另一个全局元素名称,全局元素是在一个模式中相对于其他元素以独立的方式定义的(不嵌套在另一个元素中)。这样的更改以XML模式语言按如下方式定义。
在XML模式S0中…<complexType name=″S0t0″base=″string″>
…<element name=″e0″type=″S0t0″/>
…在XML模式S1中…<element name=″e1″type=″S0t0″substitutionGroup=″S0e0″/>
…此语法定义了复杂类型“t0”、两个名为“e0”和“e1”并具有类型“t0”的元素,元素“e1”被替换为元素“e0”。这样的具有值“value1”的元素“e1”可能出现在基于模式S1的XML文档中,如下所示…<e1>value1</e1>
…根据本发明,这样的修改是通过在元素32中添加替换字段4来编码的,包括-替换标志41-被替代元素号码43,以及-定义了元素号码43的模式号码42。
当替换标志被设置为0时,下面的替换字段42和43在编码的元素中不存在。
用模式S1编码的并包含定义“e1”的元素“e1”包括下面的字段值,如图3所描述[length]1[S1][e1][S0][t0][value1]其中[length]是元素的二进制编码长度,“1”是表示替换的替换标志的值,[S1]和[S0]是如模式词典所定义的模式S1和S0的编码的号码,[t0]是类型“t0”的编码类型号码,[value1]是元素“e1”的值“value1”的编码值,[e1]是元素“e1”的编码号码。这样的二进制代码将由只知道模式S0(因此“e0”)的解码器根据本发明进行解码,解码的元素可以解释如下<e0 DDLIsSubstituted=″true″>value 1</e0>
因此,解码器不了解[e1]的含义,并认为“valuel”是由另一个未知元素代替的元素“e0”的值。
模式S0和新模式S1之间的第二种更改类型在于通过限制从类型“t0”导出新类型t1。这样的限制在于减小类型定义中的至少一个元素或元素组的最大出现次数,或者增大其最小出现次数,或者将类型t0更改为子类型t1,或定义遵守类型t0中以前定义的约束的新元素组。
下面的示例中以XML模式语言表示了这样的更改。XML模式S0包括下面的语法…<complexType name=″t0″>
<sequence>
<element name=″el′type=″string″maxOccurs=″unbounded″/>
</sequence>
</complexType>
…<element name=″e″type=″S0t0″/>
…在XML模式S1中…<complexType name=″t1″>
<complexContent>
<restriction base=″S0t0″>
<Sequence>
<element narne=″e1″type=″string″maxOccurs=″1″I>
</sequence>
</restriction>
</complexContent>
</complexType>
…在此示例中,类型“t0”在XML模式语言中定义为包括元素“e1”的任意数量的出现次数。类型“t1”被定义为类型“t0”的限制,并包括0或一个单元素“e1”,这是类型“t0”的特例。因此,类型“t1”强制类型“t0”约束,并可以使用相同的二进制格式。
要编码的文档包含下列信息<S0e xsitype=″S1t1″>
<e1>value1</e1>
</S0e>
这意味着,文档包含具有类型“t1”的元素“e”,而类型“t1”是模式S0中定义的元素“e”的预期的类型“t0”的子类型。
如果不需要前向兼容性,则此元素可以按如下方式编码[length]0[S1][t1][Value1]其中“0”是被设置为不替换的替换标志的值。
知道模式S0而不知道S1的解码器对字段[Length]和[S1]进行解码。由于S1没有在模式词典中进行定义,则可以推论出,与元素“e”相关的其他字段无法使用模式S0进行解释,并使用长度信息跳过元素“e”。如果解码器知道模式S1(并因此知道S0),则它将检索元素“e”的原始结构。
如果需要前向兼容性,则根据图3定义的结构对元素“e”进行编码,如下所示[length]0[S0][t0][value1][S1][t1]知道S0和S1这两个模式的解码器可以对编码的元素“e”的所有字段进行解码。然后通过比较解码流的长度字段和长度,它就能推论出,没有更多的子类型,并将检索元素“e”的原始结构。如果解码器知道模式S0而不知道S1,则它将对字段的第一部分进行解码,并跳过[S1]和[t1]字段(使用长度字段)。因此,它将创建下面的文本树<S0e xsitype=″S0t0″DDLisSubtype=″true″>
<e1>value1</e1>
<S0e>
旧模式S0和新模式S1之间的第三种更改类型在于通过扩展从类型“t0”导出新类型t1。如果应该确保前向兼容性,则应分两部分定义新类型t1,第一部分具有类型“t0”,第二部分具有类型“t1”,该类型必须在新模式S1中进行定义。
下面的示例中以XML模式语言表示了这样的更改。XML模式S0包括下面的文本…<complexType name=″t0″>
<sequence>
<element name=″e1″type=″string″/>
</sequence>
</complexType>

<element name=″e″type=″S0t0″/>
…在XML模式S1中,新类型t1被定义为类型t0的扩展,如下所示…<complexType name=″t1″>
<complexContent>
<extension base=″S0t0″>
<sequence>
<element name=″e2″type=″string″/>
</sequence>
</extension>
</complexContent>
</complexType>
…如果需要前向兼容性,则要被编码的XML文档包含下列信息<S0e xsitype=″S1t1″>
<e1>value1</el>
<e2>value2</e2>
</S0e>
其中value1是类型“t1”中的类型“t0”的部分,“value2”是对类型“t1”特定的部分,并添加到类型“t0”。此信息按如下方式被编码[length]0[S0][t0][Value1][S1][t1][Value2]
如果解码器知道S0(而不知道S1),则它将对二进制编码信息的第一部分进行解码,并使用长度信息跳过t1部分(即,[t1][value2])。这样的过程导致下面的文本树<S0e xsitype=″S0t0″ddlisSubtype=″true″>
<e1>value1</e1>
</S0e>
因此,t1的特定部分将不会被解码。如果解码器同时知道S0和S1这两个模式,则它将检索原始的文本树以上处理可以合并,从而允许定义可能在不同的模式中定义的类型的复杂层次结构。图4代表了这样的一个层次结构的示例,其中类型t5和t6是类型t4的两个扩展,而类型t4是类型t3的扩展,类型t3是类型t1的限制。同样,类型t8和t9分别是类型t7的限制和扩展,而类型t7是类型t2的扩展,类型t2是类型t1的扩展。假设在相应的不同模式S1到S9中定义了类型t1到t9中的每一个类型,如果对模式S1、S3、S4和S5需要兼容性,则类型t5的元素以下列形式进行编码[length]0[S1][t1][att1][value1][S3][t3][S4][t4][att4][value4][S5][t5][att5][Value5]其中字段[att-i]是类型t-i的相应的编码属性值,[att-i][value-i]是类型t5的t-i部分(-i=1,4和5)。如果对模式S3和S5需要兼容性,则类型t5的一个元素以下列形式进行编码[length]0[S3][t3][att3][value3][S5][t5][att5][Value5]其中字段[att3][value3]是根据类型t3进行编码的类型t5的t1部分,[att5][value5]是根据t5进行编码的类型t5的t4+t5部分。
当然,模式之间的上述的第一种更改类型可以通过将替换字段4添加到编码的元素来同第二和第三种更改类型相结合。
在前面的描述中,通过将二进制替代字段(字段41、42、43)和与每一个元素类型关联的模式号码字段添加到加到编码文档中来获得前向兼容性。因此,这一解决方案增大了结果编码文档的大小。为了优化编码,编码文档的各部分常常被链接到相同的模式。在这一方面,本发明提出了在每一个编码的元素32中添加一个字段5,如图3所示,该字段5包含代表模式状态模式的模式状态代码。该字段定义了对应元素和子元素是否需要来自相同模式的规定。如果相同模式用于对一个元素以及其所有子元素进行编码(和解码),则从编码的元素中删除为确保前向兼容性而添加的字段38、42(包含模式号码),从而增大了结果压缩比。
下表定义了模式状态代码的可能的值。
表3

其中“no change(无更改)”是指用于元素的解码过程的模式与用于该元素本身的模式相同。因此,元素32不包含模式号码字段38和替换模式字段42。
“freeze the schema(冻结模式)”是指用于元素以及该元素的所有子元素(该元素的所有子树)的解码过程的模式与用于该元素本身的模式相同。因此,元素32以及该元素的所有子元素不包含任何模式号码字段38、42和模式状态字段5。
“change the schema(更改模式)”是指元素的模式已更改。因此,在元素32中存在模式号码字段38、42。
图5说明了由模式状态代码控制的机理。该图描述了包括主元素51的结构化文档的树结构,其中主元素51又包含三个子元素52、53、54。元素52包括两个子元素55、56,元素54包括三个子元素57、58、59。元素55包括两个子元素60、61。
元素51、53、54、57和59用设置为0(“no change”)的模式状态代码5进行编码。这些元素不包含任何模式号码字段38、42。元素52的模式状态代码5被设置为10(“freeze theschema”)。因此,元素52的所有子元素55、56和60、61用元素52中定义的相同模式进行编码,且这些子元素不包含任何模式号码字段38、42,和模式状态代码字段5。
元素58在另一个模式中经过修改并定义为包括两个子元素62、63。因此,元素58的模式状态代码5被设置为11(“change the schema”)。如果元素62和63在与元素58的相同模式中进行定义,则元素62和63的模式状态代码5被设置为0。
可以通过向模式状态代码5添加一个可能的值来执行进一步的优化,如下所示表4

当元素的模式状态代码被设置为110或111时,元素的模式被更改。如果此代码被设置为110,则后者的子元素包含模式状态方式字段5。当此代码被设置为111时,该元素的所有子元素都使用该元素的模式进行编码。
在图5的示例中,元素58的模式状态代码可以设置为111以便规定元素62和63在与元素58的相同的模式中进行定义。因此,在元素62和63中不需要模式状态代码字段5。
权利要求
1.一种编码方法,用于使解码器至少部分地对结构化文档进行解码,该结构化文档具有在该解码器不能访问的至少第一模式中定义的结构,并由该解码器能够访问的至少第二模式中的变化产生,该结构化文档包括彼此嵌套的信息元素,该文档的信息元素在至少第一和第二模式中与相应的元素类型关联,该元素类型的每一个定义该信息元素的相应的元素结构,该第一模式不能被解码器访问,该第二模式可以被解码器访问,该第一模式定义至少一个由该第二模式中定义的对应元素派生而来的派生信息元素,该编码方法包括下列步骤使用所述的第一和第二模式将文档编码为二进制流,对于该文档的每一个信息元素,该二进制流包括对该信息元素进行编码的二进制序列,以及在对派生信息元素进行编码的二进制序列中插入一个指定第一模式的引用,在该第一模式中定义了该派生元素的结构,所述的指定第一模式的引用在一个模式引用列表中进行定义,该模式引用列表包含对用于编码文档的所有模式的引用,该模式引用列表可以被解码器访问。
2.根据权利要求1所述的编码方法,其中,对文档的每一个元素进行编码的二进制序列包括内容字段,该内容字段中包含元素的编码值,以及放在该内容字段前面的长度字段,该长度字段中包含该内容字段的长度的编码值。
3.根据权利要求2所述的编码方法,其中,派生信息元素在第一模式中与相对于第二模式中的对应的信息元素的结构类型被限制的一种结构类型关联,对派生元素进行编码的二进制序列包括内容字段和追加于该内容字段的在第二模式中定义的对第一模式的引用和对派生元素的结构类型的引用。
4.根据权利要求2或3所述的编码方法,其中,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被扩展,该派生信息元素的结构类型包括具有在第二模式中定义的对应的信息元素的结构类型的第一部分,对该派生信息元素特定的并具有第一模式中定义的结构类型的第二部分,对该派生元素进行编码的二进制序列包括内容字段,该内容字段包括包含对第二模式的引用的字段,包含对第二模式中的对应元素的结构类型的结构类型引用的字段,包含第一部分的编码值的字段,包含对第一模式的引用的字段,包含对第二部分的结构类型的结构类型引用的字段,以及包含所述的第二部分的编码值的字段。
5.根据权利要求1到4中的任何一个所述的编码方法,其中,对信息元素进行编码的二进制序列包括替换字段,该替换字段包括指出该信息元素的名称是否更改的替换标志,如果替换标志指出更改,则还包括元素名称引用字段,该元素名称引用字段包含指定该信息元素的新名称的引用,以及模式引用字段,该模式引用字段包含对其中定义了新名称引用的模式的引用。
6.根据权利要求1到5中的任何一个所述的编码方法,其中,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出该信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,以及指出该信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,当该模式状态方式字段处于第一状态时,被编码的信息元素包括任何模式引用和任何其他更改信息,当该模式状态方式字段处于第二状态时,该信息元素的所有子元素都不包括模式引用和任何其他更改信息。
7.根据权利要求1到5中的任何一个所述的编码方法,其中,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出该信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,指出该信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,以及指出该信息元素在第一模式中相对于第二模式中的对应元素被更改,并且该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第四状态,当该模式状态方式字段处于第一状态时,被编码的信息元素包括任何模式引用和任何其他更改信息,当该模式状态方式字段处于第二状态或第四状态时,该信息元素的所有子元素都不包括模式引用和任何其他更改信息。
8.根据权利要求1到7中的任何一个所述的编码方法,其中,包括对用于编码结构化文档的所有模式的引用的模式引用列表被插入在与编码该结构化文档的二进制流关联的标头中。
9.一种解码方法,用于至少部分地对二进制流进行解码,该二进制流对结构化文档进行编码,该结构化文档具有在该解码器不能访问的至少第一模式中定义的结构,且由解码器能够访问的至少第二模式中的变化产生,该结构化文档包括彼此嵌套的信息元素,该文档的信息元素在至少第一和第二模式中与相应的元素类型关联,该元素类型的每一个定义该信息元素的相应的元素结构,该第一模式不能被解码器访问,该第二模式可以被解码器访问,该第一模式定义至少一个由第二模式中定义的对应元素派生而来的派生信息元素,该解码方法包括下列步骤使用该第二模式连续地读取和解码对该结构化文档进行编码的二进制流,并在该二进制流中检测对该文档的每一个信息元素进行编码的二进制序列,在被编码的元素的二进制序列中检测对第一模式的引用,如在解码器所知道的模式引用列表中所定义的那样,从所述的模式引用的检测中标识相对于所述的第一模式的二进制数据,以及在所述的二进制流的连续读取和解码期间跳过相对于所述的第一模式的所述二进制数据。
10.根据权利要求9所述的解码方法,其中,对文档的每一个元素进行编码的二进制序列包括内容字段,该内容字段中包含该元素的编码值,以及放在该内容字段前面的长度字段,该长度字段中包含长度编码值,该长度编码值被解码器用来确定对元素进行编码的二进制序列的结尾。
11.根据权利要求10所述的解码方法,进一步包括下列步骤读取和解码在包含对第一模式的引用的二进制序列中的长度编码值,以及确定作为被解码的长度值和在对第一模式的引用的二进制序列中的位置的函数的要跳过的二进制数据的长度。
12.根据权利要求9到11中的任何一个所述的解码方法,其中,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于在第二模式中的对应的信息元素的结构类型被限制,对该派生元素进行编码的二进制序列包括内容字段,和追加于该内容字段的在第二模式中定义的对第一模式的引用和对该派生元素的结构类型的引用。
13.根据权利要求9到12中的任何一个所述的解码方法,其中,派生信息元素在第一模式中与一种结构类型关联,该结构类型相对于第二模式中的对应的信息元素的结构类型被扩展,该派生信息元素的结构类型包括具有在第二模式中定义的对应的信息元素的结构类型的第一部分,以及对该派生信息元素特定的并具有在第一模式中定义的结构类型的第二部分,对该派生元素进行编码的二进制序列包括内容字段,该内容字段包括包含对第二模式的引用的字段,包含对第二模式中的对应元素的结构类型的结构类型引用的字段,包含第一部分的编码值的字段,包含对第一模式的引用的字段,包含对第二部分的结构类型的结构类型引用的字段,以及包含所述的第二部分的编码值的字段。
14.根据权利要求9到13中的任何一个所述的解码方法,其中,派生信息元素在第一模式中具有相对于第二模式中的对应的信息元素的名称被更改的名称,对该派生元素进行编码的二进制序列包括替换字段,该替换字段包括指出该派生信息元素的名称是否更改的替换标志,以及如果该替换标志指出更改,则还包括模式引用字段,该模式引用字段包含对第一模式的引用,以及指定第一模式中的该派生信息元素的名称的元素名称引用。
15.根据权利要求9到14中的任何一个所述的解码方法,其中,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出该信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,以及指出该信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,当该模式状态方式字段处于第一状态时,被编码的信息元素不包括任何模式引用和任何其他更改信息,当该模式状态方式字段处于第二状态时,该信息元素的所有子元素都不包括模式引用和任何其他更改信息。
16.根据权利要求9到14中的任何一个所述的解码方法,其中,对编码文档中的至少一个信息元素进行编码的二进制序列包括模式状态方式字段,该模式状态方式字段具有指出该信息元素在第一模式中相对于第二模式中的对应元素没有更改的第一状态,指出该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第二状态,指出该信息元素在第一模式中相对于第二模式中的对应元素更改的第三状态,以及指出该信息元素在第一模式中相对于第二模式中的对应元素被更改,并且该信息元素的所有子元素在第一模式中相对于第二模式中的对应元素都没有更改的第四状态,当该模式状态方式字段处于第一状态时,被编码的信息元素包括任何模式引用和任何其他更改信息,当该模式状态方式字段处于第二状态或第四状态时,该信息元素的所有子元素都不包括模式引用和任何其他更改信息。
17.根据权利要求9到16中的任何一个所述的解码方法,其中,包括对用于编码结构化文档的所有模式的引用的模式引用列表在与编码该结构化文档的二进制流关联的标头中读取。
全文摘要
一种编码方法,允许解码器至少部分地对具有解码器不能访问的第一模式中的定义的结构的,且由解码器能够访问的第二模式中的变化产生的结构化文档进行解码,该第一模式定义至少一个由该第二模式中定义的对应元素派生而来的信息元素,该编码方法包括下列步骤使用所述的第一和第二模式将文档编码为二进制流,对于文档的每一个信息元素,包括对元素进行编码的二进制序列,在对派生信息元素进行编码的二进制序列中插入一个指定第一模式的引用,在该模式中,定义了派生元素的结构,所述的指定第一模式的引用在一个包含对用于编码文档的所有模式的引用的模式引用列表中进行定义,该模式引用列表可以被解码器访问。
文档编号H03M7/30GK1552126SQ02804588
公开日2004年12月1日 申请日期2002年2月4日 优先权日2001年2月5日
发明者克劳得·塞拉, 赛德瑞克·斯诺特, 克 斯诺特, 克劳得 塞拉 申请人:捷通公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1