1. 引言
知识系统一直是强人工智能系统的核心,它以大量形式化的知识作为基础,通过计算机进行推理,满足各种应用对知识的需求。本体作为一种形式化的、对于共享概念明确的显式表示,能更好地表示各种术语、概念所隐含的知识 [1] 。随着语义Web技术的发展,基于本体的知识表示方法已经得到广泛的应用。OWL (Web Ontology Language, OWL)是由国际万维网组织W3C推荐和使用的基于本体的语义Web建模语言 [2] ,集成语义Web规则语言SWRL (Semantics Web rule language, SWRL)构成目前强大的知识表示工具 [3] ,使得知识表示具有更强大表示能力和推理能力。知识图(Knowledge Graph)是Google公司2012年提出的一种表示知识的数据结构 [4] ,旨在实现更智能的搜索引擎;知识图本质上是基于语义网络的知识库,其核心是采用RDF (Resource Description Framework, RDF)三元组图模式描述知识实例(或者事实)及它们之间的语义关系。
然而,知识系统的一个重要的要求是能对知识表示的语义信息查询。W3C推荐的OWL本体标准查询语言为SPARQL (Simple Protocol and RDF Query Language, SPARQL) [5] ,它是建立在图模式匹配上的查询语言;基于描述逻辑查询语义信息,但缺乏与基于Horn逻辑的SWRL规则的集成,推理查询能力有限。SQWRL (Semantic Query-enhanced Web Rule Language, SQWRL) [6] 是基于SWRL规则的查询语言,通过定义一组用于查询的运算符及融合SWRL规则实现查询,可以很好地将Horn规则与OWL本体融合,作为一个插件应用在Protégé本体编辑平台上,也提供Java API。Jena是惠普实验室使用Java语言开发的开源语义Web框架,它内置了支持OWL本体语言的推理机 [7] ,但需要将实例和规则执行繁琐的转化步骤;此外,应用较广泛的推理机还有Pellet、FaCT++、RACER、HermiT等 [8] 。
另一方面,上述基于OWL本体的知识表示和推理技术都是基于开放世界假设(Open-world Assumption, OWA) [9] ,即假设任何一个命题都是真的,无论事实是否是真,都不能作否定的回答,面对Internet这样一个无限知识资源场景,OWA假设有其合理性,这也与一阶逻辑的单调性密切相关。但是在工程应用领域,对一个具体的应用场景,信息是完整和封闭的,符合封闭世界假设(Closed-world Assumption, CWA)对一个查询命题需要做出“真”和“假”的回答,完全采用OWA假设的推理机制会限制很多查询功能,有时还会产生不正确的结果 [9] 。
本文针对工程知识表示和语义信息查询实际需求,采用面向对象技术,设计和实现一个混合OWA和CWA,融合OWL本体和SWRL规则逆向推理的知识图语义查询方法,开发一个C++API动态库接口;通过实例验证,为工程信息知识表示和语义查询提供一个有效的工具。
2. 相关工作基础与总体方案
2.1. 工程领域知识的知识图表示
如上面所叙,知识图为非结构化知识提供了一种基于语义本体表示的数据结构,在知识问答系统、自然语言理解等方面得到广泛的应用。在工程领域中,大量的设计、制造和检测知识很难结构化为规则知识,知识图表达模式非常适合工程信息的知识表示。同时OWL是W3C组织推荐和使用的语义Web本体建模语言,为知识事实关联的概念提供一个显式、可共享的定义,从而为语义查询和机器理解打下基础。
按照Google的知识图框架,工程领域一个主题知识可以表示为一个知识图G =
,式中V表示该领域工程知识的事实节点集合,E表示连接两个实例的有向边集合。领域知识的实例事实通过本体或者资源进行标记,标记的事实关联到其概念本体。一个工程领域知识库可以表示为一组独立的知识图集合,GB = {G
1, G
2, ∙∙∙, G
n},为后续的语义查询和推理打下基础。
图1显示一部分冲压模具设计知识图。
在图1中,三个事实节点:“冲压模具_1”、“钣金工件_1”和“圆孔_1”分别被本体概念类标记,矩形框节点表示数据事实,节点用有向的关系边(例如:“冲压”关系、“加工特征关系”等)连接起来。
从知识图概念和图1示例,可以看出知识图表示可以将难以结构化的领域知识给出一个形式化的表示,可以记录由知识产生的难以结构化的事实。

