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

Reply via email to