• 查询稿件
  • 获取最新论文
  • 知晓行业信息
官方微信 欢迎关注

基于XSD的配置工具数据处理安全平台

黄健, 李倩, 李方晴, 张奕男

黄健, 李倩, 李方晴, 张奕男. 基于XSD的配置工具数据处理安全平台[J]. 铁路计算机应用, 2023, 32(7): 62-67. DOI: 10.3969/j.issn.1005-8451.2023.07.12
引用本文: 黄健, 李倩, 李方晴, 张奕男. 基于XSD的配置工具数据处理安全平台[J]. 铁路计算机应用, 2023, 32(7): 62-67. DOI: 10.3969/j.issn.1005-8451.2023.07.12
HUANG Jian, LI Qian, LI Fangqing, ZHANG Yinan. XSD based data processing security platform for configuration tool[J]. Railway Computer Application, 2023, 32(7): 62-67. DOI: 10.3969/j.issn.1005-8451.2023.07.12
Citation: HUANG Jian, LI Qian, LI Fangqing, ZHANG Yinan. XSD based data processing security platform for configuration tool[J]. Railway Computer Application, 2023, 32(7): 62-67. DOI: 10.3969/j.issn.1005-8451.2023.07.12

基于XSD的配置工具数据处理安全平台

详细信息
    作者简介:

    黄 健,工程师

    李 倩,高级工程师

  • 中图分类号: U231.7 : TP39

