基于dom框架的odx文档解析和生成技术

文档序号:1742141 发布日期:2019-11-26 浏览:13次 >En<

阅读说明:本技术 基于dom框架的odx文档解析和生成技术 (The parsing of ODX document and generation technique based on DOM frame ) 是由 许蕾 王晓雷 李言辉 徐宝文 于 2018-05-16 设计创作,主要内容包括:本发明提出了一种基于DOM框架的ODX文档的解析和生成技术,主要分为三个模块:XML Schema解析模块,ODX文档解析模块和ODX文档生成模块。XML Schema解析模块将ODX文档的XML Schema规则分成了基本数据类型规则、复杂数据类型规则、结构类型规则、约束类型规则和扩展类型规则,并根据各种类规则设计了符合ODX文档格式的Java类映射规则,使得ODX文档中的每一个类都可以标准化生成对应的Java类映射;ODX文档解析模块首先利用反射机制,循环提取待解析类继承的所有类成员信息,接下来通过DOM框架,获取根节点的所有属性和元素信息放入待解析队列中。最后把待解析队列中的属性或元素的值映射到目标类对应的成员变量中:对于基本数据类型进行直接赋值,对于成员对象进行递归赋值,对于数组变量循环每个数组成员并根据各数组成员的实际类型选择直接赋值或进行递归操作;ODX文档生成模块与解析模块类似,首先循环提取待解析类继承的所有类成员信息,作为待生成队列。接下来对待生成队列的每个成员通过其是否经过解析或修改,判断该成员变量是否应该输出,最后根据不同的数据类型递归的完成ODX文档生成操作:对于基本数据类型进行直接生成,对于成员对象进行递归生成,对于数组变量循环每个数组成员并根据各数组成员的实际类型选择直接生成或进行递归操作。(The invention proposes a kind of parsing of ODX document based on DOM frame and generation techniques, are broadly divided into three modules: XML Schema parsing module, ODX document parsing module and ODX document creation module.The XML Schema rule of ODX document is divided into basic data type rule, complex data type rule, structure type rule, constrained type rule and expansion type rule by XML Schema parsing module, and the java class mapping ruler for meeting ODX document format is devised according to various rule-likes, so that each of ODX document class, which can standardize, generates corresponding java class mapping;ODX document parsing module extracts all class members&#39;s information of Similar integral to be resolved first with reflection mechanism, circulation, and followed by DOM frame, all properties and element information for obtaining root node are put into queue to be resolved.Finally the value of attribute or element in queue to be resolved is mapped in the corresponding member variable of target class: indirect assignment is carried out for basic data type, recurrence assignment is carried out for member object, each array member is recycled for aray variable and indirect assignment is selected according to the actual type of each array member or carries out recursive operation;ODX document creation module is similar with parsing module, first all class members&#39;s information of circulation extraction Similar integral to be resolved, as queue to be generated.Next each member of queue to be generated is parsed or is modified by the way that whether it passes through, judge whether the member variable should export, finally according to the different recursive completion ODX document generation operations of data type: basic data type is directly generated, recursive generation is carried out for member object, each array member is recycled for aray variable and directly generates or carry out recursive operation according to the selection of the actual type of each array member.)

基于DOM框架的ODX文档解析和生成技术

技术领域

本发明属于计算机技术领域,尤其是软件技术领域。本发明提出了一种基于DOM解析框架和Java反射机制的通用型ODX文档解析和生成技术,能够系统性设计ODX文档和Java类之间的映射,并且能够完成任意ODX文档和Java对象之间的相互转换。在车载软件等方面有着广泛的应用需求。

背景技术

道路车辆开放式诊断数据(Open diagnostic data exchange,简称ODX)是一种基于XML 的车辆数据诊断格式。它用来描述和汽车ECU(Electronic Control Unit)相关的数据。包括车辆与ECU之间的控制原语、数据通信原语、通信参数、车辆信息和配置说明等与ECU相关的信息。基于ODX数据库架构的车辆诊断系统可以通过读取和解析每一个ECU的ODX文件,得到与该ECU相关的所有信息,满足各阶段诊断数据的需求。

ODX数据模型提出之前,由于应用场景、开发工具的不同,车辆诊断开发的不同阶段使用的数据格式均不相同。然而诊断开发流程中的各个阶段又相互依存,密不可分。如果诊断需求描述格式不断转换,将难以保证数据的一致性,既增大了需求管理的复杂度,又使各阶段工作衔接困难,增加综合成本。如果在整个诊断开发流程中均使用ODX作为诊断数据格式,由于其开源及标准化属性,上述问题都得以解决。

以ODX数据库架构为基础的新一代车辆通信接口目前已广泛应用在美国和德国的领先汽车企业之中,然而大部分中国车企对于D-Server处于研发阶段,ODX文档的解析和生成,作为D-Server构建的重要组成部分,有着很高的应用价值。因此,本发明立足车企需求痛点,尝试提出高效、准确的ODX文档自动解析和生成算法,为自主研发ODX数据库系统和新一代车辆诊断系统提供参考。

ODX文档主要由XML(eXtensible Markup Language,可扩展标记语言)编写而成。XML 因为其高度的灵活性和可扩展性,被广泛应用于数据交换领域,来保证数据的统一性。相对于普通XML文件,ODX文档同时存在文件架构极大和逻辑关系复杂的特点,传统的XML解析技术无法满足ODX文档解析的需求,需定制化针对ODX的文档的解析和生成技术来解决ODX 文档的解析和生成问题。

综上所述,ODX文档的解析和生成对于搭建ODX数据库,乃至新一代汽车诊断系统有着重要的作用;且目前传统的XML文档解析方法无法满足ODX文档解析的需求。为满足上述需求,本发明提出了一种ODX文档解析和生成技术的设计方法。

发明内容

本发明的主要工作是提出一种基于DOM解析框架和Java反射机制的通用型ODX文档解析和生成技术。该技术主要分为三个模块:XML Schema解析模块,ODX文档解析模块和ODX文档生成模块。分别用来解决ODX文档的Java类映射规则问题,ODX文档到Java对象的转换问题和Java对象到ODX文档的转换问题。其中XML Schema模块设计了符合ODX文档格式的XML Schema转换规则,对ODX文档中的每一个类标准化生成对应的Java类映射;ODX文档解析和生成模块基于DOM解析框架,结合Java反射机制,设计了低耦合高效率的ODX文档和Java对象之间的相互转换算法。针对以上问题,本发明的工作和贡献如下:

1.XML Schema规则解析。XML Schema规则解析模块是ODX文档解析模块和ODX文档生成模块的基础,负责根据ODX XML Schema文件(odx.xsd)构建符合规则的Java数据结构。只有构建了合适的数据结构,才能进行后续的解析和生成操作。odx.xsd文件,作为ODX文档中的XML Schema文件,详细规定了ODX文档每个类的内容结构及其相互之间的关系。本模块的作用就是对odx.xsd中的规则进行转化:首先需要识别odx.xsd文件中出现的所有规则,接下来需要实现各个规则到Java数据结构之间的映射,以保证解析和生成的充分性及完备性,为后面两个模块奠定基础。

2.ODX文档解析。本模块负责完成从ODX文档到XML Schema规则解析模块输出的Java 类的转换过程。输入为ODX文档,输出Java对象。本模块首先需要创建ODX的Java对象,然后需要根据ODX文档的内容,低耦合高效率的解析文档中出现的所有类,并将解析结果储存在Java对象中。

3.ODX文档生成。本模块负责完成从XML Schema规则解析模块输出的Java类到ODX文档的转换过程。输入为Java对象,输出为ODX文档。本模块首先需要创建新的ODX文档,然后需要根据Java对象中的内容和XML文件结构定义,低耦合高效率的生成该对象需要输出的所有成员变量于ODX文档中,输出一个符合odx.xsd要求的XML文档。

附图说明

图1为ODX文档解析和生成技术的三个模块及其对应关系,本发明首先对ODX文档的XML Schema规则进行解析,接下来完成ODX文档与Java对象之间的相互转换。具体过程如下:

1)XML Schema规则转换:ODX文档的所有规则在ODX文档的XML Schema文件odx.xsd 中有明确规定。若要实现ODX文档与Java之间的相互转换,就要对其中出现的各种规则加以解释并给出Java数据结构下的映射,以达到标准化生成Java类的效果。

