system: [SYSTEM]

user: 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语义查询进行扩展，允许 ∨ 和 ¬ 逻辑运算，定义如下： ¬ 运算：设概念集合为U 1 ，A为概念集中的概念，则有 ¬ A = U 1 − A ； 设某概念的关系集合为U 2 ，a为关系集中的一个关系，则有 ¬ a = U 2 − a ； ∨ 运算：设概念集合为U 1 ，A、B为概念集中的概念，则有 A ∨ B = A ∪ B ； 设某概念关系集合为U 2 ，a、b为关系集中的关系，则有 a ∨ b = 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 ， a 1 ， ⋯ ， a n ) 表示x的值只能为 a 1 ， ⋯ ， a n 中的某一个值；R(?x， a)表示x和必须和a具有属性R的属性断言； R ( ? x ， ≥ n ) 表示和x具有关系R的属性断言最少为n个； ∨ 运算符表示规则体中类的对象全部是规则头中类的对象； ∀ ( R ( ? x ， ? y ) ∧ C ( ? y ) ) → A ( ? x ) 表示只和C的对象拥有关系R断言的对象属于类A。 3.3. 基于逆向推理的知识图语义查询 本文所讨论的语义查询，是一个类SQWRL语义查询。为了获得一个查询结果，从查询目标问题出 Table 1 From OWL class axioms to SWRL rule 项目 命名 描述逻辑 OWL本体构造符 SWRL规则 概念构造器公理 一般公理 概念层次 rdfs:subClassOf B ( ? x ) → A ( ? x ) O Nominals owl:oneOf owl:hasValue ( ? x ， a 1 ， ⋯ ， a n ) → A ( ? x ) R ( ? x ， a ) → A ( ? x ) N 数量限制 owl:minCardinality owl:maxCardinality R ( ? x ， ≥ n ) → A ( ? x ) R ( ? x ， ≤ n ) → A ( ? x ) S ∩ owl:intersectionOf C ( ? x ) ∧ D ( ? x ) → A ( ? x ) ∪ owl:unionOf C ( ? x ) ∨ D ( ? x ) → A ( ? x ) ∃ owl:someValueFrom ∃ ( R ( ? x ， ? y ) ∧ C ( ? y ) ) → A ( ? x ) ∀ owl:allValueFrom ∀ ( R ( ? x ， ? y ) ∧ C ( ? y ) ) → A ( ? x ) ¬ owl:complementOf ¬ C ( ? x ) → A ( ? x ) 角色构造器公理 S 关系传递 TransitiveProperty 不支持 H 关系层次 rdfs:subPropertyOf R ( ? x ， ? y ) → S ( ? x ， ? y ) I 关系反向 owl:inverseOf R ( ? x ， ? y ) → S ( ? y ， ? x ) 表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< variable Table > variableTable; } 上式中strVariableName表示变量名，strClassName表示变量关联的类名，strValueTable表示在特定状态(节点下)下该变量的值域表，用一个vector动态数组存储。variableTable表示树节点下的变量表，用一个vector动态数组存储，记录该节点下所有变量。 · 搜索推理步骤 在上述节点数据结构基础上，搜索推理步骤如下： Step1：构建规则体原子关系表。根据查询规则体出现的原子关系(一般是二元关系)，构建原子关系表ARL。原子关系表由一组关系组成，关系包括关系名，定义域和值域。 Step2：构造Prolog生成搜索树根。根据查询规则体出现的变量(用？符号标识的字符)及关联的概念类，构建该变量的值域表，在初始状态(树根状态)，值域表存放该变量值域的所有实例或者数据；将变量值域表添加到树根节点变量表动态数组中，形成Prolog生成搜索树的根节点。 Step3：开始变量选择。在反向推理中，推理总是从具有最少变量值域，并且还没有完全绑定到一个实例值的变量开始，可以使得搜索树的分岔数量最少。因此对每一层推理，首先选择具有最少变量值域的变量作为推理的开始，如果选定，设为s，即对s值域中的每一个变量产生分岔操作。 Step4：搜索树分岔。搜索树分岔操作就是搜索树增长，即从现有树节点构造新的节点。每一次分岔，绑定s值域中以前没有绑定过的一个值；根据规则体原子关系表顺序，依次选择关系，获得其他变量相应取值，变量取值受到变量值域和规则体关系约束，取逻辑交集，生成一个新的树节点。例如，设变量x，y，它们的值域分别为{x 1 ， x 2 ， x 3 }，{y 1 ， y 2 ， y 3 }，规则体关系op 1 {(x 1 ， y 1 )， (x 1 ， y 2 )， (x 2 ， y 2 )}，则如果s取(绑定) x 1 ，执行op 1 关系，则当前变量y取值y 1 和y 2 。 Step5：重复上述步骤Step3和Step4，直到满足如下条件结束：1) 该节点的变量表中的任一个变量的取值域为空，表明该变量在在该分岔是不可求解的，不能继续生长新的节点；2) 所有变量都已经被绑定到一个确定的值上，表明该节点变量绑定的值就是一个可满足方案。如果不满足条件，则从该节点开始，重复上述步骤Step3和Step4。