解析非结构化资源的制作方法

文档序号:6454565阅读:165来源:国知局

专利名称::解析非结构化资源的制作方法解析非结构化资源些旦冃豕诸如应用程序和操作系统等软件产品经常以许多不同的语言版本来提供。将软件产品从编写它的初始语言转换为其他语言的过程被称为"本地化"。通常本地化是通过翻译该产品的用户界面(UI)中的所有字符串元素和任何其他语言特有部分(例如,热键、坐标、大小)并然后重构该产品以产生该语言专用版本来完成的。该本地化的产品然后在其能被发货到顾客之前需要大范围的测试。这非常昂贵并且导致本地化版本的软件的缓慢交货。已开发出其中本地化发生在运行时的不同的本地化方法。在该方法中,加载基础产品(例如,原始英语版本)并且由资源截取器来插入经翻译的资源,该资源由该资源截取器从语言特有词汇表文件中获得。这以应用程序不察觉到的方式来完成。尽管该方法可能不翻译整个应用程序,但因为它去除了构建和测试的需要,它提供了本地化软件产品的劳动力较不密集和较便宜的方式。它还使第三方能够创建用于软件产品的新语言词汇表,其可导致该产品被本地化为许多额外的语言。为了使资源截取器能够翻译应用程序中的资源,该资源截取器必须能够标识资源中可翻译的字符串。这对于诸如WIN32对话框或WIN32串表等结构化资源而言是平常的,因为它们具有定义(例如,用标准)的结构,所以找到各种资源并修改/替换它们是容易的。然而,并非所有资源都是结构化的。非结构化(或流)资源是不具有预定义结构并且存储在文件或流中的文本资源。通常这些资源能够使用诸如微软(商标)记事本等文本编辑器程序来查看/编辑。非结构化资源的示例包括HTML文件(其包括字符串、标签和其他格式化字符)、JavaScript、INI文件、注册表文件、层叠样式表(CSS)和XML文件。存在用于编写这些非结构化资源的大量模式并且需要正确模式的知识来标识非结构化资源中的可翻译字符串。即使在一特定资源类型中,也可能存在可标识字符串和其他本地化数据(诸如热键、大小和坐标)的许多不同的方式,例如第一HTML样本<PID=Hdlo>Hello</P>第二HTML样本<!—ID=ID_Hello—>Hello<!—end—></P>第一JavaScript样本document.write("Hello")第二JavaScript样本L—Hello_Message=("Hello")document.write(L一Hello—Message)为了使资源加载器能够标识这些示例中的每一个中的可翻译字符串("Hello"),它必须确切地知道该可翻译字符串在每种情况下是如何被标识的。由于不存在定义的结构,因此资源加载器知道每个可能的模式、格式、外部配置数据和规则是不可行的,因为这些东西不计其数。即使资源加载器的确知道在特定情况下所使用的特定模式、格式和规则,解析仍将是缓慢的,并且在许多应用程序中这将是不可接受的(例如,如果在运行的应用程序中的资源加载期间执行)。此外,可在构建文件(例如,HTML文件)时移除标识符信息(以上两个HTML示例中的"ID-Hello"和"〈!一ID4D—Hello—>...<!~end—>")以优化文件大小并使加载这些文件的应用程序能更高效地执行。或者(或此外)可以出于机密性原因(例如,文件的注释可能是机密的)或为了创建有效的文件结构(如,HTML可能在移除标志之前是无效的)移除标识符信息。在这些情况下,非结构化资源可能不包含标识可翻译资源的信息,例如第三HTML样本Hello</P>这意味着资源加载器标识非结构化资源中的字符串是不可能的。除了标识非结构化资源中的字符串的位置之外,还可能还必须确定用于对其他数据的交叉引用(例如,对词汇表中的翻译)的每个字符串的唯一标识符。本发明寻求提供缓解己知解析方法的问题的解析非结构化资源的方法,并且也提供改进的解析工具。概述下面提供本发明的简化的概要以便为读者提供基本的理解。本概要不是本发明的详尽概观,并且既不标识本发明的关键/决定性要素也不描绘本发明的范围。其唯一目的是以简化形式提供在此公开一些概念作为稍后提供的更详细描述的序言。描述了处理包含一个或多个数据部分的非结构化资源的系统和方法。该方法包括将非结构化资源读入存储器中并访问与该非结构化资源相关联的数据结构。该数据结构包含多个元素,每个元素包括该非结构化资源中的一数据部分的位置信息。通过使用该位置信息,从该非结构化资源中定位数据部分并对其进行处理,并且对该数据结构中的每个元素重复定位和处理步骤。本示例提供处理非结构化资源的方法,包括将非结构化资源读入存储器中,该非结构化资源包括一个或多个数据部分;访问与该非结构化资源相关联的数据结构,该数据结构包括一个或多个元素,每个元素都与一数据部分相关联并包括相关联的数据部分的位置信息;将第一元素从该数据结构读入存储器中,该第一元素包括第一数据部分的位置信息;使用该第一数据部分的位置信息来定位该非结构化资源中的第一数据部分;处理该第一数据部分;以及对该数据结构中的一个或多个元素中的每一个重复读取、定位和处理步骤。有利的是,这提供了更快、更高效且需要更少的存储器使用的处理方法。有利的是,该方法能够独立于编写,随后处理、编译或翻译数据部分的方式来处理诸如字符串等数据部分。在某些情况下,该方法允许在不使用数据结构的情况下将会是不可能的非结构化资源的处理。较佳地,该方法还包括访问替换数据部分的存储;并且其中处理该第一数据部分包括基于该第一元素从替换数据部分的存储中选择第一替换数据部分;以及将该第一替换数据部分插入到该非结构化资源中以代替该第一数据部分。有利的是,该方法可用于通过用适用于第二语言的数据部分来替换适用于一种语言的数据部分来进行资源的本地化。较佳地,将非结构化资源读入存储器中包括将非结构化资源从一个位置读入存储器中;并且该方法还可包括将修改的非结构化资源输出到该位置。较佳地,该方法还包括在选择步骤之后,检查替换字符串是否满足预定义准则,并且如果不是,则省略插入步骤。如果确定该替换数据部分(例如,字符串)可能导致问题,则可因此不插入该替换数据部分并且原始数据部分可留在该资源中。有利的是,这允许检查该替换数据部分(例如,替换字符串)以使其在用户界面中插入和显示时不会导致问题。较佳地,预定义准则包括数据部分长度准则、有效字符准则或预定义资源列表。有利的是,这使得能够检查诸如字符串等替换数据部分以确定该字符串在显示时是否会被截断,或该替换字符串是否是正确的长度,或该替换字符串是否具有任何无效字符,或该替换字符串是否具有可削弱应用程序功能或引入安全问题的任何特征。使用预定义资源列表有利地允许控制数据部分中哪些可改变哪些不可改变。较佳地,该方法还包括将预定义准则从非结构化资源、数据结构或替换数据部分的存储读入到存储器中。较佳地,该方法还包括在将非结构化资源读入存储器中之前加载应用程序;以及检查该应用程序所要求的语言;其中该非结构化资源与该应用程序相关联并且该方法还包括将修改的非结构化资源传递给该应用程序。有利的是,这允许在加载应用程序时对资源的处理,诸如资源的翻译或转换。较佳地,该方法还包括在访问替换数据部分的存储之前,基于该应用程序所要求的语言来标识替换数据部分的存储。较佳地,该替换数据部分的存储包括以下各项之一针对一种或多种语言翻译的数据部分的数据库和字典数据库。数据部分可包括字符串、热键、坐标集、大小或可本地化或可修改数据的任何部分。在另一个示例中,该方法还包括访问规则数据库;并且其中处理第一数据部分包括根据该规则数据库来修改该第一数据部分以创建第一修改的数据部分;以及将该第一修改的数据部分插入到非结构化资源中以替换第一数据部分。较佳地,该数据部分包括字符串并且该规则数据库可包括以下各项中的一个或多个长度规则、允许字符规则、允许单词规则、禁止单词规则、语法规则和拼写规则。在另一个示例中,非结构化资源中的每个数据部分都包括第一语言的字符串,并且处理第一数据部分包括提取第一数据部分,并且该方法还包括将第二非结构化资源读入存储器中,该第二非结构化资源包括一个或多个数据部分,该第二非结构化资源中的每个数据部分都包括第二语言的字符串;访问与该第二非结构化资源相关联的第二数据结构,该第二数据结构包括一个或多个元素,每个元素都与该第二非结构化资源中的数据部分相关联并且包括相关联的数据部分的位置信息;将第一元素从该第二数据结构读入存储器中,该第一元素包括该第二非结构化资源中的第一数据部分的位置信息;使用该第二非结构化资源中的第一数据部分的位置信息来从该第二非结构化资源中提取该第一数据部分;对该第二数据结构中的一个或多个元素重复读取和提取步骤;以及输出从两个非结构化资源中提取的所有数据部分。有利的是,这允许多语言词汇表的自动生成。较佳地,非结构化资源包括以下各项之一JavaScript、层叠样式表、INI文件、注册表文件、HTML文件和XML文件。或者,非结构化资源可包括可包含可本地化或可修改字符串或数据的任何文本格式。较佳地,每个元素还包括数据部分标识符。较佳地,位置信息包括以下各项中的至少一个数据部分开始位置、数据部分长度指示符和数据部分结束位置。较佳地,数据结构还包括编码信息(例如,Unicode(万国码)、ANSI等)。处理第一数据部分的步骤可包括插入诸如字符串等数据元素。另一个示例提供了一种处理非结构化资源的方法,包括将非结构化资源读入存储器中,该非结构化资源包括一个或多个数据部分的位置;访问与该非结构化资源相关联的数据结构,该数据结构包括一个或多个元素,每个元素都与一数据部分相关联并包括相关联的数据部分的位置信息;将第一元素从该数据结构读入存储器中,该第一元素包括第一数据部分的位置信息;使用该第一数据部分的位置信息来插入该第一数据部分;以及对该数据结构中的一个或多个元素中的每一个重复读取和插入步骤。有利的是,这提供了用于本地化以非语言特有方式编写的资源的简单方法,由此该资源甚至不包含英语字符串或数据。该资源的大小是小的,所以需要减少的存储器空间并能够快速和高效地加载。此外,这允许将由第三方提供的翻译(例如,字符串的存储)。另一个示例提供了一种包括计算机程序代码装置的计算机程序,该计算机程序代码装置适于当所述程序在计算机上运行时执行上述任何方法中的所有步骤。较佳地,该计算机程序被包含在计算机可读介质上。又一示例提供了一种系统,包括处理器;以及存储器,其与该处理器耦合并且是该处理器可读的且包含一系列指令,该指令在被该处理器执行时使该处理器将非结构化资源读入存储器中,该非结构化资源包括一个或多个数据部分;访问与该非结构化资源相关联的数据结构,该数据结构包括一个或多个元素,每个元素都与一数据部分相关联并包括相关联的数据部分的位置信息;将第一元素从该数据结构读入存储器中,该第一元素包括第一数据部分的位置信息;使用该第一数据部分的位置信息来定位该非结构化资源中的第一数据部分;处理该第一数据部分;以及对该数据结构中的一个或多个元素中的每一个重复读取、定位和处理步骤。所描述的各方法可由存储介质上的机器可读形式的软件来执行。软件能够适于在并行处理器或串行处理器上执行以使得各方法步骤可以按任何合适的次序或同时执行。,这确认了软件可以是有价值的、可单独交易的商品。它旨在包含运行于或者控制"哑"或标准硬件以实现所需功能的软件。它还旨在包含例如用于设计硅芯片,或者用于配置通用可编程芯片的HDL(硬件描述语言)软件等"描述"或者定义硬件配置以实现期望的功能的软件。许多附带特征将随着参考下面的详细描述并结合附图进行理解而得到更好的认识。从结合附图的下列详细描述中将更好地理解本说明书,在附图中:图1是解析非结构化资源的方法的示例流程图;图2是非结构化数据存储的示意图;图3是示出数据存储的创建的示意图;图4是非结构化数据存储的第二示意图5是翻译非结构化资源的方法的示例流程图6是本地化系统的示意图7示出非结构化资源本地化系统的示意图8示出翻译非结构化资源的第二方法的示例流程图9示出编辑非结构化资源中的字符串的方法的示例流程图IO示出检查资源的方法的示例流程图11示出用于创建包含一种以上语言的术语的词汇表的示例流程图;图12示出用于加载资源的示例流程图;以及图13示出用于执行所描述的各方法中的任一种的系统的示意图。附图中使用相同的附图标记来指代相同的部分。详细描述下面结合附图提供的详细描述旨在作为对本示例的描述,而非表示用于解释或利用本示例的唯一形式。本说明书阐述本示例的功能以及用于构造和操作本示例的步骤序列。然而,相同或等价的功能与序列可由不同的示例来实现。图1是解析非结构化资源的方法的示例流程图。在此使用术语"解析"意指将流(例如,句子或数据片段)分解成其组成部分。解析的示例包括将书分解成章节、段落、句子或单词,将电话簿分解成姓名、地址和号码,以及将支票分解成各字段等。本发明可参考图2来描述,图2示出被称为非结构化数据存储200的数据结构和包括XML文件的非结构化资源的简单示例,该XML文件包含Hello</P>将非结构化资源读入存储器中(步骤101)并访问与该非结构化资源相关联的非结构化数据存储200(步骤102)。非结构化数据存储200提供数据,该数据可用于执行非结构化资源的解析而不管该资源最初是如何编写、解析或本地化的。在所示示例中,非结构化数据存储200包括详述在该资源内容中使用的字符的代码页(例如,Windows1252、Unicode或UTF-7)的编码信息201。该数据存储还包括一个或多个元素202,其中每个元素提供与该非结构化资源中所包含的一字符串相关的信息。在所示示例中,元素包括字符串标识符202a(例如,'ID—Hdlo,),其也被称为资源标识符并且可用于与规则、翻译词汇表等的交叉引用。元素还包括字符串位置信息,例如字符串202b的开始位置和字符串202c的长度。在所示示例中,开始位置是字符串中的第一个字符的开始位置从资源文件的开始处的偏移量并且长度是字符串中所包含的字符的数量。将元素202从非结构化数据存储200读入到存储器中(步骤103)并且然后使用来自该元素的位置信息来从非结构化资源中定位并提取字符串(步骤104)。图2所示的示例数据存储200只包含一个元素202。然而,在数据存储包括一个以上元素的情况下,可重复读取元素和提取字符串的步骤(步骤103和104)以从该非结构化资源中提取其它字符串。在已提取字符串(在步骤104)之后,可存储该字符串和/或可能发生进一步的处理并且附加处理步骤的示例将在以下更详细地描述。图2所示的数据存储200只是作为示例来提供的,并且在其他示例中,该存储可包含不同的信息。在一个示例中,字符串标识符可能不包括在数据存储中,而在另一个示例中,字符串位置信息可能以不同的格式(例如,开始位置和结束位置,只是开始位置等)来提供。在又一个示例中,编码信息201可能不包括在数据存储中。数据存储200是语言专用的,这表现在它取决于原始字符串流。然而,省去任何语言数据并且在非结构化资源之内也是可能的,并且因此数据存储将会是语言中立的,如以下更详细描述的。通过使用诸如数据存储200等其中信息以已知格式存储的数据存储,使得解析任何非结构化资源非常容易而无需在构造该资源时所使用的模式、规则等的知识。这导致简单的非结构化资源解析器和非结构化资源的高效解析。此外,该数据存储不需要很多存储器,例如,对于四个具有标题的元素存储,只需要113个字节(=3+(5*22))。该数据存储可被存储在解析非结构化资源时可访问的任何地方,例如该数据存储可被存储在非结构化资源中、原始资源的旁边(例如,在动态链接库(DLL)中)、服务器上、互联网上、数据库中、作为XML文件或该数据存储可由web服务来提供。非结构化数据存储200可以按多种方式中的一种来创建。它较佳地由知道并理解用于创建特定资源的结构、模式和规则的某人/某物来创建,并且它可以在该信息和任何所需标志仍然可用的任何时刻创建。例如,它可以在由编写该资源的人/组织将该资源发货之前创建。它可手工创建,然而这将是费时的且可能易于发生错误。在另一个示例中,数据存储200可由使用解析代码和解析规则来获得和编写数据的自动化工具来创建。示出数据存储的创建的示意图在图3中示出。具有注释或可标识数据301的非结构化资源被输入到解析器300中,其使用解析规则302来解析该资源。这些规则302可被输入到解析器中,或另选地,该解析器可以专用于特定资源类型并因此具有该资源类型中固有的规则。解析器300使用规则信息来标识该资源中的某些/全部字符串并输出包含对应于每个所标识的字符串的一元素的非结构化资源数据存储303(如图2所示)。该解析器可另外输出不具有注释304的非结构化资源的己编辑版本。在一个示例中,非结构化资源301可以是XML文件,包括〈paraits:translate="yes">Hello</para>解析规则302可包括如在www.w3.org/TR/its处所描述的XML国际标签集(ITS)规则。在该示例中,非结构化资源可能不可通过解析来改变(即,不输出不具有注释304的非结构化资源),并且非结构化数据存储400可以是如图4所示的,其中字符串位置信息包括从该文件的开始处的27个字符的开始位置401和5个字符的字符串长度402。在第二示例中,非结构化资源301可以是HTML文件<!—ID=ID—Hello—>Hello<!—end—></P>解析规则可定义应解析HTML中的注释以确定提取哪些片段,并且输出的不具有注释304的非结构化资源可包括Hello</P>该输出资源比原始资源小,因此减少了所使用存储器的数量,并且产生可更高效地加载的资源。在该示例中,所得的非结构化数据存储303可如图2所示。图3所示的解析器300可以是大量已知解析器中的一个,每个解析器都专用于一个或多个模式(例如,用于之前段落中的第一个示例的XML解析器和第二个示例中的HTML解析器)。解析规则可包括除了关于模式的信息之外或代替关于模式的信息的外部信息以允许数据存储的创建(例如,指定<13>和〈/b〉标签之间的所有文本或头部中的所有文本是应被标识的字符串的外部信息)。规则和外部信息的组合使开发者能够精确地指示资源中的哪些字符串应在数据存储中标识。在另一个示例中,可以使用除了解析规则之外或代替解析规则的外部配置数据。图5是将非结构化资源例如从英语(基础语言)翻译成法语(所需语言)的方法的示例流程图。该流程图是图l所示流程图的修改版本,并且能够参考非结构化资源的相同的简单示例来描述,该非结构化资源包括XML文件Hello</P>将非结构化资源读入存储器中(步骤IOI)并访问与该非结构化资源相关联的非结构化数据存储(例如,如图2所示)(步骤102)。将元素202从非结构化数据存储读入存储器中(步骤103)并且然后使用来自该元素的位置信息来从非结构化资源中定位并提取字符串(步骤104,例如,"Hello")。访问对应于所需语言(本示例中的法语)的词汇表(步骤501)并且将字符串的翻译从该词汇表读入存储器中(步骤502)。字符串标识符(例如,ID_Hello)可用于标识词汇表中哪些翻译与所述所提取的字符串相关,例如以下表格所不:<table>tableseeoriginaldocumentpage16</column></row><table>在另一个示例中,字符串本身(例如,Hello)可改为用于从词汇表中标识应使用的翻译。该词汇表可包括MUIDLL(多语言用户界面动态链接库)文件、数据库、web服务等。然后将字符串的翻译(本示例中的'Bonjour,)插入到资源中以替换所提取的字符串(步骤503)并且然后输出所得的经翻译资源(步骤504):Bonjour</P>在资源包含一个以上要翻译的字符串的情况下,数据存储包括一个以上元素并且可对每个元素重复各方法步骤(例如,步骤103、104、501-503)。如图5所示,每个字符串的翻译可以在插入经翻译的字符串之前加载(从步骤502循环返回到步骤103),然而在其他示例中,各步骤可以按其他次序重复,例如经翻译的字符串可以一次插入一个(例如,从步骤503循环返回到步骤103)或所有字符串可以在翻译之前提取(将步骤104循环返回到步骤103且将步骤503循环返回到步骤502)。在某些示例中,在插入所标识的所提取的字符串的翻译之前检査它(即,在步骤503之前对照一条或多条规则或准则)可能是有益的。这在词汇表由第三方创建以及存在对可容纳于正在本地化的应用程序的UI之内的字符串长度的限制的情况下可能尤其有益。在这一示例中,可以对照被存储为数据存储的一部分、非结构化资源的一部分或在别处的一组翻译规则对所标识的所提取的字符串的翻译(如在步骤502所加载的)执行检查。例如,该规则可规定新字符串具有25个字符的最大字符串长度。也可应用最小字符串长度规则(例如,两个字符的最小长度)。该检查阶段还可检查经翻译字符串的其他方面(例如,正确的语言、没有无效字符、没有html标签等)。上述翻译方法可在运行时执行(例如,当应用程序由用户启动时)或可在这之前执行,例如,作为创建然后可被送货至顾客的本地化产品的一部分。在该方法在运行时执行的情况下,如图6所示该方法可由资源加载器602执行。当应用程序601被加载到计算机操作系统中时,做出对资源加载器模块602的调用。资源加载器模块602检查应用程序601要求什么语言并且然后可访问正确的MUIDLL603(在步骤501)并可由此标识和加载正确的翻译(在步骤502)。然后插入该翻译(在步骤503)以使经翻译的资源能够输出到应用程序601(在步骤504)。翻译非结构化资源的第二方法可参考图7和图8来描述,图7示出非结构化资源本地化系统700的示意图,图8示出该翻译方法的示例流程图。如在两个待审美国专利申请2004年12月1日提交的申请第11/002,773号'Safe,SecureResourceEditingforApplicationLocalisation(用于应用程序本地化的可靠、安全的资源编辑),和2005年1月24日提交的申请第11/042,470号'Safe,SecureResourceEditingforApplicationLocalisationwithAutomaticAdjustmentofApplicationUserInterfaceforTranslated(用于具有对经翻译资源的应用程序用户界面的自动调整的应用程序本地化的可靠、安全的资源编辑)'中所描述的,该方法使用各种技术来保证可靠和安全的资源编辑。当加载诸如微软(商标)Windows操作系统或微软Office(商标)应用程序等应用程序701时(步骤801),对资源加载器模块702做出调用(步骤802)。资源加载器模块702检査应用程序701要求哪种语言(步骤803)并转到正确的语言文件夹。从该文件夹中,加载器702例如从MUIDLL703中检索所调用的资源(步骤804)。在该阶段调用由形成本地化模块704—部分的调用截取模块705来截取(步骤805)。存在可用于截取资源加载函数的许多已知方法,例如,如用到另一个函数的跳转(被称为迂回(detouring)的技术)来盖写存储器中函数本身的开始。在截取了该调用之后,本地化模块704加载该资源(步骤806),为了定位字符串和其他本地化数据及其资源标识符,通过数据存储接口708来访问非结构化数据存储(步骤807)。数据存储接口708连同资源重构模块709—起形成语言包加载模块706的一部分。该非结构化数据存储告知本地化模块哪些字符串可用于翻译,然而它可能不被准许翻译所有字符串。语言包加载模块从数据存储中读取任何元素(步骤808)并通过对照标识哪些资源实际上可改变的资源列表进行检查来检查一字符串是可翻译的(步骤809)。该资源列表以不可更改或干扰的方式存储,例如,存储在代码签署的DLL中(尽管它也可通过安全web服务或数据库来提供)。资源列表通过字符串标识符(或其他手段)来标识被准许在运行时翻译的那些字符串。该列表还可提供关于字符串的翻译被存储在哪里的信息。如果该字符串被确认为允许被翻译,则使用该元素来从资源中提取该字符串(步骤810)。访问包括所要求的语言的翻译的词汇表707(步骤811)并由资源重构模块709来加载该字符串的翻译(步骤812)。对照限制和/或规则来检查经翻译的字符串(步骤813)。这些限制/规则可被存储在对应于每个资源的代码签署的DLL中并且可以按非常快速地解析和确认的格式来存储(它们可以是资源列表的一部分或在别处)。如果经翻译的字符串不符合限制/规则,则不使用它并且该字符串改为以原始语言返回。在翻译了资源中的所有字符串(通过重复步骤808-813)之后,资源重构模块709使用通过限制的翻译和在翻译不符合限制的情况下的原始字符串来重构该资源(步骤814),并且该重构的资源然后通过资源加载器702被传回应用程序701(步骤815)。如先前所解释的,流程图中所示的循环返回(从步骤813到步骤809)作为示例示出并且该过程的重复可以用各替换方式来执行。在上述图8所示的示例中,使用资源列表来定义哪些字符串是可翻译的(例如,在运行时),哪些字符串不是。这可改为通过只标识数据结构中可翻译的那些字符串来实现。在另一个示例中,可访问逐个资源而不是逐个字符串地标识可翻译字符串的列表。这一列表可标识包含可翻译字符串的那些资源或可选地不包含任何可翻译字符串的那些资源。在上述示例中,使用解析非结构化资源的方法来允许资源的翻译。然而,这并不是该方法的唯一应用,并且所提取的字符串可以按任何方式来使用,包括但不限于如以下参考图9-ll所描述的创建字符串列表、创建词汇表和编辑或检査字符串。此外,字符串无需被提取,而可以使用数据结构来定位并且然后字符串可以按任何方式来处理。处理的示例包括,但不限于,读取、复制(例如到存储器中)、修改、替换、插入和提取。处理可涉及一个以上的步骤,例如读取和修改或读取和替换。图9示出编辑非结构化资源中的字符串的方法的示例流程图。如以上参考图1所描述地提取字符串,并且然后将所提取的字符串呈现给用户以供编辑(步骤901)。一旦输入了已修改的字符串,将已修改的字符串插入到资源中(步骤卯2),并且输出已修改的资源(步骤903),例如通过将其保存到存储器和/或向用户显示该已修改资源。图IO示出检查资源的方法的示例流程图,该方法例如用于检查非结构化资源中的字符串的拼写或语法。如参考图l所描述地提取字符串,并且然后对照规则检查每个所提取的字符串(步骤1001)。这些规则可包括字典和/或语法规则。在其他示例中,这些规则可包括功能规则,诸如最大或最小长度(例如,如先前所描述的)等。如果需要,则可作为这些规则的结果自动地修改字符串(步骤1002),或者可将字符串加上所建议的替换字符串呈现给用户以供选择一个替换字符串。然后将已修改的字符串插入到资源中(步骤902),并且然后可输出已修改的资源(步骤903)。该方法可用于检查字符串的任何方面并且不限于拼写和语法。例如,可针对不适当的单词或词组,针对特定关键词、字符等来检査字符串。在另一个示例中,不做出修改而生成一份报告。图11示出用于创建包含一种以上语言的术语的词汇表的示例流程图。如以上参考图1所描述地首先从第一非结构化资源中提取第一语言的字符串。该过程也以类似的方式(步骤101-104)对一种或多种其它语言来执行。然后组合所提取字符串的所有集合以形成词汇表(步骤1101)。在上述示例中,使用非结构化数据存储来从非结构化资源中定位和提取字符串。然而,在另一示例中,非结构化数据存储可用于字符串的插入,例如在微软(商标)Windows资源加载器中。例如,可编写应用程序(例如,微软(商标)Word)以使其是语言无关的(而不是具有然后被翻译的基础语言),并且然后资源加载器可以使用该数据存储来使其能够将所要求的语言的字符串插入到资源的正确位置中。不具有包括英语的任何语言数据的非结构化资源的示例是</p><br></p>这一资源可具有包含如以下表4各所示的两个元素的非结构化数据存1ID开始ID13ID214因为该非结构化资源不包含任何语言特有元素,所以该数据存储是语言无关的。在该示例中,字符串位置信息包括单个信息片段,相对于资源的开始位置的该字符串的开始位置。注意,当插入每个字符串时需要相应地调整剩余字符串的开始偏移量。将要插入的字符串可被保持在包含若干不同语言的字符F串的数据库中,例如ID语言=英语语曰=法语ID1HelloBonjourID—2Monday13thMarchLundi,le13Mars加载该资源的方法可参考图12所示的流程图来描述。将非结构化资源(例如,以上所示的示例)读入存储器中(步骤101)并访问对应于该资源的非结构化数据存储(步骤102)。从该数据存储中读取元素(例如,[ID一1,3])(步骤103)。访问资源信息(步骤1201),例如,这可以是对应于特定应用程序的字符串的数据库,并且使用从该数据存储中读取的信息(步骤103),对于所要求的特定语言从资源信息中读取字符串(步骤1202)。然后将该字符串插入到该资源中(步骤1203)并且可重复该方法以将更多的字符串插入到该资源中(步骤103,1201-1203)。在插入了所有所需字符串之后,然后可输出修订的非结构化资源(步骤1204):Hello</p><br>Monday13thMarch</p>在该示例中,非结构化资源最初可能已经用所包括的字符串来编写,然而,这些字符串在构建应用程序可能已被移除(如图3所示)以创建语言无关的、需要更少存储空间、可更高效地加载且更容易本地化的更小的资源。通过以非语言特有的方式来编写资源并且将字符串存储在单独的数据库(或多个数据库)中,第三方也许能够创建用于本地化的附加资源,而无需访问可能是机密的任何代码。在这些情况下,在插入之前将用于插入的所标识字符串与一条或多条规则进行比较可能是有益的(如以上参考各翻译方法所描述的)。这些规则可包含在数据库或如以下所示的非结构化数据存储中<table>tableseeoriginaldocumentpage21</column></row><table>这些规则可另选地分开存储。图13示出用于执行所描述的各方法中的任一种的系统1300的示意图。该系统包括处理器1301和存储器1302。存储器1302用于存储当由处理器执行时使处理器执行各方法所必需的一系列指令。此外,存储器1203用于存储诸如字符串等已经读取的数据。以上所提供的所有示例只是作为示例使用了非结构化资源的非常简单的示例(例如,XML或HTML的单行)。所描述的各方法可用于非常大的非结构化资源,其包含非常多的字符串,导致包括非常多元素的数据存储。例如,非结构化资源可以是XML大型文档、网页等。在以上所给出的示例中,处理非结构化资源中的字符串。然而,字符串的使用只是作为示例,并且所描述的各方法和系统可用于任何类型的数据部分,包括字符串、坐标集、大小、热键等。尽管各方法主要涉及非结构化资源,但是它们也可用于解析其中编辑字符串而不对整个资源产生不利影响是可能的那些结构化资源(例如,不具有长度限制的结构化资源)。各方法可用于文本或非文本格式。在以上示例中,各方法被描述为在运行时、构建时、预运行时等执行。这些术语只是作为示例来使用,并且各方法适于在任何时刻使用。尽管数据存储在以上被描述为标识字符串的标识符和位置,但是数据存储能够另选地用于标识诸如坐标、热键、注释等非结构化资源的其他方面的位置。本领域的技术人员将认识到用于存储程序指令的存储设备可分布在网络上。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载该软件的一部分或全部以运行该程序。或者,本地计算机可按需下载软件的片断,或可以在本地终端处执行一些软件指令而在远程计算机(或计算机网络)处执行一些软件指令。本领域的技术人员将认识到,通过使用本领域技术人员已知的常规技术,软件指令的全部或部分可由如DSP、可编程逻辑阵列等专用电路来执行。在此使用术语H十算机,意指具有处理能力以使其能够执行指令的任何设备。本领域的技术人员将认识到这些处理能力被结合到许多不同设备中,并且因此术语H十算机'包括PC、服务器、移动电话、个人数字助理和许多其他设备。本领域的技术人员将清楚,此处给出的任何范围或者设备值可以被扩展或者更改而不失去所寻求的效果。本文中描述的各方法步骤可以在适当时按任何合适的次序或同时执行。各流程图所示的循环返回只是作为示例,并且各循环可在不同的步骤处开始和/或结束。可以理解,上面对于较佳实施例的描述仅仅是作为例子给出的,而本领域的技术人员可以做出各种修改。权利要求1.一种处理非结构化资源的方法,包括将非结构化资源读入存储器中(101),所述非结构化资源包括一个或多个数据部分;访问与所述非结构化资源相关联的数据结构(102),所述数据结构包括一个或多个元素,每个元素与一数据部分相关联并且包括所述相关联的数据部分的位置信息;将第一元素从所述数据结构读入到存储器中(103),所述第一元素包括对第一数据部分的位置信息;使用所述第一数据部分的位置信息来定位所述非结构化资源中的第一数据部分;处理所述第一数据部分;以及对所述数据结构中的一个或多个元素中的每一个重复所述读取、定位和处理步骤。2.如权利要求l所述的方法,其特征在于,还包括访问替换数据部分的存储,并且其中,处理所述第一数据部分包括基于所述第一元素从所述替换数据部分的存储中选择第一替换数据部分;以及将所述第一替换数据部分插入到所述非结构化资源中以替换所述第一数据部分。3.如权利要求2所述的方法,其特征在于,将非结构化资源读入存储器中包括将非结构化资源从一位置读入存储器中;并且其中,所述方法还包括将修改的非结构化资源输出到所述位置。4.如权利要求2或3所述的方法,其特征在于,还包括在所述选择步骤之后,检查所述第一替换数据部分是否满足预定义准则,并且如果不是,则省略所述插入步骤。5.如权利要求4所述的方法,其特征在于,所述预定义准则包括数据部分长度准则、有效字符准则或预定义资源列表。6.如权利要求4或5所述的方法,其特征在于,还包括将所述预定义准则从所述非结构化资源、所述数据结构或所述替换数据部分的存储读入存储器中。7.如权利要求2-6中任一项所述的方法,其特征在于,还包括在将非结构化资源读入存储器中之前加载应用程序;以及检查所述应用程序所要求的语言;其中所述非结构化资源与所述应用程序相关联并且所述方法还包括将修改的非结构化资源传递给所述应用程序。8.如权利要求7所述的方法,其特征在于,还包括在访问替换数据部分的存储之前,基于所述应用程序所要求的语言来标识所述替换数据部分的存储。9.如权利要求2-8中任一项所述的方法,其特征在于,所述替换数据部分的存储包括以下之一针对一种或多种语言进行翻译的数据部分的数据库和字典数据库。10.如前述权利要求中任一项所述的方法,其特征在于,数据部分包括字符串、热键、坐标集、大小、可修改数据或可本地化数据。11.如权利要求l所述的方法,其特征在于,还包括访问规则数据库;并且其中,处理所述第一数据部分包括根据所述规则数据库来修改所述第一数据部分以创建第一经修改的字符串;以及将所述第一经修改的数据部分插入到所述非结构化资源中以替换所述第一数据部分。12.如权利要求ll所述的方法,其特征在于,数据部分包括字符串,并且其中,所述规则数据库包括以下各项中的一个或多个长度规则、允许字符规则、允许单词规则、禁止单词规则、语法规则和拼写规则。13.如权利要求1所述的方法,其特征在于,所述非结构化资源中的每个数据部分都包括第一语言的字符串,并且处理所述第一数据部分包括提取第一数据部分,并且其中,所述方法还包括将第二非结构化资源读入存储器中,所述第二非结构化资源包括一个或多个数据部分,所述第二非结构化资源中的每个数据部分包括第二语言的字符串;访问与所述第二非结构化资源相关联的第二数据结构,所述第二数据结构包括一个或多个元素,每个元素与所述第二非结构化资源中的一数据部分相关联并且包括所述相关联的数据部分的位置信息;将第一元素从所述第二数据结构读入存储器中,所述第一元素包括所述第二非结构化资源中的第一数据部分的位置信息;使用所述第二非结构化资源中的第一数据部分的位置信息来从所述第二非结构化资源中提取所述第一数据部分;对所述第二数据结构中的一个或多个元素中的每一个重复所述读取和提取步骤;以及输出从两个非结构化资源中提取的所有数据部分。14.如前述权利要求中任一项所述的方法,其特征在于,所述非结构化资源包括以下之一JavaScript、层叠样式表、INI文件、注册表文件、HTML文件和XML文件。15.如前述权利要求中任一项所述的方法,其特征在于,每个元素还包括数据部分标识符。16.如前述权利要求中任一项所述的方法,其特征在于,所述位置信息包括以下各项中的至少一项数据部分开始位置、数据部分长度指示符和数据部分结束位置。17.如前述权利要求中任一项所述的方法,其特征在于,所述数据结构还包括编码信息。18.—种包括计算机程序代码装置的计算机程序,所述计算机程序代码装置适用于当所述程序在计算机上运行时执行前述权利要求中任一项的所有步骤。19.如权利要求18所述的计算机程序,其特征在于,所述计算机程序被包含在计算机可读介质上。20.—种系统,包括处理器(1301);以及存储器(1302),其与所述处理器(1301)耦合并且是所述处理器可读的,且包含一系列指令,所述指令在被所述处理器(1301)执行时使所述处理器(1301):将非结构化资源读入所述存储器中,所述非结构化资源包括一个或多个数据部分;访问与所述非结构化资源相关联的数据结构,所述数据结构包括一个或多个元素,每个元素与一数据部分相关联并且包括所述相关联的数据部分的位置将第一元素从所述数据结构读入所述存储器中,所述第一元素包括第一数据部分的位置信息;使用所述第一数据部分的位置信息来定位所述非结构化资源中的所述第一数据部分;处理所述第一数据部分;以及对所述数据结构中的一个或多个元素中的每一个重复所述读取、定位和处理步骤。全文摘要描述了处理包含一个或多个数据部分的非结构化资源的系统和方法。该方法包括将非结构化资源读入存储器中并访问与该非结构化资源相关联的数据结构。该数据结构包含多个元素,每个元素包括该非结构化资源中的一数据部分的位置信息。通过使用该位置信息,从该非结构化资源中定位数据部分并对其进行处理,并且对该数据结构中的每个元素重复定位和处理步骤。文档编号G06F17/27GK101427243SQ200780014212公开日2009年5月6日申请日期2007年4月5日优先权日2006年4月21日发明者B·麦克休,T·法瑞尔申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1