我想从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')
}
首先,我怎么可以过滤搜索,只城市,州或国家? 其次,我怎么能找到诸如马萨诸塞州或罗纳法国国家?
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,虽然。