11package org .linkeddatafragments .servlet ;
22
33import com .google .gson .JsonObject ;
4+ import com .hp .hpl .jena .datatypes .TypeMapper ;
5+ import com .hp .hpl .jena .datatypes .xsd .XSDDatatype ;
6+ import com .hp .hpl .jena .rdf .model .Literal ;
7+ import com .hp .hpl .jena .rdf .model .Model ;
8+ import com .hp .hpl .jena .rdf .model .Property ;
9+ import com .hp .hpl .jena .rdf .model .RDFNode ;
10+ import com .hp .hpl .jena .rdf .model .Resource ;
11+ import com .hp .hpl .jena .rdf .model .ResourceFactory ;
12+ import com .hp .hpl .jena .shared .InvalidPropertyURIException ;
413import java .io .File ;
514import java .io .FileReader ;
15+ import java .util .ArrayList ;
16+ import java .util .Collection ;
617import java .util .HashMap ;
718import java .util .Map .Entry ;
819import java .util .regex .Matcher ;
920import java .util .regex .Pattern ;
10-
1121import javax .servlet .ServletConfig ;
1222import javax .servlet .ServletException ;
1323import javax .servlet .http .HttpServlet ;
1424import javax .servlet .http .HttpServletRequest ;
1525import javax .servlet .http .HttpServletResponse ;
16-
1726import org .apache .http .client .utils .URIBuilder ;
27+ import org .apache .jena .riot .Lang ;
28+ import org .apache .jena .riot .RDFDataMgr ;
29+ import org .apache .jena .riot .RDFLanguages ;
1830import org .linkeddatafragments .config .ConfigReader ;
19- import org .linkeddatafragments .datasource .TriplePatternFragment ;
31+ import org .linkeddatafragments .datasource .DataSourceFactory ;
2032import org .linkeddatafragments .datasource .IDataSource ;
21- import org .linkeddatafragments .datasource .HdtDataSource ;
33+ import org .linkeddatafragments .datasource .TriplePatternFragment ;
2234
2335import static org .linkeddatafragments .util .CommonResources .*;
2436
25- import com .hp .hpl .jena .datatypes .TypeMapper ;
26- import com .hp .hpl .jena .datatypes .xsd .XSDDatatype ;
27- import com .hp .hpl .jena .rdf .model .Literal ;
28- import com .hp .hpl .jena .rdf .model .Model ;
29- import com .hp .hpl .jena .rdf .model .Property ;
30- import com .hp .hpl .jena .rdf .model .RDFNode ;
31- import com .hp .hpl .jena .rdf .model .Resource ;
32- import com .hp .hpl .jena .rdf .model .ResourceFactory ;
33- import com .hp .hpl .jena .shared .InvalidPropertyURIException ;
34- import org .linkeddatafragments .datasource .DataSourceFactory ;
37+ import org .linkeddatafragments .util .MIMEParse ;
3538
3639/**
3740 * Servlet that responds with a Basic Linked Data Fragment.
@@ -46,7 +49,8 @@ public class TriplePatternFragmentServlet extends HttpServlet {
4649 private final static long TRIPLESPERPAGE = 100 ;
4750
4851 private ConfigReader config ;
49- private HashMap <String , IDataSource > dataSources = new HashMap <>();
52+ private final HashMap <String , IDataSource > dataSources = new HashMap <>();
53+ private final Collection <String > mimeTypes = new ArrayList <>();
5054
5155 @ Override
5256 public void init (ServletConfig servletConfig ) throws ServletException {
@@ -76,6 +80,12 @@ public void init(ServletConfig servletConfig) throws ServletException {
7680 for (Entry <String , JsonObject > dataSource : config .getDataSources ().entrySet ()) {
7781 dataSources .put (dataSource .getKey (), DataSourceFactory .create (dataSource .getValue ()));
7882 }
83+
84+ // register content types
85+ mimeTypes .add (Lang .TTL .getHeaderString ());
86+ mimeTypes .add (Lang .JSONLD .getHeaderString ());
87+ mimeTypes .add (Lang .NTRIPLES .getHeaderString ());
88+ mimeTypes .add (Lang .RDFXML .getHeaderString () );
7989 } catch (Exception e ) {
8090 throw new ServletException (e );
8191 }
@@ -106,6 +116,16 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
106116 // fill the output model
107117 final Model output = fragment .getTriples ();
108118 output .setNsPrefixes (config .getPrefixes ());
119+
120+ // do conneg
121+ String bestMatch = MIMEParse .bestMatch (mimeTypes , request .getHeader ("Accept" ));
122+ Lang contentType = RDFLanguages .contentTypeToLang (bestMatch );
123+
124+ // serialize the output
125+ response .setHeader ("Server" , "Linked Data Fragments Server" );
126+ response .setContentType (bestMatch );
127+ response .setCharacterEncoding ("utf-8" );
128+ RDFDataMgr .write (response .getOutputStream (), output , contentType );
109129
110130 // add dataset metadata
111131 final String hostName = request .getHeader ("Host" );
@@ -155,12 +175,6 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
155175 output .add (predicateMapping , HYDRA_PROPERTY , RDF_PREDICATE );
156176 output .add (objectMapping , HYDRA_VARIABLE , output .createLiteral ("object" ));
157177 output .add (objectMapping , HYDRA_PROPERTY , RDF_OBJECT );
158-
159- // serialize the output as Turtle
160- response .setHeader ("Server" , "Linked Data Fragments Server" );
161- response .setContentType ("text/turtle" );
162- response .setCharacterEncoding ("utf-8" );
163- output .write (response .getWriter (), "Turtle" , fragmentUrl );
164178 } catch (Exception e ) {
165179 throw new ServletException (e );
166180 }
0 commit comments