2)ODX文档生成算法:XML Schema转换完成后,会生成诸多Java对象。此时需要用DOM 框架对ODX文档进行解析,并利用反射机制大大降低DOM框架的高耦合度,递归的解析ODX文档。

3)ODX文档生成算法:首先通过DOM框架创造ODX文档,接下来运用Java反射机制递归生成ODX文档的XML代码。

图2是ODX文档解析模块的伪代码,模块的具体步骤如下:

1)首先,利用反射机制无差别的提取解析类的所有成员信息。

2)接下来利用DOM框架提取待解析根节点的属性和元素信息,构建待解析队列。

3)最后,针对不同数据类型对变量进行递归的赋值操作。

图3是ODX文档生成模块的伪代码,模块的具体步骤如下:

1)首先,利用反射机制无差别的提取解析类的所有成员信息。

2)接下来利用步骤1)中提取出来的成员信息当作待生成队列,循环判断每一个成员变量是否应该输出,如果是则执行输出操作。

具体实施方式

本发明包括三个模块,故根据这三个模块分别描述具体步骤。

XML Schema解析模块具体包括以下步骤:

1)首先,汇总ODX文档的XML Schema文件(odx.xsd)中出现过的所有规则,并进行分类汇总。

2)对于步骤1)提取出的不同种类的规则设计不同的映射规则,确保对应的Java类可以满足这些规则

