在RDF/OWL图中测量类之间的距离

7
也许有人可以给我一些提示。在同一本体论内,测量2个概念/类之间的距离是否可能?
例如,假设我有一个包含“天文学”类和“望远镜”类的本体论。它们之间有一个链接,但不是直接链接。天文学有一个称为“科学”的父类,而望远镜有一个称为“光学仪器”的父类,它属于其名为“仪器”的父类,后者与最终属于“科学”类的名称为“经验科学”的类相关联。
因此,望远镜和天文学之间存在间接联系,我想找出从一个类开始到达另一个类所需的步骤数。
是否有一个简单的SPARQL查询可以解决这个问题?或者有更好的方法来完成这项工作吗?或者使用语义Web范例无法找到答案?
任何提示将非常感慨不已。
3个回答

5

SPARQL提供了在图形中搜索任意长度路径的能力,但没有机制告诉您该路径的长度。

因此,您可以执行以下操作:

SELECT * WHERE { ?s ex:property+ ?o }

语法非常类似于正则表达式,因此您可以进行替代、限制基数等操作。


4

据我理解,SPARQL不包含任何递归结构,无法测量任意长度的间接链接。你能做的最好的事情是准备一组查询 distance_1(a, b), distance_2(a, b)... 来检查两个概念之间的特定距离。

另一个选择是使用非SPARQL技术来发现这些信息,例如使用Python和RDFlib编写图遍历算法。


2
由于您明确提到您正在谈论类,并且它们将在同一本体中,因此可以安全地假设它们将始终连接(因为最终两者都是“Thing”的子类,对吗?)。另一方面,我在括号中提到的路径(Class1 -> ... -> Thing <- ... <- Class2)是微不足道的,因此我认为您想要找到......两个类之间所有现有的路径,换句话说,是两个顶点之间所有现有的路径。这是真的吗?还是您正在寻找最短路径?在这方面,您的问题不太清楚,您能澄清一下吗?
据我所知,没有简单的SPARQL结构可以列出类之间或最短路径之间的所有路径。但是,一些语义Web三元组存储器配备了图遍历算法,例如广度优先搜索或深度优先搜索,请参见: 您可能会发现以下项目的源代码非常有用:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接