package org.openprovenance.prov.rdf;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import org.openprovenance.prov.model.Namespace;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.contextaware.ContextAwareRepository;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFHandler;
import org.openrdf.rio.RDFHandlerException;
import org.openrdf.rio.n3.N3Writer;
import org.openrdf.rio.ntriples.NTriplesWriter;
import org.openrdf.rio.rdfxml.RDFXMLWriter;
import org.openrdf.rio.trig.TriGWriter;
/** Utility class (straight from OPMToolbox) */
public class RepositoryHelper {
public void setPrefixes(RDFHandler serialiser,
Map<String,String> prefixes) throws org.openrdf.rio.RDFHandlerException {
serialiser.handleNamespace("prov","http://www.w3.org/ns/prov#");
for (String key: prefixes.keySet()) {
serialiser.handleNamespace(key,prefixes.get(key));
}
}
public void dumpToRDF(String file,
ContextAwareRepository manager,
RDFFormat format,
Namespace namespace) {
Writer writer;
try {
writer = new FileWriter(file);
} catch (IOException e) {
throw new RdfConverterException("couldn't create file writer", e);
}
dumpToRDF(writer, manager, format, namespace);
}
public void dumpToRDF(Writer writer,
ContextAwareRepository manager,
RDFFormat format,
Namespace namespace) {
Map<String,String> prefixes=namespace.getPrefixes();
if (namespace.getDefaultNamespace()!=null) {
// TODO not sure how to handle this?
}
RDFHandler serialiser=null;
if (format.equals(RDFFormat.N3)) {
serialiser=new N3Writer(writer);
} else if (format.equals(RDFFormat.RDFXML)) {
serialiser=new RDFXMLWriter(writer);
} else if (format.equals(RDFFormat.NTRIPLES)) {
serialiser=new NTriplesWriter (writer);
} else if (format.equals(RDFFormat.TRIG)) {
serialiser=new TriGWriter (writer);
} else if (format.equals(RDFFormat.TURTLE)) {
serialiser=new org.openrdf.rio.turtle.TurtleWriter(writer);
}
try {
setPrefixes(serialiser,prefixes);
manager.getConnection().export(serialiser);
} catch (RDFHandlerException e) {
e.printStackTrace();
throw new RdfConverterException("setting prefix failed", e);
} catch (RepositoryException e) {
throw new RdfConverterException("export failed", e);
} finally {
try {
writer.close();
} catch (IOException e) {
throw new RdfConverterException("writer closing failed", e);
}
}
}
public void readFromRDF(File file, String uri, ContextAwareRepository manager, RDFFormat format) throws Exception {
manager.getConnection().add(file,uri,format);
}
}