用英语查询城市/州/国家摘要

时间:2013-01-18 17:58:58

标签: rdf sparql dbpedia

我正在尝试从DBpedia查询英语的城市,州和国家摘要,结果好坏参半。它似乎适用于城市和国家,但不适用于州。

SELECT * WHERE {
  ?x rdfs:label "France"@en.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANG(?abstract) = 'en')
}

或者

SELECT * WHERE {
  ?x rdfs:label "Boston"@en.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANG(?abstract) = 'en')
}

但是,这些查询找不到任何结果:

SELECT * WHERE {
  ?x rdfs:label "Sao Paulo"@en.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANG(?abstract) = 'en')
}

SELECT * WHERE {
  ?x rdfs:label "Massachusetts"@en.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANG(?abstract) = 'en')
}

首先,如何将搜索过滤到仅城市,州或国家/地区?其次,我怎样才能在法国找到像马萨诸塞州或罗纳河这样的州?

1 个答案:

答案 0 :(得分:2)

SPARQL查询(没有OPTIONAL)仅返回可以匹配所有三重模式的结果。对于不返回结果的查询,这意味着有关资源的以下一个或多个语句?x不可用:

  • rdfs:label“圣保罗”
  • 标签“圣保罗”是用语言标记的英语
  • 有一个rdfs:abstract
  • 摘要是语言标记的英语

在此示例中,您可能想要找到<http://dbpedia.org/resource/Sao_Paulo>。该资源的标签不是“圣保罗”,而是“圣保罗”。

第二个查询对我有用(马萨诸塞州),但需要一些时间才能完成。

要将结果限制为特定类型的资源(如城市,州或国家/地区),您需要指定类型。在RDF中,使用rdf:type指定资源的类型(或更确切地说是“类”)。您可以用同样的方式查询:

SELECT * WHERE {
  ?x rdfs:label "São Paulo"@en.
  ?x rdf:type dbpedia-owl:Settlement.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANGMATCHES(LANG(?abstract), 'en'))
}

您可以使用速记rdf:type代替a,您可以将其读作“?x ?y”。
此外,LANGMATCHES(LANG(?abstract), 'en')的评估效率可能高于LANG(?abstract) = 'en')

请注意,此资源dbpedia:São_Paulo不是DBpedia中的dbpedia-owl:City,因为它是维基百科上的一个城市:http://en.wikipedia.org/wiki/S%C3%A3o_Paulo。同样,dbpedia:Massachusetts未定义为州。但两者都是dbpedia-owl:PopulatedPlace