Skip to content

Commit 33ee8c7

Browse files
committed
Add hypermedia controls.
1 parent 3ca6f3e commit 33ee8c7

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/org/linkeddatafragments/servlet/BasicLdfServlet.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.hp.hpl.jena.datatypes.TypeMapper;
2424
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
25+
import com.hp.hpl.jena.rdf.model.Literal;
2526
import com.hp.hpl.jena.rdf.model.Model;
2627
import com.hp.hpl.jena.rdf.model.Property;
2728
import com.hp.hpl.jena.rdf.model.RDFNode;
@@ -81,12 +82,40 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
8182
final Model output = fragment.getTriples();
8283
output.setNsPrefixes(config.getPrefixes());
8384

84-
// add metadata
85-
final String datasetUrl = request.getScheme() + "://" + request.getServerName() + path;
85+
// add dataset metadata
86+
final String hostName = request.getHeader("Host");
87+
final String datasetUrl = request.getScheme() + "://" +
88+
(hostName == null ? request.getServerName() : hostName) + request.getRequestURI();
8689
final String fragmentUrl = query == null ? datasetUrl : (datasetUrl + "?" + query);
90+
final Resource datasetId = output.createResource(datasetUrl);
8791
final Resource fragmentId = output.createResource(fragmentUrl);
88-
output.add(fragmentId, VOID_TRIPLES,
89-
output.createTypedLiteral(fragment.getTotalSize(), XSDDatatype.XSDinteger));
92+
output.add(datasetId, RDF_TYPE, VOID_DATASET);
93+
output.add(datasetId, RDF_TYPE, HYDRA_COLLECTION);
94+
output.add(datasetId, VOID_SUBSET, fragmentId);
95+
96+
// add fragment metadata
97+
output.add(fragmentId, RDF_TYPE, HYDRA_COLLECTION);
98+
output.add(fragmentId, RDF_TYPE, HYDRA_PAGEDCOLLECTION);
99+
final Literal total = output.createTypedLiteral(fragment.getTotalSize(), XSDDatatype.XSDinteger);
100+
output.add(fragmentId, VOID_TRIPLES, total);
101+
output.add(fragmentId, HYDRA_TOTALITEMS, total);
102+
103+
// add controls
104+
final Resource triplePattern = output.createResource();
105+
final Resource subjectMapping = output.createResource();
106+
final Resource predicateMapping = output.createResource();
107+
final Resource objectMapping = output.createResource();
108+
output.add(datasetId, HYDRA_SEARCH, triplePattern);
109+
output.add(triplePattern, HYDRA_TEMPLATE, output.createLiteral(datasetUrl + "{?subject,predicate,object}"));
110+
output.add(triplePattern, HYDRA_MAPPING, subjectMapping);
111+
output.add(triplePattern, HYDRA_MAPPING, predicateMapping);
112+
output.add(triplePattern, HYDRA_MAPPING, objectMapping);
113+
output.add(subjectMapping, HYDRA_VARIABLE, output.createLiteral("subject"));
114+
output.add(subjectMapping, HYDRA_PROPERTY, RDF_SUBJECT);
115+
output.add(predicateMapping, HYDRA_VARIABLE, output.createLiteral("predicate"));
116+
output.add(predicateMapping, HYDRA_PROPERTY, RDF_PREDICATE);
117+
output.add(objectMapping, HYDRA_VARIABLE, output.createLiteral("object"));
118+
output.add(objectMapping, HYDRA_PROPERTY, RDF_OBJECT);
90119

91120
// serialize the output as Turtle
92121
response.setHeader("Server", "Linked Data Fragments Server");

src/org/linkeddatafragments/util/CommonResources.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,25 @@
77
public class CommonResources {
88
public final static String RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
99
public final static Property RDF_TYPE = createProperty(RDF + "type");
10+
public final static Property RDF_SUBJECT = createProperty(RDF + "subject");
11+
public final static Property RDF_PREDICATE = createProperty(RDF + "predicate");
12+
public final static Property RDF_OBJECT = createProperty(RDF + "object");
1013

1114
public final static String VOID = "http://rdfs.org/ns/void#";
1215
public final static Property VOID_TRIPLES = createProperty(VOID + "triples");
16+
public final static Property VOID_SUBSET = createProperty(VOID + "subset");
17+
public final static Property VOID_DATASET = createProperty(VOID + "Dataset");
18+
19+
public final static String HYDRA = "http://www.w3.org/ns/hydra/core#";
20+
public final static Property HYDRA_TOTALITEMS = createProperty(HYDRA + "totalItems");
21+
public final static Property HYDRA_ITEMSPERPAGE = createProperty(HYDRA + "itemsPerPage");
22+
public final static Property HYDRA_SEARCH = createProperty(HYDRA + "search");
23+
public final static Property HYDRA_TEMPLATE = createProperty(HYDRA + "template");
24+
public final static Property HYDRA_MAPPING = createProperty(HYDRA + "mapping");
25+
public final static Property HYDRA_VARIABLE = createProperty(HYDRA + "variable");
26+
public final static Property HYDRA_PROPERTY = createProperty(HYDRA + "property");
27+
public final static Property HYDRA_COLLECTION = createProperty(HYDRA + "Collection");
28+
public final static Property HYDRA_PAGEDCOLLECTION = createProperty(HYDRA + "PagedCollection");
1329

1430
private final static Property createProperty(String uri) {
1531
return ResourceFactory.createProperty(uri);

0 commit comments

Comments
 (0)