提取通过关系连接两个实例的实例链
extracting a chain of instances connecting two instances through a relatio
我想通过询问 SPARQL 查询来提取我的 ontology 的两个实例之间的实例链。例如下图中,如果我想知道A和E是如何连接的,查询的结果应该是A、B、D、F、E的列表。
ontology 应该如何设计和构建查询?
有可能吗?
这并不难。在 RDF 中,您的数据可以是简单的图形直接编码:
@prefix : <urn:ex:>
:A :connectedTo :B .
:B :connectedTo :C, :D .
:D :connectedTo :F .
:F :connectedTo :E, :G .
然后,使用 SPARQL 属性 路径,您可以找到每个节点,使得 connectedTo 属性的路径来自 A 到它并从它到 E,包括 A 和 E 本身:
prefix : <urn:ex:>
select ?mid where {
:A :connectedTo* ?mid .
?mid :connectedTo* :E .
}
-------
| mid |
=======
| :D |
| :F |
| :B |
| :A |
| :E |
-------
如果你想把它们整理好,你可以另外计算A和"mid-node"之间有多少东西。 (这在我对 Is it possible to get the position of an element in an RDF Collection in SPARQL? 的回答中有描述)
prefix : <urn:ex:>
select ?mid (count(?premid) as ?i) where {
:A :connectedTo* ?premid .
?premid :connectedTo* ?mid .
?mid :connectedTo* :E .
}
group by ?mid
-----------
| mid | i |
===========
| :D | 3 |
| :F | 4 |
| :E | 5 |
| :B | 2 |
| :A | 1 |
-----------
如果你真的想要一个看起来或多或少像 "A, B, C, D, E, F" 的结果,那么你可以使用我对 Aggregating results from SPARQL query 的回答中的技术来调整这些查询,它展示了如何将这些查询连接成一个单个字符串。
我想通过询问 SPARQL 查询来提取我的 ontology 的两个实例之间的实例链。例如下图中,如果我想知道A和E是如何连接的,查询的结果应该是A、B、D、F、E的列表。
ontology 应该如何设计和构建查询? 有可能吗?
这并不难。在 RDF 中,您的数据可以是简单的图形直接编码:
@prefix : <urn:ex:>
:A :connectedTo :B .
:B :connectedTo :C, :D .
:D :connectedTo :F .
:F :connectedTo :E, :G .
然后,使用 SPARQL 属性 路径,您可以找到每个节点,使得 connectedTo 属性的路径来自 A 到它并从它到 E,包括 A 和 E 本身:
prefix : <urn:ex:>
select ?mid where {
:A :connectedTo* ?mid .
?mid :connectedTo* :E .
}
-------
| mid |
=======
| :D |
| :F |
| :B |
| :A |
| :E |
-------
如果你想把它们整理好,你可以另外计算A和"mid-node"之间有多少东西。 (这在我对 Is it possible to get the position of an element in an RDF Collection in SPARQL? 的回答中有描述)
prefix : <urn:ex:>
select ?mid (count(?premid) as ?i) where {
:A :connectedTo* ?premid .
?premid :connectedTo* ?mid .
?mid :connectedTo* :E .
}
group by ?mid
-----------
| mid | i |
===========
| :D | 3 |
| :F | 4 |
| :E | 5 |
| :B | 2 |
| :A | 1 |
-----------
如果你真的想要一个看起来或多或少像 "A, B, C, D, E, F" 的结果,那么你可以使用我对 Aggregating results from SPARQL query 的回答中的技术来调整这些查询,它展示了如何将这些查询连接成一个单个字符串。