You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by wi...@apache.org on 2014/10/28 10:16:13 UTC
[3/4] git commit: MARMOTTA-556: added hydra pages' links
MARMOTTA-556: added hydra pages' links
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/718c304b
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/718c304b
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/718c304b
Branch: refs/heads/MARMOTTA-556
Commit: 718c304bf27fe0f06b51d4cbe6cf902439e50285
Parents: f89825a
Author: Sergio Fernández <wi...@apache.org>
Authored: Tue Oct 28 09:48:49 2014 +0100
Committer: Sergio Fernández <wi...@apache.org>
Committed: Tue Oct 28 09:48:49 2014 +0100
----------------------------------------------------------------------
.../marmotta/platform/ldf/api/LdfService.java | 11 +-
.../platform/ldf/services/LdfServiceImpl.java | 39 +-
.../apache/marmotta/platform/ldf/vocab/SSD.java | 582 +++++++++++++++++++
.../platform/ldf/webservices/LdfWebService.java | 53 +-
4 files changed, 649 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/718c304b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/api/LdfService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/api/LdfService.java b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/api/LdfService.java
index e8f84ce..2b4cd0a 100644
--- a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/api/LdfService.java
+++ b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/api/LdfService.java
@@ -42,7 +42,7 @@ public interface LdfService {
* @param page number of page (starting with 1)
* @return fragment
*/
- Model getFragment(String subject, String predicate, String object, int page) throws RepositoryException, IllegalArgumentException;
+ Model getFragment(String subject, String predicate, String object, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException;
/**
* Gets a fragment matching the specified triple fragment pattern
@@ -52,9 +52,10 @@ public interface LdfService {
* @param predicate fragmnent predicate
* @param object fragment object
* @param page number of page (starting with 1)
+ * @param uri uri requested
* @return fragment
*/
- Model getFragment(URI subject, URI predicate, Value object, int page) throws RepositoryException, IllegalArgumentException;
+ Model getFragment(URI subject, URI predicate, Value object, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException;
/**
* Gets a fragment matching the specified quad fragment pattern
@@ -65,9 +66,10 @@ public interface LdfService {
* @param object fragment object
* @param context named graph
* @param page number of page (starting with 1)
+ * @param uri uri requested
* @return fragment
*/
- Model getFragment(String subject, String predicate, String object, String context, int page) throws RepositoryException, IllegalArgumentException;
+ Model getFragment(String subject, String predicate, String object, String context, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException;
/**
* Gets a fragment matching the specified quad fragment pattern
@@ -78,8 +80,9 @@ public interface LdfService {
* @param object fragment object
* @param context named graph
* @param page number of page (starting with 1)
+ * @param uri uri requested
* @return fragment
*/
- Model getFragment(URI subject, URI predicate, Value object, Resource context, int page) throws RepositoryException, IllegalArgumentException;
+ Model getFragment(URI subject, URI predicate, Value object, Resource context, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException;
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/718c304b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
index d6fac6c..f776e03 100644
--- a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
+++ b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/services/LdfServiceImpl.java
@@ -18,13 +18,13 @@
package org.apache.marmotta.platform.ldf.services;
import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
import org.apache.commons.lang3.StringUtils;
import org.apache.marmotta.commons.sesame.repository.ResultUtils;
import org.apache.marmotta.commons.vocabulary.XSD;
import org.apache.marmotta.platform.core.api.triplestore.SesameService;
import org.apache.marmotta.platform.ldf.api.LdfService;
import org.apache.marmotta.platform.ldf.vocab.HYDRA;
+import org.apache.marmotta.platform.ldf.vocab.SSD;
import org.apache.marmotta.platform.ldf.vocab.VOID;
import org.openrdf.model.*;
import org.openrdf.model.impl.TreeModel;
@@ -37,9 +37,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
+import javax.ws.rs.core.UriBuilder;
import java.net.URISyntaxException;
-import java.util.ArrayList;
import java.util.Comparator;
+import java.util.Date;
import java.util.List;
/**
@@ -55,17 +56,17 @@ public class LdfServiceImpl implements LdfService {
private SesameService sesameService;
@Override
- public Model getFragment(String subjectStr, String predicateStr, String objectStr, int page) throws RepositoryException, IllegalArgumentException {
- return getFragment(subjectStr, predicateStr, objectStr, null, page);
+ public Model getFragment(String subjectStr, String predicateStr, String objectStr, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException {
+ return getFragment(subjectStr, predicateStr, objectStr, null, page, uri);
}
@Override
- public Model getFragment(URI subject, URI predicate, Value object, int page) throws RepositoryException, IllegalArgumentException {
- return getFragment(subject, predicate, object, null, page);
+ public Model getFragment(URI subject, URI predicate, Value object, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException {
+ return getFragment(subject, predicate, object, null, page, uri);
}
@Override
- public Model getFragment(String subjectStr, String predicateStr, String objectStr, String contextStr, int page) throws RepositoryException, IllegalArgumentException {
+ public Model getFragment(String subjectStr, String predicateStr, String objectStr, String contextStr, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException {
final ValueFactoryImpl vf = new ValueFactoryImpl();
URI subject = null;
@@ -108,20 +109,19 @@ public class LdfServiceImpl implements LdfService {
}
}
- return getFragment(subject, predicate, object, context, page);
+ return getFragment(subject, predicate, object, context, page, uri);
}
@Override
- public Model getFragment(URI subject, URI predicate, Value object, Resource context, int page) throws RepositoryException, IllegalArgumentException {
+ public Model getFragment(URI subject, URI predicate, Value object, Resource context, int page, java.net.URI uri) throws RepositoryException, IllegalArgumentException {
final RepositoryConnection conn = sesameService.getConnection();
- final List<Statement> statements;
try {
conn.begin();
//first get the triple fragment for ordering by a fixed criteria
//TODO: do this effectively
final RepositoryResult<Statement> results = conn.getStatements(subject, predicate, object, true, context);
- statements = FluentIterable.from(ResultUtils.iterable(results)).toSortedList(new Comparator<Statement>() {
+ final List<Statement> statements = FluentIterable.from(ResultUtils.iterable(results)).toSortedList(new Comparator<Statement>() {
@Override
public int compare(Statement s1, Statement s2) {
int subjectComparison = s1.getSubject().stringValue().compareTo(s2.getSubject().stringValue());
@@ -165,11 +165,15 @@ public class LdfServiceImpl implements LdfService {
model.addAll(filteredStatements);
//and add ldf metadata
- Resource dataset = context != null ? context : vf.createBNode();
+ URI dataset = vf.createURI(UriBuilder.fromUri(uri).replaceQuery(null).build().toASCIIString());
model.add(dataset, RDF.TYPE, VOID.Dataset);
model.add(dataset, RDF.TYPE, HYDRA.Collection);
+ if (context != null) {
+ model.add(dataset, VOID.inDataset, context);
+ model.add(dataset, SSD.namedGraph, context);
+ }
- Resource fragment = vf.createBNode(); //TODO
+ Resource fragment = vf.createBNode(String.format("fragment-%tFT%<tH-%<tM-%<tS.%<tL", new Date()));
model.add(dataset, VOID.subset, fragment);
model.add(fragment, RDF.TYPE, HYDRA.Collection);
if (offset != 0 && limit != size) {
@@ -178,8 +182,13 @@ public class LdfServiceImpl implements LdfService {
model.add(fragment, VOID.triples, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
model.add(fragment, HYDRA.totalItems, vf.createLiteral(Integer.toString(filteredStatements.size()), XSD.Integer));
model.add(fragment, HYDRA.itemsPerPage, vf.createLiteral(Integer.toString(LdfService.PAGE_SIZE), XSD.Integer));
- //TODO: HYDRA_FIRSTPAGE, HYDRA_PREVIOUSPAGE, HYDRA_NEXTPAGE
-
+ model.add(fragment, HYDRA.firstPage, vf.createURI(UriBuilder.fromUri(uri).queryParam("page", 1).build().toASCIIString()));
+ if (offset > 0) {
+ model.add(fragment, HYDRA.previousPage, vf.createURI(UriBuilder.fromUri(uri).queryParam("page", page-1).build().toASCIIString()));
+ }
+ if (offset + limit < statements.size()) {
+ model.add(fragment, HYDRA.nextPage, vf.createURI(UriBuilder.fromUri(uri).queryParam("page", page+1).build().toASCIIString()));
+ }
//TODO: hydra controls
return model;
http://git-wip-us.apache.org/repos/asf/marmotta/blob/718c304b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/vocab/SSD.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/vocab/SSD.java b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/vocab/SSD.java
new file mode 100644
index 0000000..9c15375
--- /dev/null
+++ b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/vocab/SSD.java
@@ -0,0 +1,582 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.marmotta.platform.ldf.vocab;
+
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+/**
+ * Namespace Sparql-service-description.
+ * Prefix: {@code <http://www.w3.org/ns/sparql-service-description#>}
+ */
+public class SSD {
+
+ /** {@code http://www.w3.org/ns/sparql-service-description#} **/
+ public static final String NAMESPACE = "http://www.w3.org/ns/sparql-service-description#";
+
+ /** {@code sparql-service-description} **/
+ public static final String PREFIX = "sparql-service-description";
+
+ /**
+ * Aggregate
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Aggregate}.
+ * <p>
+ * An instance of sd:Aggregate represents an aggregate that may be used
+ * in a SPARQL aggregate query (for instance in a HAVING clause or SELECT
+ * expression) besides the standard list of supported aggregates COUNT,
+ * SUM, MIN, MAX, AVG, GROUP_CONCAT, and SAMPLE.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Aggregate">Aggregate</a>
+ */
+ public static final URI Aggregate;
+
+ /**
+ * available graph descriptions
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#availableGraphs}.
+ * <p>
+ * Relates an instance of sd:Service to a description of the graphs which
+ * are allowed in the construction of a dataset either via the SPARQL
+ * Protocol, with FROM/FROM NAMED clauses in a query, or with USING/USING
+ * NAMED in an update request, if the service limits the scope of dataset
+ * construction.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#availableGraphs">availableGraphs</a>
+ */
+ public static final URI availableGraphs;
+
+ /**
+ * Basic Federated Query
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#BasicFederatedQuery}.
+ * <p>
+ * sd:BasicFederatedQuery, when used as the object of the sd:feature
+ * property, indicates that the SPARQL service supports basic federated
+ * query using the SERVICE keyword as defined by SPARQL 1.1 Federation
+ * Extensions.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#BasicFederatedQuery">BasicFederatedQuery</a>
+ */
+ public static final URI BasicFederatedQuery;
+
+ /**
+ * Dataset
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Dataset}.
+ * <p>
+ * An instance of sd:Dataset represents a RDF Dataset comprised of a
+ * default graph and zero or more named graphs.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Dataset">Dataset</a>
+ */
+ public static final URI Dataset;
+
+ /**
+ * default dataset description
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#defaultDataset}.
+ * <p>
+ * Relates an instance of sd:Service to a description of the default
+ * dataset available when no explicit dataset is specified in the query,
+ * update request or via protocol parameters.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#defaultDataset">defaultDataset</a>
+ */
+ public static final URI defaultDataset;
+
+ /**
+ * default entailment regime
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#defaultEntailmentRegime}.
+ * <p>
+ * Relates an instance of sd:Service with a resource representing an
+ * entailment regime used for basic graph pattern matching. This property
+ * is intended for use when a single entailment regime by default applies
+ * to all graphs in the default dataset of the service. In situations
+ * where a different entailment regime applies to a specific graph in the
+ * dataset, the sd:entailmentRegime property should be used to indicate
+ * this fact in the description of that graph.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#defaultEntailmentRegime">defaultEntailmentRegime</a>
+ */
+ public static final URI defaultEntailmentRegime;
+
+ /**
+ * default graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#defaultGraph}.
+ * <p>
+ * Relates an instance of sd:Dataset to the description of its default
+ * graph.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#defaultGraph">defaultGraph</a>
+ */
+ public static final URI defaultGraph;
+
+ /**
+ * default supported entailment profile
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#defaultSupportedEntailmentProfile}.
+ * <p>
+ * Relates an instance of sd:Service with a resource representing a
+ * supported profile of the default entailment regime (as declared by
+ * sd:defaultEntailmentRegime).
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#defaultSupportedEntailmentProfile">defaultSupportedEntailmentProfile</a>
+ */
+ public static final URI defaultSupportedEntailmentProfile;
+
+ /**
+ * Dereferences URIs
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#DereferencesURIs}.
+ * <p>
+ * sd:DereferencesURIs, when used as the object of the sd:feature
+ * property, indicates that a SPARQL service will dereference URIs used
+ * in FROM/FROM NAMED and USING/USING NAMED clauses and use the resulting
+ * RDF in the dataset during query evaluation.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#DereferencesURIs">DereferencesURIs</a>
+ */
+ public static final URI DereferencesURIs;
+
+ /**
+ * Empty Graphs
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#EmptyGraphs}.
+ * <p>
+ * sd:EmptyGraphs, when used as the object of the sd:feature property,
+ * indicates that the underlying graph store supports empty graphs. A
+ * graph store that supports empty graphs MUST NOT remove graphs that are
+ * left empty after triples are removed from them.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#EmptyGraphs">EmptyGraphs</a>
+ */
+ public static final URI EmptyGraphs;
+
+ /**
+ * endpoint
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#endpoint}.
+ * <p>
+ * The SPARQL endpoint of an sd:Service that implements the SPARQL
+ * Protocol service. The object of the sd:endpoint property is an IRI.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#endpoint">endpoint</a>
+ */
+ public static final URI endpoint;
+
+ /**
+ * Entailment Profile
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#EntailmentProfile}.
+ * <p>
+ * An instance of sd:EntailmentProfile represents a profile of an
+ * entailment regime. An entailment profile MAY impose restrictions on
+ * what constitutes valid RDF with respect to entailment.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#EntailmentProfile">EntailmentProfile</a>
+ */
+ public static final URI EntailmentProfile;
+
+ /**
+ * Entailment Regime
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#EntailmentRegime}.
+ * <p>
+ * An instance of sd:EntailmentRegime represents an entailment regime
+ * used in basic graph pattern matching (as described by SPARQL 1.1 Query
+ * Language).
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#EntailmentRegime">EntailmentRegime</a>
+ */
+ public static final URI EntailmentRegime;
+
+ /**
+ * entailment regime
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#entailmentRegime}.
+ * <p>
+ * Relates a named graph description with a resource representing an
+ * entailment regime used for basic graph pattern matching over that
+ * graph.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#entailmentRegime">entailmentRegime</a>
+ */
+ public static final URI entailmentRegime;
+
+ /**
+ * extension aggregate
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#extensionAggregate}.
+ * <p>
+ * Relates an instance of sd:Service to an aggregate that may be used in
+ * a SPARQL aggregate query (for instance in a HAVING clause or SELECT
+ * expression) besides the standard list of supported aggregates COUNT,
+ * SUM, MIN, MAX, AVG, GROUP_CONCAT, and SAMPLE
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#extensionAggregate">extensionAggregate</a>
+ */
+ public static final URI extensionAggregate;
+
+ /**
+ * extension function
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#extensionFunction}.
+ * <p>
+ * Relates an instance of sd:Service to a function that may be used in a
+ * SPARQL SELECT expression or a FILTER, HAVING, GROUP BY, ORDER BY, or
+ * BIND clause.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#extensionFunction">extensionFunction</a>
+ */
+ public static final URI extensionFunction;
+
+ /**
+ * Feature
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Feature}.
+ * <p>
+ * An instance of sd:Feature represents a feature of a SPARQL service.
+ * Specific types of features include functions, aggregates, languages,
+ * and entailment regimes and profiles. This document defines five
+ * instances of sd:Feature: sd:DereferencesURIs, sd:UnionDefaultGraph,
+ * sd:RequiresDataset, sd:EmptyGraphs, and sd:BasicFederatedQuery.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Feature">Feature</a>
+ */
+ public static final URI Feature;
+
+ /**
+ * feature
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#feature}.
+ * <p>
+ * Relates an instance of sd:Service with a resource representing a
+ * supported feature.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#feature">feature</a>
+ */
+ public static final URI feature;
+
+ /**
+ * Function
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Function}.
+ * <p>
+ * An instance of sd:Function represents a function that may be used in a
+ * SPARQL SELECT expression or a FILTER, HAVING, GROUP BY, ORDER BY, or
+ * BIND clause.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Function">Function</a>
+ */
+ public static final URI Function;
+
+ /**
+ * graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#graph}.
+ * <p>
+ * Relates a named graph to its graph description.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#graph">graph</a>
+ */
+ public static final URI graph;
+
+ /**
+ * Graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Graph}.
+ * <p>
+ * An instance of sd:Graph represents the description of an RDF graph.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Graph">Graph</a>
+ */
+ public static final URI Graph;
+
+ /**
+ * Graph Collection
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#GraphCollection}.
+ * <p>
+ * An instance of sd:GraphCollection represents a collection of zero or
+ * more named graph descriptions. Each named graph description belonging
+ * to an sd:GraphCollection MUST be linked with the sd:namedGraph
+ * predicate.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#GraphCollection">GraphCollection</a>
+ */
+ public static final URI GraphCollection;
+
+ /**
+ * input format
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#inputFormat}.
+ * <p>
+ * Relates an instance of sd:Service to a format that is supported for
+ * parsing RDF input; for example, via a SPARQL 1.1 Update LOAD
+ * statement, or when URIs are dereferenced in FROM/FROM
+ * NAMED/USING/USING NAMED clauses.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#inputFormat">inputFormat</a>
+ */
+ public static final URI inputFormat;
+
+ /**
+ * Language
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Language}.
+ * <p>
+ * An instance of sd:Language represents one of the SPARQL languages,
+ * including specific configurations providing particular features or
+ * extensions. This document defines three instances of sd:Language:
+ * sd:SPARQL10Query, sd:SPARQL11Query, and sd:SPARQL11Update.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Language">Language</a>
+ */
+ public static final URI Language;
+
+ /**
+ * language extension
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#languageExtension}.
+ * <p>
+ * Relates an instance of sd:Service to a resource representing an
+ * implemented extension to the SPARQL Query or Update language.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#languageExtension">languageExtension</a>
+ */
+ public static final URI languageExtension;
+
+ /**
+ * name
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#name}.
+ * <p>
+ * Relates a named graph to the name by which it may be referenced in a
+ * FROM/FROM NAMED clause. The object of the sd:name property is an IRI.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#name">name</a>
+ */
+ public static final URI name;
+
+ /**
+ * named graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#namedGraph}.
+ * <p>
+ * Relates an instance of sd:GraphCollection (or its subclass sd:Dataset)
+ * to the description of one of its named graphs. The description of such
+ * a named graph MUST include the sd:name property and MAY include the
+ * sd:graph property.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#namedGraph">namedGraph</a>
+ */
+ public static final URI namedGraph;
+
+ /**
+ * Named Graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#NamedGraph}.
+ * <p>
+ * An instance of sd:NamedGraph represents a named graph having a name
+ * (via sd:name) and an optional graph description (via sd:graph).
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#NamedGraph">NamedGraph</a>
+ */
+ public static final URI NamedGraph;
+
+ /**
+ * property feature
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#propertyFeature}.
+ * <p>
+ * Relates an instance of sd:Service to a resource representing an
+ * implemented feature that extends the SPARQL Query or Update language
+ * and that is accessed by using the named property.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#propertyFeature">propertyFeature</a>
+ */
+ public static final URI propertyFeature;
+
+ /**
+ * Requires Dataset
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#RequiresDataset}.
+ * <p>
+ * sd:RequiresDataset, when used as the object of the sd:feature
+ * property, indicates that the SPARQL service requires an explicit
+ * dataset declaration (based on either FROM/FROM NAMED clauses in a
+ * query, USING/USING NAMED clauses in an update, or the appropriate
+ * SPARQL Protocol parameters).
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#RequiresDataset">RequiresDataset</a>
+ */
+ public static final URI RequiresDataset;
+
+ /**
+ * result format
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#resultFormat}.
+ * <p>
+ * Relates an instance of sd:Service to a format that is supported for
+ * serializing query results.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#resultFormat">resultFormat</a>
+ */
+ public static final URI resultFormat;
+
+ /**
+ * Service
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#Service}.
+ * <p>
+ * An instance of sd:Service represents a SPARQL service made available
+ * via the SPARQL Protocol.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#Service">Service</a>
+ */
+ public static final URI Service;
+
+ /**
+ * SPARQL 1.0 Query
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#SPARQL10Query}.
+ * <p>
+ * sd:SPARQL10Query is an sd:Language representing the SPARQL 1.0 Query
+ * language.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#SPARQL10Query">SPARQL10Query</a>
+ */
+ public static final URI SPARQL10Query;
+
+ /**
+ * SPARQL 1.1 Query
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#SPARQL11Query}.
+ * <p>
+ * sd:SPARQL11Query is an sd:Language representing the SPARQL 1.1 Query
+ * language.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#SPARQL11Query">SPARQL11Query</a>
+ */
+ public static final URI SPARQL11Query;
+
+ /**
+ * SPARQL 1.1 Update
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#SPARQL11Update}.
+ * <p>
+ * sd:SPARQLUpdate is an sd:Language representing the SPARQL 1.1 Update
+ * language.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#SPARQL11Update">SPARQL11Update</a>
+ */
+ public static final URI SPARQL11Update;
+
+ /**
+ * supported entailment profile
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#supportedEntailmentProfile}.
+ * <p>
+ * Relates a named graph description with a resource representing a
+ * supported profile of the entailment regime (as declared by
+ * sd:entailmentRegime) used for basic graph pattern matching over that
+ * graph.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#supportedEntailmentProfile">supportedEntailmentProfile</a>
+ */
+ public static final URI supportedEntailmentProfile;
+
+ /**
+ * supported language
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#supportedLanguage}.
+ * <p>
+ * Relates an instance of sd:Service to a SPARQL language (e.g. Query and
+ * Update) that it implements.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#supportedLanguage">supportedLanguage</a>
+ */
+ public static final URI supportedLanguage;
+
+ /**
+ * Union Default Graph
+ * <p>
+ * {@code http://www.w3.org/ns/sparql-service-description#UnionDefaultGraph}.
+ * <p>
+ * sd:UnionDefaultGraph, when used as the object of the sd:feature
+ * property, indicates that the default graph of the dataset used during
+ * query and update evaluation (when an explicit dataset is not
+ * specified) is comprised of the union of all the named graphs in that
+ * dataset.
+ *
+ * @see <a href="http://www.w3.org/ns/sparql-service-description#UnionDefaultGraph">UnionDefaultGraph</a>
+ */
+ public static final URI UnionDefaultGraph;
+
+ static {
+ ValueFactory factory = ValueFactoryImpl.getInstance();
+
+ Aggregate = factory.createURI(SSD.NAMESPACE, "Aggregate");
+ availableGraphs = factory.createURI(SSD.NAMESPACE, "availableGraphs");
+ BasicFederatedQuery = factory.createURI(SSD.NAMESPACE, "BasicFederatedQuery");
+ Dataset = factory.createURI(SSD.NAMESPACE, "Dataset");
+ defaultDataset = factory.createURI(SSD.NAMESPACE, "defaultDataset");
+ defaultEntailmentRegime = factory.createURI(SSD.NAMESPACE, "defaultEntailmentRegime");
+ defaultGraph = factory.createURI(SSD.NAMESPACE, "defaultGraph");
+ defaultSupportedEntailmentProfile = factory.createURI(SSD.NAMESPACE, "defaultSupportedEntailmentProfile");
+ DereferencesURIs = factory.createURI(SSD.NAMESPACE, "DereferencesURIs");
+ EmptyGraphs = factory.createURI(SSD.NAMESPACE, "EmptyGraphs");
+ endpoint = factory.createURI(SSD.NAMESPACE, "endpoint");
+ EntailmentProfile = factory.createURI(SSD.NAMESPACE, "EntailmentProfile");
+ EntailmentRegime = factory.createURI(SSD.NAMESPACE, "EntailmentRegime");
+ entailmentRegime = factory.createURI(SSD.NAMESPACE, "entailmentRegime");
+ extensionAggregate = factory.createURI(SSD.NAMESPACE, "extensionAggregate");
+ extensionFunction = factory.createURI(SSD.NAMESPACE, "extensionFunction");
+ Feature = factory.createURI(SSD.NAMESPACE, "Feature");
+ feature = factory.createURI(SSD.NAMESPACE, "feature");
+ Function = factory.createURI(SSD.NAMESPACE, "Function");
+ graph = factory.createURI(SSD.NAMESPACE, "graph");
+ Graph = factory.createURI(SSD.NAMESPACE, "Graph");
+ GraphCollection = factory.createURI(SSD.NAMESPACE, "GraphCollection");
+ inputFormat = factory.createURI(SSD.NAMESPACE, "inputFormat");
+ Language = factory.createURI(SSD.NAMESPACE, "Language");
+ languageExtension = factory.createURI(SSD.NAMESPACE, "languageExtension");
+ name = factory.createURI(SSD.NAMESPACE, "name");
+ namedGraph = factory.createURI(SSD.NAMESPACE, "namedGraph");
+ NamedGraph = factory.createURI(SSD.NAMESPACE, "NamedGraph");
+ propertyFeature = factory.createURI(SSD.NAMESPACE, "propertyFeature");
+ RequiresDataset = factory.createURI(SSD.NAMESPACE, "RequiresDataset");
+ resultFormat = factory.createURI(SSD.NAMESPACE, "resultFormat");
+ Service = factory.createURI(SSD.NAMESPACE, "Service");
+ SPARQL10Query = factory.createURI(SSD.NAMESPACE, "SPARQL10Query");
+ SPARQL11Query = factory.createURI(SSD.NAMESPACE, "SPARQL11Query");
+ SPARQL11Update = factory.createURI(SSD.NAMESPACE, "SPARQL11Update");
+ supportedEntailmentProfile = factory.createURI(SSD.NAMESPACE, "supportedEntailmentProfile");
+ supportedLanguage = factory.createURI(SSD.NAMESPACE, "supportedLanguage");
+ UnionDefaultGraph = factory.createURI(SSD.NAMESPACE, "UnionDefaultGraph");
+ }
+
+ private SSD() {
+ //static access only
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/718c304b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/webservices/LdfWebService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/webservices/LdfWebService.java b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/webservices/LdfWebService.java
index 37b554c..5a838c0 100644
--- a/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/webservices/LdfWebService.java
+++ b/platform/marmotta-ldf/src/main/java/org/apache/marmotta/platform/ldf/webservices/LdfWebService.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.apache.marmotta.platform.ldf.webservices;
import org.apache.commons.lang3.StringUtils;
@@ -15,8 +32,7 @@ import org.openrdf.rio.Rio;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.StreamingOutput;
+import javax.ws.rs.core.*;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
@@ -46,24 +62,26 @@ public class LdfWebService {
private static final String UUID_PATTERN = "{uuid:[^#?]+}";
@GET
- public Response getFragment(@QueryParam("subject") @DefaultValue("") String subject,
- @QueryParam("predicate") @DefaultValue("") String predicate,
- @QueryParam("object") @DefaultValue("") String object,
- @QueryParam("page") @DefaultValue("1") String page,
- @HeaderParam("Accept") String accept) {
- return getFragment(subject, predicate, object, null, Integer.parseInt(page), accept);
+ public Response getFragment(@QueryParam("subject") @DefaultValue("") final String subject,
+ @QueryParam("predicate") @DefaultValue("") final String predicate,
+ @QueryParam("object") @DefaultValue("") final String object,
+ @QueryParam("page") @DefaultValue("1") final String page,
+ @HeaderParam("Accept") final String accept,
+ @Context final UriInfo uriInfo) {
+ return getFragment(subject, predicate, object, null, Integer.parseInt(page), accept, uriInfo);
}
@GET
@Path(UUID_PATTERN)
- public Response getFragment(@QueryParam("subject") @DefaultValue("") String subject,
- @QueryParam("predicate") @DefaultValue("") String predicate,
- @QueryParam("object") @DefaultValue("") String object,
- @QueryParam("page") @DefaultValue("1") String page,
- @PathParam("uuid") String uuid,
- @HeaderParam("Accept") String accept) {
+ public Response getFragment(@QueryParam("subject") @DefaultValue("") final String subject,
+ @QueryParam("predicate") @DefaultValue("") final String predicate,
+ @QueryParam("object") @DefaultValue("") final String object,
+ @QueryParam("page") @DefaultValue("1") final String page,
+ @PathParam("uuid") final String uuid,
+ @HeaderParam("Accept") final String accept,
+ @Context final UriInfo uriInfo) {
final String context = buildContextUri(uuid);
- return getFragment(subject, predicate, object, context, Integer.parseInt(page), accept);
+ return getFragment(subject, predicate, object, context, Integer.parseInt(page), accept, uriInfo);
}
private Response getFragment(final String subject,
@@ -71,11 +89,12 @@ public class LdfWebService {
final String object,
final String context,
final int page,
- final String accept) {
+ final String accept,
+ final UriInfo uriInfo) {
final Model fragment;
try {
- fragment = ldfService.getFragment(subject, predicate, object, context, page);
+ fragment = ldfService.getFragment(subject, predicate, object, context, page, uriInfo.getRequestUri());
} catch (RepositoryException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
} catch (IllegalArgumentException e) {