aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb/Main.scala
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-11-14 14:00:55 +0000
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-11-14 14:00:55 +0000
commit313d3f835977f4d7f59e32e1b6cf4a508e1a3431 (patch)
tree79c9985bf826ae3557539bd1cffe49f1bfa9320a /src/main/scala/rsacomb/Main.scala
parent77900dc5a9439336eed37e7b8d6c587d1f9288fc (diff)
downloadRSAComb-313d3f835977f4d7f59e32e1b6cf4a508e1a3431.tar.gz
RSAComb-313d3f835977f4d7f59e32e1b6cf4a508e1a3431.zip
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.
Diffstat (limited to 'src/main/scala/rsacomb/Main.scala')
-rw-r--r--src/main/scala/rsacomb/Main.scala54
1 files changed, 45 insertions, 9 deletions
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._
7 7
8import tech.oxfordsemantic.jrdfox.client.UpdateType 8import tech.oxfordsemantic.jrdfox.client.UpdateType
9import tech.oxfordsemantic.jrdfox.logic.sparql.statement.SelectQuery 9import tech.oxfordsemantic.jrdfox.logic.sparql.statement.SelectQuery
10import tech.oxfordsemantic.jrdfox.logic.expression.{IRI, Term}
10 11
11/* Local imports */ 12/* Local imports */
12import rsacomb.RSA._ 13import rsacomb.RSA._
@@ -73,23 +74,50 @@ object RSAComb extends App {
73 // Open connection to RDFox 74 // Open connection to RDFox
74 val (server, data) = RDFoxUtil.openConnection("AnswerComputation") 75 val (server, data) = RDFoxUtil.openConnection("AnswerComputation")
75 76
76 // Gather canonical model and filtering rules 77 {
78 println("\nQuery")
79 println(query)
80 }
81
82 // Step 1. Computing the canonical model
77 val canon = ontology.canonicalModel 83 val canon = ontology.canonicalModel
78 val filter = ontology.filteringProgram(query) 84 data.addRules(canon.rules.asJava)
79 85
80 { 86 {
81 println("\nCanonical Model rules:") 87 println("\nCanonical Model rules:")
82 canon.rules.foreach(println) 88 canon.rules.foreach(println)
83 println("\nFiltering rules")
84 filter.rules.foreach(println)
85 println("\nQuery")
86 println(query)
87 } 89 }
88 90
89 // Add canonical model and filtering rules 91 // Step 2. Computing the canonical model
90 data.addRules(canon.rules.asJava) 92 val nis = {
93 val query =
94 "SELECT ?Y WHERE { ?X internal:EquivTo ?Y ; a internal:NAMED . }"
95 val cursor =
96 data.createCursor(
97 RSA.Prefixes,
98 query,
99 new HashMap[String, String]()
100 );
101 var mul = cursor.open()
102 var iris: List[IRI] = List()
103 while (mul > 0) {
104 println(cursor.getResource(0))
105 iris = cursor.getResource(0) match {
106 case iri: IRI => iri :: iris
107 case _ => iris
108 }
109 mul = cursor.advance()
110 }
111 iris
112 }
113 val filter = ontology.filteringProgram(query, nis)
91 data.addRules(filter.rules.asJava) 114 data.addRules(filter.rules.asJava)
92 115
116 {
117 println("\nFiltering rules")
118 filter.rules.foreach(println)
119 }
120
93 def retrieveInstances(pred: String, arity: Int): Unit = { 121 def retrieveInstances(pred: String, arity: Int): Unit = {
94 // Build query 122 // Build query
95 var query = "SELECT" 123 var query = "SELECT"
@@ -127,6 +155,14 @@ object RSAComb extends App {
127 1 155 1
128 ) 156 )
129 157
158 println("\nNAMEDs:")
159 RDFoxUtil.submitQuery(
160 data,
161 RSA.Prefixes,
162 "SELECT ?X { ?X a internal:NAMED }",
163 1
164 )
165
130 println("\nNIs:") 166 println("\nNIs:")
131 RDFoxUtil.submitQuery( 167 RDFoxUtil.submitQuery(
132 data, 168 data,
@@ -143,7 +179,7 @@ object RSAComb extends App {
143 RDFoxUtil.submitQuery( 179 RDFoxUtil.submitQuery(
144 data, 180 data,
145 RSA.Prefixes, 181 RSA.Prefixes,
146 "SELECT ?X ?Y { ?X owl:sameAs ?Y }", 182 "SELECT ?X ?Y { ?X internal:EquivTo ?Y }",
147 2 183 2
148 ) 184 )
149 185