Figure 1. An example of an engineering field (stamping die design) knowledge graph
图1. 一个工程领域(冲压模具设计)知识图示例
2.2. SWRL知识规则
上述基于本体构建的知识图难以表示“IF-THEN”等条件关系,产生式规则则比较容易描述这种知识。SWRL是常用的规则建立语言,用于定义产生式规则知识。SWRL规则基于Horn逻辑,是一阶逻辑的可判定子集,它可以采用和OWL相同的语言或者直接采用人类可读的语法进行表示。SWRL规则由隐含规则(Imp)、原子(Atom)、变量(Variable)和内置逻辑(Build-in)等部分组成。
一个典型的SWRL规则如下所示:
在这条SWRL规则中,
和Px表示原子,每个原子中包含变量,其中
通过交运算符连接,表示规则的体,Px表示规则的头,蕴含的意义是如果
全部发生,则Px发生。
Build-in为内置逻辑运算符集,例如在加工特征自动识别领域,需要使用规则定义加工特征,深孔的定义为长径比L满足5 ≤ L ≤ 10,用SWRL规则描述为:
Hole(?f) Ù hasDiameter(?f, ?d) Ù hasDepth(?f, ?l) Ù swrlb:divide(?q, ?l, ?d) Ù swrlb:lessThan(?q, 10) Ù swrlb:greaterThan(?q, 5) ® DeepHole(?f)
其中?后连接变量,f为孔特征类的一个实例变量;hasDiameter和hasDepth表示孔直径数据关系和孔深度数据关系;divide、lessThan和greaterThan为内置逻辑运算,分别表示算术商运算、逻辑小于和逻辑大于。隐含规则为当孔f的深度l和直径d的比值q满足大于5小于10,则孔f为深孔。通过这样SWRL规则,可以从现有概念和数据导出新的知识概念。
2.3. 工程知识图语义查询方案
本文针对工程知识表示和语义信息查询实际需求,采用面向对象技术,设计和实现一个混合OWA和CWA,融合OWL本体和SWRL规则逆向推理的工程领域知识图语义查询方法,查询框架如图2所示。

Figure 2. Engineering domain knowledge graph semantic query framework
图2. 工程领域知识图语义查询框架
工程语义信息查询框架分为知识库层和推理层。知识库层可以由本系统构建或者加载由Protégé构建的OWL领域本体和SWRL规则。建立完成的领域知识图本体和规则文件,通常为RDF/XML格式的OWL文档,然后将其中的TBox、ABox和RBox知识解析为面向对象表示框架中的概念类、属性类、规则类、实例类以及它们的对象知识集合,并将解析后的概念类和属性类知识做规则化处理,与解析后的规则类组成新的规则类集合。通过面向对象知识集合中形式化的实例类和规则类以及它们的对象,构成语义查询的知识集合。
推理层能够支持扩展后的SQWRL语义查询语言,通过对查询语言进行解析,与实例类、规则类以及它们的对象知识集合进行满足性和包含性检查,通过反向链式推理算法构造Protégé搜索树,完成工程语义信息的检索。
3. 融合知识规则的语义查询
3.1. 语义布尔查询设计
SQWRL是在SWRL规则语言的基础上对Build-in内置逻辑运算进行扩展形成的语义检索语言,它的核心运算符是sqwrl:select。例如要从图1表示的知识图中,检索冲压板厚为3 mm的冲压模具实例:
StampingDie(?x) Ù punch(?x, ?y) Ù SheetWorkpiece(?y) Ù hasThickness(?y, ?t) Ù swrlb:equal(?t, 3)® sqwrl:select(?x)
从上式可以看出,一个语义查询请求,就是一个SQWRL陈述。一个SQWRL陈述包括两部分:右边部分是一个核心SQWRL运算符:sqwrl:select,可以取一个或者多个变量,用这些变量值构成一个查询结果表的各个列。左边部分像一个标准的SWRL规则前提,将概念原子和特性关系通过布尔与运算联系起来。上述例子中StampingDie、SheetWorkpiece是原子概念类,punch、hasThickness是关系,使用逻辑运算符^连接。所谓布尔查询,是指在词项上通过布尔逻辑运算符与(
)或(
)非(
)构建出布尔查询表达式。SQWRL只支持
运算,因为语义查询推理机一般以开放世界假设为前提,认为知识是无限集合,对于
的运算没有全集U,所以任何
的运算返回的仍然是一个不确定的无限集合。
但是在工程应用领域,知识具有一定的封闭性和完整性,同时对于一个给定的查询命题,也需要高效的给出确定的结论,所以我们以封闭世界假设为前提,对基于布尔的SQWRL语义查询进行扩展,允许
和
逻辑运算,定义如下:
运算:设概念集合为U1,A为概念集中的概念,则有
;
设某概念的关系集合为U2,a为关系集中的一个关系,则有
;
运算:设概念集合为U1,A、B为概念集中的概念,则有
;
设某概念关系集合为U2,a、b为关系集中的关系,则有
;
三者的优先级为非(
) > 与(
) > 或(
),对于它们的推理支持将在下文中详细讲述。
3.2. 融合OWL本体语义与SWRL规则
OWL本体基于描述逻辑表示概念和概念之间的关系,可以表示丰富的层次语义关系及约束语义关系,具有较强的知识描述能力,但在表达因果关系知识能力不足。在一般语义Web技术中,采用OWL本体与SWRL规则相结合的方式表示知识,由OWL定义原子概念,SWRL定义因果关系的导出概念。因此要求语义查询不仅能查询由OWL本体定义的概念实例和关系,而且还能够查询SWRL导出的概念实例和关系。
根据本文设计的语义查询方案,采用反向推理的语义查询方法。反向推理算法需要统一格式的规则,需要将描述逻辑术语集合TBox规约到Horn逻辑的范围内。基于描述逻辑的OWL本体对应的描述逻辑子语言是SHOIN,SHOIN允许的逻辑运算集合如表1所示。SWRL格式为了兼容OWL,对于非和传递性等运算符进行限制,本文对SWRL原有的运算符集合进行了扩展,能够支持所有SHOIN允许的逻辑运算,将基于描述逻辑的TBox知识转化为SWRL格式的规则,与原本的SWRL规则组成新的规则库。注意,这种转化并不是等价,因为TBox中知识是双向的,但是规则中是单向的,它只是对于推理的一种支持,并且不会修改本体中的内容。
在表1中,A、C、D表示本体中的类,R、S表示本体中的属性,a表示个体实例,n代表值。一些扩展运算符解释:
表示x的值只能为
中的某一个值;R(?x, a)表示x和必须和a具有属性R的属性断言;
表示和x具有关系R的属性断言最少为n个;
运算符表示规则体中类的对象全部是规则头中类的对象;
表示只和C的对象拥有关系R断言的对象属于类A。
3.3. 基于逆向推理的知识图语义查询
本文所讨论的语义查询,是一个类SQWRL语义查询。为了获得一个查询结果,从查询目标问题出

