1
1
package org .linkeddatafragments .servlet ;
2
2
3
3
import 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 ;
4
13
import java .io .File ;
5
14
import java .io .FileReader ;
15
+ import java .util .ArrayList ;
16
+ import java .util .Collection ;
6
17
import java .util .HashMap ;
7
18
import java .util .Map .Entry ;
8
19
import java .util .regex .Matcher ;
9
20
import java .util .regex .Pattern ;
10
-
11
21
import javax .servlet .ServletConfig ;
12
22
import javax .servlet .ServletException ;
13
23
import javax .servlet .http .HttpServlet ;
14
24
import javax .servlet .http .HttpServletRequest ;
15
25
import javax .servlet .http .HttpServletResponse ;
16
-
17
26
import 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 ;
18
30
import org .linkeddatafragments .config .ConfigReader ;
19
- import org .linkeddatafragments .datasource .TriplePatternFragment ;
31
+ import org .linkeddatafragments .datasource .DataSourceFactory ;
20
32
import org .linkeddatafragments .datasource .IDataSource ;
21
- import org .linkeddatafragments .datasource .HdtDataSource ;
33
+ import org .linkeddatafragments .datasource .TriplePatternFragment ;
22
34
23
35
import static org .linkeddatafragments .util .CommonResources .*;
24
36
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 ;
35
38
36
39
/**
37
40
* Servlet that responds with a Basic Linked Data Fragment.
@@ -46,7 +49,8 @@ public class TriplePatternFragmentServlet extends HttpServlet {
46
49
private final static long TRIPLESPERPAGE = 100 ;
47
50
48
51
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 <>();
50
54
51
55
@ Override
52
56
public void init (ServletConfig servletConfig ) throws ServletException {
@@ -76,6 +80,12 @@ public void init(ServletConfig servletConfig) throws ServletException {
76
80
for (Entry <String , JsonObject > dataSource : config .getDataSources ().entrySet ()) {
77
81
dataSources .put (dataSource .getKey (), DataSourceFactory .create (dataSource .getValue ()));
78
82
}
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 () );
79
89
} catch (Exception e ) {
80
90
throw new ServletException (e );
81
91
}
@@ -106,6 +116,16 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
106
116
// fill the output model
107
117
final Model output = fragment .getTriples ();
108
118
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 );
109
129
110
130
// add dataset metadata
111
131
final String hostName = request .getHeader ("Host" );
@@ -155,12 +175,6 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
155
175
output .add (predicateMapping , HYDRA_PROPERTY , RDF_PREDICATE );
156
176
output .add (objectMapping , HYDRA_VARIABLE , output .createLiteral ("object" ));
157
177
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 );
164
178
} catch (Exception e ) {
165
179
throw new ServletException (e );
166
180
}
0 commit comments