汇编软件包的方法、设备和系统转让专利

申请号 : CN201010167158.X

文献号 : CN101907988B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : J·T·萨尔姆V·G·雷哈S·A·巴顿V·M·卡利安普尔

申请人 : 索尼电子有限公司

摘要 :

本发明提供了基于XML的编程语言、工具箱以及开发环境(24、26、28),无需正规的软件编程技术就可以容易地使用并理解它们,以便为计算机汇编完整的软件套件。

权利要求 :

1.一种用于汇编软件包的方法,包括:

将XML结构呈现给用户,所述结构是能用于获得应用程序的、面向对象的编程环境中的类;

允许所述用户使用所述结构来构造XML脚本,所述脚本定义所述软件包的内容,以便包含通过所述用户使用的、用于构造该脚本的所述结构而能获得的应用程序;

解析所述脚本以提供软件代码;以及

执行所述软件代码以自动地将由所述脚本定义的至少两个应用程序汇编成软件包。

2.如权利要求1所述的方法,包括:在计算机显示器(40)的类窗口(42)中呈现至少某些类,以供用户对其进行选择。

3.如权利要求1所述的方法,包括:对至少与所述软件包的标识有关的信息进行提示。

4.一种汇编软件包的设备,包括:

用于向用户呈现XML结构的部件,所述结构是能用于获得应用程序的、面向对象的编程环境中的类;

用于允许所述用户使用所述结构来构造XML脚本的部件,所述脚本定义所述软件包的内容,以便包含通过用户使用的、用于构造该脚本的所述结构而能获得的应用程序;以及用于解析所述脚本以提供软件代码的部件;

用于执行所述软件代码以自动地将由所述脚本定义的至少两个应用程序汇编成软件包的部件。

5.一种用于汇编计算机的软件包的系统,所述系统包括:模型部件(24),包含用于生成至少两个软件应用程序的列表的面向对象的应用程序编程接口(API);

控制器部件(26),与所述模型部件(24)进行通信并包含分析程序,所述分析程序将所述列表解析成用于执行的代码,以便自动将所述至少两个软件应用程序汇编成软件包;以及查看部件(28),与所述控制器部件(26)进行通信来将用于获得应用程序的对象类呈现给用户,以便在生成列表时使用所述对象类,其中,直接或者间接地引用的应用程序编程接口被包含在所述模型部件(24)内,并且未直接被包含在所述模型部件(24)内的应用程序编程接口具有将所述控制器部件(26)指向它们各自位置的包装函数。

6.如权利要求5所述的系统,其中,所述列表包含与所述应用程序相关联的存储位置。

7.如权利要求5所述的系统,其中所述API是基于XML的。

8.如权利要求7所述的系统,其中所述代码是C++。

9.如权利要求8所述的系统,包括:在计算机显示器(40)的类窗口(42)中呈现至少一些类以便由用户对其进行选择的装置。

10.如权利要求9所述的系统,包括:对至少与所述软件包的标识有关的信息进行提示的装置。

说明书 :

汇编软件包的方法、设备和系统

