我是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
,但不适用于Madonna
或barack_Obama
。
答案 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 .
}
现在,你提到了
它适用于
Tom_Cruise
,但不适用于Madonna
或barack_Obama
。
DBpedia中的所有数据都可供您公开浏览。如果您想了解Madonna
没有结果的原因,请注意dbpedia:Madonna
是http://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 .
}
现在,barack_Obama
存在一些问题:(i)如果您想要任何结果,则大写必须为Barack_Obama
。但是,如果您访问http://dbpedia.org/resource/Barack_Obama,则会看到没有dbpprop:occupation
属性。你无能为力;您无法查询不存在的数据。 那里可能对您有用的数据(以及类似性质)将是dbpedia-owl:office
和dbpedia-owl:profession
。例如
select distinct ?string where {
dbpedia:Barack_Obama (dbpedia-owl:office|dbpedia-owl:profession) ?string .
}