Skip to content

Commit 3d1844b

Browse files
authored
Merge pull request #508 from TNO/506-askresult-bindingset-different-from-exchangeinfo-bindingset
506 askresult bindingset different from exchangeinfo bindingset
2 parents 115a923 + 2911abb commit 3d1844b

File tree

3 files changed

+87
-7
lines changed

3 files changed

+87
-7
lines changed

smart-connector/src/main/java/eu/knowledge/engine/smartconnector/impl/ReasonerProcessor.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.apache.jena.sparql.core.TriplePath;
1515
import org.apache.jena.sparql.core.Var;
1616
import org.apache.jena.sparql.graph.PrefixMappingZero;
17+
import org.apache.jena.sparql.serializer.SerializationContext;
1718
import org.apache.jena.sparql.syntax.ElementPathBlock;
1819
import org.apache.jena.sparql.util.FmtUtils;
1920
import org.slf4j.Logger;
@@ -265,13 +266,17 @@ private void continueReasoningForward(eu.knowledge.engine.reasoner.api.BindingSe
265266
* @param bs a reasoner bindingset
266267
* @return a ke bindingset
267268
*/
268-
private BindingSet translateBindingSetFrom(eu.knowledge.engine.reasoner.api.BindingSet bs) {
269+
protected BindingSet translateBindingSetFrom(eu.knowledge.engine.reasoner.api.BindingSet bs) {
269270
BindingSet newBS = new BindingSet();
270271
Binding newB;
272+
273+
SerializationContext context = new SerializationContext();
274+
context.setUsePlainLiterals(false);
275+
271276
for (eu.knowledge.engine.reasoner.api.Binding b : bs) {
272277
newB = new Binding();
273278
for (Map.Entry<Var, Node_Concrete> entry : b.entrySet()) {
274-
newB.put(entry.getKey().getName(), FmtUtils.stringForNode(entry.getValue()));
279+
newB.put(entry.getKey().getName(), FmtUtils.stringForNode(entry.getValue(), context));
275280
}
276281
newBS.add(newB);
277282
}
@@ -284,7 +289,7 @@ private BindingSet translateBindingSetFrom(eu.knowledge.engine.reasoner.api.Bind
284289
* @param bs a ke bindingset
285290
* @return a reasoner bindingset
286291
*/
287-
private eu.knowledge.engine.reasoner.api.BindingSet translateBindingSetTo(BindingSet someBindings) {
292+
protected eu.knowledge.engine.reasoner.api.BindingSet translateBindingSetTo(BindingSet someBindings) {
288293

289294
eu.knowledge.engine.reasoner.api.BindingSet newBindingSet = new eu.knowledge.engine.reasoner.api.BindingSet();
290295
eu.knowledge.engine.reasoner.api.Binding newBinding;
@@ -432,7 +437,8 @@ public CompletableFuture<eu.knowledge.engine.reasoner.api.BindingSet> handle(
432437
});
433438

434439
} catch (IOException e) {
435-
LOG.warn("Errors like '{}' should not occur while sending: {}", e.getMessage(), askMessage.getMessageId());
440+
LOG.warn("Errors like '{}' should not occur while sending: {}", e.getMessage(),
441+
askMessage.getMessageId());
436442
LOG.debug("", e);
437443
bsFuture = new CompletableFuture<eu.knowledge.engine.reasoner.api.BindingSet>();
438444
bsFuture.complete(new eu.knowledge.engine.reasoner.api.BindingSet());
@@ -494,7 +500,8 @@ public CompletableFuture<eu.knowledge.engine.reasoner.api.BindingSet> handle(
494500
});
495501

496502
} catch (IOException e) {
497-
LOG.warn("Errors like '{}' should not occur while sending: {}", e.getMessage(), postMessage.getMessageId());
503+
LOG.warn("Errors like '{}' should not occur while sending: {}", e.getMessage(),
504+
postMessage.getMessageId());
498505
LOG.debug("", e);
499506
bsFuture = new CompletableFuture<eu.knowledge.engine.reasoner.api.BindingSet>();
500507
bsFuture.complete(new eu.knowledge.engine.reasoner.api.BindingSet());

smart-connector/src/test/java/eu/knowledge/engine/smartconnector/api/TestAskAnswer4.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void testAskAnswer() throws InterruptedException {
4747
kb1.setReasonerEnabled(true);
4848
kn.addKB(kb2);
4949

50-
GraphPattern gp1 = new GraphPattern(prefixes, "?a <https://www.tno.nl/example/b> \"test\".");
50+
GraphPattern gp1 = new GraphPattern(prefixes, "?a <https://www.tno.nl/example/b> ?c .");
5151
AnswerKnowledgeInteraction aKI = new AnswerKnowledgeInteraction(new CommunicativeAct(), gp1);
5252
kb1.register(aKI, (AnswerHandler) (anAKI, anAnswerExchangeInfo) -> {
5353
assertTrue(
@@ -58,7 +58,7 @@ public void testAskAnswer() throws InterruptedException {
5858
BindingSet bindingSet = new BindingSet();
5959
Binding binding = new Binding();
6060
binding.put("a", "<https://www.tno.nl/example/a>");
61-
binding.put("c", "<https://www.tno.nl/example/c>");
61+
binding.put("c", "\"true\"^^<http://www.w3.org/2001/XMLSchema#boolean>");
6262
bindingSet.add(binding);
6363

6464
return bindingSet;
@@ -76,6 +76,11 @@ public void testAskAnswer() throws InterruptedException {
7676
LOG.trace("Before ask.");
7777
AskResult result = kb2.ask(askKI, new BindingSet()).get();
7878
bindings = result.getBindings();
79+
80+
System.out.println("Bindings: " + bindings);
81+
System.out
82+
.println("Bindings2: " + result.getExchangeInfoPerKnowledgeBase().iterator().next().getBindings());
83+
7984
LOG.trace("After ask.");
8085
} catch (InterruptedException | ExecutionException e) {
8186
fail();
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package eu.knowledge.engine.smartconnector.impl;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.HashSet;
6+
import java.util.Set;
7+
8+
import org.apache.jena.datatypes.xsd.XSDDatatype;
9+
import org.apache.jena.graph.Node;
10+
import org.apache.jena.graph.NodeFactory;
11+
import org.apache.jena.graph.Node_Concrete;
12+
import org.apache.jena.sparql.core.Var;
13+
import org.junit.jupiter.api.Test;
14+
15+
import eu.knowledge.engine.reasoner.Rule;
16+
import eu.knowledge.engine.smartconnector.api.Binding;
17+
import eu.knowledge.engine.smartconnector.api.BindingSet;
18+
19+
class TestBindingSetConversions {
20+
21+
private OpenReasonerProcessor rp = new OpenReasonerProcessor(new HashSet<>(), null, new HashSet<>());
22+
23+
/**
24+
* Test whether converting typed literals between reasoner and knowledge engine
25+
* binding sets works correctly.
26+
*/
27+
@Test
28+
void testTypedLiteral() {
29+
30+
String varStringVersion = "a";
31+
Var varNodeVersion = Var.alloc(varStringVersion);
32+
Node literalNodeVersion = NodeFactory.createLiteral("true", XSDDatatype.XSDboolean);
33+
var literalStringVersion = "\"true\"^^<http://www.w3.org/2001/XMLSchema#boolean>";
34+
35+
BindingSet bs = new BindingSet();
36+
Binding b = new Binding();
37+
b.put(varStringVersion, literalStringVersion);
38+
bs.add(b);
39+
eu.knowledge.engine.reasoner.api.BindingSet reasonerBS = rp.testerTo(bs);
40+
assertEquals(literalNodeVersion, reasonerBS.iterator().next().get(varStringVersion));
41+
42+
eu.knowledge.engine.reasoner.api.BindingSet bsR = new eu.knowledge.engine.reasoner.api.BindingSet();
43+
eu.knowledge.engine.reasoner.api.Binding bR = new eu.knowledge.engine.reasoner.api.Binding();
44+
bR.put(varNodeVersion, (Node_Concrete) literalNodeVersion);
45+
bsR.add(bR);
46+
BindingSet otherBS = rp.testerFrom(bsR);
47+
assertEquals(literalStringVersion, otherBS.iterator().next().get(varStringVersion));
48+
}
49+
50+
/**
51+
* Make some binding set translation methods available.
52+
*/
53+
public static class OpenReasonerProcessor extends ReasonerProcessor {
54+
public OpenReasonerProcessor(Set<KnowledgeInteractionInfo> knowledgeInteractions, MessageRouter messageRouter,
55+
Set<Rule> someDomainKnowledge) {
56+
super(knowledgeInteractions, messageRouter, someDomainKnowledge);
57+
}
58+
59+
public eu.knowledge.engine.reasoner.api.BindingSet testerTo(BindingSet bs) {
60+
return this.translateBindingSetTo(bs);
61+
}
62+
63+
public BindingSet testerFrom(eu.knowledge.engine.reasoner.api.BindingSet bs) {
64+
return this.translateBindingSetFrom(bs);
65+
}
66+
}
67+
68+
}

0 commit comments

Comments
 (0)