1
1
package org .linkeddatafragments .servlet ;
2
2
3
- import com .google .gson .JsonObject ;
4
-
5
3
import java .io .File ;
6
4
import java .io .FileReader ;
7
- import java .io . IOException ;
8
- import java .net . URISyntaxException ;
5
+ import java .util . ArrayList ;
6
+ import java .util . Collection ;
9
7
import java .util .HashMap ;
10
8
import java .util .Map .Entry ;
11
9
import java .util .regex .Matcher ;
12
10
import java .util .regex .Pattern ;
13
-
14
11
import javax .servlet .ServletConfig ;
15
12
import javax .servlet .ServletException ;
16
13
import javax .servlet .http .HttpServlet ;
17
14
import javax .servlet .http .HttpServletRequest ;
18
15
import javax .servlet .http .HttpServletResponse ;
19
16
17
+ import org .apache .commons .codec .CharEncoding ;
18
+
20
19
import org .apache .http .HttpHeaders ;
21
20
import org .apache .http .client .utils .URIBuilder ;
22
21
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 ;
29
27
30
28
import com .hp .hpl .jena .datatypes .TypeMapper ;
31
29
import com .hp .hpl .jena .datatypes .xsd .XSDDatatype ;
37
35
import com .hp .hpl .jena .rdf .model .ResourceFactory ;
38
36
import com .hp .hpl .jena .shared .InvalidPropertyURIException ;
39
37
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 ;
41
45
42
46
/**
43
47
* Servlet that responds with a Basic Linked Data Fragment.
@@ -63,6 +67,7 @@ public class TriplePatternFragmentServlet extends HttpServlet {
63
67
64
68
private ConfigReader config ;
65
69
private final HashMap <String , IDataSource > dataSources = new HashMap <>();
70
+ private final Collection <String > mimeTypes = new ArrayList <>();
66
71
67
72
68
73
private File getConfigFile (ServletConfig config ) throws IOException {
@@ -94,6 +99,11 @@ public void init(ServletConfig servletConfig) throws ServletException {
94
99
for (Entry <String , JsonObject > dataSource : config .getDataSources ().entrySet ()) {
95
100
dataSources .put (dataSource .getKey (), DataSourceFactory .create (dataSource .getValue ()));
96
101
}
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 () );
97
107
} catch (IOException | DataSourceException e ) {
98
108
throw new ServletException (e );
99
109
}
@@ -243,6 +253,16 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
243
253
// fill the output model
244
254
Model output = fragment .getTriples ();
245
255
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 );
246
266
247
267
// add dataset metadata
248
268
String datasetUrl = getDatasetUrl (request );
0 commit comments