APP下载

基于电池包测试系统方案编辑器的多格式数据转换探究

2024-03-15崔嘉怡石灵丹

船电技术 2024年2期
关键词:格式化集上结点

崔嘉怡,匡 鹏,邵 飞,石灵丹

(1. 中南财经政法大学,武汉 430073;2. 武汉长海高新技术有限公司,武汉 430000)

0 引言

电池包测试系统作为新能源测试行业中重要的质量检测系统,在过去几十年取得了显著的发展。多项研究工程致力于提升电池包测试系统的准确性、稳定性和效率。同时,随着人工智能技术的发展,船电技术的控制系统需要探索如何利用Web 应用学习算法来优化电池包测试系统的性能,从而更好地满足新能源测试行业的需求[1,2]。

在数据转换算法的研究现状中,XML 和JSON 是两种常用的数据交换格式。由于它们的数据结构和语法有所不同,将XML 转换为JSON或将JSON 转换为XML 是一个具有挑战性的任务[3]。常见的数据转换方法是基于模式匹配和递归算法。在文献[4]中基本思想是通过解析XML或JSON 的数据结构,然后根据预定义的转换规则,将其转换为另一种格式。另外,文献[5]跟文献[6]中一些研究致力于解决数据结构不一致性的问题。大多研究都是围绕定义数据、数据转换和数据重构以实现数据交换目的进行的如文献[7]。还有一些研究如文献[8]探索了利用中间形式进行数据转换。

而在实际电池包测试系统中,XML 和JSON的数据结构可能会因为不同的数据源或数据格式而存在差异,例如元素不一致、嵌套层次变化等。为了实现准确、高效的数据转换,我们提出了一些智能匹配方法和自动对齐技术。这些方法和技术可以自动识别数据结构的不一致性,并进行相应的调整和映射,从而确保转换后的数据准确无误。

1 电池包测试系统下Json 与XML

1.1 JSON

JSON 作为轻量级数据交换格式,在文献[9]中所述,JSON 采用键值对表示数据,常用于Web应用程序和服务端间数据传输。键值对间用冒号分隔,键为字符串。在文献[10]中,数据可以为对象或数组。值可以是字符串、数字、布尔值、对象、数组或null。以下是系统可识别的json 序列示例图:

图1 EOL 系统可识别的json 序列示例

1.2 XML

XML 是一种可扩展标记语言,由元素和属性构成,构建非限定秩的结点树。XML 文档可视为由元素类型集合(E)、属性名集合(A)和结点值集合(Str)构成的树(T)。由文献[10]得,元素类型集合(E)包含所有可能元素类型,树T的属性名集合(A)包含所有属性名,结点值集合(Str)包含所有结点值。属性名以@开头,与元素类型区分。XML 树T 定义为:(N,,,root),其中N 是结点集合(元素和属性),为父子关系,为兄弟关系,root 为根结点,另外元素类型函数:N -> E(如果λ(v)=e,我们说e 是v 的元素类型);属性函数:N->Str,N 中的任何一个属性结点,其值在Str 中,N 中没有子结点的结点为叶结点;任何一个结点和其所有后带结点组成的树,我们称为子树,为此子树的根结点;以下是系统可识别转换后的XML 片段示例图:

图2 系统可识别转换后的XML 片段示例

1.3 DTD

XML 文档的DTD 可用如下三元组来定义(P,R,r),其中:P 是从元素类型到子元素正则表达式的映射,此映射描述父结点与子结点的关系,表达式基于元素类型,语法如下:μ:=ϵ|e,e ∈E|μ|μ|μ,μ| μ*。其中ϵ 代表空,μ|μ和μ,μ分别代表合并与连接,μ*代表任意多个相同元素的连接。以下是XML 片段的DTD 示例与DTD 所表示的树型图:

图3 DTD 所表示的树型图

1.4 Web 应用下方案格式与转换

