在英文查询城市/州/国家摘要(Query city/state/country abstracts

2019-10-17 14:40发布

我想从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')
}

首先,我怎么可以过滤搜索,只城市,州或国家? 其次,我怎么能找到诸如马萨诸塞州或罗纳法国国家?

Answer 1:

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-owl:City在DBpedia中,因为这是维基百科上一个自治市: http://en.wikipedia.org/wiki/S%C3%A3o_Paulo 。 类似地, dbpedia:Massachusetts没有被定义为一个状态。 两者都是DBpedia的猫头鹰:PopulatedPlace S,虽然。



文章来源: Query city/state/country abstracts in English