XSD based data processing security platform for configuration tool

  • 摘要: 为城市轨道交通信号系统设备的用户配置工具开发了可通用的、基于可扩展标记语言模式定义(XSD,XML Schema Definition)的配置工具数据处理安全平台,该平台通过类生成模块与通用数据处理模块的相互配合,完成信号系统配置数据的输入/输出处理,用户配置工具可方便地进行数据的读/写操作,提高用户配置工具的开发效率。
    Abstract: This paper developed a universal and extensible XML Schema Definition (XSD) based data processing security platform for user configuration tools of urban rail transit signal system equipment. The platform completed the input/output processing of signal system configuration data through the cooperation of class generation module and general data processing module, made it convenient for user configuration tools to read/write data and improved the development efficiency of user configuration tools.
  • 城市轨道交通信号系统通常包含多个执行不同功能的子系统/设备,以基于通信的列车运行控制系统为例,它包括车载列车自动保护子系统、区域控制器、轨旁设备等[1]。需要将车站设备配置数据烧录到系统/设备硬件存储板卡中,才能使这些子系统/设备正常运行。目前,信号系统的各个子系统/设备一般都有配套的工具用来生成配置数据,如区域控制器数据配置工具、轨旁安全平台配置工具等[2-3]。丰富的配置工具一定程度上提升了配置数据的效率,但存在以下问题。

    (1)有的配置工具采用直接读取解析特定版本输入文件的模式[4],一旦输入数据量增大,解析难度及代码量都随之增加。当每轮迭代输入结构也发生变动时,需要花费大量时间修改数据的解析,影响配置数据的进度。

    (2)配置工具输出的数据文件未定义通用模板,导致每份输出文件都需要搭建对应代码框架才能实现相应结构的文件输出功能[5-6],代码耦合度高,难以复用,同时,后期维护也相对困难。

    (3)不同的配置工具,其输入/输出处理代码仅适用于专有的数据配置项目,难以通用。

    为此,本文借助可扩展标记语言(XML),开发了可通用的、基于可扩展标记语言模式定义(XSD,XML Schema Definition)的配置工具数据处理安全平台,该平台也称为通用数据文件分析与可视化(CAVA,Common Data File Analytics and Visualization Architecture)平台。CAVA平台将用户配置工具需要处理的输入/输出文件中结构和字段信息映射配置到对应的XSD文件[7-9],并通过类生成模块将这一系列XSD文件解析,生成包含元数据的Class文件,将其打包为可供用户配置工具调用的Jar包;用户配置工具调用包含输入/输出结构信息的Jar包和CAVA平台的通用数据处理模块后,即可方便地进行数据的读/写操作,提高配置工具的开发效率。

    CAVA平台使用JAVA语言开发,包含2大模块,分别为类生成模块和通用数据处理模块,2个模块之间独立运行。CAVA平台组成如图1所示。

    图  1  CAVA平台组成

    该模块主要实现输入文件读取、字段的填充与规则检查、输出指定格式文件,其他如常用工具类、日志管理和项目路径管理则提供了处理输入/输出过程中常用的功能接口。

    本文将以INI格式协议文件为例,简述该协议配置文件输入/输出处理。

    图2为INI格式文件的一般结构,由[LOCAL_NET_1]作为起始行,下面会有一组或多组如IP = 10.2.2.5的键值对,每组键值对占一行,它们构成了一个通常由多个节点组成的节点文件。

    图  2  INI格式文件结构

    文件中仅包含一组结构与[LOCAL_NET_1]相同的节点,称之为复杂类型单节点;包含多组结构如[REMOTE_NET_2]的节点,称之为复杂类型列表,它们内部每一行键值对类型均为简单类型单节点。[REMOTE_NET_2]中出现的一组或多组带有_0或_1后缀键值对称之为子序列,其实质是一个嵌套在[REMOTE_NET_2]中的复杂类型列表。正式的输入输出处理流程,分为以下3小节。

    INI格式文件读取接口函数如下:

    iniNode iniNode = new iniNode(参数1,参数2,参数3···)

    该接口接收多个传递参数,前3个主要的参数分别为INI文件的绝对路径、区分文件类型的前缀、文件中的节点结构查找表(Map),创建成功返回的iniNode数据对象内包含一个将协议文件内的节点按照一定的规则匹配并分类填充存储的Map。

    得到协议文件数据对象iniNode后,使用类生成模块生成的Jar包中对应该协议文件的接口,Jar包中INI格式协议文件的接口调用如下:

    Cprotocols protocol= new Cprotocols(iniNode)

    该接口以文件读取接口返回的对象作为传递参数,接口创建后会调用fill接口依次处理协议文件对象中的子节点,处理顺序类似于深度优先算法的搜索模式。

    协议文件的Cprotocols接口填充流程示意如图3所示,以填充协议文件子节点复杂类型列表PRO_list为例,需要经过以下3个步骤。

    图  3  协议文件节点填充示意

    (1) 调用PRO_list1对象的fill接口,依次处理内部两个简单类型单节点填充。

    (2) network为PRO_list内部嵌套的复杂类型列表,从iniNode数据对象中获取当前处理的PRO_list1节点下的network数据列表,依次遍历network数据列表并调用network的fill接口填充,填充后的每组network对象都会放到列表B中。最后列表B作为返回值赋值给PRO_list1对象的network属性。

    (3) 上述两步完成了一个PRO_list1节点填充,依次遍历剩余的PRO_list1节点填充,逐个按组放到列表A,最后列表A作为返回值赋值协议文件PRO_list1属性。

    余下的PRO_FSFB2、PRO_MSS等复杂类型列表填充流程与PRO_list1一致,依次遍历协议文件所有子节点填充,最终得到的数据对象protocol包含该协议输入文件中所有字段信息。返回的协议文件数据对象protocol数据结构,如图4所示,该结构层次清晰并且和XSD定义的结构一一对应,与iniNode接口返回的Map数据对象相比,不需要通过多层循环遍历获取特定数据,直接根据字段名索引获取即可。

    图  4  protocol对象内字段索引结构

    输出指定格式文件实际上就是读取的逆向处理。以生成INI格式为例,调用IniWriter类中writerToFile接口,输入生成文件路径,以及填充了字段信息的数据对象等参数。接口会将输入的数据对象中数据按照当前要生成文件的格式补充并以字节流形式写入指定位置的INI格式文件。

    该模块用于将描述用户输入文件结构的XSD文件转换,生成带有输入文件结构信息的Jar包。

    类生成模块处理流程如图5所示,该模块先从存储了XSD文件路径的配置文件中读取一份XSD文件数据,再解析当前文件中的节点信息。

    图  5  类生成模块运行流程

    节点信息解析流程如图6所示,从根节点下一层的PRO_list1元素开始,将该元素下的子节点信息获取存储并设置父子关系后再向下递归至节点不包含子节点为止,返回根节点后就得到一个包含了当前XSD配置文件从根节点到叶子节点的所有字段信息且具有严格父子节点关系的数据对象。

    图  6  节点信息解析流程

    上述数据对象会再经历一轮递归,此轮遍历顺序与节点的解析相同,为的是提取节点的信息赋值至新构建的字段对象中,同时,根据元素属性值出现次数及是否包含子节点,将所有节点划分为4种类型的字段对象。

    (1)包含子节点且最大出现次数大于1的归为复杂类型列表;

    (2)包含子节点且出现次数等于1的归为复杂类型单节点;

    (3)不包含子节点且最大出现次数大于1的归为简单类型列表;

    (4)不包含子节点且最大出现次数等于1的归为简单类型单节点。

    本轮递归完成后,元素节点和属性节点内的信息都将被提取并赋值到字段对象相应的属性参数中,字段对象类中包含了元素数据类型、范围大小、出现次数、可选性、默认值、是否包含子节点、子节点信息及区分元素类型等若干个属性参数。

    转换为字段对象后,包含子节点的Field对象会生成包含子节点信息的独立Class文件,文件数目取决于配置文件中复杂类型列表和复杂类型单节点字段对象数目总和。每个字段对象的属性信息将被提取,并以注解的形式写入到Class文件中该变量字段定义的上方,CAVA平台类生成模块提供的自定义注解类型包括@AnnoFieldDesc(包含字段类型名称、默认值、原始类型等)、@AnnoFieldRangeCheck(字段数值范围)、@AnnoDecimalDesc(字段数值精度)、@AnnoListCountCheck(最大及最小出现次数)、@AnnoFileIdOptionalDesc(字段是否可选)等。

    将所有的XSD文件按照上述流程处理完毕后得到的Class文件打包为Jar包,并导入到相应的配置工具中,即可创建与实际文件中结构对应的实体类对象实例。

    CAVA平台的类生成模块将映射了输入/输出文件结构信息的一个或多个XSD文件作为输入,读取、解析、生成Class文件后打包为可供用户配置工具调用的Jar包;CAVA平台的通用数据处理模块以Jar包形式与类生成模块生成的包含字段配置信息的Jar包一并引入到用户配置工具中,用户配置工具调用通用数据处理模块提供的各类接口函数,对INI、XML、CSV、PAR、BIN格式的输入/输出文件进行处理。

    读取用于描述输入文件结构的XSD文件,提取字段信息后转换为Class文件,生成带有输入文件结构信息的Jar包。

    结合带有配置信息的Jar包,可以处理包括INI、XML、CSV、PAR、BIN等多种格式的输入文件。以Jar包内对应文件结构为模板,将输入文件按照模板结构提取字段信息,并填充生成带有结构信息的数据对象。填充过程支持字段合法性检查及字段数值的类型转换,数据对象通过接口函数可以生成INI、XML、CSV、PAR和BIN格式的输出文件。

    (1) 提供了日志管理功能,CAVA平台的用户不需要自行构建日志功能模块,通过简单配置即可使用。

    (2) 提供了常用的包括MD5和SHA1计算、数值类型转换、IP处理、命令行工具、数据过滤等开发常用函数接口。

    (3) 提供了项目路径管理功能,可以准确地提供当前项目的主路径。

    采用XSD语言描述不同格式文件的结构,根据需求对输入/输出文件内字段进行定义,将字段配置为复杂类型元素或简单类型元素,得到对应的XSD配置文件[10]

    类生成模块读取XSD配置文件中存储的配置信息,将配置信息中的元素类型和属性类型存储在树形结构的对象中;从对象的根节点开始递归遍历,获取所有元素类型和属性类型信息,设置节点之间的父子关系;再次对该对象递归遍历,判断遍历得到的元素类型是否为复杂类型元素,每个复杂类型元素均单独生成一个Class文件;将生成的所有Class文件汇总,并打包生成包含字段配置信息的Jar包。

    把类生成模块生成的包含字段配置信息的Jar包和通用数据数据处理模块Jar包导入至用户配置工具中,根据用户配置工具实际输入文件的格式,调用通用数据处理模块Jar包中对应格式的文件读取接口函数,得到一个包含原始输入文件数据的对象A;调用实际输入文件在包含字段配置信息的Jar包中对应的填充接口函数,接口函数根据字段名到对象A中查找对应的数值,并将该数值填充到对象B中的相应字段。填充字段对象时会判断当前元素是否包含限制条件或转换条件,若存在则作相应的检查或转换,直至完成所有字段的填充,得到一个与输入文件结构一致的数据对象B。

    最终得到的数据对象B可调用通用数据处理模块Jar包内的与项目输出文件格式相匹配的内部接口函数,生成指定格式的输出文件。

    本文为城市轨道交通信号系统设备的用户配置工具开发了可通用的、基于XSD的配置工具数据处理安全平台,该平台已在卡斯柯信号有限公司城市轨道交通信号系统的多个用户配置工具开发项目中得到应用。开发人员只需要使用该平台配置好当前用户配置工具需要处理的XSD文件,无论用户配置工具的输入/输出文件字段发生更新还是需要生成其他格式的文件,都只需要修改相应的XSD文件或者调用相应接口函数即可,相比之前每次需求变动都要调整用户配置工具的文件解析代码,显著提升了用户配置工具的开发效率。

  • 图  1   CAVA平台组成

    图  2   INI格式文件结构

    图  3   协议文件节点填充示意

    图  4   protocol对象内字段索引结构

    图  5   类生成模块运行流程

    图  6   节点信息解析流程

  • [1] 李 飞,柴慧君. 浅谈城市轨道交通信号系统数据配置 [J]. 铁道通信信号,2018,54(10):75-77.
    [2] 于 超,郑生全,石文静. 城市轨道交通CBTC系统互联互通方案研究 [J]. 铁道通信信号,2010,46(1):44-47. DOI: 10.3969/j.issn.1000-7458.2010.01.022
    [3] 朱莹莹,王英波. 信号设备数据配置工具在CBTC中的研究与实现 [J]. 铁路通信信号工程技术,2019,16(9):61-64.
    [4] 张雯君,王天鸣. 基于全电子平台数据配置工具的研究与实现 [J]. 铁路通信信号工程技术,2021,18(6):15-19.
    [5] 余云飞. 铁路信号数据一体化配置系统设计及实现 [J]. 铁路通信信号工程技术,2017,14(6):27-30,35.
    [6] 陈倩佳,卢佩玲. 列控工程数据自动审核的研究与实现 [J]. 铁路计算机应用,2015,24(3):6-9.
    [7] 张路平,于高荣. XML在列控系统配置中的应用 [J]. 铁路通信信号工程技术,2018,15(1):16-19.
    [8] 张雪洁,王志坚,许 峰,等. 基于XML的领域异构数据库间的数据转换 [J]. 计算机与现代化,2004(5):71-74.
    [9] 鉴保瑞,宋余庆,陈健美,等. 一种基于关系的XML文档模型映射方法 [J]. 计算机应用研究,2011,28(12):4621-4624.
    [10] 杨 辉,徐国平,田绪俊. 安全关键系统配置数据生成技术研究与实践 [J]. 铁道通信信号,2019,55(5):56-58.
  • 期刊类型引用(0)

    其他类型引用(1)

图(6)
计量
  • 文章访问数:  94
  • HTML全文浏览量:  29
  • PDF下载量:  20
  • 被引次数: 1
出版历程
  • 收稿日期:  2022-09-20
  • 刊出日期:  2023-07-24

目录

/

返回文章
返回