在转换电池包测试系统的.sol 文件(XML 格式)为JSON 时,需要考虑两者结构差异。首先,将.sol 文件(XML 格式)转换为JSON,使得应用能够使用拖拽式方案编辑器所需的JSON。上位机可以通过该JSON 反向生成XML。转换过程步骤:①解析.sol 文件:使用XML 解析库解析.sol文件中的XML 数据,将其转换为适当的数据结构。②创建JSON 对象:根据解析结果,创建对应的JSON,定义其结构和键值对。③遍历XML并生成JSON:遍历后的XML 数据,将XML 元素转换为对应的JSON 对象,并将其添加到JSON适当位置。④设置JSON 键值对:根据.sol 文件中的XML 元素和属性,设置JSON 的键值对。⑤输出JSON:将生成的JSON 对象输出为JSON格式的文件,完成.sol 文件到JSON 的转换过程。

图4 存在DTD 的XML 格式的.sol 数据转换为JSON

2 多格式数据转换的方法与实现

多格式数据转换在方案编辑器中扮演关键角色,确保电池包下线测试系统生成的.sol 文件与Web 方案编辑器所需的JSON、XML 等格式之间能够相互转换。以下将探讨数据转换的算法和实现细节,并介绍处理不同格式转换的方法及其优劣和准确性。在Web 应用中,关键在于设计实现准确转换的算法,以下将比较不同方法的优劣和适用性,主要方法包括:df.to_xml 库函数、dict_to_xml 方法和JSON2XMLConverter 函数。

2.1 df.to_xml 库函数

1)使用df.to_xml 进行JSON 到XML:使用df.to_xml 方法将JSON 数据转换为DataFrame 格式,然后通过DataFrame 对象的to_xml 方法将其转换为XML 格式字符串。

2)基本原理:①转换为DataFrame 格式:首先,将JSON 数据转换为DataFrame 格式,再将JSON 数据转为DataFrame 并赋值给变量df。②to_xml 方法:使用DataFrame 的to_xml 方法将DataFrame 转换为XML 格式的字符串。③生成字符串:变量xml_str 保存转换得到的XML 格式的字符串,该字符串表现与原始JSON 相对应的XML 结构。

2.2 dict_to_xml 方法

1)使用dict_to_xml 进行JSON 到XML:dict_to_xml 是一种用于将Python 字典数据转换为XML 格式字符串的方法。其原理是递归将字典中的键值对转换为对应XML 元素和属性。

2)基本原理:①递归遍历字典:dict_to_xml()会逐层遍历字典中的所有键值对。对于每个键值对,根据键的类型决定生成XML 元素或属性。②创建XML 元素:每个键被转换为一个XML 元素,键名成为XML 元素的标签,相关的值成为元素的内容。③属性处理:若值为字典,将被视为XML 元素,并根据其中的键值对创建子元素。列表中的每个元素都会创建一个子元素。对于基本类型(如整数、字符串、布尔值)的键值对,会将其作为元素的文本内容。

2.3 JSON2XMLConverter 函数

1)使用JSON2XMLConverter 进行JSON 到XML:自研开发的JSON2XMLConverter 函数是一种根据EOL 测试系统对XML 格式的特定要求编写的JSON 转XML 转换算法。该算法基于递归和条件判断的编程概念,以满足WEB 端所需的XML 格式。

2)基本原理:①递归遍历:JSON2XMLConver ter 函数通过递归遍历字典中的键值对,处理嵌套结构,如字典中包含字典或列表。递归遍历是将整个字典结构转换为相应XML 元素结构的关键。图6 展示了经过自制XML 转换函数遍历解析后的树形结构,以生成EOL 系统可识别的XML 片段示例。②条件判断:在遍历过程中,JSON2X MLConverter 函数根据键值对的类型和格式进行条件判断。根据键的类型,它决定生成XML 元素或属性;根据值的类型,它决定创建子元素或文本内容。这些条件判断确保生成的XML 与原始数据结构一致。

图5 JSON 转XML 遍历解析后的树型结构图

3 数据集与系统实验设计

