You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ch...@apache.org on 2012/11/28 17:56:47 UTC

svn commit: r1414809 - in /jena/Scratch/Eyeball/trunk/src: main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java

Author: chrisdollin
Date: Wed Nov 28 16:56:46 2012
New Revision: 1414809

URL: http://svn.apache.org/viewvc?rev=1414809&view=rev
Log:
Add the set of results from a prohibit that fails to the report model.

Modified:
    jena/Scratch/Eyeball/trunk/src/main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java
    jena/Scratch/Eyeball/trunk/src/test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java

Modified: jena/Scratch/Eyeball/trunk/src/main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java
URL: http://svn.apache.org/viewvc/jena/Scratch/Eyeball/trunk/src/main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java?rev=1414809&r1=1414808&r2=1414809&view=diff
==============================================================================
--- jena/Scratch/Eyeball/trunk/src/main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java (original)
+++ jena/Scratch/Eyeball/trunk/src/main/java/com/hp/hpl/jena/eyeball/inspectors/SparqlDrivenInspector.java Wed Nov 28 16:56:46 2012
@@ -21,8 +21,10 @@ package com.hp.hpl.jena.eyeball.inspecto
 import java.util.*;
 
 import com.hp.hpl.jena.eyeball.Report;
+import com.hp.hpl.jena.eyeball.ReportItem;
 import com.hp.hpl.jena.eyeball.util.FileInsertion;
 import com.hp.hpl.jena.eyeball.vocabulary.*;
+import com.hp.hpl.jena.graph.Node;
 import com.hp.hpl.jena.ontology.OntModel;
 import com.hp.hpl.jena.query.*;
 import com.hp.hpl.jena.rdf.model.*;
@@ -85,11 +87,13 @@ public class SparqlDrivenInspector exten
     protected final List<KV> allRequired = new ArrayList<KV>();
     
     protected final List<KV> allProhibited = new ArrayList<KV>();
-    
+
+	static final Property selected = ResourceFactory.createProperty( EYE.getURI() + "selected" );
+	
     public void begin( Report r, OntModel assume )
         {
-        r.declareProperty( EYE.sparqlRequireFailed );
-        r.declareProperty( EYE.sparqlProhibitFailed );
+        r.declareOrder( EYE.sparqlRequireFailed, selected );
+        r.declareOrder( EYE.sparqlProhibitFailed, selected );
         }
 
     public void inspectModel( Report r, OntModel m )
@@ -103,19 +107,57 @@ public class SparqlDrivenInspector exten
         for (int i = 0; i < demands.size(); i += 1)
             {
             KV demand = demands.get( i );
-            if (hasSolutions( demand.query, m ) != present)
-                r.createItem().addMainProperty( problem, demand.message );
+            ResultSet results = solutions( demand.query, m );
+            if (results.hasNext() != present) reportSparqlReport( r, m, problem, demand, results );
             }
         }
 
