询问SPARQL资源是否存在

时间:2017-11-10 14:58:34

标签: sparql dbpedia

检查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/>} 

我确定有一个很好的方法可以做到这一点,但我无法找到它。

注意:我不想检查特定三联的存在性。我只是想知道资源是否存在。

2 个答案:

答案 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