|
22 | 22 |
|
23 | 23 | import com.hp.hpl.jena.datatypes.TypeMapper;
|
24 | 24 | import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
|
| 25 | +import com.hp.hpl.jena.rdf.model.Literal; |
25 | 26 | import com.hp.hpl.jena.rdf.model.Model;
|
26 | 27 | import com.hp.hpl.jena.rdf.model.Property;
|
27 | 28 | import com.hp.hpl.jena.rdf.model.RDFNode;
|
@@ -81,12 +82,40 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
|
81 | 82 | final Model output = fragment.getTriples();
|
82 | 83 | output.setNsPrefixes(config.getPrefixes());
|
83 | 84 |
|
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(); |
86 | 89 | final String fragmentUrl = query == null ? datasetUrl : (datasetUrl + "?" + query);
|
| 90 | + final Resource datasetId = output.createResource(datasetUrl); |
87 | 91 | 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); |
90 | 119 |
|
91 | 120 | // serialize the output as Turtle
|
92 | 121 | response.setHeader("Server", "Linked Data Fragments Server");
|
|
0 commit comments