您好我正在尝试学习如何使用SPARQL查询DBpedia。我无法找到任何网站/来源,告诉我这是怎么做的,而且我发现很难学会如何使用所有属性(例如http://mappings.dbpedia.org/index.php?title=Special%3AAllPages&from=&to=&namespace=202提供的属性)。 我可以学习哪些好的资料来源? 例如,如果我想检查维基百科页面http://en.wikipedia.org/wiki/Inception是否是电影(属性电影),我该怎么做?
答案 0 :(得分:2)
维基百科网址http://en.wikipedia.org/wiki/Inception映射到dbpedia URI http://dbpedia.org/resource/Inception。 Dbpedia在:http://dbpedia.org/sparql有一个SPARQL端点,您可以用它以编程方式或通过html接口运行查询。
要检查http://dbpedia.org/page/Inception是否为“电影”,您有很多选择。给你一个想法:
如果你知道dbpedia中的“movie”的URI(它是http://schema.org/Movie),那么运行一个ASK查询来检查该类型。 ASK将根据where子句中的模式是否对数据有效来返回true / false:
ASK where {
<http://dbpedia.org/resource/Inception> a <http://schema.org/Movie>
}
如果你不知道“电影”的URI那么你有很多选择。例如:
使用过滤器执行ASK查询,以查看资源是否具有在其uri(或其关联的rdfs:label
或两者中)某处包含单词“movie”的类型。您可以使用正则表达式:
ASK where {
<http://dbpedia.org/resource/Inception> a ?type .
FILTER regex(str(?type), "^.*movie", "i")
}
同样的想法,但返回所有匹配并对结果进行后处理(以编程方式我按下)以查看它们是否符合您的请求:
select distinct ?type where {
<http://dbpedia.org/resource/Inception> a ?type .
FILTER regex(str(?type), "^.*movie", "i")
}
返回所有类型的资源,而不应用过滤器和后期处理,以查看它们是否符合您的请求:
select distinct ?type where {
<http://dbpedia.org/resource/Inception> a ?type
}
许多选择。 SPARQL spec是您的头号资源。
答案 1 :(得分:1)
首先,我建议您开始阅读SPARQL究竟是什么。有很多非常好的教程,例如:this。
如果要在dbpedia上编写SPARQL查询,可以使用各种端点。它们并不总是接受SPARQL支持的所有功能,但如果您不想在本地安装它们时遇到麻烦,它们可能是一个相对可靠的测试环境。我将在下面编写的查询已经在Virtuoso端点上进行了测试。
假设你想在dbpedia中找到所有电影。您首先需要知道dbpedia中电影类型的URI是什么。如果您在dbpedia中打开Inception,则可以看到类型dbpedia-owl:Film
与之关联。所以,如果你想获得前100部电影,你只需要打电话:
select distinct *
where {
?s ?o dbpedia-owl:Film
} LIMIT 100
如果你想了解更多关于这些电影的信息,你只需要通过扩展三元组来扩展你的查询。
select distinct *
where {
?s ?p dbpedia-owl:Film.
?s ?x ?y.
} LIMIT 100