[0001] 本申请是申请日为2004年10月14日、申请号为200480032632.0、发明名称为“用于建立软件套件的系统和方法”的发明专利申请的分案申请。
[0002] 相关申请
[0003] 本申请要求2003年11月7日提交的美国临时专利申请序号为No.60/518,285的优先权。
[0004] 技术领域
[0005] 本发明通常涉及个人计算机。
[0006] 背景技术
[0007] 个人计算机(例如Sony的VAIO 计算机)包含一组为每个项目构建的规范而创建的定制软件部件。换句话说,某些计算机必须具有第一套软件,例如文字处理软件、音频-视频软件,而另一组计算机可能被指定具有第二套不同的软件,以此向顾客提供更多的选择。在这里“软件套件”指计算机的完备的和全部的软件集合、以及发布到比如各厂家和测试小组的部件,这些部件作为整个项目发布的部分被组装在一起。 [0008] 创建每个定制程序组需要许多的步骤,其中涉及多个互相分离的程序。迄今为止,在汇编程序组的各个程序时,工程师们不得不从一个或多个中央数据库中手工定位所期望的程序并且将这些程序复制到比如用于将软件载入到计算机上的光盘上。这些操作费时并且为了从零开始构建新指定的程序组而需要人工干预。此外,由于“构建”不是自动的,因此错误和不一致性不可避免地出现在这样的“构建” 中。
[0009] 经审察而知,理想的方式是提供一种为计算机组汇编软件套件的自动方法。然而,正如这里进一步认识到的,汇编者可能不具备编程语言(例如C++)的专业知识。因此,本发明认识到需要提供一种不需要正规的编程知识就能够自动汇编软件套件的方法。 发明内容
[0010] 一种为计算机汇编软件包的方法包括将XML结构呈现给用户、并允许用户使用该结构来构造XML脚本,所述脚本定义了软件包的内容。该方法还包括解析脚本以提交C++软件代码以及执行该C++软件代码从而自动地将内容汇编成软件包。
[0011] 在优选实施例中,该结构是面向对象的编程环境中的类。该类可在计算机显示器上的类窗口中呈现给用户,以供用户对其进行选择。在执行期间,用户可被提示输入与例如软件包的标识相关的信息。
[0012] 另一方面,用于自动将至少两个软件应用程序汇编成软件包并将其载入到计算机上的系统中,包括用于识别脚本中应用程序的分层的面向对象方法。该系统还包括将脚本解析成可执行代码的方法。提供了用于执行代码以自动汇编软件包的方法。 [0013] 在又一方面,软件系统包括模型部件,所述模型部件包含可用于生成软件应用程序列表的面向对象应用程序编程接口(API)。控制器部件与模型部件进行通信,并且控制器部件包含分析程序,分析程序将列表解析成用于执行的代码,以将应用程序自动汇编成软件包。查看部件与控制器部件进行通信来将对象类呈现给用户,以在生成列表时使用对象类。

附图说明

[0014] 参考附图可更好地理解本发明的细节(关于其结构和操作),其中相同的标记指相同的部分,附图中:
[0015] 图1是本系统的框图;
[0016] 图2是软件结构的框图;
[0017] 图3是本发明的通用逻辑单元的流程图;
[0018] 图4是示出XML脚本分层图的示意图;以及
[0019] 图5是示出用户显示的屏幕截图。

具体实施方式

