王海宁 ,周京春,王贵武
(1.云南师范大学,云南 昆明 650092;2.武汉大学测绘遥感信息工程国家重点实验室,时空数据智能获取技术与应用教育部工程研究中心,湖北武汉 430079;3.昆明市城市地下管线探测管理办公室,云南昆明 650011)
随着城市的快速发展,地下空间的利用变得越来越重要。为了摸清地下设施的情况,许多城市相继开展了地下管线普查探测工作。地下管线的普查探测是一项系统、复杂的工程。由于城市地下管线种类多,数量大,需要调查的属性多,加之管线本身还具有隐蔽性及不可见性,在数据收集、获取、存储的过程中,不可避免地会产生错误。因此,地下管线探测数据成果内业检查的重要性已成为整个行业的共识。
由于地下管线探测数据不仅包括空间数据,还包括属性数据,而且数据量极大,单纯采用人工的检查方法,无法做到检查的全面性和时效性。现代计算机技术、GIS技术的发展及其海量数据的处理能力,使得管线数据的自动化检查成为可能。因此,研制可调性、可定制性、可扩展性的管线数据检查系统是保障数据成果完整性、可靠性和准确性的关键[1,2]。
检查系统的总体设计思路是:采用模块化结构设计,使系统达到可重用性、可扩充性、可修改性和易用性的目的[3];利用面向对象语言的接口特性,将管线检查知识对象与检查程序主体相分离;对知识对象采用插件式管理,通过可视化界面操作知识库,动态地对知识对象进行插入、删除和修改,而不必重新启动检查系统,使得系统随着检查业务的扩充而随机扩展。
同时,为保证数据检查更具人性化地操作,系统提供两种检查模式。第一种模式:适用于用户有针对性地检查某一项或某几项问题,即单独地操作某个检查知识对象的手动检查模式;第二种模式:用户可根据管线数据检查所需的关联知识对象及个人的检查习惯自定义检查内容和检查流程,即自定义流程式的检查模式。图1为整个系统的结构框架。
图1 管线数据检查系统的整体框架
系统采用目前比较主流的面向对象语言C#作为开发工具,用Microsoft Office Access数据库对元数据进行保存,其中元数据表包括系统的配置表(如:自定义菜单表、插件接口配置表等)和管线检查知识库表(如:数值范围表、编码检查表等)。
知识表达,是指面向计算机的知识描述或表示形式和方法。面向人的知识表示形式,目前还不能完全直接用于计算机,因此就需要研究适合于计算机的知识表示模式。具体来讲,就是用某种约定的形式结构来描述知识,而且这种形式结构还要能够转换为机器的内部形式,使得计算机能方便地存储、处理和利用[2]。
传统的知识表达方法有很多,如语义网络、对象、属性、值三元组和框架及规则表示法等,虽然各有特点,但都普遍存在结构化不强,随着对象或规则的增加,规则和对象之间的交互也因知识表达不能模块化而变得非常复杂、难以管理等问题。面向对象技术的推出为知识的表达提供了一种新的手段。面向对象方法通过对象和消息来表现问题域中的事物及其关系,通过类和继承来模拟人们的思维方式。在面向对象的知识系统中,把描述求解问题的属性概念(知识)和智能行为(知识处理方法)模型化为对象,成为知识库中的一个独立知识单元,称为知识对象(类)。通过它,能以统一的形式表达相关领域的各种知识,从而给用户以统一的认识界面,便于用户的理解和接受[4,5]。
目前,地下管线数据检查的内容主要有:数据库格式、结构检查、数据逻辑检查、拓扑关系检查等。数据库格式、结构检查主要检查管线数据库中的数据表是否齐全、是否存在多余的表、表的字段名和数据类型是否正确、字段值的填写格式是否符合规程的要求等;数据逻辑性检查复杂多样,主要包括:属性值的逻辑一致性检查,管线、管点要素逻辑结构的合理性、正确性等;拓扑关系的检查内容主要包括:接边检查、管线碰撞检查等。
根据地下管线数据检查的内容及检查项之间相互独立又相互依赖的特点,系统中将每一个检查项作为一个单独的知识对象,将知识的处理方法封装成一个类,同时将知识对象的知识库存放于元数据库中,以方便知识库的更改和发展。以非空字段检查为例,首先创建该检查的类,然后将非空字段检查的处理方法作为该类的成员函数,同时在元数据库中构建非空字段检查的知识表——该表有“ID”、“字段名称”和布尔类型的“是否可以为空字段”三个字段,然后把该类编译成DLL文件。由于非空字段检查的知识库是开放的,因此随着检查要求的变化,可以通过修改非空字段检查的知识表很方便地改变某一字段是否可以为空。
由于系统将每一个检查项都作为一个单独的知识对象,而每一个知识对象能描述与求解一个独立的领域子问题,因此知识对象外部的推理不是很多,主要是知识对象的内部推理,举一个简单的例子:
图2 检查系统的主界面
(1)知识对象的接口设计
根据上文描述的面向对象技术下的知识表达方式,在主程序中建立检查规则的接口,因此每个知识对象(类)必须实现接口中的所有对象,起到了对检查对象进行约束的作用,同时方便统一管理、方便调用。
接口伪码如下:
(2)系统设置模块的实现
系统设置模块包括插件管理、数据检查菜单设置、自定义流程三个部分。
①插件管理(见图3):插件管理模块能够对知识对象进行动态管理,实现知识对象的“热插拔”。当添加已编译好的知识对象时,程序获得DLL文件的名称并读取DLL文件获得该知识对象的名称,同时将DLL文件的名称和知识对象的名称信息加入到元数据的插件配置表中,并且将知识对象的名称加载到插件加载设置表中。在插件配置表中分别有“动态链接库名称”和“知识规则名称”两个字段来对程序读取的DLL文件名称和知识对象的名称进行保存,在插件加载设置表中设计了“ID”和“知识规则名称”两个字段对信息进行存储。然后程序重新读取插件加载设置表并将插件配置表中的知识对象名称字段值重新加载到“数据检查菜单”的下拉菜单中,实现知识对象的动态“插入”。同理,当删除某一知识对象时,系统会删除元数据库中的关于该知识对象的相关信息,然后重新读取DLL文件和相关的系统配置表。
图3 插件管理界面
②数据检查菜单设置模块(见图4):数据检查菜单设置模块用于改变数据检查下拉菜单中检查项的顺序。数据检查下拉菜单中检查项的顺序是通过“插件加载设置表”中的“ID”字段值实现的,选中某条知识对象,通过点击“上移”或“下移”来减少或增加该知识对象的“ID”值,然后系统根据“插件加载设置表”中的“ID”字段值的顺序重新加载菜单。
图4 数据检查菜单设置界面
③自定义流程模块:自定义流程模块实现了主界面中的“自定义流程检查”下拉菜单的自定义和每个菜单对应的检查项的自定义。点击“自定义流程选项卡”弹出窗体如图5,窗体右侧显示“插件管理”菜单下添加的所有知识对象,窗体中部显示自定义菜单项,窗体左侧显示每一组自定义流程项名称(将在自定义流程检查菜单下显示)。可以通过或按钮选择或移去自定义菜单项,通过“上移”或“下移”按钮确定自定义菜单项进行检查的先后顺序,通过“添加”、“删除”和“修改”按钮添加修改或删除流程项。
此外为了提高自定义流程数据检查的速度和效率,应合理的调整自定义菜单项的顺序。例:如图5自定义流程“数据结构、格式检查”对应检查项顺序依次为管线数据结构检查、非空字段检查和数值范围检查,如果管线数据结构检查出错误,系统将停止后面两项检查,如果检查通过,系统进入下一项检查。
图5 自定义流程界面
以排水流向检查为例,排水流向检查主要是检查排水类管线中的水流方向是否合理(知识规则:水流是从管线井底标高较大的一端流向较小的一端)。首先输入最大标高容限(即流向终点标高—流向起点标高的最大允许差值),然后根据管线中两点的井底标高差值判断管线线表中“流向”字段内容的合理性,检查出的问题信息(记录实体ID,所在的信息表,警告信息描述)以报表的形式表现,同时允许以Excel格式输出检查报表。在执行本条知识对象时会弹出一个“最大标高容限”的输入窗口,可根据本地实际情况自行输入,在本次检查中输入值为 30 cm。运行结果如图6所示。
图6 检查结果
经实践证明,本系统切实可行,能够灵活应对管线探测成果数据检查中出现的各种问题,检查项可根据实际情况任意“热插拔”和调整,整体检查效果较好,保证了数据检查的质量和效率。但当数据量过大时,个别知识对象的执行效率还待提高,如管线碰撞检查,仍需结合空间分析做进一步的研究。
[1]黄鸿,龚健雅,钟正.地下管线数据的智能化检查研究[J].武汉大学学报·信息科学版,2007(08):731~734.
[2] 李丹农.城市地下管线数据的计算机监理检查[J].城市勘测,2007(4):61~63.
[3]许婷.基于知识与规则的城市管线数据计算机监理校验[J].四川测绘,2005(01).
[4] 廉师友.人工智能技术导论[M].西安:西安电子科技大学出版社,2002.
[5]徐勇,杨柯.一种面向对象知识库的构造和维护[J].计算机工程,2000(09).