SPARQL 属性 path - 只检索最近的节点
SPARQL property path - Retrieve the closest node only
假设我们有一个 ontology 记录日志事件,有 2 种不同类型的事件:info
和 warning
。每个条目都通过非传递性 属性 hasPreviousEvent
链接到前一个条目,如下所示:
对于所有 info
节点,我想检索最近的 error
节点,无论它返回多少跳。理想情况下,对于上述示例数据集,我希望得到以下结果集:
条目
上一篇
:info_2
:error_1
:info_3
:error_2
:info_4
:error_2
使用SPARQL 属性路径,查询如下
SELECT * WHERE {
?entry rdf:type :Info ;
:hasPreviousEntry* ?prev .
?prev rdf:type :Error .
} ORDER BY ?entry
合理地检索到以下结果集:
条目
上一篇
:info_2
:error_1
:info_3
:error_1
:info_3
:error_2
:info_4
:error_1
:info_4
:error_2
我找不到如何获得想要的结果。任何帮助将不胜感激。
检查不存在由 ?entry
链接的另一个错误,该错误至少在一个步骤中又链接到 ?prev
。
SELECT * WHERE {
?entry rdf:type :Info ;
:hasPreviousEntry* ?prev .
?prev rdf:type :Error .
FILTER NOT EXISTS {
?entry :hasPreviousEntry* [ rdf:type :Error ;
:hasPreviousEntry+ ?prev ] .
}
} ORDER BY ?entry
假设我们有一个 ontology 记录日志事件,有 2 种不同类型的事件:info
和 warning
。每个条目都通过非传递性 属性 hasPreviousEvent
链接到前一个条目,如下所示:
对于所有 info
节点,我想检索最近的 error
节点,无论它返回多少跳。理想情况下,对于上述示例数据集,我希望得到以下结果集:
条目 | 上一篇 |
---|---|
:info_2 | :error_1 |
:info_3 | :error_2 |
:info_4 | :error_2 |
使用SPARQL 属性路径,查询如下
SELECT * WHERE {
?entry rdf:type :Info ;
:hasPreviousEntry* ?prev .
?prev rdf:type :Error .
} ORDER BY ?entry
合理地检索到以下结果集:
条目 | 上一篇 |
---|---|
:info_2 | :error_1 |
:info_3 | :error_1 |
:info_3 | :error_2 |
:info_4 | :error_1 |
:info_4 | :error_2 |
我找不到如何获得想要的结果。任何帮助将不胜感激。
检查不存在由 ?entry
链接的另一个错误,该错误至少在一个步骤中又链接到 ?prev
。
SELECT * WHERE {
?entry rdf:type :Info ;
:hasPreviousEntry* ?prev .
?prev rdf:type :Error .
FILTER NOT EXISTS {
?entry :hasPreviousEntry* [ rdf:type :Error ;
:hasPreviousEntry+ ?prev ] .
}
} ORDER BY ?entry