询问 SPARQL 资源是否存在
Ask if SPARQL resource exists
检查 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/>}
我确定有一个很好的方法可以做到这一点,但我找不到它。
注意:我不想检查特定三元组是否存在。我只想知道资源是否存在。
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 }
}
我找到了另一种检查给定字符串是否存在 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
检查 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/>}
我确定有一个很好的方法可以做到这一点,但我找不到它。
注意:我不想检查特定三元组是否存在。我只想知道资源是否存在。
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 }
}
我找到了另一种检查给定字符串是否存在 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