You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/08/24 10:13:22 UTC

[13/50] jena git commit: Add test support in QueryTest for Construct Quad: 1) define new type of SPARQLResult for Dataset; 2) define new ResultsFormat of Trig for Dataset results;

Add test support in QueryTest for Construct Quad: 1) define new type of
SPARQLResult for Dataset; 2) define new ResultsFormat of Trig for
Dataset results; 

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/6b695c59
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/6b695c59
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/6b695c59

Branch: refs/heads/master
Commit: 6b695c59166a25a999840873bfb0af1c4198b202
Parents: 50a65c3
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 10 16:59:20 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 10 16:59:20 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/Query.java  |   3 +-
 .../jena/sparql/resultset/ResultsFormat.java    |  13 +++
 .../jena/sparql/resultset/SPARQLResult.java     |  33 +++++-
 .../org/apache/jena/sparql/syntax/Template.java |  11 +-
 .../org/apache/jena/sparql/junit/QueryTest.java | 117 ++++++++++++++-----
 .../org/apache/jena/sparql/junit/TestItem.java  |  45 ++++---
 6 files changed, 165 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/query/Query.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/Query.java b/jena-arq/src/main/java/org/apache/jena/query/Query.java
index 914e626..f0d6233 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/Query.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/Query.java
@@ -146,7 +146,8 @@ public class Query extends Prologue implements Cloneable, Printable
     public boolean isAskType()                  { return queryType == QueryTypeAsk ; }
 
     public boolean isUnknownType()              { return queryType == QueryTypeUnknown ; }
-
+    
+    public boolean isConstructQuad()            { return isConstructType() && constructTemplate.containsRealQuad() ; }
     // It was a mistake to extend Prologue ... but what is done is done.
     public Prologue getPrologue()               { return this ; }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
index 2a103cf..c23cfad 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
@@ -63,7 +63,9 @@ public class ResultsFormat extends Symbol
     static public ResultsFormat FMT_RDF_TTL      = new ResultsFormat(contentTypeTurtle) ;
     static public ResultsFormat FMT_RDF_TURTLE   = new ResultsFormat(contentTypeTurtle) ;
     static public ResultsFormat FMT_RDF_NT       = new ResultsFormat(contentTypeNTriples) ;
+    static public ResultsFormat FMT_TRIG         = new ResultsFormat(contentTypeTriG) ;
     static public ResultsFormat FMT_UNKNOWN      = new ResultsFormat("unknown") ;
+    
     // ---- Compatibility
     
     // Common names to symbol (used by arq.rset)
@@ -95,6 +97,8 @@ public class ResultsFormat extends Symbol
         names.put("graph",       FMT_RDF_TTL) ;
         names.put("nt",          FMT_RDF_NT) ;
         names.put("n-triples",   FMT_RDF_NT) ;
+        
+        names.put("trig",        FMT_TRIG) ;
 
     }
 
@@ -112,6 +116,11 @@ public class ResultsFormat extends Symbol
         return false ;
     }
     
