package exp.cornercases; import org.aksw.jena_sparql_api.views.SqlExprOptimizer; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.util.ExprUtils; import org.junit.Test; public class OptimizerTests { /** * This test case was created for the following sparqlify config: * * Problems were, that equals-concat returned non-optimal results, and * the satisfiability check would not detect E_LogicalAnd(E_Equals(?x = ?y), false) * * Create View view_way_to_nodes As Construct { ?w lgdo:hasNodes ?wn . } With ?w = spy:uri(concat('http://linkedgeodata.org/resource/way/', ?way_id)) ?wn = spy:uri(concat('http://linkedgeodata.org/resource/waynodelist/', ?way_id, 0)) From way_nodes; Create View view_way_nodes_list_nil_test As Construct { ?x rdf:first ?y . } With ?x = spy:uri(concat('http://linkedgeodata.org/resource/waynodelist/', ?way_id, ?first_sequence_id)) ?y = spy:uri(concat('http://linkedgeodata.org/resource/node/', ?first_node_id)) From [[SELECT * FROM lgd_way_nodes WHERE rest_sequence_id IS NULL]]; * */ @Test public void equalsConcat() { Expr expr = ExprUtils.parse("<http://aksw.org/sparqlify/rdfTerm>('1'^^xsd:decimal, concat('http://linkedgeodata.org/resource/waynodelist/', ?way_id, '0'), '', '') = <http://aksw.org/sparqlify/rdfTerm>('1'^^xsd:decimal, concat('http://linkedgeodata.org/resource/way/', ?a_2_way_id), '', '')"); Expr optimized = SqlExprOptimizer.optimizeMM(expr); System.out.println(optimized); } //<http://aksw.org/sparqlify/rdfTerm>("1"^^xsd:decimal, concat("http://linkedgeodata.org/resource/waynodelist/", ?way_id, "0"), "", "") = <http://aksw.org/sparqlify/rdfTerm>("1"^^xsd:decimal, concat("http://linkedgeodata.org/resource/way/", ?a_2_way_id), "", "") ) }