Skip to content

Commit 586bfd9

Browse files
author
Miel Vander Sande
committed
Added conneg
1 parent e3ceeeb commit 586bfd9

File tree

4 files changed

+58
-26
lines changed

4 files changed

+58
-26
lines changed

config-example.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
"datasources": {
55
"dbpedia": {
6+
"title": "DBPedia",
7+
"type": "HdtDatasource",
8+
"description": "DBPedia with an HDT back-end",
9+
"settings": { "file": "data/dbpedia.hdt" }
10+
},
11+
"swdf": {
612
"title": "Semantic Web Dog Food",
713
"type": "HdtDatasource",
814
"description": "Semantic Web Dog Food with an HDT back-end",

pom.xml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
<dependency>
2020
<groupId>org.apache.jena</groupId>
2121
<artifactId>jena-core</artifactId>
22-
<version>2.11.1</version>
22+
<version>2.13.0</version>
2323
</dependency>
2424
<dependency>
2525
<groupId>org.apache.jena</groupId>
2626
<artifactId>jena-arq</artifactId>
27-
<version>2.11.1</version>
27+
<version>2.13.0</version>
2828
</dependency>
2929
<dependency>
3030
<groupId>org.apache.httpcomponents</groupId>
@@ -57,6 +57,18 @@
5757
<artifactId>commons-cli</artifactId>
5858
<version>1.2</version>
5959
</dependency>
60+
<dependency>
61+
<groupId>org.apache.commons</groupId>
62+
<artifactId>commons-lang3</artifactId>
63+
<version>3.3.2</version>
64+
<type>jar</type>
65+
</dependency>
66+
<dependency>
67+
<groupId>commons-lang</groupId>
68+
<artifactId>commons-lang</artifactId>
69+
<version>2.6</version>
70+
<type>jar</type>
71+
</dependency>
6072
</dependencies>
6173
<build>
6274
<sourceDirectory>src</sourceDirectory>
@@ -65,8 +77,8 @@
6577
<artifactId>maven-compiler-plugin</artifactId>
6678
<version>3.1</version>
6779
<configuration>
68-
<source>1.7</source>
69-
<target>1.7</target>
80+
<source>1.8</source>
81+
<target>1.8</target>
7082
</configuration>
7183
</plugin>
7284
<plugin>

src/org/linkeddatafragments/servlet/TriplePatternFragmentServlet.java

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
11
package org.linkeddatafragments.servlet;
22

33
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;
413
import java.io.File;
514
import java.io.FileReader;
15+
import java.util.ArrayList;
16+
import java.util.Collection;
617
import java.util.HashMap;
718
import java.util.Map.Entry;
819
import java.util.regex.Matcher;
920
import java.util.regex.Pattern;
10-
1121
import javax.servlet.ServletConfig;
1222
import javax.servlet.ServletException;
1323
import javax.servlet.http.HttpServlet;
1424
import javax.servlet.http.HttpServletRequest;
1525
import javax.servlet.http.HttpServletResponse;
16-
1726
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;
1830
import org.linkeddatafragments.config.ConfigReader;
19-
import org.linkeddatafragments.datasource.TriplePatternFragment;
31+
import org.linkeddatafragments.datasource.DataSourceFactory;
2032
import org.linkeddatafragments.datasource.IDataSource;
21-
import org.linkeddatafragments.datasource.HdtDataSource;
33+
import org.linkeddatafragments.datasource.TriplePatternFragment;
2234

2335
import 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
}

src/org/linkeddatafragments/util/CommonResources.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class CommonResources {
3333

3434
public final static Property INVALID_URI = createProperty("urn:invalid");
3535

36-
private final static Property createProperty(String uri) {
36+
private static Property createProperty(String uri) {
3737
return ResourceFactory.createProperty(uri);
3838
}
3939
}

0 commit comments

Comments
 (0)