为了比较三种JSON 转XML 的数据转换方法在不同数据集上的性能,我们设计了两组数据集:人工截取数据集(Short_file)和由EOL 测试系统生成的数据集(Long_file)其覆盖不同复杂程度和规模的数据,以全面评估性能。数据集大小按10 的倍数从10 逐步增加到100,用于评估模型性能。

3.1 人工截取数据集(Short_file)

手动创建的数据集,包含整数、浮点数、字符串、嵌套结构和数组等数据操作类型,模拟常见操作步骤如BTS、HIPOT、BTD、继电器操作等生成JSON 数据。用于评估在常见场景下的性能。

3.2 电池包测试系统的数据集(Long_file)

由电池包测试系统生成真实数据集,包含复杂的数据结构和边界条件,全面评估数据转换和上位机设置的边界条件生成的JSON。用于评估在大数据集下的性能。

3.3 实验设计与实现

为比较三种数据转换方法的准确率和性能,设计对比实验包括:1.准确率比较:将三种方法的转换后数据与原始数据进行匹配,计算准确率。准确率表示转换后数据与原始数据完全匹配的比例,是衡量数据转换准确性的指标。2.运行性能比较:比较三种方法的转换时间(Conversion Time)、格式化XML 时间(Format Time)和总运行时间(Total Running Time)。通过计时比较方法的性能,多次实验取平均值提高可靠性.

3.4 实验步骤

实验设计如下:①读取人工截取数据集( Short_file ) 和测试系统生成的数据集(Long_file)的JSON 数据。②使用三种数据转换方法将JSON 数据转换为XML,并记录转换时间。③对转换后的XML 数据进行格式整理,并记录格式整理时间。④计算转换准确率,得出每种数据转换方法在不同数据集上的准确率。⑤比较不同数据转换方法的性能,得出数据转换方法在不同数据集上的转换时间、格式整理时间和总运行时间。

通过上述实验设计,我们可以全面比较JSON转化为XML 的三种数据转换方法在不同数据集上的准确率和性能表现,为选择最合适的数据转换方法提供科学依据。

4 实验结果与数据转换性能评估

4.1 准确率对比评估

在准确率对比评估中展示了使用三种方法进行数据转换时的准确率对比。图中有两条曲线,一条表示 Short_file 的准确率,另一条表示Long_file 的准确率。其中,X 轴表示文件大小(Number of Files),Y 轴表示准确率(Accuracy)。

在图6 中展示了使用df.to_xml 进行数据转换时的准确率对比。在Short_file 准确率曲线中:随着文件大小的增加,准确率从0.444 45 逐渐下降至约0.430 23。在文件大小为20 左右时,准确率下降幅度较大,之后变化较为平缓。在Long_file准确率曲线:随着文件大小的增加,准确率从0.294 45 逐渐下降至约0.287 94。在文件大小为20 左右时,准确率下降幅度较大,之后变化较为平缓。大小数据集整体趋势均是准确率随文件大小增加而略微下降。

图6 df.to_xml 方法-准确率评估

在图7中展示了使用dict_to_xml进行数据转换时的准确率对比。在Short_file准确率曲线(蓝色)中:随着文件大小的增加,准确率从0.920 63逐渐下降至约0.903 05。在文件大小为20左右时,准确率下降幅度较大,之后变化较为平缓。在Long_file准确率曲线(橙色)中:随着文件大小的增加,准确率从0.818 19逐渐下降至约0.800 04。在文件大小为20左右时,准确率下降较明显,之后变化较为平缓。

图7 dict_to_xml 方法-准确率评估

在图8 中展示了使JSON2XMLConverter 函数进行数据转换时的准确率对比。在Short_file准确率曲线中:随着文件大小的增加,准确率从0.984 12 逐渐下降至约0.983 29。整体上,准确率保持在较高水平。在Long_file 准确率曲线中:随着文件大小的增加,准确率从0.636 34 逐渐上升至约0.632 07。整体上,准确率保持在较低水平。两组数据的准确率曲线趋势截然不同。JSON2XMLConverter 函数在处理较小的文件时表现良好,准确率较高;但在处理较大文件时准确率有所下降。

