我正在使用一个图形数据库,在其中存储线条及其端点。端点由线包含,并且由于线可以共享端点,因此它们形成任意长度的链。这是一个简化的示例:
:point1 :isContainedBy :line1 .
:line1 :contains :point2 .
:point2 :isContainedBy :line2 .
:line2 :contains :point3 .
[...]
:lineM :contains :pointM+1
在我的图中,有多个断开的链,我需要检索所有它们。但是,我当前的 SPARQL 查询面临一些困难:
PREFIX : <http://www.example.com/#>
SELECT ?pointStart ?pointEnd
WHERE {
?pointStart (:isContainedBy|:contains)+ ?pointEnd .
}
此查询确实返回所有链,但它有两个主要问题:
(所述 SPARQL 查询按预期工作正常,我只是在寻找一种检索附加结果的方法。)
有没有一种简单的方法可以解决这些问题,可能使用一些 SPARQL 技巧?任何帮助将不胜感激!
提前致谢!
SPARQL SELECT 语句返回结果表(而不是列表),因此您的结果集应该是与起点相关的点的不同结果集。这应该可以做到:
PREFIX : <http://www.example.com/#>
SELECT DISTINCT ?pointStart ?point
WHERE {
?pointStart (:isContainedBy/:contains)+ ?point .
FILTER NOT EXISTS { ?line :contains ?pointStart }
}
ORDER BY ?pointStart ?point