"},
new String[] { "?id . ?id ?name . ?obs .",
"?a . ?c . ?c ?d ." },
new String[] {
@@ -96,8 +90,8 @@ public void testMultipleIsomorphisms() throws ParseException {
GraphPattern ks1 = new GraphPattern(pair[0]);
GraphPattern ks2 = new GraphPattern(pair[1]);
- boolean doesMatch = GraphPatternMatcher.areIsomorphic(ks1, ks2);
- LOG.info("SSpace graph should be equal: {}", doesMatch);
+ boolean doesMatch = !getIsos(ks1, ks2).isEmpty();
+ LOG.info("Should be equal: {}", doesMatch);
assertTrue(doesMatch);
LOG.info("--------------------");
@@ -144,9 +138,9 @@ public void testMultipleIsomorphisms() throws ParseException {
GraphPattern ks1 = new GraphPattern(pair[0]);
GraphPattern ks2 = new GraphPattern(pair[1]);
- boolean doesMatch = GraphPatternMatcher.areIsomorphic(ks1, ks2);
+ boolean doesMatch = !this.getIsos(ks1, ks2).isEmpty();
- LOG.info("SSpace graph shoud not be equal: {}", doesMatch);
+ LOG.info("Should not be equal: {}", doesMatch);
assertFalse(doesMatch);
LOG.info("--------------------");
@@ -154,86 +148,38 @@ public void testMultipleIsomorphisms() throws ParseException {
}
@Test
- public void testMetadataBindingSetTransformation() {
- String[] patterns = new String[] {
- "?kb1 . ?kb1 ?name1 . ?kb1 ?description1 . ?kb1 ?ki1 . ?ki1 ?kiType1 . ?ki1 ?isMeta1 . ?ki1 ?act1 . ?act1 . ?act1 ?req1 . ?act1 ?sat1 . ?req1 ?reqType1 . ?sat1 ?satType1 . ?ki1 ?gp1 . ?gp1 ?patternType1 . ?gp1 ?pattern1 . ",
- "?kb2 ?name2 . ?kb2 . ?kb2 ?description2 . ?kb2 ?ki2 . ?ki2 ?kiType2 . ?ki2 ?isMeta2 . ?ki2 ?act2 . ?act2 . ?act2 ?req2 . ?act2 ?sat2 . ?req2 ?reqType2 . ?sat2 ?satType2 . ?ki2 ?gp2 . ?gp2 ?patternType2 . ?gp2 ?pattern2 . " };
-
- GraphPattern gp1 = new GraphPattern(patterns[0]);
- GraphPattern gp2 = new GraphPattern(patterns[1]);
-
- Model m = ModelFactory.createDefaultModel();
-
- m.read(this.getClass().getResourceAsStream("/metadata.ttl"), null, "turtle");
-
- // then use the Knowledge Interaction as a query to retrieve the bindings.
- Query q = QueryFactory.create("SELECT * WHERE {" + this.convertToPattern(gp1) + "}");
- LOG.trace("Query: {}", q);
- QueryExecution qe = QueryExecutionFactory.create(q, m);
- ResultSet rs = qe.execSelect();
- BindingSet fromBindingSet = new BindingSet(rs);
- qe.close();
-
- for (Binding binding : fromBindingSet) {
- assertTrue(binding.containsKey("kb1"));
- assertTrue(binding.containsKey("name1"));
- assertTrue(binding.containsKey("description1"));
- assertTrue(binding.containsKey("ki1"));
- assertTrue(binding.containsKey("kiType1"));
- assertTrue(binding.containsKey("isMeta1"));
- assertTrue(binding.containsKey("act1"));
- assertTrue(binding.containsKey("req1"));
- assertTrue(binding.containsKey("sat1"));
- assertTrue(binding.containsKey("reqType1"));
- assertTrue(binding.containsKey("satType1"));
- assertTrue(binding.containsKey("gp1"));
- assertTrue(binding.containsKey("patternType1"));
- assertTrue(binding.containsKey("pattern1"));
- }
-
- BindingSet toBindingSet = GraphPatternMatcher.transformBindingSet(gp1, gp2, fromBindingSet);
-
- for (Binding binding : toBindingSet) {
- assertTrue(binding.containsKey("kb2"));
- assertTrue(binding.containsKey("name2"));
- assertTrue(binding.containsKey("description2"));
- assertTrue(binding.containsKey("ki2"));
- assertTrue(binding.containsKey("kiType2"));
- assertTrue(binding.containsKey("isMeta2"));
- assertTrue(binding.containsKey("act2"));
- assertTrue(binding.containsKey("req2"));
- assertTrue(binding.containsKey("sat2"));
- assertTrue(binding.containsKey("reqType2"));
- assertTrue(binding.containsKey("satType2"));
- assertTrue(binding.containsKey("gp2"));
- assertTrue(binding.containsKey("patternType2"));
- assertTrue(binding.containsKey("pattern2"));
- }
+ public void testGraphPatternWithLiteral() {
+ GraphPattern gp = new GraphPattern("?s \"test\" .");
+ assertTrue(true);
+ }
- LOG.info("{}", fromBindingSet);
- LOG.info("{}", toBindingSet);
+ private Set getIsos(GraphPattern gp1, GraphPattern gp2) {
- }
+ Rule anteRule = new Rule(Util.translateGraphPatternTo(gp1),
+ (SinkBindingSetHandler) new SinkBindingSetHandler() {
- private String convertToPattern(GraphPattern gp) {
- Iterator iter = gp.getGraphPattern().patternElts();
+ @Override
+ public CompletableFuture handle(eu.knowledge.engine.reasoner.api.BindingSet aBindingSet) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ });
- StringBuilder sb = new StringBuilder();
+ Rule consRule = new Rule(Util.translateGraphPatternTo(gp2), new TransformBindingSetHandler() {
- while (iter.hasNext()) {
+ @Override
+ public CompletableFuture handle(
+ eu.knowledge.engine.reasoner.api.BindingSet bs) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ });
- TriplePath tp = iter.next();
- sb.append(FmtUtils.stringForTriple(tp.asTriple(), new PrefixMappingMem()));
- sb.append(" . ");
- }
+// assertTrue(GraphPatternMatcher.areIsomorphic(gp1, gp2));
+ Map> isomorphism = BaseRule.getMatches(anteRule, Collections.singleton(consRule), true,
+ MatchStrategy.ENTRY_LEVEL.toConfig(true));
- return sb.toString();
- }
-
- @Test
- public void testGraphPatternWithLiteral()
- {
- GraphPattern gp = new GraphPattern("?s \"test\" .");
+ return isomorphism.containsKey(consRule) ? isomorphism.get(consRule) : new HashSet();
}
}
diff --git a/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestIRI.java b/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestIRI.java
index 5d0aa9552..4dd9d4f88 100644
--- a/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestIRI.java
+++ b/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestIRI.java
@@ -7,8 +7,6 @@
import org.apache.jena.iri.IRIFactory;
import org.junit.jupiter.api.Test;
-import eu.knowledge.engine.smartconnector.api.GraphPattern;
-
class TestIRI {
private String[] validUris = new String[] {
diff --git a/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestKnowledgeGapDetection.java b/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestKnowledgeGapDetection.java
index fd15e3b0c..ed40e703d 100644
--- a/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestKnowledgeGapDetection.java
+++ b/smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestKnowledgeGapDetection.java
@@ -25,175 +25,181 @@
public class TestKnowledgeGapDetection {
- private static final Logger LOG = LoggerFactory.getLogger(TestKnowledgeGapDetection.class);
-
- private KnowledgeBaseImpl kbEggObserver;
- private KnowledgeBaseImpl kbImperialEggSearcher;
- private KnowledgeNetwork kn;
- private PrefixMappingMem prefixes;
- private AskKnowledgeInteraction askKI;
- private Set ruleSet;
-
- @BeforeEach
- public void setup() throws InterruptedException, BrokenBarrierException, TimeoutException {
- prefixes = new PrefixMappingMem();
- prefixes.setNsPrefixes(PrefixMapping.Standard);
- prefixes.setNsPrefix("ex", "https://www.tno.nl/example/");
- addDomainKnowledge();
-
- instantiateImperialEggSearcherKB();
- instantiateObserverKB();
-
- kn = new KnowledgeNetwork();
- kn.addKB(kbEggObserver);
- kn.addKB(kbImperialEggSearcher);
- kn.sync();
- }
-
- private void addDomainKnowledge() {
- this.ruleSet = new HashSet<>();
- HashSet consequent1 = new HashSet<>();
- consequent1.add(new TriplePattern(
- "?id "));
- HashSet antecedent1 = new HashSet<>();
- antecedent1.add(new TriplePattern(
- "?id "));
- antecedent1.add(new TriplePattern("?id \"Alexander III\""));
- antecedent1.add(new TriplePattern("?id \"Russia\""));
- antecedent1.add(new TriplePattern("?id \"House of Fabergé\""));
- this.ruleSet.add(new Rule("Domain knowledge", antecedent1, consequent1, new Rule.AntecedentToConsequentBindingSetHandler(antecedent1)));
- }
-
- @Test
- public void testKnowledgeGap() throws InterruptedException, ExecutionException {
- AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
- ReasonerPlan rn = plan.getReasonerPlan();
- rn.getStore().printGraphVizCode(rn);
- AskResult result = plan.execute(new BindingSet()).get();
- Set gaps = result.getKnowledgeGaps();
-
- LOG.info("Found gaps: " + gaps);
-
- assertEquals(1, gaps.size());
-
- Set expectedGap = new HashSet<>();
- expectedGap.add(new TriplePattern(prefixes, "?id ex:commissionedBy \"Alexander III\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeIn \"Russia\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeBy \"House of Fabergé\""));
-
- assertEquals(expectedGap, gaps.toArray()[0]);
- }
-
-
- @Test
- public void testKnowledgeGapNoMatchingVars() throws InterruptedException, ExecutionException {
- GraphPattern gp = new GraphPattern(prefixes,
- "?iq rdf:type . ?iq ?company . ?iq ?country . ?iq ?image .");
- this.askKI = new AskKnowledgeInteraction(new CommunicativeAct(), gp, "askImperialEggsNonMatching", false, false, true, MatchStrategy.SUPREME_LEVEL);
- kbImperialEggSearcher.register(this.askKI);
- kn.sync();
-
- AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
- ReasonerPlan rn = plan.getReasonerPlan();
- rn.getStore().printGraphVizCode(rn);
-
- AskResult result = plan.execute(new BindingSet()).get();
-
- Set gaps = result.getKnowledgeGaps();
- LOG.info("Found gaps: " + gaps);
-
- assertEquals(1, gaps.size());
-
- Set expectedGap = new HashSet<>();
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeBy \"House of Fabergé\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeIn \"Russia\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:commissionedBy \"Alexander III\""));
-
- assertEquals(new KnowledgeGap(expectedGap), gaps.toArray()[0]);
- }
-
- @Test
- public void testNoKnowledgeGap() throws InterruptedException, ExecutionException {
- GraphPattern gp = new GraphPattern(prefixes,
- "?iq rdf:type . ?iq ?image .");
- this.askKI = new AskKnowledgeInteraction(new CommunicativeAct(), gp, "askImperialEggNoGap", false, false, true, MatchStrategy.SUPREME_LEVEL);
- kbImperialEggSearcher.register(this.askKI);
- kn.sync();
-
- AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
- ReasonerPlan rn = plan.getReasonerPlan();
- rn.getStore().printGraphVizCode(rn);
-
- AskResult result = plan.execute(new BindingSet()).get();
-
- Set gaps = result.getKnowledgeGaps();
- LOG.info("Found gaps: " + gaps);
-
- assertEquals(0, gaps.size());
- }
-
- @Test
- public void testKnowledgeGapWithoutPrefixes() throws InterruptedException, ExecutionException {
- GraphPattern gp = new GraphPattern("?id . ?id ?image .");
- this.askKI = new AskKnowledgeInteraction(new CommunicativeAct(), gp, "askImperialEggNoGap", false, false, true, MatchStrategy.SUPREME_LEVEL);
- kbImperialEggSearcher.register(this.askKI);
- kn.sync();
-
- AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
- ReasonerPlan rn = plan.getReasonerPlan();
- rn.getStore().printGraphVizCode(rn);
-
- AskResult result = plan.execute(new BindingSet()).get();
- Set gaps = result.getKnowledgeGaps();
- LOG.info("Found gaps: " + gaps);
-
- assertEquals(1, gaps.size());
- Set expectedGap = new HashSet<>();
- expectedGap.add(new TriplePattern(prefixes, "?id ex:commissionedBy \"Alexander III\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeIn \"Russia\""));
- expectedGap.add(new TriplePattern(prefixes, "?id ex:madeBy \"House of Fabergé\""));
- assertEquals(expectedGap, gaps.toArray()[0]);
- }
-
- public void instantiateImperialEggSearcherKB() {
- kbImperialEggSearcher = new KnowledgeBaseImpl("ImperialEggSearcher");
- kbImperialEggSearcher.setReasonerEnabled(true);
-
- GraphPattern gp2 = new GraphPattern(prefixes,
- "?id rdf:type . ?id ?company . ?id ?country . ?id ?image .");
- this.askKI = new AskKnowledgeInteraction(new CommunicativeAct(), gp2, "askImperialEggs", false, false, true, MatchStrategy.SUPREME_LEVEL);
- kbImperialEggSearcher.register(this.askKI);
- kbImperialEggSearcher.setDomainKnowledge(this.ruleSet);
- }
-
- public void instantiateObserverKB() {
- kbEggObserver = new KnowledgeBaseImpl("EggObserver");
- kbEggObserver.setReasonerEnabled(true);
-
- GraphPattern gp1 = new GraphPattern(prefixes, "?id . ?id ?image .");
- AnswerKnowledgeInteraction aKI = new AnswerKnowledgeInteraction(new CommunicativeAct(), gp1, "answerEggs");
- kbEggObserver.register(aKI, (AnswerHandler) (anAKI, anAnswerExchangeInfo) -> {
- assertTrue(
- anAnswerExchangeInfo.getIncomingBindings().isEmpty()
- || anAnswerExchangeInfo.getIncomingBindings().iterator().next().getVariables().isEmpty(),
- "Should not have bindings in this binding set.");
- BindingSet bindingSet = new BindingSet();
- Binding binding1 = new Binding();
- binding1.put("id", "");
- binding1.put("image", "\"Picture Of Hen Fabergé Egg\"^^");
- bindingSet.add(binding1);
- Binding binding2 = new Binding();
- binding2.put("id", "");
- binding2.put("image", "\"Picture of Third Imperial Fabergé Egg\"");
- bindingSet.add(binding2);
-
- return bindingSet;
- });
- }
-
- @AfterEach
- public void cleanup() throws InterruptedException, ExecutionException {
- LOG.info("Clean up: {}", TestKnowledgeGapDetection.class.getSimpleName());
- kn.stop().get();
- }
+ private static final Logger LOG = LoggerFactory.getLogger(TestKnowledgeGapDetection.class);
+
+ private KnowledgeBaseImpl kbEggObserver;
+ private KnowledgeBaseImpl kbImperialEggSearcher;
+ private KnowledgeNetwork kn;
+ private PrefixMappingMem prefixes;
+ private AskKnowledgeInteraction askKI;
+ private Set ruleSet;
+
+ @BeforeEach
+ public void setup() throws InterruptedException, BrokenBarrierException, TimeoutException {
+ prefixes = new PrefixMappingMem();
+ prefixes.setNsPrefixes(PrefixMapping.Standard);
+ prefixes.setNsPrefix("ex", "https://www.tno.nl/example/");
+ addDomainKnowledge();
+
+ instantiateImperialEggSearcherKB();
+ instantiateObserverKB();
+
+ kn = new KnowledgeNetwork();
+ kn.addKB(kbEggObserver);
+ kn.addKB(kbImperialEggSearcher);
+ kn.sync();
+ }
+
+ private void addDomainKnowledge() {
+ this.ruleSet = new HashSet<>();
+ HashSet consequent1 = new HashSet<>();
+ consequent1.add(new TriplePattern(
+ "?id "));
+ HashSet antecedent1 = new HashSet<>();
+ antecedent1.add(new TriplePattern(
+ "?id "));
+ antecedent1.add(new TriplePattern("?id \"Alexander III\""));
+ antecedent1.add(new TriplePattern("?id \"Russia\""));
+ antecedent1.add(new TriplePattern("?id \"House of Fabergé\""));
+ this.ruleSet.add(new Rule("Domain knowledge", antecedent1, consequent1,
+ new Rule.AntecedentToConsequentBindingSetHandler(antecedent1)));
+ }
+
+ @Test
+ public void testKnowledgeGap() throws InterruptedException, ExecutionException {
+ AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
+ ReasonerPlan rn = plan.getReasonerPlan();
+ rn.getStore().printGraphVizCode(rn);
+ AskResult result = plan.execute(new BindingSet()).get();
+ Set gaps = result.getKnowledgeGaps();
+
+ LOG.info("Found gaps: " + gaps);
+
+ assertEquals(1, gaps.size());
+
+ Set expectedGap = new HashSet<>();
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:commissionedBy \"Alexander III\""));
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:madeIn \"Russia\""));
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:madeBy \"House of Fabergé\""));
+
+ assertEquals(expectedGap, gaps.toArray()[0]);
+ }
+
+ @Test
+ public void testKnowledgeGapNoMatchingVars() throws InterruptedException, ExecutionException {
+ GraphPattern gp = new GraphPattern(prefixes,
+ "?iq rdf:type . ?iq ?company . ?iq ?country . ?iq ?image .");
+ this.askKI = new AskKnowledgeInteraction(new CommunicativeAct(), gp, "askImperialEggsNonMatching", false, false,
+ true, MatchStrategy.SUPREME_LEVEL);
+ kbImperialEggSearcher.register(this.askKI);
+ kn.sync();
+
+ AskPlan plan = kbImperialEggSearcher.planAsk(askKI, new RecipientSelector());
+ ReasonerPlan rn = plan.getReasonerPlan();
+ rn.getStore().printGraphVizCode(rn);
+
+ AskResult result = plan.execute(new BindingSet()).get();
+
+ Set gaps = result.getKnowledgeGaps();
+ LOG.info("Found gaps: " + gaps);
+
+ assertEquals(1, gaps.size());
+
+ Set expectedGap = new HashSet<>();
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:madeBy \"House of Fabergé\""));
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:madeIn \"Russia\""));
+ expectedGap.add(new TriplePattern(prefixes, "?id ex:commissionedBy \"Alexander III\""));
+
+ assertEquals(new KnowledgeGap(expectedGap), gaps.toArray()[0]);
+ }
+
+ @Test
+ public void testNoKnowledgeGap() throws InterruptedException, ExecutionException {
+ GraphPattern gp = new GraphPattern(prefixes,
+ "?iq rdf:type . ?iq