package org.openprovenance.prov.rdf; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URL; import javax.xml.bind.JAXBException; import org.openprovenance.prov.model.BeanTraversal; import org.openprovenance.prov.model.Namespace; import org.openprovenance.prov.model.NamespacePrefixMapper; import org.openprovenance.prov.rdf.collector.QualifiedCollector; import org.openprovenance.prov.rdf.collector.RdfCollector; import org.openprovenance.prov.model.Document; import org.openprovenance.prov.model.ProvFactory; import org.openrdf.repository.Repository; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.contextaware.ContextAwareRepository; import org.openrdf.repository.sail.SailRepository; import org.openrdf.rio.RDFFormat; import org.openrdf.rio.RDFHandlerException; import org.openrdf.rio.RDFParseException; import org.openrdf.rio.RDFParser; import org.openrdf.rio.Rio; import org.openrdf.sail.memory.MemoryStore; public class Utility { private final ProvFactory pFactory; private final Ontology onto; public Utility(ProvFactory pFactory, Ontology onto) { this.pFactory = pFactory; this.onto = onto; } public Document parseRDF(String filename) throws RDFParseException, RDFHandlerException, IOException, JAXBException { // System.out.println("**** Parse "+filename); File file = new File(filename); URL documentURL = file.toURI().toURL(); InputStream inputStream = documentURL.openStream(); RDFParser rdfParser = Rio.createParser(Rio.getParserFormatForFileName(file.getName())); String streamName = documentURL.toString(); return parseRDF(inputStream, rdfParser, streamName); } /** Parse from input stream, no base uri specified. */ public Document parseRDF(InputStream inputStream, RDFFormat format, String baseuri) throws RDFParseException, RDFHandlerException, IOException { RDFParser rdfParser = Rio.createParser(format); return parseRDF(inputStream, rdfParser, baseuri); } /** Parse from input stream passing base uri . */ public Document parseRDF(InputStream inputStream, RDFParser rdfParser, String baseuri) throws IOException, RDFParseException, RDFHandlerException { RdfCollector rdfCollector = new QualifiedCollector(pFactory, onto); rdfParser.setRDFHandler(rdfCollector); rdfParser.parse(inputStream, baseuri); Document doc = rdfCollector.getDocument(); Namespace ns = doc.getNamespace(); return doc; } public void dumpRDF(Document document, RDFFormat format, String filename) { dumpRDFInternal(document, format, filename); } public void dumpRDF(Document document, RDFFormat format, OutputStream os) { dumpRDFInternal(document, format, os); } private void dumpRDFInternal(Document document, RDFFormat format, Object out) { Repository myRepository = new SailRepository(new MemoryStore()); try { myRepository.initialize(); } catch (RepositoryException e) { throw new RdfConverterException("failed to initialize repository", e); } ContextAwareRepository rep = new ContextAwareRepository(myRepository); // was // it // necessary // to // create // that? RepositoryHelper rHelper = new RepositoryHelper(); RdfConstructor rdfc = new RdfConstructor(new SesameGraphBuilder(rep, pFactory), pFactory); Namespace ns = new Namespace(document.getNamespace()); ns.register(NamespacePrefixMapper.RDFS_PREFIX, NamespacePrefixMapper.RDFS_NS); // RDF // Schema ns.register(NamespacePrefixMapper.RDF_PREFIX, NamespacePrefixMapper.RDF_NS); // RDF // Concepts rdfc.setNamespace(ns); Namespace.withThreadNamespace(document.getNamespace()); BeanTraversal bt = new BeanTraversal(rdfc, pFactory); bt.doAction(document); if (out instanceof String) { rHelper.dumpToRDF((String) out, rep, format, rdfc.getNamespace()); } else { rHelper.dumpToRDF(new OutputStreamWriter((OutputStream) out), rep, format, rdfc.getNamespace()); } } }