2014-05-07 11 views
5

Ich versuche, RDF-Daten mit RDFLib in Python 3.4 zu generieren.So exportieren Sie ein Diagramm in RDF-Datei mit RDFLib

Ein minimales Beispiel:

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

Dieser Code führt zu dem folgenden Fehler:

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

Wenn ich die letzte Zeile mit ersetzen:

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

ich nicht bekommen der Fehler, aber das Ergebnis ist eine String-Darstellung eines binären Datenstroms (eine einzige Zeile Text sta rting mit 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' 

Frage Wie exportiere ich richtig die Grafik in eine Datei?

Antwort

7

Die serialize method akzeptiert ein Zielschlüsselwort, das ein Dateipfad ist. In Ihrem Beispiel, würden Sie verwenden möchten:

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

Statt

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

Es funktioniert. Danke für deine Hilfe. –

+0

@laklesst: Ich habe das gleiche Problem, aber wenn ich das Verzeichnis nicht ändern möchte, funktioniert der Serializer gut, aber sobald ich es auf ein anderes Laufwerk ändere, gibt es IOError zurück: [Errno 2] Keine solche Datei oder Verzeichnis: Skane/Ausgabe/Skane/ontolog_output/NVDB_RA1/NVDB_RNO_V5042_RDF.owl. Wie Sie sehen, fehlt der Verzeichnisname, der auf die Verwendung der Funktion urlparse() zurückzuführen ist. Vermisse ich etw oder ist es ein Fehler im Code? – msc87

+0

@ msc87 Ich habe dieses Problem nicht festgestellt. RDFLib kann Dateien in andere Pfade serialisieren. Ich benutze das regelmäßig. Stellen Sie den absoluten Dateipfad zur Verfügung? Ich würde das versuchen. Versuchen Sie auch etwas wie "/tmp/myfile.owl" und sehen Sie, ob Sie einen ähnlichen Fehler bekommen. –

Verwandte Themen