Page 269 - 《软件学报》2025年第12期
P. 269
5650 软件学报 2025 年第 36 卷第 12 期
算法 1. 对象属性定义域、值域复杂概念语义映射算法.
输入: 本体 O 中的对象属性集合 R o ⊏ R;
输出: 映射后的三元组集合 P.
1. P ← Initialize(·); //初始化一个空集合
2. for r o ∈ R o do //循环处理对象属性
3. C domain ,C range ← 分别执行 SPARQL 查询语句获取对象属性 r o 的复杂定义域和复杂值域概念语义声明
4. if len(C domain ) , 0 and len(C range ) = 0 do //若 C range 集合为空则表明其为简单值域语义声明
5. C range ← 基于 r o 的简单值域 SPARQL 查询语句更新 C range 概念集合
6. end if
7. if len(C domain ) = 0 and len(C range ) , 0 do //若 C domain 集合为空则表明其为简单定义域语义声明
8. C domain ← 基于 r o 的简单定义域 SPARQL 查询语句更新 C domain 集合
9. end if
10. for c domain ∈ C domain do
11. for c range ∈ C range do
12. P.add((c domain ,r o ,c range )); //循环添加结果至三元组集合
13. end for
14. end for
15. end for
16. return P
代码 1. 复杂定义域 SPARQL 查询示例.
1. SELECT DISTINCT ?d
2. WHERE
∗
[
3. {{ helis : hasNutrient rdfs : domain owl : intersectionOf rdf : rest [ rdf : first ?d ]]]}
[
4. UNION
∗
5. { helis : hasNutrient rdfs : domain owl : unionOf rdf : rest [ rdf : first ?d ]]]}
[
[
6. FILTER (isIRI( ?d)) }
代码 2. 简单值域 SPARQL 查询示例.
1. SELECT DISTINCT ?r
2. WHERE
3. { helis : hasNutrient rdfs : range ?r
4. FILTER (isIRI( ?r)) }
在算法 1 中, 初始化一个空集合 P, 用于存储映射后生成的对象属性相关三元组, 并对输入图谱中的所有对象
属性循环执行以下操作. 首先, 分别执行 SPARQL 语句获取 r o 的复杂定义域和复杂值域概念声明集合 C domain 和
C range 集
C range , 即获取定义域或值域声明中包含两个或两个以上概念的交并等语义声明. 其次, 判断 C domain 集合与
合是否为简单定义域或值域声明, 若是则重新通过简单定义域或值域 SPARQL 查询语句进行更新; 最后将 C domain
和 C range 中的每一个元素通过当前对象属性 r o 进行链接构成三元组.
Domain(helis : hasNutrient) = helis : Food ∪helis : Meal (1)

