【发布时间】:2018-02-19 17:06:02
【问题描述】:
我遇到过几次想在 CONSTRUCT 查询中使用空白节点的情况,但我需要为所有(或多个)查询解决方案获取相同的空白节点。
假设我们的数据集中有一个作者和他们撰写的书籍的列表:
@prefix : <http://example.org#> .
:stephen_king a :Author ;
:firstName "Stephen" ;
:authorOf "The Shining", "Cujo".
:stephen_hawking a :Author ;
:firstName "Stephen" ;
:authorOf "A Brief History of Time" .
:virginia_wolf a :Author ;
:firstName "Virginia" ;
:authorOf "Mrs Dalloway" .
例如,假设我想将所有名字为Stephen 的书籍作者绑定到一个空白节点:
PREFIX : <http://example.org#>
CONSTRUCT {
[ :containsBook ?book ]
}
WHERE {
?book ^:authorOf/:firstName "Stephen" .
}
会返回类似:
[ :containsBook "The Shining" ] .
[ :containsBook "A Brief History of Time" ] .
[ :containsBook "Cujo" ] .
但期望的结果是:
[ :containsBook "The Shining" ;
:containsBook "A Brief History of Time" ;
:containsBook "Cujo" ] .
关于如何实现这一点的任何想法?
【问题讨论】:
-
您的 SPARQL 查询永远无法匹配数据...您的三元组仅从作者指向书籍,但您的查询从书籍开始搜索三元组
-
该查询可以工作:
select * WHERE { ?book ^:authorOf/:firstName "Stephen" . BIND(BNODE() AS ?bnode) },即属性路径不同 -
谢谢。我错过了 inverse 属性的
^,查询已相应更新。
标签: sparql rdf blank-nodes