将抽象句法表示法1数据模型化成对象模型的方法及系统的制作方法

文档序号:6573148阅读:240来源:国知局
专利名称:将抽象句法表示法1数据模型化成对象模型的方法及系统的制作方法
技术领域
本发明一般涉及计算机软件开发。更具体地,本发明涉及将ASN.1(抽象句法表示法1)编码的数据动态映射到对象模型以产生ASN.1数据结构的方法。
背景技术
抽象句法表示法1(ASN.1)是一种定义相互可操作性的抽象数据和消息格式的国际标准。尽管最初ASN.1用于描述开放系统互联环境中的电子邮件消息,但从那时起ASN.1已经被更广范围的其他应用所采用,如应用在网络管理、安全、移动(蜂窝)电话、空中交通管制以及因特网上的语音和视频中。实例包括X.509认证、公钥加密标准、Kerberos(科伯罗思)、类属安全服务API(应用编程接口)以及认证管理协议。
ASN.1数据类型是从基本数据类型(即,整型、实型、布尔型和空)中建立的,使用三种主要的构建机制重复(SEQUENCE OF(之序列)和SETOF(之组))、选择(CHOICE)以及字段列表(SEQUENCE(序列)和SET(组))。一旦已经定义了ASN.1数据,该ASN.1数据可以确定地用在其他ASN.1数据类型的定义中,就好象它是基本数据类型一样。这样的数据类型可以在使用前或在(向前引用)后定义。这种递归定义的数据结构可能增加,结果变得非常复杂,特别是在要求将编码ASN.1描述编码成特异编码法(DER)编码字节数组,并解码它们的情况下。DER是编码ASN.1数据结构以在开放系统互联(OSI)的应用层和表示层之间转送的标准编码法。它提供了一种方法,使表示层可以可靠地与其它计算机系统交换任何任意数据结构,同时应用层可以将编码的数据映射成适合终端用户的任何类型的表示或语言。
现在,越来越多的企业已经采用面向对象设计和编程,因为它具有许多优点,诸如可复用性和易于维护等。Java是面向对象、独立平台和安全语言的一个例子,它已经从新兴技术变成为一种成功的安全电子商务应用的主流语言。
因此,将会需要一种工具,将ASN.1编码的数据映射到对象模型,并能够将ASN.1编码的数据翻译成原始的Java源代码,以帮助企业有效地开发或移植到面向对象的、跨平台的应用。

发明内容
本发明提供一种将ASN.1数据映射成对象模型的方法、程序和系统。本发明具体如下识别数据流的开始,并接着产生该数据的新对象名;然后分析(parse)数据获得识别符和数据长度;接着分析数据的标签(tag)类型,如果标签类型是简单型,则为该数据产生一类(class)图,并产生该数据的源代码,如果标签类型不是简单型,则在产生类图和源代码之前,调用子例程进一步分析该数据。


