我有一个包含多个条目的rdf
图表。现在我希望得到所有相关的三元组给定的id。这是我的sparql查询:
select ?s ?p ?o from <http://localhost:8890/DAV/ranking> where {
{<http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
?s ?p ?o} union
{<http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o}
}
本案例中的ID为<seekda.com/providers/cdyne.com/PhoneNotify>
。
但我需要图表查询(construct
或describe
)。所以我想我必须用union
打包它们。我该怎么做?
答案 0 :(得分:3)
简短的回答是:没有区别。
更长的答案是:将SPARQL查询视为包含两部分。
查询(WHERE)部分,它生成一个变量绑定列表(尽管某些变量可能未绑定)。
汇总结果的部分。 SELECT
,ASK
,CONSTRUCT
或DESCRIBE
。
SELECT *
实际上是查询返回的内容。 SELECT ?v1 ?v2
获取结果并生成另一个结果集,并删除其他变量。 ASK
只是看看是否有任何结果。
CONSTRUCT
使用模板从结果中生成RDF。对于每个结果行,它绑定变量并将语句添加到结果模型中。如果模板三元组包含未绑定的变量,则会跳过它。
DESCRIBE
是最不寻常的,因为它获取每个结果节点,找到与之关联的三元组,并将它们添加到结果模型中。与其他人不同,它可以包含比查询匹配更多的信息。
因此,在查询中允许UNION
,OPTIONAL
等所有表单都允许。由于未绑定的变量,它们可能导致三元组丢失。
您的查询没有多大意义。它与好的,现在更有意义。{?s ?p ?o}
没什么不同。你想做什么?
鉴于以下说明,您似乎需要以下内容:
construct { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
from <http://localhost:8890/DAV/ranking>
where {
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
?s ?p ?o }
union
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
}