diff --git a/lib/align.jar b/lib/align.jar index 66121e2c98c9def27c5b33a9b1f72016337f5e1d..b11673b722d89c952078d9a064c6d1d9d79d65a8 100644 Binary files a/lib/align.jar and b/lib/align.jar differ diff --git a/lib/align.pom b/lib/align.pom index bf4766d9ce03e1be53f42df647d316d5c17f70bc..51d7841591d6a02a319f125b4a0e0bcb01c2e13f 100644 --- a/lib/align.pom +++ b/lib/align.pom @@ -17,7 +17,7 @@ <groupId>org.semanticweb.owl</groupId> <artifactId>align</artifactId> <version>4.6</version> - <!-- Rev 1970M 30/09/2014 --> + <!-- Rev 2002M 26/11/2014 --> <name>The Alignment API</name> <description>The Alignment API is an API for manipulating ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/alignsvc.jar b/lib/alignsvc.jar index 8d27f201b1a488d2a3e1662862e5223a71c3d317..89a38a3e3a1525e0af474a6d8c38a96295b8ed47 100644 Binary files a/lib/alignsvc.jar and b/lib/alignsvc.jar differ diff --git a/lib/alignsvc.pom b/lib/alignsvc.pom index ee44c82f6b52de4804626cdc3406b385243ccfa0..4c542c279eccb689a717c74eab6aff500fb03566 100644 --- a/lib/alignsvc.pom +++ b/lib/alignsvc.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo.align</groupId> <artifactId>alignsvc</artifactId> <version>4.6</version> - <!-- Rev 1970M 30/09/2014 --> + <!-- Rev 2002M 26/11/2014 --> <name>Alignment server</name> <description>A server for storing and sharing ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/ontowrap.jar b/lib/ontowrap.jar index 9743744fcbec5be588e54fe3465448415b1d73c9..c388eb0293e68cb45996cdea1a0ab031c21971b3 100644 Binary files a/lib/ontowrap.jar and b/lib/ontowrap.jar differ diff --git a/lib/ontowrap.pom b/lib/ontowrap.pom index e819f6291dc8ed809836d83bf7ac1d5c9d65ff59..5648f62ed7d4bc42d7e699db09f5687e6e064852 100644 --- a/lib/ontowrap.pom +++ b/lib/ontowrap.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo</groupId> <artifactId>ontowrap</artifactId> <version>4.6</version> - <!-- Rev 1970M 30/09/2014 --> + <!-- Rev 2002M 26/11/2014 --> <name>Ontology wrapping API</name> <description>An ontology wrapping API and library.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/procalign.jar b/lib/procalign.jar index 60843d890039c13d56d24baa5a6c6e80ab49ee07..d6fadfd5321032db55a8c1e66298e3d57df06003 100644 Binary files a/lib/procalign.jar and b/lib/procalign.jar differ diff --git a/lib/procalign.pom b/lib/procalign.pom index 92c9b3bc77b156c525d48dc8da5027f586df4612..ed0e321323e2f6864f120996e0c3fa19c032a7fe 100644 --- a/lib/procalign.pom +++ b/lib/procalign.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo.align</groupId> <artifactId>procalign</artifactId> <version>4.6</version> - <!-- Rev 1970M 30/09/2014 --> + <!-- Rev 2002M 26/11/2014 --> <name>Reference implementation of the Alignment API</name> <description>Implementation of the Alignment API for manipulating ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java index 88f9ce4c8e5181b4680a03c7818cd7d4d5ccbfe5..5be60b129b2042d3a194674643f6cbd5b7167e2f 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java @@ -110,7 +110,7 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito private Set<String> objectsRestriction = null; protected Hashtable<String, String> prefixList = null; - private int varsIndexcount = 1; + protected int varsIndexcount = 1; private boolean split = false; // split each query in a file, not on the writer private String splitdir = ""; // directory where to put query files @@ -133,7 +133,7 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito objectsRestriction.clear(); flagRestriction = false; } - + protected void resetVariables(Expression expr, String s, String o) throws AlignmentException { if (expr instanceof ClassExpression) { resetVariables((ClassExpression) expr, s, o); diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java index e748cfc4044bc9288e5587f2e177dd8ff665e63c..26531faebf75df1aec1ea750642bb71044008481 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java @@ -161,56 +161,38 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp */ public void visit(final LinkkeyEquals linkkeyEquals) throws AlignmentException { //Main part for selection -// resetVariables("?s1", "?o1"); -// resetS1("?o1"); + resetS1("?o1"); Expression expr1 = linkkeyEquals.getExpression1(); expr1.accept(this); -// resetVariables("?s2", "?o2"); -// resetS2("?o2"); + resetS2("?o1"); Expression expr2 = linkkeyEquals.getExpression2(); expr2.accept(this); - //Retrieving intersect elements - addToGP("MINUS { " + NL - + "SELECT DISTINCT ?s1 ?s2 " + NL - + "WHERE " + NL - + "{ " + NL); -// resetVariables("?s1", "?o1"); -// resetS1("?o1"); + //First part + addToGP("MINUS { " + NL); + resetS1("?o1"); expr1.accept(this); -// resetVariables("?s1", "?o2"); -// resetS1("?o2"); + resetS1("?o2"); expr1.accept(this); -// resetVariables("?s2", "?o3"); -// resetS2("?o3"); + resetS2("?o1"); expr2.accept(this); - addToGP("FILTER(?s1 != ?s2 && ?o2 != ?o1 && ?o3 = ?o1 && NOT EXISTS {" + NL); -// resetVariables("?s2", "?o2"); -// resetS2("?o2"); + addToGP("FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {" + NL); + resetS2("?o2"); expr2.accept(this); addToGP("}) " + NL); addToGP("} " + NL); - addToGP("} " + NL); //Second part - addToGP("MINUS {" + NL - + "SELECT DISTINCT ?s1 ?s2 " + NL - + "WHERE " + NL - + "{ " + NL); -// resetVariables("?s1", "?o1"); -// resetS1("?o1"); + addToGP("MINUS {" + NL); + resetS1("?o1"); expr1.accept(this); -// resetVariables("?s2", "?o2"); -// resetS2("?o2"); + resetS2("?o1"); expr2.accept(this); -// resetVariables("?s2", "?o3"); -// resetS2("?o3"); + resetS2("?o2"); expr2.accept(this); - addToGP("FILTER(?s1 != ?s2 && ?o2 != ?o3 && ?o2 = ?o1 && NOT EXISTS {" + NL); -// resetVariables("?s1", "?o3"); -// resetS1("?o3"); + addToGP("FILTER(?s1 != ?s2 && ?o1 != ?o2 && NOT EXISTS {" + NL); + resetS1("?o2"); expr1.accept(this); - addToGP("})" + NL); - addToGP("}" + NL); - addToGP("}" + NL); + addToGP("}) " + NL); + addToGP("} " + NL); } /** diff --git a/test/input/people_relation_equals_alignment.rdf b/test/input/people_relation_equals_alignment.rdf index 6c608667bd9ede042b8cb23998494f57ccf656c2..d3368ae62cae8784feabed92248a1a58314c2ab7 100644 --- a/test/input/people_relation_equals_alignment.rdf +++ b/test/input/people_relation_equals_alignment.rdf @@ -54,14 +54,14 @@ <edoal:Property> <edoal:compose rdf:parseType="Collection"> <edoal:Relation> - <edoal:compose rdf:parseType="Collection"> + <edoal:and rdf:parseType="Collection"> <edoal:RelationCoDomainRestriction> <edoal:class> <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> </edoal:class> </edoal:RelationCoDomainRestriction> <edoal:Relation rdf:about="http://xmlns.com/foaf/0.1/knows" /> - </edoal:compose> + </edoal:and> </edoal:Relation> <edoal:Property rdf:about="http://xmlns.com/foaf/0.1/givenName" /> </edoal:compose> diff --git a/test/input/people_relation_intersects_alignment.rdf b/test/input/people_relation_intersects_alignment.rdf index fa72e0f1ff5c7e2ed6f2d81fdc2c670bcd391edd..abd8f08cf7b3165ccbeca8758d4b3c5d98c125f0 100644 --- a/test/input/people_relation_intersects_alignment.rdf +++ b/test/input/people_relation_intersects_alignment.rdf @@ -33,7 +33,7 @@ </formalism> </Ontology> </onto2> - <map> + <map> <Cell rdf:about="http://exmo.inrialpes.fr/connectors#cell1"> <entity1> <edoal:Class rdf:about="http://exmo.inrialpes.fr/connectors-core/Personne"/> @@ -43,7 +43,7 @@ </entity2> <relation>=</relation> <measure rdf:datatype='http://www.w3.org/2001/XMLSchema#float'>1.0</measure> - <edoal:linkkey> + <edoal:linkkey> <edoal:Linkkey> <edoal:binding> <edoal:Intersects> @@ -54,14 +54,14 @@ <edoal:Property> <edoal:compose rdf:parseType="Collection"> <edoal:Relation> - <edoal:compose rdf:parseType="Collection"> + <edoal:and rdf:parseType="Collection"> <edoal:RelationCoDomainRestriction> <edoal:class> <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> </edoal:class> </edoal:RelationCoDomainRestriction> <edoal:Relation rdf:about="http://xmlns.com/foaf/0.1/knows" /> - </edoal:compose> + </edoal:and> </edoal:Relation> <edoal:Property rdf:about="http://xmlns.com/foaf/0.1/givenName" /> </edoal:compose> diff --git a/test/src/SPARQLSelectRendererVisitorTest.java b/test/src/SPARQLSelectRendererVisitorTest.java index 0515d5f3c8eac831d1d92c9cb2971396bce0bb13..ad3844e6012d2322c7ac34f5d057b7cd5b0de185 100644 --- a/test/src/SPARQLSelectRendererVisitorTest.java +++ b/test/src/SPARQLSelectRendererVisitorTest.java @@ -35,6 +35,7 @@ import java.util.Properties; import org.semanticweb.owl.align.Cell; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; import org.testng.annotations.Test; /** @@ -152,165 +153,164 @@ public class SPARQLSelectRendererVisitorTest { } } -// @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey", "QueryFromSimpleLinkkeyAndIntersects"}) -// public void QueryFromSimpleLinkkeyAndEquals() throws Exception { -// String alignmentFileName = "people_equals_alignment.rdf"; -// EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); -// StringWriter stringWriter = new StringWriter(); -// PrintWriter writer = new PrintWriter(stringWriter); -// SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); -// Properties properties = new Properties(); -// renderer.init(properties); -// alignment.render(renderer); -// -// assertEquals(alignment.nbCells(), 1); -// Enumeration<Cell> cells = alignment.getElements(); -// Cell cell = cells.nextElement(); -// -// String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" -// + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" -// + "SELECT DISTINCT ?s1 ?s2 \n" -// + "WHERE {\n" -// + "?s1 rdf:type ns0:Personne .\n" -// + "?s2 rdf:type ns1:Person .\n" -// + "?s1 ns0:nom ?o1 .\n" -// + "?s2 ns1:givenName ?o1 .\n" -// + "MINUS { \n" -// + "?s1 ns0:nom ?o1 .\n" -// + "?s1 ns0:nom ?o2 .\n" -// + "?s2 ns1:givenName ?o1 .\n" -// + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {\n" -// + "?s2 ns1:givenName ?o2 .\n" -// + "}) \n" -// + "}\n" -// + "MINUS {\n" -// + "?s1 ns0:nom ?o1 .\n" -// + "?s2 ns1:givenName ?o1 .\n" -// + "?s2 ns1:givenName ?o2 .\n" -// + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {\n" -// + "?s1 ns0:nom ?o2 .\n" -// + "})\n" -// + "}\n" -// + "FILTER(?s1 != ?s2)\n" -// + "}\n"; -// String query = renderer.getQueryFromOnto1ToOnto2(cell); + @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey", "QueryFromSimpleLinkkeyAndIntersects"}) + public void QueryFromSimpleLinkkeyAndEquals() throws Exception { + String alignmentFileName = "people_equals_alignment.rdf"; + EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); + StringWriter stringWriter = new StringWriter(); + PrintWriter writer = new PrintWriter(stringWriter); + SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); + Properties properties = new Properties(); + renderer.init(properties); + alignment.render(renderer); + + assertEquals(alignment.nbCells(), 1); + Enumeration<Cell> cells = alignment.getElements(); + Cell cell = cells.nextElement(); + + String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" + + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" + + "SELECT DISTINCT ?s1 ?s2 \n" + + "WHERE {\n" + + "?s1 rdf:type ns0:Personne .\n" + + "?s2 rdf:type ns1:Person .\n" + + "?s1 ns0:nom ?o1 .\n" + + "?s2 ns1:givenName ?o1 .\n" + + "MINUS { \n" + + "?s1 ns0:nom ?o1 .\n" + + "?s1 ns0:nom ?o2 .\n" + + "?s2 ns1:givenName ?o1 .\n" + + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {\n" + + "?s2 ns1:givenName ?o2 .\n" + + "}) \n" + + "} \n" + + "MINUS {\n" + + "?s1 ns0:nom ?o1 .\n" + + "?s2 ns1:givenName ?o1 .\n" + + "?s2 ns1:givenName ?o2 .\n" + + "FILTER(?s1 != ?s2 && ?o1 != ?o2 && NOT EXISTS {\n" + + "?s1 ns0:nom ?o2 .\n" + + "}) \n" + + "} \n" + + "FILTER(?s1 != ?s2)\n" + + "}\n"; + String query = renderer.getQueryFromOnto1ToOnto2(cell); // System.out.println("QueryFromSimpleLinkkeyFromEquals expected Query : " + expectedQuery); -//// assertEquals(query, expectedQuery); -// -// Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); -// Query selectQuery = QueryFactory.create(query); -// String[] expectedS1 = { -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"}; -// String[] expectedS2 = { -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2",}; -// HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); -// Collection<String> resultValues = allResultValues.get("s1"); -// assertEquals(resultValues.size(), expectedS1.length); -// for (String expected : expectedS1) { -// assertTrue(resultValues.contains(expected), "For expected : " + expected); -// } -// -// resultValues = allResultValues.get("s2"); -// assertEquals(resultValues.size(), expectedS2.length); -// for (String expected : expectedS2) { -// assertTrue(resultValues.contains(expected), "For expected : " + expected); -// } -// -// //With from onto2ToOnto1 -// query = renderer.getQueryFromOnto2ToOnto1(cell);//Where ?p1 is in onto2 -// values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); -// selectQuery = QueryFactory.create(query); -// allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); -// -// resultValues = allResultValues.get("s1"); -// assertEquals(resultValues.size(), expectedS1.length); -// for (String expected : expectedS2) {//Change here -// assertTrue(resultValues.contains(expected), "For expected : " + expected); -// } -// -// resultValues = allResultValues.get("s2"); -// assertEquals(resultValues.size(), expectedS2.length); -// for (String expected : expectedS1) {//Change here -// assertTrue(resultValues.contains(expected), "For expected : " + expected); -// } -// } -// -// @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromSimpleLinkkeyAndIntersects"}) -// public void QueryFromRelationLinkkeyAndIntersects() throws Exception { -// String alignmentFileName = "people_relation_intersects_alignment.rdf"; -// EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); -// StringWriter stringWriter = new StringWriter(); -// PrintWriter writer = new PrintWriter(stringWriter); -// SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); -// Properties properties = new Properties(); -// renderer.init(properties); -// alignment.render(renderer); -// -// assertEquals(alignment.nbCells(), 1); -// Enumeration<Cell> cells = alignment.getElements(); -// Cell cell = cells.nextElement(); -// -// Model values = Utils.loadValues(new String[]{"intersects_people_1.rdf", "intersects_people_2.rdf"}); -// -// String query = renderer.getQueryFromOnto1ToOnto2(cell); -// String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" -// + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" -// + "SELECT DISTINCT ?s1 ?s2 \n" -// + "WHERE {\n" -// + "?s1 rdf:type ns0:Personne .\n" -// + "?s2 rdf:type ns1:Person .\n" -// + "?s1 ns0:connait ?o1 .\n" -// + "?s2 ns1:knows ?o2 .\n" -// + "?o2 rdf:type ns1:Person .\n" -// + "?o2 ns1:givenName ?o1 .\n" -// + "FILTER(?s1 != ?s2)\n" -// + "}"; -// System.out.println("QueryFromRelationLinkkeyAndIntersects expectedQuery : " + expectedQuery); -// System.out.println("query : " + query); -// assertEquals(expectedQuery, query); -// Query selectQuery = QueryFactory.create(query); -// QueryExecution selectQueryExec = QueryExecutionFactory.create(selectQuery, values); -// ResultSet results = selectQueryExec.execSelect(); -// String[] expectedS1 = { -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1", -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"}; -// String[] expectedS2 = { -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2", -// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"}; -// -// HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(results); -// Collection<String> resultValues = allResultValues.get("s1"); -// assertEquals(resultValues.size(), expectedS1.length); -// for (String expected : expectedS1) { -// assertTrue(resultValues.contains(expected)); -// } -// -// resultValues = allResultValues.get("s2"); -// assertEquals(resultValues.size(), expectedS2.length); -// for (String expected : expectedS2) { -// assertTrue(resultValues.contains(expected)); -// } -// //On other sens : -// query = renderer.getQueryFromOnto2ToOnto1(cell); -// selectQuery = QueryFactory.create(query); -// selectQueryExec = QueryExecutionFactory.create(selectQuery, values); -// results = selectQueryExec.execSelect(); -// -// allResultValues = Utils.getResultValues(results); -// resultValues = allResultValues.get("s1"); -// assertEquals(resultValues.size(), expectedS2.length); -// for (String expected : expectedS2) { -// assertTrue(resultValues.contains(expected)); -// } -// -// resultValues = allResultValues.get("s2"); -// assertEquals(resultValues.size(), expectedS1.length); -// for (String expected : expectedS1) { -// assertTrue(resultValues.contains(expected)); -// } -// } +// System.out.println("QueryFromSimpleLinkkeyFromEquals returned Query : " + query); +// assertEquals(query, expectedQuery); + + Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); + Query selectQuery = QueryFactory.create(query); + String[] expectedS1 = { + "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"}; + String[] expectedS2 = { + "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2",}; + HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); + Collection<String> resultValues = allResultValues.get("s1"); + assertEquals(resultValues.size(), expectedS1.length); + for (String expected : expectedS1) { + assertTrue(resultValues.contains(expected), "For expected : " + expected); + } + + resultValues = allResultValues.get("s2"); + assertEquals(resultValues.size(), expectedS2.length); + for (String expected : expectedS2) { + assertTrue(resultValues.contains(expected), "For expected : " + expected); + } + + //With from onto2ToOnto1 + query = renderer.getQueryFromOnto2ToOnto1(cell);//Where ?p1 is in onto2 + values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); + selectQuery = QueryFactory.create(query); + allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); + + resultValues = allResultValues.get("s1"); + assertEquals(resultValues.size(), expectedS1.length); + for (String expected : expectedS2) {//Change here + assertTrue(resultValues.contains(expected), "For expected : " + expected); + } + + resultValues = allResultValues.get("s2"); + assertEquals(resultValues.size(), expectedS2.length); + for (String expected : expectedS1) {//Change here + assertTrue(resultValues.contains(expected), "For expected : " + expected); + } + } + @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromSimpleLinkkeyAndIntersects"}) + public void QueryFromRelationLinkkeyAndIntersects() throws Exception { + String alignmentFileName = "people_relation_intersects_alignment.rdf"; + EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); + StringWriter stringWriter = new StringWriter(); + PrintWriter writer = new PrintWriter(stringWriter); + SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); + Properties properties = new Properties(); + renderer.init(properties); + alignment.render(renderer); + + assertEquals(alignment.nbCells(), 1); + Enumeration<Cell> cells = alignment.getElements(); + Cell cell = cells.nextElement(); + + Model values = Utils.loadValues(new String[]{"intersects_people_1.rdf", "intersects_people_2.rdf"}); + + String query = renderer.getQueryFromOnto1ToOnto2(cell); + String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" + + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" + + "SELECT DISTINCT ?s1 ?s2 \n" + + "WHERE {\n" + + "?s1 rdf:type ns0:Personne .\n" + + "?s2 rdf:type ns1:Person .\n" + + "?s1 ns0:connait ?o1 .\n" + + "?o2 rdf:type ns1:Person .\n" + + "?s2 ns1:knows ?o2 .\n" + + "?o2 ns1:givenName ?o1 .\n" + + "FILTER(?s1 != ?s2)\n" + + "}\n" + + ""; + assertEquals(expectedQuery, query); + Query selectQuery = QueryFactory.create(query); + QueryExecution selectQueryExec = QueryExecutionFactory.create(selectQuery, values); + ResultSet results = selectQueryExec.execSelect(); + String[] expectedS1 = { + "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1", + "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"}; + String[] expectedS2 = { + "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2", + "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"}; + + HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(results); + Collection<String> resultValues = allResultValues.get("s1"); + assertEquals(resultValues.size(), expectedS1.length); + for (String expected : expectedS1) { + assertTrue(resultValues.contains(expected)); + } + + resultValues = allResultValues.get("s2"); + assertEquals(resultValues.size(), expectedS2.length); + for (String expected : expectedS2) { + assertTrue(resultValues.contains(expected)); + } + //On other sens : + query = renderer.getQueryFromOnto2ToOnto1(cell); + selectQuery = QueryFactory.create(query); + selectQueryExec = QueryExecutionFactory.create(selectQuery, values); + results = selectQueryExec.execSelect(); + + allResultValues = Utils.getResultValues(results); + resultValues = allResultValues.get("s1"); + assertEquals(resultValues.size(), expectedS2.length); + for (String expected : expectedS2) { + assertTrue(resultValues.contains(expected)); + } + + resultValues = allResultValues.get("s2"); + assertEquals(resultValues.size(), expectedS1.length); + for (String expected : expectedS1) { + assertTrue(resultValues.contains(expected)); + } + } // // @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromSimpleLinkkeyAndEquals"}) // public void QueryFromRelationLinkkeyAndEquals() throws Exception { @@ -330,40 +330,44 @@ public class SPARQLSelectRendererVisitorTest { // String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" // + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" // + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" -// + "SELECT DISTINCT ?s1 ?s2\n" +// + "SELECT DISTINCT ?s1 ?s2 \n" // + "WHERE {\n" // + "?s1 rdf:type ns0:Personne .\n" // + "?s2 rdf:type ns1:Person .\n" // + "?s1 ns0:connait ?o1 .\n" -// + "?s2 ns1:knows ?o2 .\n" // + "?o2 rdf:type ns1:Person .\n" +// + "?s2 ns1:knows ?o2 .\n" // + "?o2 ns1:givenName ?o1 .\n" // + "MINUS { \n" // + "?s1 ns0:connait ?o1 .\n" // + "?s1 ns0:connait ?o2 .\n" -// + "?s2 ns1:knows ?o3 .\n" -// + "?o3 ns1:givenName ?o1 .\n" -// + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {\n" +// + "?o4 rdf:type ns1:Person .\n" // + "?s2 ns1:knows ?o4 .\n" -// + "?o4 ns1:givenName ?o2 .\n" +// + "?o4 ns1:givenName ?o1 .\n" +// + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && NOT EXISTS {\n" +// + "?o6 rdf:type ns1:Person .\n" +// + "?s2 ns1:knows ?o6 .\n" +// + "?o6 ns1:givenName ?o2 .\n" // + "}) \n" -// + "}\n" +// + "} \n" // + "MINUS {\n" // + "?s1 ns0:connait ?o1 .\n" -// + "?s2 ns1:knows ?o2 .\n" -// + "?o2 ns1:givenName ?o1 .\n" -// + "?s2 ns1:knows ?o3 .\n" -// + "?o3 ns1:givenName ?o4 .\n" +// + "?o8 rdf:type ns1:Person .\n" +// + "?s2 ns1:knows ?o8 .\n" +// + "?o8 ns1:givenName ?o1 .\n" +// + "?o10 rdf:type ns1:Person .\n" +// + "?s2 ns1:knows ?o10 .\n" +// + "?o10 ns1:givenName ?o4 .\n" // + "FILTER(?s1 != ?s2 && ?o1 != ?o4 && NOT EXISTS {\n" // + "?s1 ns0:connait ?o4 .\n" -// + "})\n" -// + "}\n" +// + "}) \n" +// + "} \n" // + "FILTER(?s1 != ?s2)\n" // + "}"; // // String query = renderer.getQueryFromOnto1ToOnto2(cell); // System.out.println("QueryFromRelationLinkkeyAndEquals expectedQuery : " + expectedQuery); -//// System.out.println("QueryFromRelationLinkkeyAndEquals : " + query); +// System.out.println("QueryFromRelationLinkkeyAndEquals Query : " + query); // assertEquals(query, expectedQuery); // Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); //