步骤1)中的规则汇总来自于ODX文档***中的规则汇总。所有的规则可以被分为基本数据类型规则,复杂数据类型规则,结构类型规则,约束类型规则和扩展类型规则。

步骤2)对于步骤1)提取出的不同种类的规则设计了相应的映射方法。基本数据类型规则的转换方法为:

复杂数据类型规则的转换方法为:

结构、约束和扩展类型的转换方法为:

如图2所示,ODX文档解析模块具体包含以下步骤:

1)首先,利用反射机制无差别的提取解析类的所有成员信息,对应图2中代码第3-8行。

2)接下来利用DOM框架提取待解析根节点的属性和元素信息,构建待解析队列,对应图 2中代码第9-12行。

3)最后,针对不同数据类型对变量进行递归的赋值操作,对应图2中代码 14-34行。

步骤1)通过反射机制,循环提取待解析类TARGET继承的所有类成员信息。此时数组 fields中储存的是可能在本次解析中用到的所有变量。

步骤2)通过DOM框架,获取根节点ROOT的所有属性和元素信息。此时待解析队列parserQueue中储存的是所有等待被解析的XML属性或元素,接下来把parserQueue中的属性或元素的值映射到TARGET类对应的成员变量中。

步骤3)对待解析队列parserQueue中的每一个元素或属性,做以下两件事:(1)在fields 中寻找到对应的成员变量;(2)根据不同的数据类型递归的完成赋值操作:对于基本数据类型进行直接赋值,对于成员对象进行递归赋值,对于数组变量循环每个数组成员并根据各数组成员的实际类型选择直接赋值或进行递归操作。

如图3所示,ODX文档生成模块具体包含以下步骤:

1)首先,利用反射机制无差别的提取解析类的所有成员信息,对应图3中代码第3-7行。

2)接下来利用步骤1)中提取出来的成员信息当作待生成队列,循环判断每一个成员变量是否应该输出,如果是则执行输出操作。对应图2中代码第8-33行。

步骤1)通过反射机制,循环提取待解析类TARGET继承的所有类成员信息。此时数组 fields中储存的是可能在本次ODX文档生成过程中用到的所有变量。

步骤2)以fields作为待生成队列,对fields数组的每一个成员做以下两件事:(1)通过该成员变量是否经过解析或修改,判断该成员变量是否应该输出;(2)根据不同的数据类型递归的完成ODX文档生成操作:对于基本数据类型进行直接生成,对于成员对象进行递归生成,对于数组变量循环每个数组成员并根据各数组成员的实际类型选择直接生成或进行递归操作。

以上三个模块完成之后,本发明进行时间和空间复杂度相关的分析。

在解析的全流程中,需要进行的操作有:(1)为输入的文档构建DOM树;(2)递归解析输入文档。在深入分析这两部分的时间复杂度之前,需要首先定义一些分析需要用到的变量: N为输入的ODX文档的元素与属性之和;x为平均一个Java类包含的成员变量数。

首先来看DOM树的构建过程,DOM树的本质是遍历XML文档,构建映射树。在XML文档中,如果把属性当作叶节点,那么XML文档就可以看作一个有N个节点的树。可以得到,无论是深度优先遍历还是广度优先遍历,时间复杂度为O(N)。接下来看解析过程,根据上文的解析算法可知,解析算法会对每一个属性或元素遍历所处的类的所有成员变量进行匹配,随后递归解析,因此解析过程的时间复杂度是O(xN)。整个解析算法的时间复杂度为:

O(xN)+O(N)=O(N)

在整个解析和生成过程中,JVM堆中主要储存以下信息:构建的DOM树、解析完成的Java 变量以及递归栈。此时依然假设n1为输入文档的元素数,n2为属性数,N为元素和属性总数, a为一个属性在DOM树中的储存空间,b为一个元素在DOM树中的储存空间,t为Java变量中被解析变量的比例,x为平均每个Java类拥有的成员变量个数。可以得到,DOM树的空间复杂度为:

O(a×n1)+O(b×n2)=O(N)

储存Java变量的空间复杂度为:

O(N÷t)=O(N)

递归信息的空间复杂度为:

O(N÷x)=O(N)

因此,算法总的空间复杂度为O(N)。

总之,本发明提出了一种通用型ODX文档的解析和生成技术,该技术分为三个模块: XML Schema解析模块,ODX文档解析模块和ODX文档生成模块。XML Schema模块设计了符合ODX文档格式的XML Schema转换规则,对ODX文档中的每一个类标准化生成对应的Java类映射;ODX文档解析和生成模块基于DOM解析框架,结合Java反射机制,设计了低耦合高效率的ODX文档和Java对象之间的相互转换算法。本发现所提出的解析和生成技术具有线性的时间和空间复杂度,在大型ODX文档的解析中具备明显优势。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种CN-DRGs与C-DRG的自动映射和转换方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!