2014-05-07 19 views
5

Sto provando a generare dati RDF utilizzando RDFLib in Python 3.4.Come esportare il grafico nel file RDF utilizzando RDFLib

Un esempio minimo:

from rdflib import Namespace, URIRef, Graph 
from rdflib.namespace import RDF, FOAF 

data = Namespace("http://www.example.org#") 

g = Graph() 

g.add((URIRef(data.Alice), RDF.type , FOAF.person)) 
g.add((URIRef(data.Bob), RDF.type , FOAF.person)) 
g.add((URIRef(data.Alice), FOAF.knows, URIRef(data.Bob))) 

#write attempt 
file = open("output.txt", mode="w") 
file.write(g.serialize(format='turtle')) 

Questo codice genera il seguente errore:

file.write(g.serialize(format='turtle')) 
TypeError : must be str, not bytes 

Se sostituisco l'ultima riga con:

file.write(str(g.serialize(format='turtle'))) 

non ottengo l'errore, ma il risultato è una rappresentazione di stringa di un flusso binario (una singola riga di testo sta rting con b'):

b'@prefix ns1: <http://xmlns.com/foaf/0.1/> .\[email protected] rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\[email protected] rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\[email protected] xml: <http://www.w3.org/XML/1998/namespace> .\[email protected] xsd: <http://www.w3.org/2001/XMLSchema#> .\n\n<http://www.example.org#Alice> a ns1:person ;\n ns1:knows <http://www.example.org#Bob> .\n\n<http://www.example.org#Bob> a ns1:person .\n\n' 

Domanda Come faccio correttamente esportare il grafico in un file?

risposta

7

Il serialize method accetta una parola chiave di destinazione che è un percorso di file. Nel tuo esempio, si desidera utilizzare:

g.serialize(destination='output.txt', format='turtle')) 

Invece di

file = open("output.txt", "w") 
file.write(g.serialize(format='turtle')) 
+0

Funziona. Grazie per il tuo aiuto. –

+0

@lawlesst: Sto avendo lo stesso problema, tuttavia, se non voglio cambiare la directory il serializzatore funziona bene ma non appena lo cambio su un altro drive ritorna IOError: [Errno 2] Nessun file o directory di questo tipo: Skane/Output/Scania/ontolog_output/NVDB_RA1/NVDB_RNO_V5042_RDF.owl. come vedi manca il nome della directory che è dovuto all'utilizzo della funzione urlparse(). Sto mancando sth o è un bug nel codice? – msc87

+0

@ msc87 Non ho riscontrato questo problema. RDFLib è in grado di serializzare i file su altri percorsi. Lo uso regolarmente. Stai fornendo il percorso del file assoluto? Ci proverei. Prova anche qualcosa come "/tmp/myfile.owl" e seef se ottieni un errore simile. –