aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-11-13 18:58:44 +0000
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-11-13 18:58:44 +0000
commit77900dc5a9439336eed37e7b8d6c587d1f9288fc (patch)
tree26e690b053ac032538a7d2b53608f8269c8b17b8
parent9e1549537b22851c360b05460098c9e1cee4dcaa (diff)
downloadRSAComb-77900dc5a9439336eed37e7b8d6c587d1f9288fc.tar.gz
RSAComb-77900dc5a9439336eed37e7b8d6c587d1f9288fc.zip
Add diagnostic queries along main query
-rw-r--r--src/main/scala/rsacomb/Main.scala109
1 files changed, 83 insertions, 26 deletions
diff --git a/src/main/scala/rsacomb/Main.scala b/src/main/scala/rsacomb/Main.scala
index b893c4f..39040fc 100644
--- a/src/main/scala/rsacomb/Main.scala
+++ b/src/main/scala/rsacomb/Main.scala
@@ -6,6 +6,7 @@ import java.util.HashMap
6import scala.collection.JavaConverters._ 6import 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
9 10
10/* Local imports */ 11/* Local imports */
11import rsacomb.RSA._ 12import rsacomb.RSA._
@@ -56,12 +57,12 @@ object RSAComb extends App {
56 /* Load query */ 57 /* Load query */
57 val query = RDFoxUtil.parseQuery( 58 val query = RDFoxUtil.parseQuery(
58 """ 59 """
59 SELECT ?uno 60 SELECT ?X
60 WHERE { 61 WHERE {
61 ?uno a :D ; 62 ?X a :D ;
62 :R ?due . 63 :R ?Y .
63 ?due :S ?tre . 64 ?Y :S ?Z .
64 ?tre a :D . 65 ?Z a :D .
65 } 66 }
66 """ 67 """
67 ) 68 )
@@ -77,36 +78,92 @@ object RSAComb extends App {
77 val filter = ontology.filteringProgram(query) 78 val filter = ontology.filteringProgram(query)
78 79
79 { 80 {
81 println("\nCanonical Model rules:")
82 canon.rules.foreach(println)
83 println("\nFiltering rules")
80 filter.rules.foreach(println) 84 filter.rules.foreach(println)
85 println("\nQuery")
86 println(query)
81 } 87 }
82 88
83 // Import relevant data 89 // Add canonical model and filtering rules
84 data.importData(UpdateType.ADDITION, RSA.Prefixes, ":a a :A .")
85 data.addRules(canon.rules.asJava) 90 data.addRules(canon.rules.asJava)
86 data.addRules(filter.rules.asJava) 91 data.addRules(filter.rules.asJava)
87 92
88 // Collect answers to query 93 def retrieveInstances(pred: String, arity: Int): Unit = {
89 for ((v, i) <- filter.variables.view.zipWithIndex) { 94 // Build query
90 println(s"Variable $i:") 95 var query = "SELECT"
91 val query = s"SELECT ?X ?Y WHERE { ?X internal:Ans_$i ?Y }" 96 for (i <- 0 until arity) {
92 val cursor = 97 query ++= s" ?X$i"
93 data.createCursor(
94 RSA.Prefixes,
95 query,
96 new HashMap[String, String]()
97 );
98 var mul = cursor.open()
99 while (mul > 0) {
100 printf(
101 "Ans_%d(%s,%s)",
102 i,
103 cursor.getResource(0),
104 cursor.getResource(1)
105 )
106 mul = cursor.advance()
107 } 98 }
99 query ++= " WHERE {"
100 for (i <- 0 until arity) {
101 query ++= s" ?S internal:${pred}_$i ?X$i ."
102 }
103 query ++= " }"
104 // Collect answers
105 RDFoxUtil.submitQuery(
106 data,
107 RSA.Prefixes,
108 query,
109 arity
110 )
108 } 111 }
109 112
113 // Retrieve answers
114 println("\nAnswers:")
115 retrieveInstances("ANS", filter.answer.length)
116
117 /* DEBUG: adding additional checks
118 */
119 println("\nIndividuals:")
120 ontology.individuals.foreach(println)
121
122 println("\nThings:")
123 RDFoxUtil.submitQuery(
124 data,
125 RSA.Prefixes,
126 "SELECT ?X { ?X a owl:Thing }",
127 1
128 )
129
130 println("\nNIs:")
131 RDFoxUtil.submitQuery(
132 data,
133 RSA.Prefixes,
134 "SELECT ?X { ?X a internal:NI }",
135 1
136 )
137
138 // ID instances
139 println("\nID instances:")
140 retrieveInstances("ID", filter.variables.length + 2)
141
142 println("\nSameAs instances:")
143 RDFoxUtil.submitQuery(
144 data,
145 RSA.Prefixes,
146 "SELECT ?X ?Y { ?X owl:sameAs ?Y }",
147 2
148 )
149
150 // Unfiltered answers
151 println("\nPossible answers:")
152 retrieveInstances("QM", filter.variables.length)
153
154 // Cycle detected
155 println("\nCycle detection:")
156 retrieveInstances("AQ_f", filter.variables.length + 2)
157 retrieveInstances("AQ_b", filter.variables.length + 2)
158
159 // Forks detected
160 println("\nForks:")
161 retrieveInstances("FK", filter.variables.length)
162
163 // Spurious answers
164 println("\nSpurious answers")
165 retrieveInstances("SP", filter.variables.length)
166
110 // Close connection to RDFox 167 // Close connection to RDFox
111 RDFoxUtil.closeConnection(server, data) 168 RDFoxUtil.closeConnection(server, data)
112 } 169 }