1

我正在尝试从 DBpedia 查询城市、州和国家/地区的英文摘要,结果不一。它似乎适用于 City 和 Country,但不适用于 State。

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')
}

首先,如何将搜索过滤到仅城市、州或国家?第二,如何在法国找到马萨诸塞州或罗纳州等州?

4

1 回答 1

2

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

  • 有一个rdfs:label“圣保罗”
  • “Sao Paulo”标签是带有语言标签的英文
  • 有一个rdfs:abstract
  • 摘要是带有语言标签的英文

在此示例中,您可能想要查找<http://dbpedia.org/resource/Sao_Paulo>. 此资源的标签不是“Sao Paulo”,而是“São 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-owl:CityDBpedia 中,因为它是 Wikipedia 上的自治市:http ://en.wikipedia.org/wiki/S%C3%A3o_Paulo 。同样,dbpedia:Massachusetts不定义为状态。不过,两者都是dbpedia-owl:PopulatedPlace

于 2013-01-19T12:45:31.250 回答