You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2012/04/26 03:31:22 UTC
svn commit: r1330624 - in
/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client:
./ http/
Author: sallen
Date: Thu Apr 26 01:31:22 2012
New Revision: 1330624
URL: http://svn.apache.org/viewvc?rev=1330624&view=rev
Log:
jena-client - More updates.
Added:
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBase.java
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatementBase.java
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java
Removed:
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBuilder.java
Modified:
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatement.java
incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java
Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBase.java?rev=1330624&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBase.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryParameterizerBase.java Thu Apr 26 01:31:22 2012
@@ -0,0 +1,189 @@
+package org.apache.jena.client;
+
+import java.net.URL;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.apache.jena.iri.IRI;
+
+import com.hp.hpl.jena.datatypes.RDFDatatype;
+import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
+import com.hp.hpl.jena.datatypes.xsd.XSDDateTime;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.impl.LiteralLabel;
+import com.hp.hpl.jena.graph.impl.LiteralLabelFactory;
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.rdf.model.Literal;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.sparql.serializer.SerializationContext;
+import com.hp.hpl.jena.sparql.util.FmtUtils;
+import com.hp.hpl.jena.sparql.util.NodeFactory;
+
+/**
+ *
+ */
+// TODO we're currently taking the approach of just creating Nodes. We don't prevent users from shooting themselves in the foot by creating invalid nodes...
+abstract class QueryParameterizerBase implements QueryParameterizer
+{
+ protected final Map<String,Node> params = new HashMap<String,Node>();
+ protected String[] rawStrings = new String[]{};
+
+ // TODO think about getting rid of the regex and use a true SPARQL parser, so we can understand quotes and comments
+ protected String buildFromString(String queryString, SerializationContext context)
+ {
+ if (null == context) context = new SerializationContext();
+
+ // Do the raw strings first
+ Object[] escapedStrings = new Object[rawStrings.length];
+ for (int i=0; i<rawStrings.length; i++)
+ {
+ escapedStrings[i] = FmtUtils.stringEsc(rawStrings[i]);
+ }
+ // TODO check the sparql injection implications of this
+ String toReturn = String.format(queryString, (Object[])rawStrings);
+
+ // Then do the regular parameters second
+ for (Map.Entry<String, Node> entry : params.entrySet())
+ {
+ // TODO Grabbed this from Rob's ParameterizedSparqlString class, doesn't limit itself to only variables (which is bad)...
+ Pattern p = Pattern.compile("([?$]" + entry.getKey() + ")([^\\w]|$)");
+ toReturn = p.matcher(toReturn).replaceAll(FmtUtils.stringForNode(entry.getValue(), context) + "$2");
+ }
+
+ return toReturn;
+ }
+
+ protected Query buildFromQuery(Query query)
+ {
+
+
+ return null;
+ }
+
+ @Override
+ public void clearParam(String var)
+ {
+ params.remove(var);
+ }
+
+ @Override
+ public void clearParams()
+ {
+ params.clear();
+ }
+
+ @Override
+ public void setParam(String var, Node node)
+ {
+ if (var == null) throw new IllegalArgumentException("var cannot be null");
+ if (var.startsWith("?") || var.startsWith("$")) var = var.substring(1);
+ if (node != null)
+ {
+ params.put(var, node);
+ }
+ else
+ {
+ clearParam(var);
+ }
+ }
+
+ @Override
+ public void setParam(String var, RDFNode node)
+ {
+ setParam(var, node.asNode());
+ }
+
+ @Override
+ public void setIri(String var, String iri)
+ {
+ setParam(var, Node.createURI(iri));
+ }
+
+ @Override
+ public void setIri(String var, IRI iri)
+ {
+ setIri(var, iri.toString());
+ }
+
+ @Override
+ public void setIri(String var, URL url)
+ {
+ setIri(var, url.toString());
+ }
+
+ @Override
+ public void setLiteral(String var, Literal lit)
+ {
+ setParam(var, lit);
+ }
+
+ @Override
+ public void setLiteral(String var, String value)
+ {
+ setParam(var, Node.createLiteral(value));
+ }
+
+ @Override
+ public void setLiteral(String var, String value, String lang)
+ {
+ setParam(var, NodeFactory.createLiteralNode(value, lang, null));
+ }
+
+ @Override
+ public void setLiteral(String var, String value, RDFDatatype datatype)
+ {
+ setParam(var, Node.createLiteral(value, datatype));
+ }
+
+ @Override
+ public void setLiteral(String var, boolean value)
+ {
+ setParam(var, Node.createLiteral(Boolean.toString(value), XSDDatatype.XSDboolean));
+ }
+
+ @Override
+ public void setLiteral(String var, int i)
+ {
+ setParam(var, Node.createLiteral(Integer.toString(i), XSDDatatype.XSDinteger));
+ }
+
+ @Override
+ public void setLiteral(String var, long l)
+ {
+ setParam(var, Node.createLiteral(Long.toString(l), XSDDatatype.XSDlong));
+ }
+
+ @Override
+ public void setLiteral(String var, float f)
+ {
+ setParam(var, Node.createLiteral(Float.toString(f), XSDDatatype.XSDfloat));
+ }
+
+ @Override
+ public void setLiteral(String var, double d)
+ {
+ setParam(var, Node.createLiteral(Double.toString(d), XSDDatatype.XSDdouble));
+ }
+
+ @Override
+ public void setLiteral(String var, Calendar dt)
+ {
+ Object value = new XSDDateTime(dt);
+ LiteralLabel ll = LiteralLabelFactory.create(value, "", XSDDatatype.XSDdateTime);
+ setParam(var, Node.createLiteral(ll));
+ }
+
+ @Override
+ public void clearRawStrings()
+ {
+ rawStrings = new String[]{};
+ }
+
+ @Override
+ public void setRawStrings(String... args)
+ {
+ rawStrings = args;
+ }
+}
Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatement.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatement.java?rev=1330624&r1=1330623&r2=1330624&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatement.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatement.java Thu Apr 26 01:31:22 2012
@@ -6,6 +6,7 @@ import java.util.concurrent.TimeUnit;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.Statement;
/**
@@ -45,6 +46,19 @@ public interface QueryStatement extends
Model execConstruct(Model model);
/**
+ * Execute a CONSTRUCT query, returning the results as an iterator of {@link Statement}. The
+ * statements are <b>NOT</b> added to the model passed as a context for creating the statements.
+ * <p/>
+ * <b>Caution:</b> This method may return duplicate Statements (which could be useful if you only
+ * need the results for stream processing, as it can avoid having to place the results in a Model).
+ *
+ * @param refModel the model context in which to create the statements; note that the statements are <b>NOT</b> added to the model
+ * @return An iterator of Triple objects (possibly containing duplicates) generated
+ * by applying the CONSTRUCT template of the query to the bindings in the WHERE clause.
+ */
+ Iterator<Statement> execConstructStatements(Model refModel);
+
+ /**
* Execute a CONSTRUCT query, returning the results as an iterator of {@link Triple}.
* <p/>
* <b>Caution:</b> This method may return duplicate Triples (which could be useful if you only
@@ -72,6 +86,30 @@ public interface QueryStatement extends
Model execDescribe(Model model);
/**
+ * Execute a DESCRIBE query, returning the results as an iterator of {@link Statement}. The
+ * statements are <b>NOT</b> added to the model passed as a context for creating the statements.
+ * <p/>
+ * <b>Caution:</b> This method may return duplicate Statements (which could be useful if you only
+ * need the results for stream processing, as it can avoid having to place the results in a Model).
+ *
+ * @param refModel the model context in which to create the statements; note that the statements are <b>NOT</b> added to the model
+ * @return An iterator of Statement objects (possibly containing duplicates) generated
+ * by executing the DESCRIBE query.
+ */
+ Iterator<Statement> execDescribeStatements(Model refModel);
+
+ /**
+ * Execute a DESCRIBE query, returning the results as an iterator of {@link Triple}.
+ * <p/>
+ * <b>Caution:</b> This method may return duplicate Triples (which could be useful if you only
+ * need the results for stream processing, as it can avoid having to place the results in a Model).
+ *
+ * @return An iterator of Triple objects (possibly containing duplicates) generated
+ * by executing the DESCRIBE query.
+ */
+ Iterator<Triple> execDescribeTriples();
+
+ /**
* Execute an ASK query.
* @return a <code>boolean</code> corresponding to the result of the ASK query
*/
Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatementBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatementBase.java?rev=1330624&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatementBase.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/QueryStatementBase.java Thu Apr 26 01:31:22 2012
@@ -0,0 +1,158 @@
+package org.apache.jena.client;
+
+import java.util.Iterator;
+import java.util.concurrent.TimeUnit;
+
+import org.openjena.atlas.iterator.Iter;
+import org.openjena.atlas.iterator.Transform;
+
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl;
+
+public abstract class QueryStatementBase extends QueryParameterizerBase implements QueryStatement
+{
+ private final Connection connection;
+ private long timeout1;
+ private long timeout2;
+
+ public QueryStatementBase(Connection connection)
+ {
+ this.connection = connection;
+ }
+
+ public abstract ResultSet doExecSelect();
+ public abstract Iterator<Triple> doExecConstructTriples();
+ public abstract Iterator<Triple> doExecDescribeTriples();
+ public abstract boolean doExecAsk();
+
+ @Override
+ public abstract void cancel();
+
+
+ @Override
+ public Connection getConnection()
+ {
+ return connection;
+ }
+
+ @Override
+ public ResultSet execSelect()
+ {
+ startTimer();
+ return doExecSelect();
+ }
+
+ @Override
+ public Model execConstruct()
+ {
+ return execConstruct(ModelFactory.createDefaultModel());
+ }
+
+ @Override
+ public Model execConstruct(Model model)
+ {
+ return model.add(new StmtIteratorImpl(execConstructStatements(model)));
+ }
+
+ @Override
+ public Iterator<Statement> execConstructStatements(final Model refModel)
+ {
+ return Iter.map(execConstructTriples(), new Transform<Triple,Statement>()
+ {
+ @Override
+ public Statement convert(Triple item)
+ {
+ return refModel.asStatement(item);
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Triple> execConstructTriples()
+ {
+ startTimer();
+ return doExecConstructTriples();
+ }
+
+ @Override
+ public Model execDescribe()
+ {
+ return execDescribe(ModelFactory.createDefaultModel());
+ }
+
+ @Override
+ public Model execDescribe(Model model)
+ {
+ return model.add(new StmtIteratorImpl(execDescribeStatements(model)));
+ }
+
+ @Override
+ public Iterator<Statement> execDescribeStatements(final Model refModel)
+ {
+ return Iter.map(execDescribeTriples(), new Transform<Triple,Statement>()
+ {
+ @Override
+ public Statement convert(Triple item)
+ {
+ return refModel.asStatement(item);
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Triple> execDescribeTriples()
+ {
+ startTimer();
+ return doExecDescribeTriples();
+ }
+
+ @Override
+ public boolean execAsk()
+ {
+ startTimer();
+ return doExecAsk();
+ }
+
+ @Override
+ public void setTimeout(long timeout)
+ {
+ setTimeout(timeout, TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ public void setTimeout(long timeout, TimeUnit timeoutUnits)
+ {
+ setTimeout(timeout, timeoutUnits, 0, TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ public void setTimeout(long timeout1, long timeout2)
+ {
+ setTimeout(timeout1, TimeUnit.MILLISECONDS, timeout2, TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ public void setTimeout(long timeout1, TimeUnit timeUnit1, long timeout2, TimeUnit timeUnit2)
+ {
+ timeout1 = asMillis(timeout1, timeUnit1);
+ timeout2 = asMillis(timeout2, timeUnit2);
+ }
+
+ protected void startTimer()
+ {
+ // TODO what are the semantics of the timeouts? Do they get reset each time we get a new result?
+ // Look at QueryExecutionBase to see how it's currently being done
+
+ //if (timeoutExpired) cancel();
+ }
+
+
+ private static long asMillis(long duration, TimeUnit timeUnit)
+ {
+ return (duration < 0 ) ? duration : timeUnit.toMillis(duration) ;
+ }
+}
Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java?rev=1330624&r1=1330623&r2=1330624&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java Thu Apr 26 01:31:22 2012
@@ -96,6 +96,20 @@ public class SparqlHttpConnection extend
}
+ @Override
+ public QueryStatement createQueryStatement(String queryString)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public QueryStatement createQueryStatement(Query query)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
@Override
public Service getServices()
@@ -237,18 +251,4 @@ public class SparqlHttpConnection extend
}
- @Override
- public QueryStatement createQueryStatement(String queryString)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public QueryStatement createQueryStatement(Query query)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
}
Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java?rev=1330624&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java Thu Apr 26 01:31:22 2012
@@ -0,0 +1,62 @@
+package org.apache.jena.client.http;
+
+import java.util.Iterator;
+
+import org.apache.jena.client.Connection;
+import org.apache.jena.client.QueryStatement;
+import org.apache.jena.client.QueryStatementBase;
+
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.query.ResultSet;
+
+class SparqlHttpQueryStatement extends QueryStatementBase implements QueryStatement
+{
+ private final SparqlHttpConnection connection;
+ private final String queryString;
+
+ SparqlHttpQueryStatement(String queryString, SparqlHttpConnection connection)
+ {
+ super(connection);
+ this.connection = connection;
+ this.queryString = queryString;
+ }
+
+ @Override
+ public ResultSet doExecSelect()
+ {
+ String sparql = buildFromString(queryString, null);
+
+
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Iterator<Triple> doExecConstructTriples()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Iterator<Triple> doExecDescribeTriples()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean doExecAsk()
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void cancel()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}