图8 JSON2XMLConverter 函数-准确率评估

在准确率评估中,对比了三种不同的JSON转XML方法在两种不同大小的数据集上的准确率。其中,自制的JSON转XML函数(JSON2XML Converter)在Short_file上表现出较为显著的优势,其准确率达到了0.988 12。相比之下,df.to_xml在同一数据集上的准确率较低,仅为0.434 55,而dict_to_xml方法的准确率为0.805 17。在Long_file上,dict_to_xml表现出相对较高的准确率,为0.805 17,略高于自制函数。然而,df.to_xml在这个数据集上的准确率仅为0.284 90,表现较为不理想。

4.2 运行性能对比评估

4.2.1 df.to_xml 库函数

在图9 中是df.to_xml 转化时间与格式化时间对比结果,由实线可得,随着数据量大小的增加,数据转换时间也呈现明显的增加趋势,Long_file较于Short_file 的时间略多一点,两条线的垂直距离并不大,有轻微增长趋势。而虚线中,Long_file 较于Short_file 的格式化时间出现明显差距,并呈现增加趋势。并整体可以看到转换时间与格式化时间合体差距对比尤为显著。

图9 df.to_xml-转化时间与格式化时间对比

图10 中显示了不同长度数据集的运行时间的对比,其所显示了随着数据集大小的增加,df.to_xml 方法的数据转换时间呈现出明显的增长趋势,这表明对于较大的数据集,该方法可能不够高效。在实际应用中,我们需要根据具体的数据规模和性能需求来选择合适的数据转换方法。如果需要处理大规模复杂数据集,可能需要考虑使用其他更高效的数据转换方法,或者优化算法以提高数据转换性能。

图10 df.to_xml-转化时间与格式化时间对比

4.2.2 dict_to_xml 方法

在图11 是dict_to_xml 的处理时间结果。在处理转换时间时,Long_file 较于Short_file 的转换时间相对较长,说明该方法较大规模的数据集时需要更多的时间来完成数据转换。在处理运行时间中,Short_file 与Long_file 均随着数据集大小的增加,格式化时间呈现明显的上升趋势。而且格式化时间Long_file 相对于Short_file 更长,这表明dict_to_xml 方法在处理较大规模的数据集时需要更多的时间来完成XML 格式的整理。并整体显示了dict_to_xml 均在较大数据集上需要较长的转换时间和格式化时间,且随着数据集大小的增加,这些时间呈现明显的增长趋势。

图11 dict_to_xml 转化时间与格式化时间对比

在图12 中显示了dict_to_xml 总运行时间的增长趋势与转换时间和格式化时间类似。随着文件数量的增加,总运行时间在两个数据集上都逐渐增加,并且Long_file 的总运行时间显著大于Short_file 的总运行时间。因此,Dict_to_xml 在处理较大规模数据时,无论是格式化时间、转换时间还是总运行时间,都较Short_file 耗时更多。

图12 dict_to_xml-转化时间与格式化时间对比

图13 JSON2XMLConverter-总运行时间

4.2.3 JSON2XMLConverter 函数

对于JSON 到XML 的转换任务,JSON2XML Converter 函数在处理不同规模的数据集上都表现良好,总运行时间较为可控。在JSON2XML Converter 函数中,把格式化跟转换的时间合二为一,这样优化运行的步骤,更是优化了算法的空间复杂度。所以在图 13 中只有 Long_file 和Short_file 的总运行时间。图中折线图分别表示Short_file 和Long_file 在不同文件数量下的总运行时间。可以观察到,随着文件数量的增加,总运行时间在两个数据集上都呈现逐渐增加的趋势。同时,Long_file 的总运行时间稍高于Short_file,但两者的差异并不明显。因此,对于JSON 到XML的转换任务,JSON2XML Converter 函数在处理不同规模的数据集上都表现良好,总运行时间满足测试的要求。

