diff options
author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-09-08 10:28:45 +0200 |
---|---|---|
committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-09-08 10:28:45 +0200 |
commit | cb5f08f7dc9c811488c499d5b5fa65e3451aff5e (patch) | |
tree | 787064a2f34948d745e5df2c3e8ba5f62e40290b /src | |
parent | 3bc39ecf2eb168e1124bb123b9df0a8b933e6955 (diff) | |
download | RSAComb-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.scala | 57 |
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) |