Author: [email protected]
Date: Tue Nov 22 17:55:33 2011
New Revision: 1752
Log:
Added initial support for SPARQL DESCRIBE and CONSTRUCT queries, both in the
API and in the Shell.
Added:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Triple.java
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/TripleSet.java
Modified:
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/Activator.java
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/SemanticQueryCommand.java
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Model.java
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/RowSet.java
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/impl/RDF2GOSemanticServiceImpl.java
Modified:
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/Activator.java
==============================================================================
---
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/Activator.java
(original)
+++
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/Activator.java
Tue Nov 22 17:55:33 2011
@@ -31,7 +31,7 @@
throws Exception {
Properties props = new Properties();
props.put(CommandProcessor.COMMAND_SCOPE, "semantic");
- props.put(CommandProcessor.COMMAND_FUNCTION, new String[] { "query",
"add" });
+ props.put(CommandProcessor.COMMAND_FUNCTION, new String[] { "query",
"ask", "add" });
manager.add(createComponent()
.setInterface(Object.class.getName(), props)
.setImplementation(SemanticQueryCommand.class)
Modified:
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/SemanticQueryCommand.java
==============================================================================
---
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/SemanticQueryCommand.java
(original)
+++
trunk/amdatu-semanticweb/semantic-shell/src/main/java/org/amdatu/semantic/shell/SemanticQueryCommand.java
Tue Nov 22 17:55:33 2011
@@ -21,6 +21,8 @@
import org.amdatu.semantic.SemanticService;
import org.amdatu.semantic.SemanticService.Reader;
import org.amdatu.semantic.SemanticService.Updater;
+import org.amdatu.semantic.Triple;
+import org.amdatu.semantic.TripleSet;
/**
* TODO print results table-style
@@ -33,10 +35,10 @@
System.out.println("Usage:\n query \"SELECT ?first_name WHERE { ?a
<http://www.w3.org/2000/10/swap/pim/contact#firstName> ?first_name }\"");
}
- public void query(final String query) throws Exception {
+ public void query(final String query) throws Exception {
m_service.read(new Reader<Void>() {
public Void read(Model model) {
- RowSet<Row> result = model.select(query.toString());
+ RowSet<Row> result = model.select(query);
for (Row row : result) {
for (String variable : result.getVariables()) {
System.out.println(variable + ": " +
row.get(variable));
@@ -47,6 +49,40 @@
}).get();
}
+ public void describe(final String query) throws Exception {
+ m_service.read(new Reader<Void>() {
+ public Void read(Model model) {
+ TripleSet<Triple> result = model.describe(query);
+ for (Triple triple : result) {
+ System.out.println(triple.getSubject() + " " +
triple.getPredicate() + " " + triple.getObject());
+ }
+ return null;
+ }
+ }).get();
+ }
+
+ public void construct(final String query) throws Exception {
+ m_service.read(new Reader<Void>() {
+ public Void read(Model model) {
+ TripleSet<Triple> result = model.construct(query);
+ for (Triple triple : result) {
+ System.out.println(triple.getSubject() + " " +
triple.getPredicate() + " " + triple.getObject());
+ }
+ return null;
+ }
+ }).get();
+ }
+
+ public void ask(final String query) throws Exception {
+ m_service.read(new Reader<Void>() {
+ public Void read(Model model) throws Exception {
+ boolean result = model.ask(query);
+ System.out.println("Result: " + result);
+ return null;
+ }
+ }).get();
+ }
+
public void add(final String subject, final String predicate, final String
object) throws Exception {
m_service.update(new Updater<Void>() {
public Void update(Model model) {
Modified:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Model.java
==============================================================================
---
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Model.java
(original)
+++
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Model.java
Tue Nov 22 17:55:33 2011
@@ -20,16 +20,26 @@
*/
public interface Model {
/**
- * Executes the given Sparql query on the model, and returns the results
as a iterable {@link RowSet}.
+ * Executes the given SPARQL SELECT query on the model, and returns the
results as an iterable {@link RowSet}.
*/
public RowSet<Row> select(String query);
/**
- * Executes the Sparql query on the model, and return <code>true</code> if
at least on row is returned.
+ * Executes the SPARQL ASK query on the model, and return
<code>true</code> if at least one row is returned.
*/
public boolean ask(String query);
/**
+ * Executes the SPARQL DESCRIBE query on the model, and return the results
as an iterable {@link TripleSet}.
+ */
+ public TripleSet<Triple> describe(String query);
+
+ /**
+ * Executes the SPARQL CONSTRUCT query on the model, and return the
results as an iterable {@link TripleSet}.
+ */
+ public TripleSet<Triple> construct(String query);
+
+ /**
* Creates a new triple in the triple store. We only use string variables,
but follow the same
* conventions that Sparql uses:
* <ul>
Modified:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/RowSet.java
==============================================================================
---
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/RowSet.java
(original)
+++
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/RowSet.java
Tue Nov 22 17:55:33 2011
@@ -22,7 +22,7 @@
*
* @param <T> The exact type of {@link Row} that will be iterated over.
*/
-public interface RowSet<T extends Row> extends Iterable<T>{
+public interface RowSet<T extends Row> extends Iterable<T> {
/**
* Gets a list of all variable names used in the query.
*/
Added:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Triple.java
==============================================================================
--- (empty file)
+++
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/Triple.java
Tue Nov 22 17:55:33 2011
@@ -0,0 +1,10 @@
+package org.amdatu.semantic;
+
+/**
+ * Representation of a triple.
+ */
+public interface Triple {
+ public String getSubject();
+ public String getPredicate();
+ public String getObject();
+}
Added:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/TripleSet.java
==============================================================================
--- (empty file)
+++
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/TripleSet.java
Tue Nov 22 17:55:33 2011
@@ -0,0 +1,4 @@
+package org.amdatu.semantic;
+
+public interface TripleSet<T extends Triple> extends Iterable<T> {
+}
Modified:
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/impl/RDF2GOSemanticServiceImpl.java
==============================================================================
---
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/impl/RDF2GOSemanticServiceImpl.java
(original)
+++
trunk/amdatu-semanticweb/semanticservice-rdf2go/src/main/java/org/amdatu/semantic/impl/RDF2GOSemanticServiceImpl.java
Tue Nov 22 17:55:33 2011
@@ -25,6 +25,13 @@
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.amdatu.semantic.Model;
+import org.amdatu.semantic.Row;
+import org.amdatu.semantic.RowSet;
+import org.amdatu.semantic.SemanticService;
+import org.amdatu.semantic.Triple;
+import org.amdatu.semantic.TripleSet;
+import org.ontoware.aifbcommons.collection.ClosableIterable;
import org.ontoware.aifbcommons.collection.ClosableIterator;
import org.ontoware.rdf2go.model.ModelSet;
import org.ontoware.rdf2go.model.QueryResultTable;
@@ -33,11 +40,6 @@
import org.ontoware.rdf2go.model.node.Node;
import org.ontoware.rdf2go.model.node.URI;
-import org.amdatu.semantic.Model;
-import org.amdatu.semantic.Row;
-import org.amdatu.semantic.RowSet;
-import org.amdatu.semantic.SemanticService;
-
public class RDF2GOSemanticServiceImpl implements SemanticService {
private volatile ModelSet m_modelSet;
@@ -121,6 +123,16 @@
checkState(false);
return m_rdf2goModel.sparqlAsk(query);
}
+
+ public TripleSet<Triple> describe(String query) {
+ checkState(false);
+ return new
RDF2GOBasedTripleSet(m_rdf2goModel.sparqlDescribe(query));
+ }
+
+ public TripleSet<Triple> construct(String query) {
+ checkState(false);
+ return new
RDF2GOBasedTripleSet(m_rdf2goModel.sparqlConstruct(query));
+ }
public void add(String subject, String predicate, String object) {
checkState(true);
@@ -174,6 +186,58 @@
}
}
+ private static class RDF2GOBasedTripleSet implements TripleSet<Triple> {
+ private final ClosableIterable<Statement> m_result;
+ public RDF2GOBasedTripleSet(ClosableIterable<Statement> result)
{
+ m_result = result;
+ }
+
+ public Iterator<Triple> iterator() {
+ return new
RDF2GOBasedTripleIterator(m_result.iterator());
+ }
+ }
+
+ private static class RDF2GOBasedTripleIterator implements Iterator<Triple>
{
+ private final ClosableIterator<Statement> m_iterator;
+
+ public RDF2GOBasedTripleIterator(ClosableIterator<Statement>
iterator) {
+ m_iterator = iterator;
+ }
+
+ public boolean hasNext() {
+ return m_iterator.hasNext();
+ }
+
+ public Triple next() {
+ return new RDF2GOBasedTriple(m_iterator.next());
+ }
+
+ public void remove() {
+ // TODO we probably do not want to allow this here
+ m_iterator.remove();
+ }
+ }
+
+ private static class RDF2GOBasedTriple implements Triple {
+ private final Statement m_statement;
+
+ public RDF2GOBasedTriple(Statement statement) {
+ m_statement = statement;
+ }
+
+ public String getSubject() {
+ return m_statement.getSubject().toSPARQL();
+ }
+
+ public String getPredicate() {
+ return m_statement.getPredicate().toSPARQL();
+ }
+
+ public String getObject() {
+ return m_statement.getObject().toSPARQL();
+ }
+ }
+
private static class RDF2GOBasedRowSet implements RowSet<Row> {
private final QueryResultTable m_resultTable;
@@ -208,6 +272,7 @@
}
public void remove() {
+ // TODO we probably do not want to allow this here
m_rowIterator.remove();
}
}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits