aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-08 10:28:45 +0200
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-08 10:28:45 +0200
commitcb5f08f7dc9c811488c499d5b5fa65e3451aff5e (patch)
tree787064a2f34948d745e5df2c3e8ba5f62e40290b /src
parent3bc39ecf2eb168e1124bb123b9df0a8b933e6955 (diff)
downloadRSAComb-cb5f08f7dc9c811488c499d5b5fa65e3451aff5e.tar.gz
RSAComb-cb5f08f7dc9c811488c499d5b5fa65e3451aff5e.zip
Add functions to detect class/role assertions
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/rsacomb/RSAOntology.scala57
1 files changed, 43 insertions, 14 deletions
diff --git a/src/main/scala/rsacomb/RSAOntology.scala b/src/main/scala/rsacomb/RSAOntology.scala
index 06351d5..e49d4ac 100644
--- a/src/main/scala/rsacomb/RSAOntology.scala
+++ b/src/main/scala/rsacomb/RSAOntology.scala
@@ -240,6 +240,12 @@ trait RSAOntology {
240 def isRdfTriple(atom: Atom): Boolean = 240 def isRdfTriple(atom: Atom): Boolean =
241 atom.getTupleTableName.getIRI.equals("internal:triple") 241 atom.getTupleTableName.getIRI.equals("internal:triple")
242 242
243 def isClassAssertion(atom: Atom): Boolean =
244 isRdfTriple(atom) && atom.getArgument(1).equals(IRI.RDF_TYPE)
245
246 def isRoleAssertion(atom: Atom): Boolean =
247 isRdfTriple(atom) && !atom.getArgument(1).equals(IRI.RDF_TYPE)
248
243 def reify( 249 def reify(
244 formula: BodyFormula, 250 formula: BodyFormula,
245 head: Boolean 251 head: Boolean
@@ -297,29 +303,39 @@ trait RSAOntology {
297 } 303 }
298 304
299 val body = formulaToRuleBody(query.getQueryFormula) 305 val body = formulaToRuleBody(query.getQueryFormula)
300 val vars: List[Term] = query.getAnswerVariables.asScala.toList 306 val bounded: List[Term] = List()
307 val answer: List[Term] = query.getAnswerVariables.asScala.toList
301 def id(t1: Term, t2: Term) = 308 def id(t1: Term, t2: Term) =
302 Atom.create( 309 Atom.create(
303 TupleTableName.create("http://127.0.0.1/ID"), 310 TupleTableName.create("http://127.0.0.1/ID"),
304 vars.appendedAll(List(t1, t2)).asJava 311 (bounded ++ answer).appendedAll(List(t1, t2)).asJava
312 )
313 def tq(suffix: String, t1: Term, t2: Term) =
314 Atom.create(
315 TupleTableName.create(s"http://127.0.0.1/TQ$suffix"),
316 (bounded ++ answer).appendedAll(List(t1, t2)).asJava
317 )
318 def aq(suffix: String, t1: Term, t2: Term) =
319 Atom.create(
320 TupleTableName.create(s"http://127.0.0.1/AQ$suffix"),
321 (bounded ++ answer).appendedAll(List(t1, t2)).asJava
305 ) 322 )
306 val qm = Atom.create(TupleTableName.create("QM"), vars.asJava) 323 val qm =
324 Atom.create(TupleTableName.create("QM"), (bounded ++ answer).asJava)
307 325
308 /* Filtering program */ 326 /* Filtering program */
309 val rule1 = Rule.create(qm, body.asJava) 327 val rule1 = Rule.create(qm, body.asJava)
310 val rule3a = 328 val rule3a =
311 for ((v, i) <- vars.zipWithIndex) 329 for ((v, i) <- answer.zipWithIndex)
312 yield Rule.create( 330 yield Rule.create(
313 id( 331 id(
314 IRI.create(s"http://127.0.0.1/$i"), 332 IRI.create(s"http://127.0.0.1/$i"),
315 IRI.create(s"http://127.0.0.1/$i") 333 IRI.create(s"http://127.0.0.1/$i")
316 ), 334 ),
317 List( 335 qm,
318 qm, 336 Negation.create(
319 Negation.create( 337 Atom.rdf(v, IRI.RDF_TYPE, IRI.create("http://127.0.0.1/NI"))
320 Atom.rdf(v, IRI.RDF_TYPE, IRI.create("http://127.0.0.1/NI")) 338 )
321 )
322 ).asJava
323 ) 339 )
324 val rule3b = Rule.create( 340 val rule3b = Rule.create(
325 id(Variable.create("V"), Variable.create("U")), 341 id(Variable.create("V"), Variable.create("U")),
@@ -327,14 +343,27 @@ trait RSAOntology {
327 ) 343 )
328 val rule3c = Rule.create( 344 val rule3c = Rule.create(
329 id(Variable.create("U"), Variable.create("W")), 345 id(Variable.create("U"), Variable.create("W")),
330 List[BodyFormula]( 346 id(Variable.create("U"), Variable.create("V")),
331 id(Variable.create("U"), Variable.create("V")), 347 id(Variable.create("V"), Variable.create("W"))
332 id(Variable.create("V"), Variable.create("W"))
333 ).asJava
334 ) 348 )
349 val rule7a =
350 for (r <- Seq("f", "b"))
351 yield Rule.create(
352 tq(r, Variable.create("U"), Variable.create("V")),
353 aq(r, Variable.create("U"), Variable.create("V"))
354 )
355 val rule7b =
356 for (r <- Seq("f", "b"))
357 yield Rule.create(
358 tq(r, Variable.create("U"), Variable.create("W")),
359 aq(r, Variable.create("U"), Variable.create("V")),
360 tq(r, Variable.create("V"), Variable.create("W"))
361 )
335 362
336 var rules: List[Rule] = 363 var rules: List[Rule] =
337 List.empty 364 List.empty
365 .prependedAll(rule7b)
366 .prependedAll(rule7a)
338 .prepended(rule3c) 367 .prepended(rule3c)
339 .prepended(rule3b) 368 .prepended(rule3b)
340 .prependedAll(rule3a) 369 .prependedAll(rule3a)