From 313d3f835977f4d7f59e32e1b6cf4a508e1a3431 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sat, 14 Nov 2020 14:00:55 +0000 Subject: Fix NI predicate computation Now NAMED is introduced during the canonical model computation, while NI instances are computed and introduced in the filtering program generation phase. --- src/main/scala/rsacomb/Main.scala | 54 ++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'src/main/scala/rsacomb/Main.scala') diff --git a/src/main/scala/rsacomb/Main.scala b/src/main/scala/rsacomb/Main.scala index 39040fc..596ef33 100644 --- a/src/main/scala/rsacomb/Main.scala +++ b/src/main/scala/rsacomb/Main.scala @@ -7,6 +7,7 @@ import scala.collection.JavaConverters._ import tech.oxfordsemantic.jrdfox.client.UpdateType import tech.oxfordsemantic.jrdfox.logic.sparql.statement.SelectQuery +import tech.oxfordsemantic.jrdfox.logic.expression.{IRI, Term} /* Local imports */ import rsacomb.RSA._ @@ -73,23 +74,50 @@ object RSAComb extends App { // Open connection to RDFox val (server, data) = RDFoxUtil.openConnection("AnswerComputation") - // Gather canonical model and filtering rules + { + println("\nQuery") + println(query) + } + + // Step 1. Computing the canonical model val canon = ontology.canonicalModel - val filter = ontology.filteringProgram(query) + data.addRules(canon.rules.asJava) { println("\nCanonical Model rules:") canon.rules.foreach(println) - println("\nFiltering rules") - filter.rules.foreach(println) - println("\nQuery") - println(query) } - // Add canonical model and filtering rules - data.addRules(canon.rules.asJava) + // Step 2. Computing the canonical model + val nis = { + val query = + "SELECT ?Y WHERE { ?X internal:EquivTo ?Y ; a internal:NAMED . }" + val cursor = + data.createCursor( + RSA.Prefixes, + query, + new HashMap[String, String]() + ); + var mul = cursor.open() + var iris: List[IRI] = List() + while (mul > 0) { + println(cursor.getResource(0)) + iris = cursor.getResource(0) match { + case iri: IRI => iri :: iris + case _ => iris + } + mul = cursor.advance() + } + iris + } + val filter = ontology.filteringProgram(query, nis) data.addRules(filter.rules.asJava) + { + println("\nFiltering rules") + filter.rules.foreach(println) + } + def retrieveInstances(pred: String, arity: Int): Unit = { // Build query var query = "SELECT" @@ -127,6 +155,14 @@ object RSAComb extends App { 1 ) + println("\nNAMEDs:") + RDFoxUtil.submitQuery( + data, + RSA.Prefixes, + "SELECT ?X { ?X a internal:NAMED }", + 1 + ) + println("\nNIs:") RDFoxUtil.submitQuery( data, @@ -143,7 +179,7 @@ object RSAComb extends App { RDFoxUtil.submitQuery( data, RSA.Prefixes, - "SELECT ?X ?Y { ?X owl:sameAs ?Y }", + "SELECT ?X ?Y { ?X internal:EquivTo ?Y }", 2 ) -- cgit v1.2.3