[0020] 首先参见图1,示出的是一般表示为10的系统,其中包括载入定义计算机12,所述载入定义计算机12具有一个或多个输入装置14(例如鼠标、键盘等)以及一个或多个输出装置16(例如计算机监视器、打印机、网络等)。载入计算机12与一个或多个软件应用程序的数据源(例如载入数据库18)进行通信,以将应用程序汇编成程序组或软件包,所述的程序组或软件包可被复制到例如光盘20上用于将这些软件应用程序载入到目标计算机上,例如可以是比如SonyVAIO 电脑的膝上型计算机22上。
[0021] 图2示出了可由载入计算机12执行的软件结构,图3以非限制性的流程图格式示出了该结构的主要功能性。如图2所示,本软件可包括模型部件24、控制器部件26和查看部件28。模型部件24包含系统应用程序编程接口(API),它是用于生成软件应用程序列表的最好的XML面向对象结构。因此,API是一组为编程自动化提供公用窗口命令的函数。模型部件24实质上是工具箱和信息库,该信息库包含了从文件处理和程序执行到消息显示和数据库18访问的若干函数。
[0022] 更具体地说,模型部件24创建了动态链接库(DLL)文件,根据下文的公开内容通过微软公司的“.NET”系统可理解动态链接库(DLL)文件。模型部件24还是用户为获得应用程序可选择的所有XML对象类的知识库。另外,模型部件24可包括具有用于通用包装函*数的适配器的控制部分,以使原始C++数据类型结构(例如“int” 和“char”)分别被转* *
换成Object 和String。它还具有可用来记录任何命令执行结果的设置类。这实际上可通过类内的C++函数实现。每个API命令可以是单(single)类内的函数,或者可以作为个别(individual)类来实现。
[0023] 控制器模块26包含了系统语言结构背后所有的业务逻辑,系统语言结构包括变量说明和条件语句,并且该模块代表了将收自用户的应用程序列表解析成用于执行的代码以将应用程序自动汇编成软件包的分析程序。为此,控制器模块26包含了在查看部件28和模型部件24之间的最小限度的耦合,并在两者之间提供了清晰的分隔。如果该代码转换成另两个部件中的任何一个,则控制器模块26不需要重新编译。
[0024] 查看模块28是用户界面,它允许通过控制器部件26访问模型部件24以将对象类呈现给用户,以在生成定义将要汇编成软件包的应用程序的列表或脚本时使用对象类。可以有两个查看,一个仅用于程序执行以及可在命令行运行的调试,而另一个是用于创建、编辑以及执行系统脚本的用户界面。两者都可以从XML脚本或者另外通过界面内的API选择来接收输入。
[0025] 图3示出了嵌入系统10的总体逻辑。从方框30开始,在比如基于XML对象类中的所期望的功能性被置于模型部件24中。在方框32处,调用查看部件28以在图1所示的监视器16上向用户呈现在下文中将进一步讨论的功能类。在方框34处,用户可以选择不同的类以生成将要汇编成软件包或软件套件的应用程序的脚本或列表。一旦完成,该逻辑转到方框36,通过将XML解析成可执行代码(例如C++)并且然后执行代码从而执行该脚本,根据包含在脚本中的指令(例如,可以发现某些应用程序的位置),自动地检索在脚本中被标识的应用程序并将其汇编成软件包。作为执行的一部分,可用变量名、值以及其他信息(例如软件包名称等)提示用户。
[0026] 图4表明根据上述原理生成的脚本38可以是分层的,并且因此将 其作为命令的分层序列来对待,这个命令的分层序列被组合以形成可执行的程序。脚本内的所有命令可方便地利用被称为文档类型定义或DTD的所有可能命令的主文件来验证。在执行前通过对照DTD验证XML脚本中的所有命令,保证语法是正确的。
[0027] 如上所述,将XML解析成比如C++可在控制器部件26内完成,控制器部件26处理所有的系统语言结构。在某些实施例中,可使用微软公司的.NET系统的API类XMLValidatingReader处理脚本的验证,所述XMLValidatingReader将XML语法从头到尾每次一个节点地读进存储器用以验证。可利用.NET的API类XPathNavigator完成实际的解析,它使用W3C文档对象模型或DOM[3]。与仅允许向前解析XML代码的XMLTextReader不同,DOM还允许向后导航。对于大多数基本系统命令来说,仅向前解析是足够的,但是对于需要条件语句或者循环的高级命令来说,还需要向后解析,这意味着DOM风格的解析并将全部代码保持在存储器中。
[0028] 因此,可提供基本的和高级的两类命令。当其来自模型部件24时可使用基本命令。它们可独立于任何语言结构并且事实上组成了大部分的系统API。另一方面,高级命令需要额外的XML解析,所述额外的XML解析可能会要求多次调用同一命令。另外,某些高级命令(例如条件和循环语句)允许嵌套命令。图4所示的XML脚本38的分层结构通常类似于树。根据脚本布局,其结构可以是浅层的并代表一个或多个灌木,或者可以是深层的并代表树或森林。的确,图4描述了应用于条件语句以及XML脚本本身的嵌套能力。图4中的图解以脚本中的相同方式呈现,该图从左到右和从上到下读取。
[0029] 在某些实施例中,为了跟踪通过嵌套命令的向前和向后导航,必需知道深度和当前节点。在脚本执行期间,可记录返回值以确定所期望的路径。非期望的路径被抛弃。这通过在一组堆栈中记录信息而实现。对节点的当前指针通过解析条件语句而移进树的更深处。执行完条件语句后的当前深度被推进堆栈。当指针通过嵌套的条件语句向更 深处移动或者在完成后向更浅处移动时,当前深度分别被推进堆栈或者从堆栈中弹出。另外,有若干个类似的堆栈以跟踪按条件的返回值。尽管可以有四个用于条件语句的堆栈,但是IF和ELSE语句二者都用一个来跟踪深度,还用一个来跟踪返回值。通过将当前节点的值与堆栈中的当前值进行比较,系统10能够理解甚至最复杂的嵌套结构。
[0030] 本发明认识到会出现两种其中类结构必须被知道的场合。第一种为用户界面所需,用以显示所有系统API命令的名称和参数。第二种为控制器模块26所需,控制器模块26在执行期间动态地解释系统API命令参数,以传递输入并调用各命令。 [0031] 图5示出了示范性的用户界面40,其中系统API(实质上是功能性类)的列表42被呈现于右侧方格区,示范的消息框命令的参数被呈现于底部方格区44。通过向上或向下滚动右侧方格区,其他命令的参数也可在底部方格区中被显示。还可方便地设置工具条46。
也可设置主方格区50。
[0032] 每个系统API命令不必要求控制器26内单独的解析函数来处理每个命令的可变数目的参数,而是共用.NET API的通用解析函数来动态地解释和调用系统API命令。这可通过被称作自省的面向对象部件概念以及动态调用来实现。取自XML脚本的输入被动态地传递到系统API命令以作动态调用。这意味着输入(XML脚本)可改变而无需重新编译控制器部件26。通常,在未应用这些概念的情况下,对于通过常规应用程序的静态调用,参数值将是固定的。只有高级命令需要明确的、单独的解析函数。
[0033] 上文已提到.NET内部过程调用。通过直接或者间接引用的系统API完全被包含在模型部件24内。没有直接被包含在模型部件24内的所有API命令被要求具有将控制器部件26指向它们各自位置的包装函数。在某些场合,可能需要许多嵌套的包装函数,它们再次使用已有的、几乎未修改的代码和编程成果。在一些实施例中,独立于语言的代码的再次使用可通过微软公司的部件对象模型(COM)而方 便实现。
[0034] 在一些非限定性的实施例中,没有提供需要增加逻辑的用户界面。一旦部件被注册,该部件就可加以应用,如同代码是直接在模型部件24中的相关类内一样。图1所示的数据库18的数据输入可通过具有包含了专用于其任务的GUI字段的用户界面的COM对象方便实现。它可以是单个功能块,但是它本身不是完整的应用程序,而是一个对象,例如是包含用户交互和后端功能性的应用程序块。它不能就这样使用,因此必须在使用前将其置于容器中。本系统10提供了这样一个称作ControlForm的容器。该类基本上是具有两个按钮-OK和Cancel的窗口。实际的功能性来自被置于ControlForm容器中的一个或多个可交换的COM对象。作为其多态性的一例,该容器对象是一个窗口,该窗口在一种场合请求数据库18登录数据输入而在另一场合请求数据库18项目选择数据输入。一个显示可交换部件的容器之使用意味着,通用容器逻辑以及OK与Cancel按钮不需要设在每个COM部件内。它还意味着,如果需要也不必专门创建唯一的新表格与部件就可在同一表格上显示不止一个部件。
[0035] 根据本发明的原理,各系统API命令最好返回一个告知命令是否正确执行的值,使得根据布尔真或假来解析高级结构成为可能。除了所需要的布尔返回值,各命令还可返回近乎无限的专用于命令的值。.NET的ArrayList结构通过将数据存储为动态可扩展的对象阵列而使之成为可能。对象可以是允许转换到任何其他类型的类属.NET结构。 [0036] 可以只是临时将Arraylist返回结构保持在存储器中。对于每个由XML脚本执行的命令,其返回结构被下一命令的返回结构所代替。这要求在执行系统API命令之后立即保存任何的返回值。在执行高级系统命令时,该过程自动执行。当使用用户定义的变量时,用户可以手动地将返回值从存储器保存到变量中。
[0037] 在一些实施例中,可提供四种说明用户定义的变量的方法。第一 种是通过系统API命令AddVariable,它在运行前需要将变量名与值置于脚本中。各变量类型作为字符串存储,并且各命令内部的每个参数首先作为字符串被读取,稍后通过当前系统命令或通过另一系统命令转换成另一类型。
[0038] 说明变量的第二种方法是通过系统API命令PromptAddVariable,它与AddVariable类似,但它只在用于变量值的执行时提示用户。该变量名仍然在脚本内说明,并且在运行时固定。
[0039] 说明变量的第三种方法是通过系统API命令AddVarFromMem,它根据前一命令的ArrayList返回结构中的指定位置存储返回值。这需要对前一命令和可用的返回结构有一些了解。
[0040] 说明变量的第四种方法是AddMultipleFromMem,它类似于AddVarFromMem,但是允许将前一命令的所有返回值存储到多个用户定义的变量中。
[0041] 通过利用AddVarFromMem或AddMultipleFromMem,在程序运行时,临时存储的返回值可被保留在存储器中。通过使用上述四个命令的组合,用户可说明变量并且为变量赋值、将用户输入读入变量并将变量指派给另一命令的输出。
[0042] 系统专用语言命令可包括“If”、“For”和“While”。系统API命令可包括 CopyFolder、DeleteFolder、RenameFolder CopyFile、DeleteFile、RenameFile、ExecuteProgram、AddRegKey、RemoveRegKey、CreateFile、WriteToFile、AddIniSection、RemoveIniSection、AddIniKey、RemoveIniKey、Settings、SetStatus、MsgBox、IsFile、IsDir、IsInFile、IsRegKey、IsRegValue、IsIniSection、IsIniKey、IsNT。 [0043] 以下呈现的是一些所谓的“用例”,它们代表没有经过正式的XML格式化的脚本。 [0044] 1.1创建INI配置文件
[0045] Description Create INI file or files for a given recovery tool [0046] Use Case identifier B1
[0047] Author
[0048] Date 5/01/2003
[0049] Revised
[0050] Actors Release Engineer
[0051] Pre-conditions FI-%Project name%-PAC File-BOM is locked [0052] Actions(Use AddVarToText after each command)
[0053] Run Program to generate INI script files
[0054] open VSMS database
[0055] Query Project(GetProject)
[0056] open FI-project-Pac File BOM(GetBOMData?)
[0057] Assign Pac Files(AutoAssignPACFiles)
[0058] Update multiplie(set all to compressed)(SetARCDCompressed?) [0059] open Program to generate INI script files
[0060] Generate ARCD recovery media Scripts(GenerateARCDScripts) [0061] Select Drive to generate files to
[0062] View Scripts(Optional)
[0063] Check-in INI configuration files(Checkin)
[0064] Upload to VSMS database(UploadFiles)
[0065] Send Release Mail for INI(DumpText)
[0066] Subject=VAIO INI FILES RELEASE NOTIFICATION % project [0067] name%
[0068] %phase%
[0069] Project
[0070] PC Model
[0071] Build
[0072] INI File name and unique identifier
[0073] list changes from last build
[0074] Post-conditions Tested during PAC File Creation process [0075] Includes Check-In
[0076] Upload
[0077] Extends
[0078] Generalizes
[0079] 1.2创建Pac文件(套装软件)
[0080] Description Creates PAC file(s)for software recovery tools [0081] Use Case identifier B2
[0082] Author
[0083] Date 5/01/2003
[0084] Revised
[0085] Actors Release Engineer
[0086] Pre-conditions INI file(s)created
[0087] Actions Copy files to local drive
[0088] Open browser
[0089] Browse to ARCD Scripts directory
[0090] Execute program to copy individual software locally from the network
[0091] (ExecuteProgram)
[0092] Verify files are copied to local drive
[0093] Execute program to package each directory(ExecuteProgram) [0094] Check-in PAC File(s)(CheckIn)
[0095] Upload to VSMS database(UploadFiles)
[0096] Send Release Mail for PAC File(s)(DumpText)
[0097] Subject=VAIO PAC FILES RELEASE NOTIFICATION % project [0098] name%
[0099] %phase%
[0100] Project
[0101] PC Model
[0102] Phase
[0103] DMI information
[0104] #PAC Files
[0105] PAC File Names
[0106] Changes from Last Build
[0107] Known Issues
[0108] Special Notes
[0109] Post-conditions Must be tested during software download and recovery
[0110] process
[0111] Includes Create INI
[0112] Check-In
[0113] Upload PAC File(s)
[0114] Extends Create-INI
[0115] Generalizes
[0116] 1.3创建RDVD恢复媒体
[0117] Description Creates RDVD(s)for HDD Recovery machines that have [0118] DVD drives
[0119] Use Case identifier B5
[0120] Author
[0121] Date 5/02/2003
[0122] Revised
[0123] Actors Release Engineer
[0124] Pre-conditions Pac File(s),INI File(s),and Image File(s)are [0125] created
[0126] Actions Create PAC File(s)
[0127] Create Recovery Partition
[0128] Test Recovery Functionality
[0129] Copy files to local drive
[0130] Copy PI Contents Local
[0131] Copy Foundation Image files(s)local
[0132] Delete the Minint Folder
[0133] Copy RDVD Boot files to Local
[0134] Create ISO File(s)
[0135] Create master RDVD(s)
[0136] Test
[0137] Check-in RDVD(s)
[0138] Turn-in RDVD(s)to Software Librarian
[0139] Send Release Mail for RDVD
[0140] Subject=VAIO RDVD FILES RELEASE NOTIFICATION % project [0141] name%
[0142] %phase%
[0143] Project
[0144] PC Model
[0145] Phase
[0146] Image Unique identifier
[0147] RDVD Unique identifier
[0148] Recovery partition Unique identifier
[0149] DMI information
[0150] Version
[0151] Media
[0152] Volume Labels
[0153] Changes from Last Build
[0154] Known Issues
[0155] Special Notes
[0156] Post ISO File(s)
[0157] Post-conditions Must be tested with the correct machine(s),DMI [0158] information
[0159] Includes Check-In
[0160] Post ISO(not created yet)
[0161] Extends None
[0162] Generalizes None
[0163] 1.4创建HRCD恢复媒体
[0164] Description Creates HRCD(s)for HDD Recovery machines that do not [0165] have DVD drives
[0166] Use Case identifier B6
[0167] Author
[0168] Date 5/02/2003
[0169] Revised
[0170] Actors Release Engineer
[0171] Pre-conditions Pac File(s),INI File(s),and Image File(s)are created [0172] Actions Create PAC File(s)
[0173] Create Recovery Partition
[0174] Test Recovery Functionality
[0175] Create master HRCD(s)
[0176] Create ISO File(s)
[0177] Test
[0178] Check-in HRCD(s)
[0179] Turn-in HRCD(s)to Software Librarian
[0180] Send Release Mail for HRCD
[0181] Subject=VAIO HRCD FILES RELEASE NOTIFICATION % project [0182] name%
[0183] %phase%
[0184] Project
[0185] PC Model
[0186] Phase
[0187] Image Unique identifier
[0188] HRCD Unique identifier
[0189] Recovery Partition Unique identifier
[0190] DMI information
[0191] Version
[0192] Media
[0193] Volume Labels
[0194] Changes from Last Build
[0195] Known Issues
[0196] Special Notes
[0197] Post ISO File(s)
[0198] Post-conditions Must be tested with the correct machine(s),DMI [0199] information
[0200] Includes Check-In
[0201] Post ISO(not created yet)
[0202] Extends None
[0203] Generalizes None
[0204] 1.5登记
[0205] Description Check in any item into VSMS database
[0206] Use Case identifier S1
[0207] Author
[0208] Date 5/02/2003
[0209] Revised
[0210] Actors Release Engineer
[0211] Pre-conditions None
[0212] Actions Check-in an item
[0213] Open VSMS database
[0214] Select Software Release/Submit
[0215] Select Vendor
[0216] Select Component/Release Name
[0217] Click Submit
[0218] Fill in the form completely with all applicable data [0219] Click Submit
[0220] Post-conditions None
[0221] Includes None
[0222] Extends None
[0223] Generalizes None
[0224] 1.6加载到VSMS数据库
[0225] Description Upload an item to the appropriate locations [0226] Use Case identifier S2
[0227] Author
[0228] Date 5/02/2003
[0229] Revised
[0230] Actors Release Engineer
[0231] Pre-conditions Item is checked in to VSMS database
[0232] Actions Open VSMS database
[0233] Select Software Release/Query
[0234] Select Vendor
[0235] Select Component/Release Name
[0236] Click on the Unique identifier for the Item
[0237] Select view item
[0238] Click on Upload
[0239] Follow on screen prompts
[0240] Post-conditions None
[0241] Includes None
[0242] Extends None
[0243] Generalizes None
[0244] 1.7加载ISO文件
[0245] Description Upload an item to the appropriate locations [0246] Use Case identifier S2
[0247] Author
[0248] Date 5/02/2003
[0249] Revised
[0250] Actors Release Engineer
[0251] Pre-conditions None
[0252] Actions Check-in an item
[0253] Open VSMS database
[0254] Select Software Release/Query
[0255] Select Vendor
[0256] Select Component/Release Name
[0257] Click Submit
[0258] Post-conditions None
[0259] Includes None
[0260] Extends None
[0261] Generalizes None
[0262] 尽管这里所示并被详细描述的、特别的“用于建立软件套件的系统和方法”完全能获得本发明的上述对象,但是当会理解,它是本发明目前的优选实施例且因此是本发明广泛考虑的主题的代表,本发明的范围完全包括本领域技术人员显而易见的其他实施例,除了所附权利要求之外,本发明的范围不受任何其他限制,文中以单数形式提到一个元件并意指“仅有一个”(除非明确说明),而是指“一个或多个”。一个装置或方法不必处理本发明试图解决的每一个问题,因为这些问题由本发明的权利要求涵盖。此外,无论元件、部件或方法步骤是否在权利要求中被明确列举,本公开中没有意在奉献于公众的元件、部件或方法步骤。凡本文未明确定义的,权项将给出所有普通的和惯常的含意,它们与本说明及申请档案资料没有冲突。