2017-11-14 36 views
3

私はオントロジを作成しており、dbpediaのデータを追加したいと考えています。たとえば、スイスに関するデータを追加したいと思います。 これは私がやっていることです。Python:rdflibを使ってDbpediaからグラフに情報を追加する方法は?

g = Graph() 
sparql = SPARQLWrapper("http://dbpedia.org/sparql") 
query = """ 
    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX dbpedia: <http://dbpedia.org/resource/> 
    PREFIX dbp: <http://dbpedia.org/property/> 
    PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
    SELECT DISTINCT ?s ?pop ?code 
    WHERE{ 
     ?s rdf:type dbo:PopulatedPlace. 
     ?s dbp:iso3166code ?code. 
     ?s dbo:populationTotal ?pop. 
     FILTER (?s = dbpedia:Switzerland) 
    } 
""" 
sparql.setQuery(query) 
sparql.setReturnFormat(JSON) 
results = sparql.query().convert() 

は、その後、私は

for result in results["results"]["bindings"]: 
    N = int(result["pop"]["value"]) 
totPopulation = Literal(N) 
g.add((cName, RDF.type, dbo.Country)) 
g.add((cName, dbo.populationTotal, totPopulation)) 
g.add((cName, dbp.iso3166code, Literal(str(result["code"]["value"])))) 

はそれを行うための簡単な方法がないです、私は私のグラフに抽出した情報を追加しますか?

+0

をSPARQL 'CONSTRUCT'クエリはRDFトリプルのセットを返します。 – AKSW

+0

@AKSW例がありますか? – emax

+0

SELECTクエリに似ています: 'prefix dbpedia: { ?s rdf:dbo:PopulatedPlaceを入力してください。 ?s dbp:iso3166code?コード。 ?s dbo:populationTotal?pop。 } WHERE { ?s rdf:type dbo:PopulatedPlace。 ?s dbp:iso3166code?コード。 ?s dbo:populationTotal?pop。 FILTER(?s = dbpedia:Switzerland) } ' – AKSW

答えて

3

このクエリタイプは、ネイティブRDFのセットトリプル返すようSPARQLクエリCONSTRUCTが簡単かもしれません使用:

from rdflib import Graph 
from SPARQLWrapper import SPARQLWrapper, RDF 

# create empty graph 
g = Graph() 

# execute SPARQL CONSTRUCT query to get a set of RDF triples 
sparql = SPARQLWrapper("http://dbpedia.org/sparql") 
sparql.addDefaultGraph("http://dbpedia.org") 
query = """ 
    PREFIX dbpedia: <http://dbpedia.org/resource/> 
    CONSTRUCT { 
    ?s rdf:type dbo:PopulatedPlace. 
    ?s dbp:iso3166code ?code. 
    ?s dbo:populationTotal ?pop. 
    } WHERE{ 
    ?s rdf:type dbo:PopulatedPlace. 
    ?s dbp:iso3166code ?code. 
    ?s dbo:populationTotal ?pop. 
    FILTER (?s = dbpedia:Switzerland) 
    } 
""" 
sparql.setQuery(query) 
try : 
    sparql.setReturnFormat(RDF) 
    results = sparql.query() 
    triples = results.convert() # this converts directly to an RDFlib Graph object 
except: 
    print "query failed" 


# add triples to graph 
g += triples 
関連する問題