2

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

皆さんの助けに感謝します:)

4

2 に答える 2