dbpedia sparql电影查询sql

时间:2015-06-02 14:27:03

标签: sparql wikipedia dbpedia

您好我正在尝试学习如何使用SPARQL查询DBpedia。我无法找到任何网站/来源,告诉我这是怎么做的,而且我发现很难学会如何使用所有属性(例如http://mappings.dbpedia.org/index.php?title=Special%3AAllPages&from=&to=&namespace=202提供的属性)。 我可以学习哪些好的资料来源? 例如,如果我想检查维基百科页面http://en.wikipedia.org/wiki/Inception是否是电影(属性电影),我该怎么做?

2 个答案:

答案 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那么你有很多选择。例如:

  1. 使用过滤器执行ASK查询,以查看资源是否具有在其uri(或其关联的rdfs:label或两者中)某处包含单词“movie”的类型。您可以使用正则表达式:

    ASK where {
      <http://dbpedia.org/resource/Inception> a ?type . 
      FILTER regex(str(?type), "^.*movie", "i")
    }
    
  2. 同样的想法,但返回所有匹配并对结果进行后处理(以编程方式我按下)以查看它们是否符合您的请求:

    select distinct ?type where {
      <http://dbpedia.org/resource/Inception> a ?type . 
      FILTER regex(str(?type), "^.*movie", "i")
    }
    
  3. 返回所有类型的资源,而不应用过滤器和后期处理,以查看它们是否符合您的请求:

    select distinct ?type where {
      <http://dbpedia.org/resource/Inception> a ?type
    }
    
  4. 许多选择。 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