Skip to content
This repository was archived by the owner on Oct 8, 2020. It is now read-only.

Commit e3251ab

Browse files
Added test for FwRuleReasonerOWLHorst rules O11a+b
1 parent 44f6988 commit e3251ab

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Prefix(:=<http://ex.com/default#>)
2+
3+
Ontology(<http://ex.com/ont/sample1.owl>
4+
<http://ex.com/ont/release/123/sample1.owl>
5+
6+
Declaration(Class(:Cls01))
7+
Declaration(Class(:Cls02))
8+
Declaration(Class(:Cls03))
9+
10+
Declaration(Class(:Cls04))
11+
Declaration(Class(:Cls05))
12+
13+
Declaration(Class(:Cls06))
14+
15+
EquivalentClasses(:Cls01 :Cls02 :Cls03)
16+
EquivalentClasses(:Cls04 :Cls05)
17+
)

sansa-inference-spark/src/test/scala/net/sansa_stack/inference/spark/forwardchaining/axioms/ForwardRuleReasonerOWLHorstTest.scala

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,4 +520,54 @@ class ForwardRuleReasonerOWLHorstTest extends FunSuite with SharedSparkContext w
520520
assert(inferred.contains(
521521
df.getOWLObjectPropertyAssertionAxiom(objProp02, indivE, indivG)))
522522
}
523+
524+
/**
525+
* O11a:
526+
* Condition:
527+
* v owl:equivalentClass w
528+
* Consequence:
529+
* v rdfs:subClassOf w
530+
*
531+
* O11b:
532+
* Condition:
533+
* v owl:equivalentClass w
534+
* Consequence:
535+
* w rdfs:subClassOf v
536+
*/
537+
test("Rule O11a and 11b should return correct results") {
538+
val cls01 = df.getOWLClass(defaultPrefix + "Cls01")
539+
val cls02 = df.getOWLClass(defaultPrefix + "Cls02")
540+
val cls03 = df.getOWLClass(defaultPrefix + "Cls03")
541+
val cls04 = df.getOWLClass(defaultPrefix + "Cls04")
542+
val cls05 = df.getOWLClass(defaultPrefix + "Cls05")
543+
544+
val input = getClass.getResource(resourcePath + "test_o11ab.owl").getPath
545+
546+
val axiomsRDD = spark.owl(Syntax.FUNCTIONAL)(input)
547+
val reasoner = new ForwardRuleReasonerOWLHorst(sc, sc.defaultMinPartitions)
548+
val inferred: Seq[OWLAxiom] = reasoner.apply(axiomsRDD).collect()
549+
550+
// Eight axioms should be inferred
551+
// SubClassOf(:Cls01 :Cls02)
552+
// SubClassOf(:Cls01 :Cls03)
553+
// SubClassOf(:Cls02 :Cls01)
554+
// SubClassOf(:Cls02 :Cls03)
555+
// SubClassOf(:Cls03 :Cls01)
556+
// SubClassOf(:Cls03 :Cls02)
557+
//
558+
// SubClassOf(:Cls04 :Cls05)
559+
// SubClassOf(:Cls05 :Cls04)
560+
561+
// Could be more than 8 since axioms like EquivalentClasses(:Cls01 :Cls02),
562+
// EquivalentClasses(:Cls01 :Cls03) etc. seem to be inferred as well
563+
assert(inferred.size >= 8)
564+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls01, cls02)))
565+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls01, cls03)))
566+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls02, cls01)))
567+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls02, cls03)))
568+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls03, cls01)))
569+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls03, cls02)))
570+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls04, cls05)))
571+
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls05, cls04)))
572+
}
523573
}

0 commit comments

Comments
 (0)