DBpedia から人口を含む国のリストを取得するために、次の SPARQL クエリを開発しました。国によって情報に一貫性がないため、ユニオン条項を使用して、どのリソースが現在の国であるかを識別します。
今私が抱えている問題は、一部の国にはdbpprop:populationEstimate
財産がありますが、他の国には財産がdbpprop:populationCensus
あり、両方をバインドする方法がわかりません?population
. 今のところ、推定人口しか得られません。これはOPTIONAL
、一致する句が2つあるの?population
は意味がないためだと思いますが、解決策に近づくことはできません。
たとえば、インドにはdbpprop:populationCensus
がありますが、結果には表示されません。
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX yago:<http://dbpedia.org/class/yago/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT ?name ?population
WHERE {
?country a dbo:Country .
?country rdfs:label ?enName .
OPTIONAL {?country dbpprop:populationEstimate ?population}
OPTIONAL {?country dbpprop:populationCensus ?population}
OPTIONAL {?country dbpprop:yearEnd ?yearEnd}
{ ?country dbpprop:iso3166code ?code . }
UNION
{ ?country dbpprop:iso31661Alpha ?code . }
UNION
{ ?country dbpprop:countryCode ?code . }
UNION
{ ?country a yago:MemberStatesOfTheUnitedNations . }
FILTER (langMatches(lang(?enName), "en"))
FILTER (!bound(?yearEnd))
FILTER (xsd:integer(?population))
BIND (str(?enName) AS ?name)
}
皆さんの助けに感謝します:)