第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