计算节点之间的路径长度(边缘未知)?

时间:2015-06-25 10:49:57

标签: nodes rdf sparql

问题是如何使用sparql查询计算三重存储(RDF)中两个节点(概念)之间的距离,而不知道边缘的类型。从本质上讲,就是使用Dijkstras_algorithm 找到三重商店中两个概念之间的较短路径。

如果我们知道egde的类型是可能的:  Calculate length of path between nodes?

另一个解决方案是使用类距离(如果未从主类扩展概念,则不起作用): Measuring distances among classes in RDF/OWL graphs

实施例

查找http://bioinformatics.ua.pt/coeus/resource/uniprot_P01008http://bioinformatics.ua.pt/coeus/resource/go_GO:0005576

之间的较短距离

1 个答案:

答案 0 :(得分:3)

您可以使用Calculate length of path between nodes?中使用的相同技术,但您需要使用通配符而不是特定属性。模式(<>|!<>)是通配符,因为每个属性都是<>或不是。您也可以使用(:|!:),但只有在定义了:前缀的情况下才能使用(<>|!<>)@prefix : <urn:ex:> :a :p :b . :b :q :c . :c :r :d . :d :s :e . 将始终有效。这是一个例子:

prefix : <urn:ex:>

select ?start ?end (count(?mid) as ?length) {
  ?start (<>|!<>)* ?mid .
  ?mid (<>|!<>)+ ?end .
}
group by ?start ?end
------------------------
| start | end | length |
========================
| :a    | :b  | 1      |
| :a    | :c  | 2      |
| :a    | :d  | 3      |
| :a    | :e  | 4      |
| :b    | :c  | 1      |
| :b    | :d  | 2      |
| :b    | :e  | 3      |
| :c    | :d  | 1      |
| :c    | :e  | 2      |
| :d    | :e  | 1      |
------------------------
TOTAL_TIME