+    public static boolean isDatasetSyntax(ResultsFormat fmt){
+    	if ( FMT_TRIG.equals(fmt) ) return true ;
+    	return false;
+    }
+    
     public static ResultsFormat guessSyntax(String url, ResultsFormat defaultFormat)
     {
         // -- XML
@@ -153,6 +162,10 @@ public class ResultsFormat extends Symbol
         if ( url.endsWith(".tsv") )
             return FMT_RS_TSV ;
         
+        // Trig for Dataset
+        if ( url.endsWith(".trig") )
+            return FMT_TRIG ;
+        
         return defaultFormat ;
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
index 1506e44..bbc5c55 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
@@ -18,12 +18,13 @@
 
 package org.apache.jena.sparql.resultset;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.ResultSet ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.binding.BindingMap ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.BindingMap;
 
 /**
  * The class "ResultSet" is reserved for the SELECT result format.
@@ -37,6 +38,7 @@ public class SPARQLResult
     private ResultSet resultSet = null ;
     private Boolean booleanResult = null ;
     private Model model = null ;
+    private Dataset dataset = null ;
     
     // Delayed choice of result type.
     protected SPARQLResult() {}
@@ -44,6 +46,7 @@ public class SPARQLResult
     public SPARQLResult(Model model)            { set(model) ; }
     public SPARQLResult(ResultSet resultSet)    { set(resultSet) ;}
     public SPARQLResult(boolean booleanResult)  { set(booleanResult) ; }
+    public SPARQLResult(Dataset dataset)        { set(dataset) ; }
     
     public boolean isResultSet()
     {
@@ -61,6 +64,13 @@ public class SPARQLResult
             throw new ResultSetException("Not set") ;
         return model != null ;
     }
+    
+    public boolean isDataset()
+    {
+        if ( ! hasBeenSet )
+            throw new ResultSetException("Not set") ;
+        return dataset != null ;
+    }
 
     public boolean isBoolean()
     {
@@ -96,6 +106,14 @@ public class SPARQLResult
         return model ;
     }
     
+    public Dataset getDataset() { 
+        if ( ! hasBeenSet )
+            throw new ResultSetException("Not set") ;
+        if ( ! isDataset() )
+            throw new ResultSetException("Not a dataset result") ;
+        return dataset ;
+    }
+    
     public boolean isHasBeenSet() { return hasBeenSet; }
     
     protected void set(ResultSet rs)
@@ -107,6 +125,9 @@ public class SPARQLResult
     protected void set(Model m)
     { model = m ; hasBeenSet = true ; }
     
+    protected void set(Dataset d)
+    { dataset = d ; hasBeenSet = true ; }
+    
     protected void set(boolean r)
     { set (new Boolean(r)) ; } 
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index 3955866..a6e74d8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.BasicPattern;
@@ -65,6 +64,16 @@ public class Template
 //    public void addTriplePath(int index, TriplePath path)
 //    { throw new ARQException("Triples-only collector") ; }
 
+    
+    public boolean containsRealQuad(){
+    	for(Quad quad : this.getQuads()){
+    		if ( ! Quad.defaultGraphNodeGenerated.equals( quad.getGraph())){
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    
     public BasicPattern getBGP()
     { 
     	if (this.bgp != null){

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
index 89844e1..519316f 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
@@ -18,35 +18,55 @@
 
 package org.apache.jena.sparql.junit;
 
-import java.io.IOException ;
-import java.io.PrintStream ;
-import java.io.PrintWriter ;
-import java.util.* ;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.riot.checker.CheckerLiterals ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.sparql.SystemARQ ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.QueryIterator ;
-import org.apache.jena.sparql.engine.ResultSetStream ;
-import org.apache.jena.sparql.engine.binding.Binding ;
-import org.apache.jena.sparql.engine.binding.BindingFactory ;
-import org.apache.jena.sparql.engine.binding.BindingMap ;
-import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper ;
-import org.apache.jena.sparql.expr.nodevalue.NodeFunctions ;
-import org.apache.jena.sparql.resultset.RDFOutput ;
-import org.apache.jena.sparql.resultset.ResultSetCompare ;
-import org.apache.jena.sparql.resultset.SPARQLResult ;
-import org.apache.jena.sparql.util.DatasetUtils ;
-import org.apache.jena.sparql.vocabulary.ResultSetGraphVocab ;
-import org.apache.jena.util.FileUtils ;
-import org.apache.jena.util.junit.TestUtils ;
-import org.apache.jena.vocabulary.RDF ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QueryExecutionFactory;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.query.ResultSetRewindable;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Property;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.rdf.model.StmtIterator;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.riot.checker.CheckerLiterals;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.SystemARQ;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.QueryIterator;
+import org.apache.jena.sparql.engine.ResultSetStream;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.engine.binding.BindingFactory;
+import org.apache.jena.sparql.engine.binding.BindingMap;
+import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper;
+import org.apache.jena.sparql.expr.nodevalue.NodeFunctions;
+import org.apache.jena.sparql.resultset.RDFOutput;
+import org.apache.jena.sparql.resultset.ResultSetCompare;
+import org.apache.jena.sparql.resultset.SPARQLResult;
+import org.apache.jena.sparql.util.DatasetUtils;
+import org.apache.jena.sparql.util.IsoMatcher;
+import org.apache.jena.sparql.vocabulary.ResultSetGraphVocab;
+import org.apache.jena.util.FileUtils;
+import org.apache.jena.util.junit.TestUtils;
+import org.apache.jena.vocabulary.RDF;
 
 public class QueryTest extends EarlTestCase
 {
@@ -348,8 +368,13 @@ public class QueryTest extends EarlTestCase
    void runTestConstruct(Query query, QueryExecution qe)
     {
         // Do the query!
-        Model resultsActual = qe.execConstruct() ;
-        compareGraphResults(resultsActual, query) ;
+	    if ( query.isConstructQuad() ){
+	    	Dataset resultActual = qe.execConstructDataset();
+	    	compareDatasetResults(resultActual, query) ;
+	    } else {
+	    	Model resultsActual = qe.execConstruct() ;
+	    	compareGraphResults(resultsActual, query) ;
+	    }
     }
    
    private void compareGraphResults(Model resultsActual, Query query)
@@ -373,6 +398,28 @@ public class QueryTest extends EarlTestCase
             }
         }
     }
+   
+   private void compareDatasetResults(Dataset resultsActual, Query query)
+   {
+        if ( results != null )
+        {
+            try {
+                if ( ! results.isDataset() )
+                    fail("Expected results are not a graph: "+testItem.getName()) ;
+                    
+                Dataset resultsExpected = results.getDataset() ;
+                if ( ! IsoMatcher.isomorphic( resultsExpected.asDatasetGraph(),resultsActual.asDatasetGraph() ) )
+                {
+                    printFailedDatasetTest(query, resultsExpected, resultsActual) ;
+                    fail("Results do not match: "+testItem.getName()) ;
+                }
+            } catch (Exception ex)
+            {
+                String typeName = (query.isConstructType()?"construct":"describe") ;
+                fail("Exception in result testing ("+typeName+"): "+ex) ;
+            }
+        }
+    }
     
     void runTestDescribe(Query query, QueryExecution qe)
     {
@@ -448,6 +495,16 @@ public class QueryTest extends EarlTestCase
         out.println() ;
     }
     
+    void printFailedDatasetTest(Query query, Dataset expected, Dataset results)
+    {
+    	System.out.println("=======================================") ;
+    	System.out.println("Failure: "+description()) ;
+    	RDFDataMgr.write(System.out, results, Lang.TRIG);
+    	System.out.println("---------------------------------------") ;
+    	RDFDataMgr.write(System.out, expected, Lang.TRIG);
+        System.out.println() ;
+    }
+    
     @Override
     public String toString()
     { 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java b/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
index b6bcf05..c6a4c40 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
@@ -18,25 +18,27 @@
 
 package org.apache.jena.sparql.junit ;
 
-import java.util.ArrayList ;
-import java.util.List ;
-
-import org.apache.jena.query.ResultSetFactory ;
-import org.apache.jena.query.Syntax ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.rdf.model.Resource ;
-import org.apache.jena.rdf.model.Statement ;
-import org.apache.jena.sparql.resultset.ResultsFormat ;
-import org.apache.jena.sparql.resultset.SPARQLResult ;
-import org.apache.jena.sparql.vocabulary.TestManifest ;
-import org.apache.jena.sparql.vocabulary.TestManifestX ;
-import org.apache.jena.sparql.vocabulary.VocabTestQuery ;
-import org.apache.jena.util.FileManager ;
-import org.apache.jena.util.iterator.ClosableIterator ;
-import org.apache.jena.util.junit.TestException ;
-import org.apache.jena.util.junit.TestUtils ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.sparql.resultset.ResultsFormat;
+import org.apache.jena.sparql.resultset.SPARQLResult;
+import org.apache.jena.sparql.vocabulary.TestManifest;
+import org.apache.jena.sparql.vocabulary.TestManifestX;
+import org.apache.jena.sparql.vocabulary.VocabTestQuery;
+import org.apache.jena.util.FileManager;
+import org.apache.jena.util.iterator.ClosableIterator;
+import org.apache.jena.util.junit.TestException;
+import org.apache.jena.util.junit.TestUtils;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.RDFS;
 
 /**
  * Wrapper class for individual test items. Assumes it is a query test item,
@@ -151,6 +153,11 @@ public class TestItem
             Model m = FileManager.get().loadModel(resultFile) ;
             return new SPARQLResult(m) ;
         }
+        
+        if ( ResultsFormat.isDatasetSyntax(format) ) {
+            Dataset d = RDFDataMgr.loadDataset(resultFile) ;
+            return new SPARQLResult(d) ;
+        }
 
         // Attempt to handle as a resulset or boolean result.s
         SPARQLResult x = ResultSetFactory.result(resultFile) ;