在柱状图14 中显示了JSON2XMLConverter函数在Short_file 和Long_file 数据集上的总运行时间对比。随着文件数量的增加,JSON2XML Converter 函数在两个数据集上的总运行时间都呈现逐渐增加的趋势。增长速率较为稳定,没有出现明显的异常或突变。JSON2XMLConverter函数在处理较大规模的数据集时,总运行时间有所增加,但仍然表现较好。JSON2XMLConverter函数在处理不同规模的数据集时,总运行时间逐渐增加,但仍保持较好的运行性能。

图14 JSON2XMLConverter-总运行时间

5 结果讨论与总结分析

5.1 结果讨论

通过对三种不同的 JSON 转 XML 方法(df.to_xml、dict_to_xml、JSON2XMLConverter函数)在不同大小的数据集上进行准确率和运行性能对比评估,我们可以得出以下结论:

1)准确率对比评估:①df.to_xml 方法:在准确率评估中,df.to_xml 表现较为一般,无论在Short_file 还是Long_file 上,准确率都较低,尤其是 Long_file 上的准确率较为不理想。②dict_to_xml 方法:dict_to_xml 在处理Short_file上表现较好,但在Long_file 上准确率下降较明显,相比之下,其在Short_file 上的准确率较高。③JSON2XMLConverter 函数:JSON2XMLConverter函数在处理Short_file 上表现优异,准确率较高且较为稳定;但在Long_file 数据集上,准确率略低,表现不如处理Short_file 数据集。

2)运行性能对比评估:①df.to_xml 方法:df.to_xml 方法在处理较大规模的数据集时,总运行时间明显增加,表现一般。处理转换时间和格式化时间时,随着文件数量的增加,转换时间和格式化时间均呈现明显增长趋势。②dict_to_xml方法:dict_to_xml 在处理较大规模的数据集时,转换时间和格式化时间较长,总运行时间随着文件数量的增加而增加。较df.to_xml 方法,在处理较大规模数据集时,dict_to_xml 方法总运行时间略优。③JSON2XMLConverter 函数:JSON2XML Converter 在处理不同规模的数据集时,总运行时间逐渐增加,但表现较好。其综合性能相对稳定,在处理较大规模数据集时表现尤为优异.

5.2 总结分析

综合分析,JSON2XMLConverter 函数在短数据集上表现优异,准确率较高且总运行时间较短;而在长数据集上准确率略有下降,但总体运行时间仍然基本满足测试要求。dict_to_xml 方法在处理较大数据集时准确率较高,总运行时间相对较长,但在处理短数据集时表现较好。df.to_xml 方法整体表现较一般,在处理较大规模数据集时总运行时间较长,准确率也较低。

根据不同的数据规模和性能需求,选择合适的JSON 转XML 方法是至关重要的。若处理较小规模的数据集且需要高准确率和较短的总运行时间,可以选择JSON2XMLConverter 函数;若处理较大规模的数据集,可以考虑使用dict_to_xml 方法;其优秀的性能表现证明了JSON2XMLConverter 函数与dict_to_xml 方法在处理JSON 到XML 数据转换任务上的可靠性和有效性,可为测试系统下的方案编辑器提供更优化的转换算法方案。而库函数df.to_xml 在处理数据集时无论大小性能较差,不太推荐在系统场景下使用。

用户可以在系统中通过方案的大小来评估选择不同的转换方法来找到有效的解决方案。但本文实验结果受到数据集规模、硬件设备、编程语言、算法实现等因素的影响。因此,不同的应用场景和需求可能需要继续根据具体情况来选择最适合的数据转换方法。

猜你喜欢

格式化集上结点
现代人守则:昏死之前请把手机格式化
Cookie-Cutter集上的Gibbs测度
链完备偏序集上广义向量均衡问题解映射的保序性
Ladyzhenskaya流体力学方程组的确定模与确定结点个数估计
复扇形指标集上的分布混沌
格式化
直接格式化对硬盘的寿命有影响吗
基于Raspberry PI为结点的天气云测量网络实现
几道导数题引发的解题思考