Table 1. From OWL class axioms to SWRL rules
表1. 从OWL类公理到SWRL规则
发,如果能够从知识图中找到一组变量值(一个变量可以是一个实例或者一个数据类型值),替换SQWRL陈述左侧中的所有变量符号,使得陈述左侧布尔表达式为真,该方案就是一个可行的方案,该组变量值作为查询结果输出,该方案称为满足性方案。
显然,通过搜索和匹配知识图中的节点(实例节点和数据节点)找到满足性方案很关键。本文采用逆向推理策略进行推理,因为目标已经确定,只需从目标状态出发,按照子目标组成的逻辑顺序逐级向初始状态递归,直至满足现有条件。下面将介绍具体推理算法:
1) SQWRL陈述左侧概念和关系递归替换
如上面所述,SQWRL陈述左侧部分是一个标准的SWRL规则前提,通过布尔运算符将概念原子和特性关系连接起来。因此首先要检查规则中的概念和特性关系是否是OWL已经定义的概念和关系,如果没有定义,需要从SWRL规则库中搜索,是否是一个导出的概念,如果还不是,查询推理结束;否则将该导出概念规则的规则体替换该导出概念,同时对替换体做递归检查,直至全部概念和关系已经定义。
2) 满足性方案搜索
实际上就是一个对知识图节点事实逆向推理过程,更具体说就是为了SQWRL的查询主体从知识图中搜索满足方案,能够满足查询主体的所有事实(或者实例)即为查询(或者推理)结果。
为了高效地搜索和匹配知识图中的实例,本文采用著名的Prolog生成树作为搜索数据结构。每一个可行方案构成生成树的一个叶子。
· 搜索树节点数据结构
搜索树节点是变量的取值状态,最初状态是每个变量的值域。取值状态是变化的,变量个数也是不确定的,因此首先需要设计节点的数据结构,如下所示:
struct variableTable
{
CString strVariableName;
CString strClassName;
std::vector
strValueTable;
};
struct variableNode
{
std::vector< variableTable > variableTable;
}
上式中strVariableName表示变量名,strClassName表示变量关联的类名,strValueTable表示在特定状态(节点下)下该变量的值域表,用一个vector动态数组存储。variableTable表示树节点下的变量表,用一个vector动态数组存储,记录该节点下所有变量。
· 搜索推理步骤
在上述节点数据结构基础上,搜索推理步骤如下:
Step1:构建规则体原子关系表。根据查询规则体出现的原子关系(一般是二元关系),构建原子关系表ARL。原子关系表由一组关系组成,关系包括关系名,定义域和值域。
Step2:构造Prolog生成搜索树根。根据查询规则体出现的变量(用?符号标识的字符)及关联的概念类,构建该变量的值域表,在初始状态(树根状态),值域表存放该变量值域的所有实例或者数据;将变量值域表添加到树根节点变量表动态数组中,形成Prolog生成搜索树的根节点。
Step3:开始变量选择。在反向推理中,推理总是从具有最少变量值域,并且还没有完全绑定到一个实例值的变量开始,可以使得搜索树的分岔数量最少。因此对每一层推理,首先选择具有最少变量值域的变量作为推理的开始,如果选定,设为s,即对s值域中的每一个变量产生分岔操作。
Step4:搜索树分岔。搜索树分岔操作就是搜索树增长,即从现有树节点构造新的节点。每一次分岔,绑定s值域中以前没有绑定过的一个值;根据规则体原子关系表顺序,依次选择关系,获得其他变量相应取值,变量取值受到变量值域和规则体关系约束,取逻辑交集,生成一个新的树节点。例如,设变量x,y,它们的值域分别为{x1, x2, x3},{y1, y2, y3},规则体关系op1{(x1, y1), (x1, y2), (x2, y2)},则如果s取(绑定) x1,执行op1关系,则当前变量y取值y1和y2。
Step5:重复上述步骤Step3和Step4,直到满足如下条件结束:1) 该节点的变量表中的任一个变量的取值域为空,表明该变量在在该分岔是不可求解的,不能继续生长新的节点;2) 所有变量都已经被绑定到一个确定的值上,表明该节点变量绑定的值就是一个可满足方案。如果不满足条件,则从该节点开始,重复上述步骤Step3和Step4。
4. 应用实例
为了更好说明和验证本文提出的方法,同时考虑论文篇幅,选择图3所示CAD边界模型的加工特征自动识别作为应用实例。加工特征是加工零件上具有特定加工语义的一组几何形状 [10] 。通过本文提出的语义查询方法,可以自动识别检索出需要查询的特征,主要过程如下:
1) 边界模型的知识图表示
首先构建加工特征识别应用领域本体。本体构建方法较多,本文采用protégé构建OWL格式的加工特征识别领域本体。下面只列出相关的本体类和关系:
原子类(classes):几何面(GeomFace),平面(Plane),圆柱面(Cylinder),外圆柱面(OuterCylin),内圆柱面(InnerCylin),圆锥面(Cone),外圆锥面(OuterCone),内圆锥面(InnerCone)。平面、圆柱面和圆锥面是几何面子类,外圆柱面和内圆柱面是圆柱面子类。
对象特性(object properties):凹邻接(concaveAdjoin),凸邻接(convexAdjoin)。
图3所示边界模型就可以表示为如图4所示的知识图。图中节点是标注过的实例,图3零件模型有如下本体标注实例:
Plane{F1, F2, F3, F4, F5, F6, F8, F9, F11, F12}; InnerCylin{ F7, F10, F13}; InnerCone{ F14}; concaveAdjoin{(F7, F8), (F9, F12), (F10, F12), (F11, F12), (F13, F14)}; convexAdjoin{(F7, F6), (F9, F6), (F10, F6), (F11, F6), (F13, F2) , (F12, F2)….}

