11package org .linkeddatafragments .servlet ;
22
3- import com .google .gson .JsonObject ;
4-
53import java .io .File ;
64import java .io .FileReader ;
7- import java .io . IOException ;
8- import java .net . URISyntaxException ;
5+ import java .util . ArrayList ;
6+ import java .util . Collection ;
97import java .util .HashMap ;
108import java .util .Map .Entry ;
119import java .util .regex .Matcher ;
1210import java .util .regex .Pattern ;
13-
1411import javax .servlet .ServletConfig ;
1512import javax .servlet .ServletException ;
1613import javax .servlet .http .HttpServlet ;
1714import javax .servlet .http .HttpServletRequest ;
1815import javax .servlet .http .HttpServletResponse ;
1916
17+ import org .apache .commons .codec .CharEncoding ;
18+
2019import org .apache .http .HttpHeaders ;
2120import org .apache .http .client .utils .URIBuilder ;
2221
23- import org .linkeddatafragments .config .ConfigReader ;
24- import org .linkeddatafragments .datasource .TriplePatternFragment ;
25- import org .linkeddatafragments .datasource .IDataSource ;
26- import org .linkeddatafragments .datasource .DataSourceFactory ;
27- import org .linkeddatafragments .exceptions .DataSourceException ;
28- import org .linkeddatafragments .util .CommonResources ;
22+ import org .apache .jena .riot .Lang ;
23+ import org .apache .jena .riot .RDFDataMgr ;
24+ import org .apache .jena .riot .RDFLanguages ;
25+
26+ import com .google .gson .JsonObject ;
2927
3028import com .hp .hpl .jena .datatypes .TypeMapper ;
3129import com .hp .hpl .jena .datatypes .xsd .XSDDatatype ;
3735import com .hp .hpl .jena .rdf .model .ResourceFactory ;
3836import com .hp .hpl .jena .shared .InvalidPropertyURIException ;
3937
40- import org .apache .commons .codec .CharEncoding ;
38+ import org .linkeddatafragments .config .ConfigReader ;
39+ import org .linkeddatafragments .datasource .DataSourceFactory ;
40+ import org .linkeddatafragments .datasource .IDataSource ;
41+ import org .linkeddatafragments .exceptions .DataSourceException ;
42+ import org .linkeddatafragments .util .CommonResources ;
43+
44+ import org .linkeddatafragments .util .MIMEParse ;
4145
4246/**
4347 * Servlet that responds with a Basic Linked Data Fragment.
@@ -63,6 +67,7 @@ public class TriplePatternFragmentServlet extends HttpServlet {
6367
6468 private ConfigReader config ;
6569 private final HashMap <String , IDataSource > dataSources = new HashMap <>();
70+ private final Collection <String > mimeTypes = new ArrayList <>();
6671
6772
6873 private File getConfigFile (ServletConfig config ) throws IOException {
@@ -94,6 +99,11 @@ public void init(ServletConfig servletConfig) throws ServletException {
9499 for (Entry <String , JsonObject > dataSource : config .getDataSources ().entrySet ()) {
95100 dataSources .put (dataSource .getKey (), DataSourceFactory .create (dataSource .getValue ()));
96101 }
102+ // register content types
103+ mimeTypes .add (Lang .TTL .getHeaderString ());
104+ mimeTypes .add (Lang .JSONLD .getHeaderString ());
105+ mimeTypes .add (Lang .NTRIPLES .getHeaderString ());
106+ mimeTypes .add (Lang .RDFXML .getHeaderString () );
97107 } catch (IOException | DataSourceException e ) {
98108 throw new ServletException (e );
99109 }
@@ -243,6 +253,16 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
243253 // fill the output model
244254 Model output = fragment .getTriples ();
245255 output .setNsPrefixes (config .getPrefixes ());
256+
257+ // do conneg
258+ String bestMatch = MIMEParse .bestMatch (mimeTypes , request .getHeader ("Accept" ));
259+ Lang contentType = RDFLanguages .contentTypeToLang (bestMatch );
260+
261+ // serialize the output
262+ response .setHeader ("Server" , "Linked Data Fragments Server" );
263+ response .setContentType (bestMatch );
264+ response .setCharacterEncoding ("utf-8" );
265+ RDFDataMgr .write (response .getOutputStream (), output , contentType );
246266
247267 // add dataset metadata
248268 String datasetUrl = getDatasetUrl (request );
0 commit comments