2015-12-22 58 views
0

這是來自How to prevent triples from getting mixed up while uploading to Dydra programmatically?的後續問題如何遍歷rdflib的CONSTRUCT輸出?

我已經使用SPARQL CONSTRUCT查詢創建了一個新圖。我現在想迭代它,以便可以將語句添加到RDFlib圖中,然後將數據插入另一個triplestore。我有以下問題:

  1. 如果SPARQL CONSTRUCT返回一個圖,我還需要遍歷這些語句並將它們添加到RDFlib圖嗎?我可能需要這樣做才能夠使用循環將每個三元組插入到三重存儲中。
  2. 如何迭代由SPARQL CONSTRUCT產生的圖來檢索三元組? 'output''type'顯示爲字符串。

這是我的代碼:

sesameSparqlEndpoint = 'http://my.ip.ad.here:8080/openrdf-sesame/repositories/rep_name' 
sparql = SPARQLWrapper(sesameSparqlEndpoint) 
queryStringDownload = 'CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o FILTER REGEX(str(?s), "http")}' 
dataGraph = Graph() 

sparql.setQuery(queryStringDownload) 
sparql.method = 'GET' 
sparql.setReturnFormat(JSON) 
output = sparql.query().convert() 
# print output 

#Print all statements in dataGraph  
for stmt in output: 
    print stmt 

此代碼只是給了我從三元字符的一列。

+0

不知道RDFLib我不知道這是不是原因,但:您是否嘗試過設置不同的返回格式?我希望像烏龜這樣的東西得到更好的支持。 –

+1

適用於XML(但不適用於N3或Turtle等其他格式)!現在我可以使用for循環單獨檢索每個三元組。另外,我們需要在開始時特別使用這個: from SPARQLWrapper import SPARQLWrapper,JSON,XML,TURTLE,RDF,N3(基本上我們打算使用的所有格式) – kurious

回答

0
  1. 我仍然需要添加來自作爲運行CONSTRUCT查詢到RDFlib圖結果而創建的Conjunctive Graph的語句。爲什麼?因爲在執行INSERT時解析前者存在問題。 CONSTRUCT查詢的輸出:a)沒有包含在<內的URI> b)不處理非ASCII字符(因此需要output.encode('utf-8'))。
  2. 要從CONSTRUCT查詢生成的圖中檢索三元組,我們需要在上面的代碼中使用XML格式輸出而不是JSON。

有趣一旁:類型(輸出),使用XML時是合取圖形。對於我嘗試過的其他東西,這是一個字符串。