如何为DBpedia创建一个小的SPARQL查询?

时间:2013-12-18 23:11:49

标签: sparql dbpedia

我是SPARQL初学者,我想知道如何从DBpedia在SPARQL中创建这个小查询:

查询是:获取事物的主题(人名,组织......)

SELECT DISTINCT ?occupation WHERE {
  ?s <w3.org/2000/01/rdf-schema#label>; 'Madonna'@en . ?occupation dbpedia-owl:occupation ?s 
} 

所以我创建此查询以获得麦当娜的职业,这是正确的吗?在这种情况下麦当娜,但它可能是其他任何东西。

我尝试了这个查询,但我认为这是错误的:

SELECT DISTINCT  ?occupation WHERE { 
  ?s <http://www.w3.org/2000/01/rdf-schema#label> 'Madonna'@en .
  ?s dbpedia-owl:occupation ?occupation
}

我也试过这个,我认为这是正确的:

PREFIX res: <http://dbpedia.org/resource/>
SELECT DISTINCT ?string 
WHERE {
  res:Tom_Cruise dbpprop:occupation ?string .
}

适用于Tom_Cruise,但不适用于Madonnabarack_Obama

1 个答案:

答案 0 :(得分:3)

像您的尝试这样的查询是一个良好的开端:

PREFIX res: <http://dbpedia.org/resource/>
SELECT DISTINCT ?string 
WHERE {
  res:Tom_Cruise dbpprop:occupation ?string .
}

现在我们已经有了一些特定的工作,我们可以看一下它可能遇到的具体问题。首先,我将使用公共端点Web界面支持的相同名称空间前缀重写它,以便我们可以复制并粘贴到它。我也把关键字放在小写字母中,因为我不喜欢大喊大叫。

select distinct ?string where {
  dbpedia:Tom_Cruise dbpprop:occupation ?string .
}

SPARQL results

现在,你提到了

  

它适用于Tom_Cruise,但不适用于Madonnabarack_Obama

DBpedia中的所有数据都可供您公开浏览。如果您想了解Madonna没有结果的原因,请注意dbpedia:Madonnahttp://dbpedia.org/resource/Madonna的简写,并在浏览器中提取该页面。从该页面上列出的属性中,您将看到它是一个重定向页面(实际上,如果您转到相应的Wikipedia文章http://en.wikipedia.org/wiki/Madonna,您会看到同样的事情)。你想要IRI http://dbpedia.org/resource/Madonna_(entertainer)。不幸的是,由于括号,你不能直接在SPARQL查询中编写它,所以你必须写

select distinct ?string where {
  <http://dbpedia.org/resource/Madonna_(entertainer)> dbpprop:occupation ?string .
}

SPARQL results

现在,barack_Obama存在一些问题:(i)如果您想要任何结果,则大写必须为Barack_Obama。但是,如果您访问http://dbpedia.org/resource/Barack_Obama,则会看到没有dbpprop:occupation属性。你无能为力;您无法查询不存在的数据。 那里可能对您有用的数据(以及类似性质)将是dbpedia-owl:officedbpedia-owl:profession。例如

select distinct ?string where {
  dbpedia:Barack_Obama (dbpedia-owl:office|dbpedia-owl:profession) ?string .
}

SPARQL results