在所附的权利要求书中陈述了本发明的确有新颖性特征的特点。但是通过结合阅读附图,下面的对说明性实施例的详细描述将使本发明自身以及本发明的使用优选模式、更进一步的目的和优点得到最好的理解。
图1描述了可以实现本发明的数据处理系统的网络示图;图2描述了根据本发明优选实施例的可以用做服务器的数据处理系统的方框图;以及图3描述了说明可以实现本发明的数据处理系统的方框图;图4描述了根据本发明的从ASN.1数据类型中产生的对象图;图5描述了说明根据本发明的分析数据流以及创建分类以及ASN.1数据类型的例程流程图;图6描述了说明根据本发明的分析数据的子例程的流程图;图7描述了根据本发明的输出类别图;图8描述了说明根据本发明的分析子例程执行顺序的对象图。
具体实施例方式
现在参照附图,图1描述了可以实现本发明的数据处理系统的网络示图。网络数据处理系统100是可以实现本发明的计算机网络。网络数据处理系统100包括网络102,为用于在网络数据处理系统100中连接在一起的各种设备和计算机之间提供通信链路的介质。网络102可以包括诸如有线、无线通信链路或光缆的连接。
在所述实例中,服务器104连接到网络102及存储单元106。另外,客户机108、110和112也连接到网络102。例如这些客户机108、110和112可以是个人计算机或网络计算机。在所述实例中,服务器104向客户机108-112提供诸如引导文件、操作系统映像(image)以及应用程序之类的数据。客户机108、110和112是服务器104的客户机。网络数据处理系统100可以包括未示出的附加的服务器、客户机和其他设备等。
在所述实例中,网络数据处理系统100是具有代表世界范围的使用TCP/IP系列协议彼此进行通信的网络和网关的集合的网络102的因特网。在因特网的中心是在包括数以千计的商业、政府、教育以及传递数据和消息的其他计算机系统的主节点或主计算机之间的高速数据通信链路的主干。当然,网络数据处理系统100还可以被实现成多个不同类型的网络,例如,诸如企业内部网、局域网(LAN)或广域网(WAN)之类的网络。图1仅作为一个实例,而不是作为本发明的结构限制。
参照图2,根据本发明优选实施例描述了可以实现为一个服务器(例如图1中的服务器104)的数据处理系统的方框图。数据处理系统200可以是包括连接到系统总线206上的多个处理器202和204的对称多处理器(SMP)系统。或者,也可以使用单个处理器系统。并且存储器控制器/高速缓存器208也连接到系统总线206,其中提供了到本地存储器209的接口。I/O总线桥210连接到系统总线206并提供到I/O总线212的接口。存储器控制器/高速缓存器208和I/O总线桥210也可以如所述那样集成。
连接到I/O总线212的外设部件互联(PCI)总线桥214提供到PCI本地总线216的接口。多个调制解调器可以连接到PCI总线216。典型的PCI总线的实现将支持4个PCI扩展槽或附加(add-in)连接器。可以通过附加板连接到PCI本地总线216上的调制解调器218和网络适配器220提供图1中至网络计算机108-112的通信链接。
附加PCI总线桥222和224为附加PCI总线226和228提供接口,从中可以支持附加调制解调器或网络适配器。在这种方式中,数据处理系统200允许与多个网络计算机的连接。正如所述的,存储器映射图形适配器230和硬盘232也可以直接或间接地连接到I/O总线212。
本领域普通技术人员会理解,图2所示硬件可以改变。例如,除了使用或取代所述的硬件以外,也可以使用诸如光盘驱动器等的其它外部设备。所述实例并不意味着对本发明结构的限制。
例如图2中描述的数据处理系统可以是运行着高级交互执行体(AIX)操作系统的、位于纽约Armonk的国际商用机器公司的产品IBM RISC/System6000系统。
现在参考图3,描述说明可以实现本发明的数据处理系统的方框图。数据处理系统300是客户计算机的实例。数据处理系统300采用外部部件互联(PCI)本地总线结构。尽管所描述的实例使用PCI总线,也可以使用诸如加速图形接口(AGP)和工业标准结构(ISA)的其它的总线结构。处理器302和主存储器304通过PCI桥308连接到PCI本地总线306上。PCI桥308也可以包括用于处理器302的集成的存储器控制器和高速缓存器。可以通过直接部件互联或通过附加板产生与PCI本地总线306的附加连接。在所述的实例中,局域网(LAN)适配器310、SCSI(小型计算机系统接口)主总线适配器312以及扩展总线接口314通过直接部件互联连接到PCI本地总线306上。相反,音频适配器316、图形适配器318和音频/视频适配器319通过插入在扩展槽中的附加板连接到PCI本地总线306。扩展总线接口314提供键盘和鼠标适配器320、调制解调器322和附加存储器324的连接。小型计算机系统接口(SCSI)主总线适配器312提供硬盘驱动器326、磁带驱动器328以及CD-ROM驱动器330的连接。典型的PCI本地总线的实现将支持3至4个PCI扩展槽或附加连接器。
操作系统运行在处理器302上并用于协调和提供图3中的数据处理系统300中的各种部件的控制。操作系统可以是市场可得的操作系统,诸如可从微软公司得到的视窗2000。诸如Java的面向对象编程系统可以结合操作系统运行,并提供从Java程序向操作系统的调用或在数据处理系统300上的执行的应用程序。“Java”是太阳微系统公司的商标。用于操作系统、面向对象的操作系统和应用或程序的指令放置在诸如硬盘驱动器326的存储设备上,也可以载入到用于处理器302执行的主存储器304中。
本领域普通技术人员会理解图3的硬件可以根据实现来改变。除了使用图3中所述的硬件以外,还可以使用诸如快闪ROM(或等价的非易失性存储器)或光盘驱动器等之类的其它内部硬件或外部设备,或替代图3中的硬件。并且,本发明的处理可以应用到多处理器数据处理系统中。
作为另一个实例,不管数据处理系统300是否包括某种网络通信接口,数据处理系统300都可以是一个独立配置可引导的系统,而不依赖某种网络通信接口。作为再一个实例,数据处理系统300可以是个人数字助理(PDA)设备,其中配置有ROM和/或快闪ROM以便为存储操作系统文件和/或用户生成的数据提供非易失性存储器。
图3中所述实例和上述实例不意味着结构限制。例如,除了采取PDA形式,数据处理系统300也可以是笔记本计算机或手持计算机。数据处理系统300还可以是信息台(kiosk)或网络(web)应用。
本发明将ASN.1数据译成对象模型,接着产生源代码,在图形用户接口(GUI)上显示每一属性值。ASN.1数据可能是用ASN.1表示编写的一条编码数据、一个二进制文件、一个由ASN.1表示法写成的文本文件,或仅是从输入设备键入的ASN.1表示。GUI可以在JavaBean(Java豆)中实现并封装在运行于Beanbox(豆盒)或能够插入到诸如Visual Cafe(可视室)的Java开发环境中的Java Archive(JAR)(Java档案)文件中。
输入数据的实例在表1中说明,表1包括以十六进制显示的二进制编码的数据流。
表1000000003081CD02 01010201 003081C5 302D02010000001001041841 5A4E5F50 45524D49 4E464F5F0000002041554449 544C4556 454C0030 0E3 00C020000003001010201 02040400 00000030 2B020101000000400416415A 4E5F5045 524D494E 474F5F51000000504F505F55 494E5400 300E300C 020101020000006001020404 00000000 302E0201 01041941000000705A4E5F55 45524D49 4E464F5F 5741524E00000080494E474D 4F444500 300E300C 020101020000009001020404 00000000 30370201 01042241000000A05A4E5F50 45524D49 4E464F5F 5741524E000000B0494E474D 4F444550 45524D49 54544544000000C000300E30 0C020101 02010204 04000000
从表1所示的数据流中产生的ASN.1数据类型如下所示<pre listing-type="program-listing">ClassA=Sequence{ attribute1 INTEGER, attribute2 INTEGER, attribute3 OCTETSTRING}ClassB=SEQUENCEOF{ attribute1 ClassA}ClassC=SEQUENCE{ attribute1 INTEGER, attribute2 OCTETSTRING, attribute3 ClassB}ClassD=SEQUENCEOF{ ClassC}ClassE=SEQUENCE{ attributel INTEGER, attribute2 INTEGER, attribute3 ClassD}</pre>现在参照图4,根据本发明描述从上面说明的ASN.1数据类型中产生的对象图。图4中对象图采用新对象模型建立技术(OMT)表示法。菱形链接表示聚集关系,其中一个类是由多个类组成的。用表示类别对象的方形框显示对象模型。类名、属性和方法列在框中,并且各类别的关系用链接指示。每一类具有特性表,并且对于二进制输入,该表列出了其中的每一对象的值。
参照图5,描述说明根据本发明的分析数据流和创建类及ASN.1数据类型的例程的流程图。将DER数据用做一个实例。但是对于基本编码法(BER)数据流来说,该步骤也是适合的。BER或DER编码数据具有三部分识别ASN.1值标签类型的识别符八位位组、给出作为数据内容的字节数的长度八位位组以及真实数据的内容八位位组。
使用DER法开始该例程以识别编码数据的开始(步骤501)。编码数据从识别符八位位组开始。通常它在输入字节流或二进制文件的开始,但是也不是必须如此。接着,产生新对象名,通常是类名(步骤502)。为方便命名起见,对象名可能是诸如 “类A”或“对象A”之类的一般名字。该例程接着分析一个或多个字节数据以获得识别符(步骤503)。在这点上,对从数据的1至127字节的任何地方进行分析以获得数据长度(步骤504)。在步骤503和504依据BER法分析数据。
获得识别符和数据长度之后,下面的步骤是识别数据所具有的标签类型(步骤505)。如果标签类型是简单型,则产生类图和ASN.1表示(步骤507)。简单型数据具有诸如INTEGER(整型)、GENERAL STRING(通用字符串)、OCTET STRING(八位位组字符串)等之类的简单编码类型的标签。在这种情况下,通过扩展编码类型所对应的超类(superclass)来构建类,例如INTEGER对应于Java2标准编辑API中java.lang.Integer类、GENERALSTRING对应于java.lang.Integer类、OCTET STRING对应于java.lang.Integer类。在图7中说明了输出类图的一个实例,并且ASN.1表示法是ClassA=GeneralString。最后的步骤是产生数据的源代码(步骤508)。
如果标签类型不是简单型,则调用子例程分析数据内容(步骤506)。
现在参考图6,描述说明根据本发明的分析数据的子例程的流程图。“获得识别符”的步骤601和“获得数据长度”的步骤602是和参考图5描述的相同。下面的步骤是分析标签类型(步骤603)。
如果标签类型是简单型,则接着子例程确定所述调用是否来自主例程(步骤608)。如果调用是来自主例程,则为进一步的引用(具有相同标签号的类是相同的类)记录标签号,并且将类简单地返回到主例程(步骤611)。如果调用不是来自主例程,则创建新的属性名,记录数据值,并且将属性与其类相关联(步骤609)。为方便起见,可将属性命名为“attributeA”。如果到达数据末尾,则返回主例程(步骤611)。如果没有到达数据末尾,子例程返回到步骤601。
如果构建了步骤603中分析的标签,则产生新的类名(步骤607),并且子例程返回到步骤601,以便它能够进一步分析所构建类型内的数据内容。子例程能够递归调用以便分析在所构建类型中的所有的数据内容等。所构建的类型包括构件(component)。所构建类型的实例如SEQUENCE、SEQUENCEOF等。SEQUENCE包括一个或多个不同的类型。SEQUENCE OF包括一个或多个给定的类型。
如果在步骤603分析的标签类型是显性的,将直接到“获得识别符”(步骤604)和“获得数据长度”(步骤605),与步骤601和602相似。显性标注的类型是来自于简单型或通过将标签放在基础类型上构建的类型。因此分析显性标注的类型以确定隐含标签类型(underlying tag type)(步骤606)。
如果构建了隐含标签类型,则产生新类名(步骤607)并再次调用子例程分析在该构建的类型中的数据内容(返回步骤601)。如果隐含标签类型是简单型,则在进行方便的命名之后产生新的属性名(步骤610)。
如果已经到达编码数据的末尾,则将所创建的类返回到主例程(步骤611)。如果还没有到达编码数据的末尾,则处理返回到子例程的开始(步骤601)继续分析数据的剩余部分。
对于文本输入,字符串分析器和语法检查器是和底层相关联的。他们在数据结构上执行递归检查。对于二进制输入,字节分析器与底层相关联,它分析字节并识别类、标签号、数据长度和字节流中的内容。
参照图8,描述说明根据本发明的分析子例程执行顺序的对象图。这个流程是显示从编码数据流中如何产生类图的一个实例。
在分析数据时创建类的顺序如下a.开始类的创建(创建该类名);b.开始构件类1的创建(创建类名);c.开始和完成子构件类1的构建(如果是显性标注的类型,则创建类名、识别属性和相关联的值、记录标签号);d.开始和完成子构件类2的构建(如果是显性标注的类型,则创建类名、识别属性和他们的相关联的值、记录标签号);以及e.完成构件类1的构建(识别构件类1的构建机制。如果子构件类1和2是相同的,则重复构建机制。构件类1具有两个为“子构件类1”和“子构件类2”类型的属性。如果它是显性标注的类型,则识别属性和他们相关联的值,记录标签号)。
构件类2和构件类3依照与构件类1相似的过程。最后因为识别了类的所有属性,所以完成了类的构建。
源代码引擎是用于产生在Java源代码中Java类的“skeletal(骨架)”结构的。适当的编码/解码例程被插入到Java代码中以提供功能类(functionalclass)。这些例程产生对包括基本数据类型的编码和解码方法的实用程序(utility)的调用。实用程序库是由Java安全组开发的,作为Java公钥加密标准产品包的一部分。
ASN.1和DER编码是固有的复杂操作。一些存在的工具包提供基本DER类,但他们仍要求开发者对他们的ASN.1定义进行模型化并确定如何调用DER编码/解码例程。当前现存的工具不能帮助开发者和编程者(architect)对面向对象形式中的ASN.1定义进行模型化。本发明提供了这项关键功能,并且因此允许开发者和编程者专注于他们试图解决的问题,而不是机制问题。
本发明降低了在异质类型环境中的与分析、实现和测试的代码相关的时间和成本,允许软件开发者更多关注在商业模型和结构开发上。本发明还帮助开发者和编程者分析当前结构中的数据模型并增强了基于对象表示的设计。另一优点是帮助测试者和网络管理员分析通过动态构建基于数据输入流的对象模型和在图形用户接口中将其显示来分析在网络上传输的数据。
注意下面所述是很重要的,即虽然已经在上文中描述了本发明的全部功能的数据处理系统,本领域普通技术人员将理解本发明的处理能够以指令的计算机可读介质的形式和各种形式传播,并且可以等价应用本发明而不论实际用于实现传播的信号承载介质的具体类型。计算机可读介质的实例包括诸如软磁盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM之类的可记录型介质和诸如数字和模拟通信链路、使用例如射频和光波传输的传输形式的有线或无线通信链路的传输型介质。对于具体数据处理系统中的实际使用,计算机可读介质可以使用被解码的编码格式的形式。
为说明和描述的目的已经给出了本发明的描述,但该描述不是试图穷举或限制本发明的公开形式。对本领域普通技术人员来说许多改进和变型是显然的。选择并描述实施例以最好地解释本发明的原理、实际应用,并使被指控试图具体使用的具有各种改进的各种实施例的本领域的其他普通技术人员能够理解本发明。
权利要求
1.一种将ASN.1(抽象句法表示法1)数据映射成对象模型的方法,该方法包括步骤识别ASN.1数据中的各对象;识别各对象的属性;识别各对象之间的关系;以及产生对象模型。
2.如权利要求1的方法,还包括步骤识别数据流的开始;产生该数据的新对象名;分析该数据以获得数据识别符;分析该数据以获得数据长度;分析该数据的标签类型;如果标签类型是简单型,则为该数据产生一类图;以及产生该数据的源代码。
3.如权利要求2的方法,其特征在于,还包括如果标签类型不是简单型,执行一子例程以进一步分析数据内容的步骤。
4.如权利要求3的方法,其特征在于,分析子例程包括步骤分析数据内容以获得识别符;分析数据内容以获得数据长度;以及分析标签类型。
5.如权利要求4的方法,其特征在于,还包括步骤如果标签类型是简单型,确定对子例程的调用是否来自主例程;如果调用来自主例程,则为进一步引用记录数据标签号并将该数据返回到主例程;以及如果调用不是来自主例程,则为该数据产生属性名,并且如果已经到达数据末尾,则将该数据返回到主例程。
6.如权利要求5的方法,其特征在于,还包括如果没有到达数据末尾则再调用分析子例程的步骤。
7.如权利要求4的方法,其特征在于,还包括步骤如果构建了标签类型,则为该数据产生一新的类名;以及再调用分析子例程。
8.如权利要求4的方法,其特征在于,还包括步骤如果标签类型是显性的,则进一步分析数据内容以获得数据识别符和数据长度;以及分析显性的标签类型以确定隐含标签类型。
9.如权利要求8的方法,其特征在于,还包括步骤如果隐含标签类型是简单型,则为该数据产生一属性名;以及如果已经到达数据末尾,则将该数据返回到主例程。
10.如权利要求9的方法,其特征在于,还包括如果还没有到达数据末尾,则再调用分析子例程的步骤。
11.如权利要求8的方法,其特征在于,还包括步骤如果构建了隐含标签类型,则为该数据产生一新类名;以及再调用分析子例程。
12.一种在计算机可读介质中用在数据处理系统中的计算机程序产品,用于将ASN.1数据映射到对象模型,该计算机程序产品包括用于识别ASN.1数据中的对象的指令;用于识别各对象的属性的指令;用于识别各对象之间的关系的指令;以及用于产生对象模型的指令。
13.如权利要求12的计算机程序产品,其特征在于,还包括用于识别数据流的开始的指令;用于产生该数据的新对象名的指令;用于分析数据以获得数据识别符的指令;用于分析数据以获得数据长度的指令;用于分析数据的标签类型的指令;用于如果标签类型是简单型,则为该数据产生一类图的指令;以及用于产生该数据的源代码的指令。
14.如权利要求13的计算机程序产品,其特征在于,还包括用于如果标签类型不是简单型,以进一步分析数据内容的子例程。
15.如权利要求14的计算机程序产品,其特征在于分析子例程包括用于分析数据内容以获得识别符的指令;用于分析数据内容以获得数据长度的指令;以及用于分析标签类型的指令。
16.如权利要求15的计算机程序产品,其特征在于,还包括如果标签类型是简单型,用于确定子例程的调用是否来自主例程的指令;如果调用来自主例程,用于为进一步引用而记录数据标签号并将数据返回到主例程的指令;以及如果调用不是来自主例程,用于为该数据产生属性名以及如果已经到达数据末尾,则将该数据返回到主例程的指令。
17.如权利要求16的计算机程序产品,其特征在于,还包括如果没有到达数据末尾,用于再调用分析子例程的指令。
18.如权利要求15的计算机程序产品,其特征在于,还包括如果构建了标签类型,用于为该数据产生一新的类名的指令;以及用于再调用分析子例程的指令。
19.如权利要求15的计算机程序产品,其特征在于,还包括如果标签类型是显性的,用于进一步分析数据内容以获得数据识别符和数据长度的指令;以及用于分析显性的标签类型以确定隐含标签类型的指令。
20.如权利要求19的计算机程序产品,其特征在于,还包括如果隐含标签类型是简单型,用于为该数据产生一属性名的指令;以及如果已经到达数据末尾,用于将该数据返回到主例程的指令。
21.如权利要求20的计算机程序产品,其特征在于,还包括如果还没有到达数据末尾,用于再调用分析子例程的指令。
22.如权利要求19的计算机程序产品,其特征在于,还包括如果构建了隐含标签类型,用于为该数据产生一新类名的指令;以及用于再调用分析子例程的指令。
23.一种将ASN.1数据映射成对象模型的系统,该系统包括用于识别ASN.1数据中的对象的装置;用于识别各对象的属性的装置;用于识别各对象之间的关系的装置;以及用于产生对象模型的装置。
全文摘要
提供一种将ASN.1数据映射到对象模型的方法、程序和系统。本发明包括识别数据流的开始,并接着产生该数据的新对象名;然后分析数据以获得识别符和数据长度;接着分析数据的标签类型,如果标签类型是简单型,则为该数据产生一类图,并产生该数据的源代码,如果标签类型不是简单型,则在产生类图和源代码之前,调用子例程进一步分析该数据。
文档编号G06F9/44GK1359065SQ0114362
公开日2002年7月17日 申请日期2001年12月14日 优先权日2000年12月15日
发明者张晓燕, 兰迪·S·汉弗莱, 西奥多·J·L·施雷德, 戴维斯·K·索珀 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1