1

特定のテキストのエンティティに関する情報を表示するアプリを構築しています。Python 用の sparqlwrapper ライブラリを使用して DBpedia にクエリを実行しています。Personエンティティを取得するときに次のコードを使用しています。

def get_person_data(einfo):
    data = {}
    try:
        uri = einfo['disambiguated']['dbpedia']

        sparql = SPARQLWrapper("http://dbpedia.org/sparql")
        query = u"""
        SELECT ?birthDate, ?birthName, ?birthPlace
        WHERE { <%s>
                dbpprop:birthDate ?birthDate ;
                dbpprop:birthName ?birthName ;
                dbpprop:birthPlace ?birthPlace
        }
        """ % uri
        sparql.setQuery(query)
        sparql.setReturnFormat(JSON)
        results = sparql.query().convert()

このコードの問題は、DBpedia ページでフィールドが欠落している場合、結果が何も返さないことです。特定のタイプのすべてのエンティティにどのプロパティが存在するかを知るのは難しいため、いくつかの望ましいプロパティを定義してから、存在するプロパティを取得したいと思います。次のようなクエリを試しました:

SELECT * WHERE {
  ?x rdfs:label "New York"@en.
  ?x dbpedia-owl:abstract ?abstract.
  OPTIONAL { 
  ?x dbpedia-owl:areaTotal ?areaTotal.
  ?x dbpprop:governor ?governor.
  ?x dbpprop:birthPlace ?birthPlace.
  }
  FILTER (LANG(?abstract) = 'en')
}

この場合、ニューヨークには がないbirthPlaceため、情報だけを取得することになりabstractます。areaTotal私も手に入れたいgovernorです。

4

1 に答える 1

4

オプションのブロック全体が一致するか、一致しないかのいずれかです。オプションでいくつかの異なるものを一致させたい場合は、次のように複数のオプション ブロックが必要です。

SELECT * WHERE {
  ?x rdfs:label "New York"@en.
  ?x dbpedia-owl:abstract ?abstract.
  OPTIONAL { ?x dbpedia-owl:areaTotal ?areaTotal. }
  OPTIONAL { ?x dbpprop:governor ?governor. }
  OPTIONAL { ?x dbpprop:birthPlace ?birthPlace. }
  FILTER (LANG(?abstract) = 'en')
}

SPARQL の結果

于 2013-08-12T16:59:05.970 に答える