检查SPARQL资源是否存在的好方法是什么?
我正在搜索相当于向例如触发HTTP GET请求的内容。 http://dbpedia.org/resource/Game_of_Thrones
并检查HTTP状态代码,但我希望使用SPARQL查询。
我想到了这样的事情:
ASK {<http://dbpedia.org/resource/Game_of_Thrones> a <http://dbpedia.org/resource/>}
我确定有一个很好的方法可以做到这一点,但我无法找到它。
注意:我不想检查特定三联的存在性。我只是想知道资源是否存在。
答案 0 :(得分:4)
SPARQL是一种RDF查询语言。 RDF三元组由主语,谓语和宾语组成。
您只需要使用UNION
作为分离来检查这些位置中是否存在URI。
ASK {
VALUES (?r) { (dbr:Game_of_Thrones) }
{ ?r ?p ?o }
UNION
{ ?s ?r ?o }
UNION
{ ?s ?p ?r }
}
虽然SPARQL规范doesn't允许[]
处于谓词位置,但DBpedia(即服务于DBpedia端点的Virtuoso服务器)理解这一点:
ASK {
VALUES (?r) { (dbr:Game_of_Thrones) }
{ ?r [] [] }
UNION
{ [] ?r [] }
UNION
{ [] [] ?r }
}
答案 1 :(得分:0)
我发现了另一种检查给定字符串是否存在dbpedia资源的方法。以下查询的第一部分将检查dbpedia中是否存在字符串“ Bob Marly”的资源。第二部分将检查字符串“ Bob Marly”是否将页面重定向到任何其他页面。您需要将每个字符串的首字母大写以得到正确的结果。
我认为这种方法更好,因为即使您犯了较小的拼写错误,您也可以知道资源是否存在,并且也不必用下划线替换空格(不是那么重要)。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?s WHERE {
{
?s rdfs:label "Bob Marly"@en ;
a owl:Thing .
}
UNION
{
?altName rdfs:label "Bob Marly"@en ;
dbo:wikiPageRedirects ?s .
}
}
参考:http://www.snee.com/bobdc.blog/2011/05/using-sparql-to-find-the-right.html
还有另一种方法可以实现以上目标:
SELECT ?subject ?label
WHERE {
?subject rdfs:label ?label
FILTER (langMatches(lang(?label), "EN")) .
FILTER ( ?label = "Two"@en )
} LIMIT 100