Page 270 - 《软件学报》2025年第12期
P. 270
杨建喜 等: 多语义视图驱动的 OWL 知识图谱表示学习方法 5651
Range(helis : hasNutrient) = helis : Nutrient (2)
例如公式 (1)、(2) 所示, HeLis 本体中对象属性 helis : hasNutrient 同时存在复杂定义域声明: helis : Food ∪helis :
Meal, 以及简单值域声明: helis : Nutrient. 当算法 1 中第 2 行循环到该对象属性后, 首先通过复杂定义域 SPARQL
查询 (如代码 1 所示) 和复杂值域 SPARQL 查询获取定义域概念集合以及值域概念集合, 复杂值域 SPARQL 只需
将 rdfs : domain 替换为 rdfs : range 即可. 其次, 由于复杂定义域或值域 SPARQL 查询无法查询到简单值域或定义
len(C range ) = 0, 那么将满足算法 1
域概念声明, 因此当前对象属性无法查询到 helis : Nutrient, 即 len(C domain ) , 0 但
中第 4 行判断语句, 不满足第 7 行判断语句, 则在第 5 行通过简单值域 SPARQL 查询 (如代码 2 所示) 重新获取简
单值域概念集合, 简单定义域 SPARQL 查询只需替换 rdfs : range 为 rdfs : domain 即可. 最后则需通过算法 1 第
10–14 行循环定义域、值域集合生成映射结果, 具体三元组如公式 (3) 和公式 (4) 所示.
⟨helis : Food,helis : hasNutrient,helis : Nutrient⟩ (3)
⟨helis : Meal,helis : hasNutrient,helis : Nutrient⟩ (4)
OWL2Vec*方法为了能够综合利用本体中的公理信息、词汇信息以及图结构信息等, 同时使用 Word2Vec 词嵌
入模型, 采用本体映射的方法将本体中的上述信息抽取出来成为一个语料库, 然后使用 Word2Vec 进行训练获取实
体和关系嵌入. 当 OWL2Vec*本体映射方法在使用代码 1 复杂 SPARQL 查询某一对象属性的 domain 或 range 时,
若其是由原子概念构成, 则会无法获取当前 domain 或 range, 造成当前三元组信息抽取失败, 导致语义信息的丢失.
然而, 通过改进后的算法 1 可以有效避免该情况, 当无法通过代码 1 获取到查询结果时, 则会触发判断语句重新获取
由原子概念构成的 domain 或 range, 最后将新生成的三元组信息添加至三元组集合 P, 补充原来丢失的语义信息.
算法 2 描述了数据属性值域字面量数据类型语义映射算法.
算法 2. 数据属性值域字面量数据类型语义映射算法.
输入: 本体 O 中数据属性集合 R d ⊏ R;
输出: 映射后的三元组集合 Q.
1. Q ← Initialize(·); //初始化一个空集合
2. for r d ∈ R d do //循环处理数据属性
3. C domain_s ,C range_s ← 分别执行 SPARQL 查询语句获取 r d 的简单定义域和简单值域语义声明
4. C domain_c ← 执行 SPARQL 查询语句获取 r d 的复杂定义域语义声明
5. C domain ← C domain_s ∪C domain_c //同时获取 r d 的简单定义域和复杂定义域语义声明
6. for c domain ∈ C domain do
7. for c range ∈ C range_s do
8. Q.add((c domain ,r d ,c range )); //循环添加结果至三元组集合
9. end for
10. end for
11. end for
12. return Q
代码 3. 数据属性简单定义域 SPARQL 查询示例.
1. SELECT DISTINCT ?d
2. WHERE
3. { helis : amountOfEnergy rdfs : domain ?d
4. FILTER (isIRI( ?d)) }

