package net.fortytwo.sesametools.ldserver; import net.fortytwo.sesametools.SesameTools; import org.openrdf.model.Namespace; import org.openrdf.model.Statement; import org.openrdf.rio.RDFFormat; import org.openrdf.rio.RDFWriter; import org.openrdf.rio.Rio; import org.restlet.representation.OutputRepresentation; import java.io.IOException; import java.io.OutputStream; import java.util.Collection; import java.util.logging.Level; import java.util.logging.Logger; /** * An RDF document as an HTTP entity. * * @author Joshua Shinavier (http://fortytwo.net) */ public class RDFRepresentation extends OutputRepresentation { private static final Logger logger = Logger.getLogger(RDFRepresentation.class.getName()); private final Collection<Statement> statements; private final Collection<Namespace> namespaces; private final RDFFormat format; public RDFRepresentation(final Collection<Statement> statements, final Collection<Namespace> namespaces, final RDFFormat format) { super(RDFMediaTypes.findMediaType(format)); this.statements = statements; this.namespaces = namespaces; this.format = format; } @Override public void write(final OutputStream os) throws IOException { try { RDFWriter writer = Rio.createWriter(format, os); writer.startRDF(); try { for (Namespace ns : namespaces) { writer.handleNamespace(ns.getPrefix(), ns.getName()); } for (Statement st : statements) { writer.handleStatement(st); } writer.handleComment("created by LinkedDataServer " + SesameTools.getProperties().getProperty(SesameTools.VERSION_PROP) + " using the Sesame 2 RDF framework"); } finally { writer.endRDF(); } } catch (Throwable t) { if (t instanceof IOException) { throw (IOException) t; } else { logger.log(Level.WARNING, "failed to write RDF representation", t); throw new IOException(t.getMessage()); } } } }