-    private boolean hasSolutions( String queryTemplate, OntModel m )
+	public void reportSparqlReport(Report r, OntModel m, Property problem, KV demand, ResultSet results) {
+		List<String> varNames = results.getResultVars();
+		ReportItem item = r.createItem();
+		item.addMainProperty( problem, demand.message );
+		while (results.hasNext()) 
+			item.addProperty( selected, stringForSelection( varNames, m, results.next() ) );
+	}
+
+    private String stringForSelection( List<String> varNames, OntModel m, QuerySolution s ) {
+    	StringBuilder sb = new StringBuilder();
+    	String comma = "";
+		for (String name: varNames) {
+			sb.append( comma ).append( name ).append( " = " ).append( nicely( m, s.get( name ) ) );
+			comma = ", ";
+		}
+		return sb.toString();
+	}
+
+    // TODO copied from ExperimentalTextRenderer, should be some useful sharing
+    private String nicely( OntModel m, RDFNode p )
+        {
+        Node node = p.asNode();
+        if (node.isLiteral() && integer( node.getLiteralDatatypeURI() )) return node.getLiteralLexicalForm();
+        if (node.isBlank()) return niceBnode( node );
+        return node.toString( m, true);
+        }
+    
+    private boolean integer( String URI )
+    	{ return URI != null && URI.matches( ".*int(|eger)" ); }
+    
+    private Map<Node, String> bnodes = new HashMap<Node, String>();
+    
+    private int bnodeCounter = 1000;
+    
+    private String niceBnode( Node node )
+        {
+        String label = bnodes.get( node );
+        if (label == null) bnodes.put( node, label = "_:b" + ++bnodeCounter );
+        return label;
+        }
+
+	private ResultSet solutions( String queryTemplate, OntModel m )
         {
         Query q = QueryFactory.create( getFileInsertion().insert( queryTemplate ) );
         QueryExecution qe = QueryExecutionFactory.create( q, m.getBaseModel() );
-        ResultSet results = qe.execSelect();
-        boolean result = results.hasNext();
-        qe.close();
-        return result;
+        return qe.execSelect();
         }
     
     /**

Modified: jena/Scratch/Eyeball/trunk/src/test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java
URL: http://svn.apache.org/viewvc/jena/Scratch/Eyeball/trunk/src/test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java?rev=1414809&r1=1414808&r2=1414809&view=diff
==============================================================================
--- jena/Scratch/Eyeball/trunk/src/test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java (original)
+++ jena/Scratch/Eyeball/trunk/src/test/java/com/hp/hpl/jena/eyeball/inspectors/test/TestSparqlDrivenInspector.java Wed Nov 28 16:56:46 2012
@@ -46,7 +46,7 @@ import com.hp.hpl.jena.util.FileManager;
         SparqlDrivenInspector s = new SparqlDrivenInspector( root );
         s.begin( r, ontModel() );
         List<Property> predicates = r.getPredicateRegister().getRegisteredPredicates();
-        assertEquals( eyeResourceSet( "sparqlRequireFailed sparqlProhibitFailed" ), new HashSet<Property>( predicates ) );
+        assertEquals( eyeResourceSet( "selected sparqlRequireFailed sparqlProhibitFailed" ), new HashSet<Property>( predicates ) );
         }
     
     @Test public void testReportsSPOViolation()
@@ -92,7 +92,7 @@ import com.hp.hpl.jena.util.FileManager;
         SparqlDrivenInspector s = new SparqlDrivenInspector( root );
         s.inspectModel( r, ontModel( "my count 17" ) );
         String expect =
-            "[eye:mainProperty eye:sparqlProhibitFailed & eye:sparqlProhibitFailed '<S>']"
+            "[eye:mainProperty eye:sparqlProhibitFailed & eye:selected 's = eh:/my, p = eh:/count, o = 17' & eye:sparqlProhibitFailed '<S>']"
             .replaceAll(  "<S>", sparql )
             ;
         assertIsoModels( "should report prohibition violation", itemModel( expect ), r.model() );
@@ -106,7 +106,7 @@ import com.hp.hpl.jena.util.FileManager;
         SparqlDrivenInspector s = new SparqlDrivenInspector( root );
         s.inspectModel( r, ontModel( "my count 17" ) );
         String expect =
-            "[eye:mainProperty eye:sparqlProhibitFailed & eye:sparqlProhibitFailed 'SPOO']"
+            "[eye:mainProperty eye:sparqlProhibitFailed & eye:sparqlProhibitFailed 'SPOO' & eye:selected 's = eh:/my, p = eh:/count, o = 17']"
             .replaceAll(  "<S>", sparql )
             ;
         assertIsoModels( "should report prohibition violation", itemModel( expect ), r.model() );
@@ -120,7 +120,7 @@ import com.hp.hpl.jena.util.FileManager;
         SparqlDrivenInspector s = new InsertingInspector( root, "NAME", sparql );
         s.inspectModel( r, ontModel( "my count 17" ) );
         String expect =
-            "[eye:mainProperty eye:sparqlProhibitFailed & eye:sparqlProhibitFailed '@\"NAME\"']";
+            "[eye:mainProperty eye:sparqlProhibitFailed & eye:selected 's = eh:/my, p = eh:/count, o = 17' & eye:sparqlProhibitFailed '@\"NAME\"']";
         assertIsoModels( "should report prohibition violation", itemModel( expect ), r.model() );        
         }