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/main/scala/rsacomb/RSAOntology.scala | |
| parent | 3bc39ecf2eb168e1124bb123b9df0a8b933e6955 (diff) | |
| download | RSAComb-cb5f08f7dc9c811488c499d5b5fa65e3451aff5e.tar.gz RSAComb-cb5f08f7dc9c811488c499d5b5fa65e3451aff5e.zip | |
Add functions to detect class/role assertions
Diffstat (limited to 'src/main/scala/rsacomb/RSAOntology.scala')
| -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) |