Figure 4. Face adjacency knowledge graph (part)
图4. 面邻接知识图(部分)
2) 定义特定加工特征知识规则
OWL本体仅定义概念的层次语义关系,很多因果关系知识通过SWRL规则定义,例如定义钻盲孔特征,通过钻削加工形成的盲孔形状,可以定义如下:
InnerCylin(?x) Ù convexAdjoin(?x, ?y) Ù concaveAdjoin(?x, ?z) Ù InnerCone(?z) ® DrillingHole(?x)
3) 通过语义查询实现加工特征识别
按照本文提出的语义查询方法,就可以从面知识图中查询加工特征面。例如本实例,要查询钻盲孔特征面,执行如下查询语句:
DrillingHole(?x) Ù concaveAdjoin(?x, ?y) ® select(?x, ?y)
从上述查询语句,分析推理过程如下:
首先DrillingHole不是一个原子概念,但在SWRL规则中定义为导出概念,因此将定义DrillingHole的规则体部分替代DrillingHole。Prolog推理生成树如图5所示。从图中可以看出面F13、F14是查询结果。

Figure 5. Query drilling blind hole inference span ning tree
图5. 查询钻盲孔推理生成树
5. 结论
基于OWL本体构建的工程领域知识图可以被计算机处理,知识概念化、形式化且可共享,融合SWRL规则具有强大的知识表示能力,但是融合OWL本体与SWRL规则实现语义查询的工具还比较少。本文采用面向对象技术,将OWL本体处理为SWRL格式的规则,在封闭世界假设下集成OWL本体和SWRL规则,采用类SQWRL的查询语言,对工程知识图进行推理和语义查询,该方法非常适合处理工程语义信息,由于采用面向对象Visual C++编程,查询效率更高。
下一步将对推理任务进行分割,将复杂的查询分解为一组简单查询的组合,同时对拥有复杂关系和限制的类提供更加高效的推理查询。
基金项目
本文获得国家自然科学基金(51775081)资助。
NOTES
*通讯作者。