我正在尝试从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')
}
首先,如何将搜索过滤到仅城市,州或国家/地区?其次,我怎样才能在法国找到像马萨诸塞州或罗纳河这样的州?
答案 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。