第5卷第6期 智能系统学报 Vol.5 No.6 2010年12月 CAAI Transactions on Intelligent Systems Dec.2010 doi:10.3969/j.issn.16734785.2010.06.008 中国古建的语义网络知识库及其高效实现 白卫静,张松懋2,刘椿年1 (1.北京工业大学计算机学院,北京100124:2.中国科学院数学与系统科学研究院,北京100190) 摘要:将全过程计算机辅助动画自动生成技术应用于中国古建领域,实现了一个自动古建动画系统.它根据用户 对古建的描述,自动生成三维动画来表现古建的搭建过程,整个自动过程都是在古建知识库的支持下完成的,采用 语义网络技术设计并实现了知识库,包括本体库和规则库2部分.主要论述古建知识库的结构、本体和规则库的组 成,并以生成古建搭建顺序为例来说明规则推理的过程,共实现了2个方案,一个基于本体构造环境Ptg6,另一个 基于规则推理系统J,后者比前者在推理时间上节省了99%以上,重点论述了高效方案的设计思想和实现技术, 并分析了其优点和不足. 关键词:计算机辅助动画自动生成;语义网络;本体;规则;Protege;Jess 中图分类号:TP182文献标志码:A文章编号:16734785(2010)060510-12 A knowledge base of traditional Chinese architecture and its efficient implementation demonstrated through BAI Wei-jing,ZHANG Song-mao2,LIU Chun-nian' (1.College of Computer Science,Beijing University of Technology,Beijing 100124,China;2.Academy of Mathematics and Systems Science,Chinese Academy of Sciences,Beijing 100190,China) Abstract:In applying the full life-cycle automatic animation technology,an automatic animation system was de- signed and implemented for traditional Chinese architecture.Based on the user's description of a traditional build- ing,the system generated an animation demonstrating the construction of the building.The whole automation was supported by a domain knowledge base.Semantic web technology was used to implement the knowledge base,in- cluding ontological knowledge and rules.The structure and components of the ontology and rule base were presen- ted.Moreover,the inference process through using rules to reason about the construction sequence of wooden com- ponents was illustrated.Two implementations were given:Protege-based and Jess-based.The latter saved up to 99%more of the reasoning time than the former.The details of the Jess-based knowledge base were presented,and its merits and drawbacks were analyzed. Keywords:computer-aided automatic animation;Semantic Web technology;ontology;rules;Protege;Jess 起源于哲学的本体论(ontology)在信息科学领 撑,在上层运用人工智能技术以及电影艺术实现了 域一度引起广泛关注2],其重要性也已在很多方 一个全新的动画片生产自动化的技术路线.它的目 面表现出来并得到广泛认同.尤其是语义网(seman- 标是只要有了一个适当的故事,以受限自然语言的 tic Web)[341的诞生,在W3C组织的主导下有望解 形式把它输入到计算机里,从此时开始,直到最终动 决网络信息共享的语义问题,从而实现因特网内的 画生成,每一步都是在计算机的辅助下完成的.将全 知识共享和智能信息集成.随着语义网技术的不断 过程计算机辅助动画自动生成技术应用到中国古代 发展,越来越多的本体知识库被建立起来,用本体知 建筑领域,建立了古建动画自动生成系统,用户输入 识库来表示相关领域知识逐渐成为大势所趋. 他想要的古建的木架结构,系统则自动生成三维动 本文的研究基础是陆汝钤院士提出的全过程计 画,表现这个建筑一步一步的搭建过程.为了支持这 算机辅助动画自动生成技术[5],它将人工智能技术 样的古建动画自动生成,构建了古建知识库系统,实 与现代多媒体技术相结合,以底层图形学技术为支 现了对搭建顺序的自动推理、以及对每根木头的尺 寸和空间位置的自动计算;特别地,面向知识共享和 收稿日期:2010-0305. 基金项目:国家科技支撑计划资助项目(2006BAK31B04), 互操作,应用语义网络技术实现了整个古建知识库 通信作者:白卫静.E-mail:estherbaiweijing@gmail.com. 系统,包括建立了本体库和规则库,并针对使用多种
第6期 白卫静,等:中国古建的语义网络知识库及其高效实现 .511. 本体构建工具导致推理效率低的问题,提出了一个 针对某些具体的建筑或构件而建立的查询系统,并 高效的推理实现方案, 未涉及到古代建筑的搭建过程,也没有把这一搭建 1研究背景 过程用动画形式表现出来 古建动画自动生成系统填补了这个空白,它是 1.1全过程古建动画自动生成系统 全过程计算机辅助动画自动生成技术在古建领域的 我国古代建筑文化遗产极为丰富,中国古建形 应用,以类自然语言的形式把古建结构的信息输入 式多种多样,归结起来有硬山、悬山、歇山、庑殿、攒 到计算机里,从此时开始,直到最终生成古建搭建动 尖5种基本形式,在这几种最基本的建筑形式中,又 画,每一步都是在计算机的辅助下完成的.系统框架 细分成具有不同特点的建筑,如庑殿有单檐庑殿、重 流程如图1所示,具体步骤包括对用户输入的古建 檐庑殿,硬山和悬山既有1层,也有2层楼房等6. 结构描述的信息抽取、建筑类型和所需构件及其数 尽管古代建筑形式纷繁复杂,但各个部位都有 目的推导、构件搭建顺序的推理、每个构件的尺寸和 较为固定的比例关系,这些比例关系是古建筑设计 空间位置的计算、定性动画场景描述生成、榫卯计算 与施工共同遵循的法则.掌握这些法则,对其进行整 和生成、定量动画场景描述生成和最后可以用于直 理加工,可以用计算机来重现这些古建筑的建造过 接渲染的动画文件的生成。 程.目前古代建筑领域的数据库或知识库,大多都是 用户输入的建筑 结构描述 系统类库 建立建筑实例并推理出 该建筑所需所有构件实例 建筑实例和建筑构件实例 实例规则库 构件尺寸 推理出各构件尺寸 带贝寸屈性值的构件实例 规则 构件位置 推理出各构件三维空可 带尺大、位置、方向屈 性值的构件实例 规则库 位置和方向 带尺寸、位置、方向、 构件搭建顺序 推理出各构件在动画巾的 搭建顺序属性值的构作 规则库 搭建顺序 实例 带尺寸、位置、方向、 榫卯规圳库 推理出各构件之间的 搭建顺序、榫卯关系属 榫卯关系 性值的构件实例 斗拱规则库 推理出斗拱类型和 相关信息 斗拱部件的位置和方向 古建搭建动画的定性规划 动画定性描述信息 古建搭建动画的定量规划 动画定量描述信息 动画生成 可渲染的动画文件 图1古建动画自动生成系统框架流程图 Fig.1 Flow chart of the automatic animation system for Chinese traditional architecture
512. 智能系统学报 第5卷 建筑类型和所需构件及其数目的推导、构件搭 本体应用的研究领域非常广泛,包括智能信息 建顺序的推理、构件尺寸和空间位置的计算和榫卯 检索、数字图书馆、网络教学、企业本体、电子邮件过 生成等,都需要在本体知识库系统的支持下实现.目 滤、文档归类、文体求解、需求分析、知识管理、信息 前本体的研究非常热,领域本体的覆盖范围非常广, 集成、机器翻译等.另外,国家也在“973”计划、国家 但在中国古建领域,涉及古建木架结构搭建方面的 自然科学基金等项目中支持了基于ontolog灯的信息 知识库就很少,更是没有发现符合本项目需求的关 集成、数字图书馆、信息检索等应用型的技术,这些 于建筑中每根木头构件的知识库,因此需要建立一 项目也都以ontolog灯技术作为核心[8].本体知识库 个面向古建动画自动生成系统的知识库。 采用本体知识表示的方式,以本体作为某个领域概 1.2语义网络技术 念、属性以及概念间内在关系的形式化表达,事实和 1998年,T.B.Lee首次提出语义网络的概念, 概念的建模体现在本体知识上,进一步可以用本体 在他给出的语义网络体系结构中(如图2),构建在 概念和关系进行规则地组织,形成规则库,在古建动 Unicode与URI、XML、RDF(S)等语言标准之上的 画知识库系统中就创建了各种规则库,并利用本体 本体层(ontology vocabulary)起着关键的作用,其提 推理和规则推理实现系统功能.目前大多数的知识 供的丰富的表达能力不仅能用来描述领域的概,念模 库只是进行本体构建和推理,并不包括规则库,未使 型,还是对知识进行推理和验证的基础们 用规则推理。 本体部分目前常用的编辑工具主要有斯坦福大 规圳 信任 学开发的Protege系列9]、马德里技术大学开发的 WebODE10]、卡尔斯鲁厄大学开发的OntoEdit!和 数据 验诽 曼彻斯特大学构建的0Ed2]等.这些工具各有偏 数据 逻辑 重,其中斯坦福大学的Protegé系列因其界面友好、 奥 简单易学、开放源码等特性成为国内外众多本体研 木体词汇 自描述 究机构的首选工具.目前比较常用的本体语言的主 文档 要有XML、RDF、OIL、DAML+OIL、OWL等,其中 RDF+BD模式 OWL已经成为本体的标准语言,最新的版本是 XML+名空间+XMI模式 OWL2.比较常用的针对本体的规则语言包括 ruleML(rule makeup languages)SWRL(semantic Unicode URI web rule language),SWRL是以OWL语言为基础的 规则描述语言.目前本体推理机有Fact++、Pellet、. 图2语义网络体系结构 RacerPro等,它们还支持基于本体的规则推理,另外 Fig.2 Semantic Web structure layer 较常用的支持规则推理的还有通用推理引擎Jss、 本体赋予网络上的信息以语义含义,因此本体 Jena等 作为语义载体在语义网络中起着核心的作用,是语 2古建动画自动生成系统中的知识库 义网络基于语义的互操作得以实现的关键因素.本 体是对领域概念的规范化表示,作为知识和概念描 系统 述的重要工具,可以清晰描述领域知识库中的概念 2.1古建领域知识总结 及其关系,实现领域知识的共享和重用,也有利于领 马炳坚先生在《中国古建筑木作营造技术(2版)》 域知识库的管理和维护.基于领域本体,可以对领域 中曾提到:“研究古建筑,首先应当了解这些不同形式 内的资源在语义层次上进行表述,使得领域内的资 建筑的不同构造,了解每种构造都是由那些构件组成 源从内容级别上升到语义级别,使得资源的管理和 的,它们在整体中起着什么作用.这些构件又是怎么有 利用更加地有效和智能化.由此,本体的构建也就成 机地组合起来,构成相应的建筑形式的.只有了解了这 为语义网络实现的重要步骤。 些内容,才能指导能动地认识古建筑”. 正是由于其在知识共享和资源重用方面的优 古建搭建过程应该基于具体的建筑构件,针对 势,在古建动画自动生成系统中采用了基于语义网 古建的木架结构,把每根木头作为建筑基本构件单 络的本体这一技术来实现知识库系统的构建, 位,并根据它们在搭建过程中起的作用,抽象出4个
第6期 白卫静,等:中国古建的语义网络知识库及其高效实现 ·513 属性,形成一个描述建筑构件的四元组,包括构件 表示出来.2)接收用户输人的对于他想要的建筑的 名、垂直方向所跨过的层列表、面宽方向所跨过的缝 描述参数,如建筑制式、建筑特性、间数、檩数、柱径、 列表、进深方向所跨过的缝列表.图3是古建动画系 柱高等,在本体库和规则库中选取适当的模块加载, 统自动生成的间数为5、檩数为7的有周围廊的庑 由推理机推理,得到建筑的建筑构件信息,包括构件 殿建筑,其中((金柱),(1,1),(6,6),(3,3)代表 名称、数目、构件尺寸、空间位置和方向、搭建顺序 图中用椭圆标识出来的一个构件,金柱表示的是建 等,并将这些信息以特定的形式输出给自动动画系 筑构件的名称,(1,1)表示这根金柱在竖直方向上 统的下一个部分 是第1层,位于最底层,(6,6)表明这根金柱在面宽 归纳总结出来了硬山、歇山、庑殿的领域知识, 方向上是位于第6缝的位置,(3,3)表示这根金柱 其中,庑殿建筑是中国古建筑中的最高型制.在等级 在进深方向上位于第3缝的位置; 森严的封建社会,这种建筑形式常用于宫殿、坛庙一 类皇家建筑,是北京中轴线上主要建筑最常采用的 形式,如故官午门、太和殿、乾清宫等都是庑殿式建 金柱).(1,1),(6.6.(3,3 筑.庑殿建筑实际上已经成为皇家建筑中独有的一 种建筑形式,皇家建筑之外的建筑是不允许采用这 种建筑形式的,庑殿建筑的这种特殊政治地位决定 了它制式复杂,用材硕大、体量雄伟、装饰华贵富 丽6].这表明在本体知识库的实现过程中,庑殿的 难度是最大的,因此在下文中,选用庑殿建筑为例来 论述知识库系统的设计和实现细节. 图35间7檩有周围廊庑殿木架结构的构件示意图 2.2知识库系统结构 Fig.3 Wooden structure of a Wudian style building with 将古建知识体现在知识库中,包括2个部分:古 five sections from left to right and seven purlins 代建筑本体库和古代建筑规则库,推理机基于这2 from front to rear 个部分运行,得到系统需要的信息.其中类(概念) 古建知识库是古建动画自动生成系统的重要组 和实例体现在本体库上,各种规则存在于规则库中, 成部分,它的功能主要包括:1)把古建专家总结出 如图4所示. 来的领域知识在知识库中以本体库和规则库的形式 系统类库 古建本体库 系统实例库 关系红 实例规则库 的 构件尺寸规则库 和划 构件位置规则库 图例 古建规则库 构件搭建顺序规则库 榫卯规则库 子库 斗拱规则库 图4古建知识库系统结构 Fig.4 Components of the knowledge base for Chinese traditional architecture
514 智能系统学报 第5卷 2.2.1古建本体库 的顺序属性。 本体库包括2个子库:系统类库和系统实例库 5)榫卯规则库. 1)系统类库 基于系统实例库和榫卯规则,推理机推理出用 系统类库存储类及类的属性,主要包括建筑制 户输入建筑中建筑构件之间的榫卯关系,同时将其 式类、建筑构件类 更新写人系统实例库 建筑制式类的子类包括:硬山、庑殿、歇山等,这 6)斗拱规则库。 个类的子类可以随着领域专家的知识总结而不断扩 基于系统实例库和斗拱规则,推理机推理出用 充.其属性包括建筑制式的间数、檩数等通用属性, 户输入建筑中的斗拱类型和相关信息,同时将其更 同时,每个子类都还包括自己特殊的一些属性,如: 新写人系统实例库 硬山的有无前后廊的属性,庑殿的有无周围廊的属 2.2.3古建知识库推理机 性等 以一个5间7檩有周围廊庑殿为例,说明知识 建筑构件类的子类包括:金柱、檐柱、小额枋、桁 库系统是如何基于本体库和实例规则库运行并建立 枋、大额枋等,同样地,这个类的子类也可以随着领 相关建筑实例和构件实例的.首先用户输人的参数 域知识的学习而扩充.如前文提到的,按照领域专家 被传递给知识库系统,知识库系统会在系统类库中 的总结,建筑构件可以用((构件名),(垂直方向所 找到有周围廊庑殿的类,基于有周围廊庑殿的实例 跨过的层列表),(面宽方向所跨过的缝列表),(进 规则库,建立一个5间7檩的有周围廊庑殿实例;然 深方向所跨过的缝列表))的四元组来表示。 后基于此实例和构件个数规则推理出这个建筑需要 2)系统实例库, 22根檐柱、14根金柱、22个小额枋等等,相应地系 在系统未运行的时候实例库是空的,根据用户的 统建立22个檐柱实例、14个金柱实例、22个小额枋 输入,经过推理机基于本体和规则的推理,系统动态地 实例等等,并在这些构件实例和庑殿实例之间建立 在实例库中建立对应的建筑实例和建筑构件实例, 相应的所属关系,如图5所示 2.2.2古建规则库 3基于Jess的知识库系统 规则库包括6个子库:实例规则库、构件尺寸规 则库、构件位置规则库、构件搭建顺序规则库、榫卯 该文的古建知识库系统全部用Jess实现.Jess 规则库和斗拱规则库 (Java expert shell system)是l995年由美国Sandia 1)实例规则库 国家实验室分布式系统计算组成员E.J.Friendman- 基于本体库和实例库的规则,推理机推理出用户 Hill用Java实现的一个经过扩充的CLPIS版本.Jess 输入建筑所需要的各种建筑构件,及其具体建筑构件 是性能良好的开放式推理机,原则上可以处理各种 的数目,然后在系统实例库中建立该建筑制式的一个 领域的推理任务,只要系统能够为Jss提供这个领 具体实例和其所需建筑构件的相应数目的实例, 域的特定领域规则和事实信息.Jess的规则匹配采 2)构件尺寸规则库 用经典的RETE算法,以牺牲大量的存储空间来换 基于系统实例库和尺寸规则,推理机推理出用 取匹配的高速性.RETE算法利用了专家系统中时 户输入建筑中各个建筑构件的具体尺寸大小,同时 间冗余性和结构相似性这2个特点,有效地减少了 将其更新写人系统实例库, 用于匹配操作的次数,因此,当系统的性能是由匹配 3)构件位置规则库 算法的质量决定时,Jess的优点将更加明显.应当指 基于系统实例库、空间位置和方向规则,推理机 出的是,RETE算法是一个以空间换取时间的算法, 推理出用户输入建筑中各个建筑构件的三维位置和 所以,应用Jess时应当考虑内存的消耗3] 方向,同时将其更新写入系统实例库 根据古建动画自动生成系统的需要,把所有总 4)构件搭建顺序规则库, 结得到的古建知识写入知识库的本体库和规则库 基于系统实例库和搭建顺序规则,推理机推理 中,知识库系统根据用户输入的具体参数(如5间7 出用户输入建筑中各个建筑构件在搭建动画中出现 檩有周围廊的庑殿),进行下列推理: 的先后顺序,同时更新系统实例库中各个相关构件 1)基于实例规则库的规则,推理出5间7檩有周
第6期 白卫静,等:中国古建的语义网络知识库及其高效实现 .515. 围廊庑殿建筑所需要的所有的建筑构件类别,和各构 系统实例库, 件类别的具体构件个数:然后在系统实例库中建立一 4)基于庑殿实例和构件实例,以及构件搭建顺 个庑殿类的实例,和相应个数的构件类的实例. 序规则库,推理出各个构件在动画中的搭建先后顺 2)基于庑殿实例和构件实例,以及构件位置规 序,同时将这些信息写入系统实例库。 则库,推理出各个构件实例的位置属性值,如所在层 5)当动画搭建过程需要的构件信息生成完毕, 从第几层到第几层,面宽缝从第几缝到第几缝,进深 将实例库中的实例及其属性值导出,以适当的形式 缝从第几缝到第几缝等等,并用这些属性值更新系 输出给古建动画自动生成的下一个部分. 统实例库 下面将分别介绍知识库系统的模块组成、类库 3)基于庑殿实例和构件实例,以及构件尺寸规 的Jess实现、规则库的Jess实现、搭建顺序推理的 则库,推理出各个构件实例的尺寸等信息,同时更新 Jess实现和整个知识库系统的运行流程 小式硬山类 建筑制式类 庑殿类 庑殿实便1:5间7懔 组成建筑的 款山类 构件实例 金 金 金 柱 柱 实 柱 例 实 实例 例 例 例 22 14 金柱 建筑构件类 檐柱 图例 系统类 小额防 系统实例 父类 子类 类 实例 图55间7檩有周围廊庑殿实例规则运行结果示意图 Fig.5 An example of generating individuals for the ontology 3.1模块划分 基于图4的知识库系统的系统结构,为了方便 分模块,每个子库中都基于不同的建筑制式有自己 操作和提高系统效率,把各个子库系统按照功能划 不同的模块,如表1所示
.516. 智能系统学报 第5卷 表1知识库系统模块设计 Table 1 Modules in the knowledge base 子库名称 具体模块 系统类库 类的构架和定义模块 包括:硬山有廊实例规则模块、硬山无廊实例规则模块、有周围廊庑殿实例规则模块、重檐 系统实例规则库 庑殿实例规则模块等 包括:硬山有廊各构件位置规则模块、硬山无廊各构件位置规则模块、有周围廊庑殿各构件 构件位置规则库 位置规则模块、重檐庑殿各构件位置规则模块等 包括:硬山有廊各构件尺寸规则模块、硬山无廊各构件尺寸规则模块、有周围廊庑殿各构件 构件尺寸规则库 尺寸规则模块、重檐庑殿各构件尺寸规则模块等 包括:硬山有廊顺序规则模块、硬山无廊顺序规则模块、有周围廊庑殿顺序规则模块、重檐 构件搭建顺序规则库 庑殿顺序规则模块等 (Deftemplate DaMujia (Deftemplate构件 (slot N:屈性间数 (slot ID (type INTEGER) (type INTEGER) (default 0)) (default 0)) (slot M:属性檀数 (slot所在层从 (type INTEGER) (type INTEGER) (default 0))) (default 0)) (a)大木架类定义 (slot所在层到 (type INTEGER) (Deftemplate WD extends DaMuJia) (default 0)) ::庞殿是大木架的子类 (slot面宽缝从 (Deftemplate WD T extends WD) (type INTEGER) ::重檐庑殿足庑殿的子类 (default 0)) (Deftemplate WD F extends WD) (slot面宽缝到 :单檐是庑殿的子类 (type INTEGER) (b)建筑制式类子类 (default 0)) (slot进深缝从 (Deftemplate檐柱extends构件) (type INTEGER) (Deftemplate金柱extends构件) (default 0)) (Deftemplate小额枋extends构件) 檐柱、金柱、小额枋都是构件的子类 (slot进深缝从 (type INTEGER) (default O))) (c构件类子类 (d)构件类定义 图6类的定义 Fig.6 Some class definitions 当用户提出一个建筑需求时,系统根据输入参 到,这些属性的含义在前文中已经有过介绍.各种构 数、自动选择相应的模块加载,从而节省内存空间的 件是构件类的子类,如金柱、檐柱、小额枋等,在Jess 使用,而且效率高.例如,当用户参数表明只需要推 中如图6(c)表示. 理有周围廊庑殿的搭建顺序时,系统会自动屏蔽其 3.3实例规则库的实现 他无用的模块,而只选择以下3个相关模块加载: 实例规则库根据领域知识在实例库中添加建筑 1)系统类库(所有用户需求都需要加载的); 实例和构件实例,以有周围廊庑殿的建筑型制为例, 2)有周围廊庑殿实例规则模块; 它涉及25种建筑构件,每种构件个数不相同,实例 3)有周围廊庑殿搭建顺序规则模块, 规则库根据具体的建筑实例参数来确定各个构件的 完成加载之后,系统开始推理,然后输出结果, 个数,并为各个构件生成相应个数的实例,同时,给 3.2类库的实现 每个具体实例的D属性赋值.下面给出建立构件实 在Jess中用deftemplate来定义DaMuJia(大木 例的一个例子,根据学习古建领域知识的同学的总 架)类(如图6(a)所示),其中WD(庑殿)、XS(歇 结,所有在面宽方向上第(J'+1)缝到第(J-J')缝 山)、XSYS(硬山)都是其子类(如图6(b)所示).图 的金柱的四元组表达是: 6(d)所示是构件类的定义,属性有:ID、所在层从、 (金柱,(1,1),),(3,3)), 所在层到、面宽缝从、面宽缝到、进深缝从、进深缝 (金柱,(1,1),(G,),(M,M))·
第6期 白卫静,等:中国古建的语义网络知识库及其高效实现 ·517· 式中:M=檩数;J=间数+檩数+2,J′=1+ 关于构件尺寸、位置、搭建顺序、榫卯和斗拱,分 (檩数+1)/2,而j表示面宽方向上从第(J”+1)缝到第 别建立了规侧库,它们虽然功能不同,但实现和运行 (J-J'缝)的所有值.用如下Jess规则在实例库中建立 的方式是基本一致的,下面以搭建顺序规则库中的 这些金柱的实例,其中jd是用来赋值给D属性的变 庑殿构件顺序模块来说明规则库的实现方法 量,bind是Jess中绑定变量和变量值的语句. 基于已经推理出来的建筑构件实例,应用古建 (bind?j(+?J'1)) 领域知识,推理出各个构件搭建的具体先后顺序,是 (bind?jzid1) 顺序规则模块需要实现的内容.按照建筑的搭建过 while (<=?j(-?J)do 程,顺序推理规则在建筑垂直方向上分为4个部分: (assert (JinZhu (ID ?jzid)(LayerFrom 1) 0层、底层(1层)、顶层和中间层,其中0层、底层、 LayerTo 1)(MianFengFrom ?j)(MianFengTo ?j) 顶层都是单独的一个层次,中间层根据具体建筑规 JinFengFrom 3)(JinFengTo 3))) 模的不同有具体的数值,如1层3层、5层等。 (assert(JinZhu(ID(+?jzid1))(LayerFrom 具体实现方法是在Jess的规则模块中定义规 1)(LayerTo 1)(MianFengFrom ?j)(MianFengTo 则,不同的搭建层次有不同的规则,然后在Java程 i)(JinFengFrom?*M*)(JinFengTo?*M 序中调用Jess推理机进行规则推理,得到具体某层 米))) 某缝的搭建中用到的所有构件的先后顺序.因为0 (bind?j(+i1)) 层、1层、顶层的规则相似,它们在Java程序中由同 (bind ?jzid (?jzid 2)) 一个函数处理,而中间层因为处理的具体层数不是 固定的,对这段规则的调用方法不同 3.4搭建顺序推理的实现 图7~10给出了各层具体顺序规则的示例. (Defquery OcengShangJia3feng (declare(variables ?x)) ?fl <-(ZhuChu(LayerFrom 0)(LayerTo 0)(MianFengFrom 3)(MianFenTo 3)(JinFengFrom ?a&:(eq ?a(+(*?X2)1)))(JinFengTo ?a)) ?f2 <-(ZhuChu(LayerFrom 0)(LayerTo 0)(MianFengFrom 3)(MianFengTo 3)(JinFengForm ?*M*)(JinFengTo?*M*)) ?f3 <-(ZhuChu(LayerFrom 0)(LayerTo 0)(MianFengFrom 3)(MianFengTo 3)(JinFengFrom 2)(JinFengTo 2) ?f4 <-(ZhuChu(LayerFrom 0)LayerTo 0)(MianFengFrom 3)MianFengTo 3)(JinFengFrom ?*M1*)(JinFengTo ?*MI*)) 图70层上架第3缝顺序规则 Fig.7 The first example of rules for inferring construction sequence (Defquery IcengShangJia2feng (declare (variables ?x) ?fl<-(PingBanFeng(LayerFrom 1)(LayerTo 1)(MianFengFrom 2)MianFengto 3)(JinFengFrom 2)(JinFengTo 2)) ?f2<-(PingBanFeng(LayerFrom 1)(LayerTo 1)(MianFengFrom 2)MianFengto 3)(JinFengFrom ?*MI*)(JinFengTo?*MI*)) ?f3<-(PingBanFeng(LayerFrom 1)(LayerTo 1)(MianFengFrom 2)MianFengto 3)(JinFengFrom a&:(eq?a(+*?X2)1)))(JinFengTo ?b&:(eq ?b(+?a2)))) ?f4<-(PingBanFeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 3)(JinFengFrom 2)(JinFengTo 3)) ?f5<-(PingBanFeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 3)(JinFengFrom ?M*)(JinFengTo?*M1*)) ?f6<-(ZhengXinHeng(LayerFrom 1)(LayerTo I)MianFengFrom 2)MianFengto 3)(JinFengFrom 2)(JinFengTo 2)) ?f7<-(ZhengXinHeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 3)(JinFengFrom ?*MI*)(JinFengTo?MI*)) ?f8<-(ZhengXinHeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 2)(JinFengFrom ?a)(JinFengTo ?b)) ?19<-(ZhengXinHeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 2)(JinFengFrom 2)(JinFengTo 3)) ?f10<-(ZhengXinHeng(LayerFrom 1)(LayerTo 1)MianFengFrom 2)MianFengto 2)(JinFengFrom ?M*)(JinFengTo?*M1*)) 图81层上架第2缝顺序规则 Fig.8 The second example of rules for inferring construction sequence
518 智能系统学报 第5卷 (defquery IcengShanglia2feng (declare (variables ?x) ?fl<-(TaiPingLiang(LayerFrom ?*M5*)(LayerTo ?*M5)(MianFengFrom ?a&:(eq ?a ?x))(Mian FengTo ?a)(JinFengFrom ?*/1*)(JinFengTo ?*/3)) ?f2<-(LeiGongZhu(LayerFrom ?*M5*)(LayerTo ?*M5*)(MianFengFrom ?a)(MianFengTo ?a)(Jin FengFrom ?*/2*)(JinFengTo?*12*)) ?f3<-(HengFang(LayerFrom?*M5*)(LayerTo ?*M5*)(MianFengFrom ?a)(MianFengTo ?a(Mian FengTo ?b&:(eq?b(+?al)))(JinFengFrom ?*/2*)(JinFengTo ?*/2*) 图9顶层下架第1缝顺序规则 Fig.9 The third example of rules for inferring construction sequence (Defquery midceng Xialiajfeng2 (declare(variables ?x?i)) ?f1<-(GuaZhu(LayeFrom ?u&:(eq?u?i))(LayerTo ?u)(MianFengFrom?a&:(eq?a?x))(Mian FengTo ?a)(JinFeng From ?u2(+?u2)))(JinFengTo ?u2)) ?f2<-(GuaZhu(LayeFrom ?u)(LayerTo ?u)(MianFengFrom?a)(MianFengTo ?a)(JinFengFrom ?u3&:(eq ?u3(-?*MI*?i)))(JinFengTo ?u3)) ?f3<-(HengFang(LayerFrom ?u)(LayerTo ?u)(MianFengFrom ?a)(MianFengTo ?b&:(eq ?b (+?al)))(JinFengFrom ?u2)(JinFengTo ?u2)) ?f4<-(HengFeng(LayerFrom ?u)(Layer To ?u)(MianFengFrom ?a)(MianFengTo ?b)(JinFeng Form ?u3)(JinFengTo ?u3)) ?f5<-(PaLiang(LayerFrom ?u)(LayerTo ?u)(MianFengFrom ?u1&:(eq ?ul(+?ul)))(MianFeng To ?*M2*(JinFengFrom ?u2)(JinFengTo ?u2)) ?f6<-(PaLiang(LayerFrom ?u)(Layer To ?u)(MianFengFrom ?ul)(MianFeng To?*M2*)(JinFeng ?u3)(JinFengTo ?u3)) ?f7<-(HengFeng(LayerFrom ?u)(LayerTo ?u)(MianFengFrom ?u2)(MianFengTo ?a)(JinFengFrom ?u2)(JinFengTo ?u2)) ?f8<-(HengFeng(LayerFrom ?u)(LayerTo ?u)(MianFengFrom ?u2)(MianFengTo ?a)(JinFengFrom ?u3)(JinFengTo ?U3)) 图10中间层下架第2缝顺序规则 Fig.10 The fourth example of rules for inferring construction sequence 图7~10分别是0层上架第3缝顺序规则、1 述,对于有周围廊的庑殿,系统会自动屏蔽其他无用 层上架第2缝顺序规则、顶层下架第1缝顺序规则, 的模块,而只选择以下3个相关模块加载运行: 和中间层下架第2缝顺序规则.以0层上架第3缝 1)系统类库(所有用户需求都需要加载的); 顺序规则为例,其中“0 cengShangJia3feng”是规则 2)有周围廊庑殿实例规则模块; 名,其中(declare(variables?x))说明了一个名为? 3)有周围廊庑殿顺序规则模块, x的变量,在程序中调用的时候,0层上架构件第3缝 2)模块的规则运行时,根据具体的建筑实例参 中的构件个数值会通过?x传递给推理规则, 数来计算出各个构件的个数,并为各个构件构造相 图11给出了Java程序中调用Jess推理机进行 应个数的实例.一个5间7檩的有周围廊的庑殿共 规则推理的代码,其中result=engine..unQueryStar 有560个具体的构件实例,其中14个金柱、22个檐 (sRule,new Value Vector().add(num))是调用规则 柱、22个小额枋等等;而11间13檩的有周围廊庑 进行推理的语句,sRule是调用的规则段的名字,如 殿有1076个建筑构件实例,每个实例都是构件类 “0 cengShangJia3feng”,num即是传递给?x的具体的 的实例,属性包括:D、所在层从、所在层到、面宽缝 参数.推理结束后,Jess把结果实例存放在缓存区 从、面宽缝到、进深缝从、进深缝到: 中,通过String name=f.getSlot Value(“Name”). 3)模块的规则运行时,Java程序调用知识库中 string Value(null)可以得到实例中的“Name”(即名 Jess不同的规则模块,基于2)部分的实例结果,利 称属性存放在String型变量name中),存放在不同 用搭建顺序规则进行推理,得到结果以规定的形式 的变量中的其他属性也可以类似得到: 写到XML文件中,作为系统下个部分的输人.根据 3.5知识库系统的运行流程 专门学习古建知识的同学归纳总结出来的领域知 以有周围廊庑殿的搭建顺序推理过程为例,说 识,庑殿的搭建是分层进行的,其中每个层又分为上 明整个知识库系统的推理实现过程.根据前面的论 架、下架、由戗、角梁等,具体到每一架的搭建又按照
第6期 白卫静,等:中国古建的语义网络知识库及其高效实现 519 不同的缝来进行,同一架的不同缝之间的搭建是相 块分解成互不影响互相独立的26个子模块,具体如 互独立、互不影响的.据此,把庑殿构件顺序规则模 表2所示, try result=engine.runquerystar(srule,new valuevector().add(num)); if(result.next())f int i=1 while(i<nurmofinstance) string fi=“f”+i: system.out.println(fi): integer id=result.get(fi).intvalue(null): fact f=engine.findfactbyid(id): string name=f.getslotvalue("name").stringvalue(null): string If=f.getslotvalue(“layerfrom”)).stringvalue(null)片 string It-f.getslotvalue("layerto").stringvalue(null): string mf-f.getslotvalue("mianfengfrom").stringvalue(null): string mt=f.getslotvalue("mianfengto").stringvalue(null): string jf=f.getslotvalue("jinfengfrom").stringvalue(null): string jt=f.getslotvalue("jinfengto").stringvalue(null): i++: 图11 调用规则推理的Java代码 Fig.11 Java codes for starting the rule inference 表2庑殿顺序部分推理规则模块划分 层次 架 推理规则模块名称 Table 2 Modules of rules for inferring construction se- 顶层下架第j缝1 quence 下架 顶层下架第j缝2 层次 架 推理规则模块名称 顶层 顶层上架第j缝1 上架 下架 0层下架第1缝 顶层上架第j缝2 0层上架第2缝 由戗 顶层由戗第j缝 第0层 0层上架第3缝 4 上架 0层上架第j缝1 实验结果 0层上架第j缝2 在整个古建本体知识库的实现过程中,使用 1层下架第2缝 Jess和Java完成了所有的功能,而没有选用在本体 1层下架第3缝 研究领域应用广泛的Protége系列工具, 下架 1层下架第j缝1 在古建知识库的第1版4]中,使用了Protege 1层下架第j缝2 系列工具,具体选用Protegé3.4作为本体编辑工 第1层 1层上架第2缝 具,使用OWL DL作为本体描述语言,使用SWRL 1层上架第3缝 上架 语言来描写规则,选用Jess作为推理机,驱使规则 1层上架第j缝1 和0WL知识本体结合.不同的部分使用了不同的 1层上架第j缝2 专业工具,使得整个知识库系统搭建过程是递增的. 角梁 1层角梁第2缝 然而,当系统运行时出现了内存溢出的问题.为了解 中间层下架第j缝1 决内存溢出的问题,使系统可以顺利运行,把系统中 下架 中间层下架第j缝2 原本应该一次推理的内容分成几次进行,这种采用 中间层下架第j缝3 时间换取空间的方法,使推理时间变得非常长.表3 中间层 中间层上架第j缝1 上架 中间层上架第j缝2 的左边部分列出了带周围廊庑殿的不同制式的搭建 中间层上架第j缝3 顺序推理的时间,运行环境是CPU2.8GHZ、内存 由戗 中间层由戗第j缝 1.5GB的微机,并为知识库分配了1GB内存