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

Commit 4751d10

Browse files
Added test for ForwardRuleReasonerOWLHorst R5 rule
1 parent 477ccb1 commit 4751d10

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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(NamedIndividual(:indivA))
11+
Declaration(NamedIndividual(:indivB))
12+
Declaration(NamedIndividual(:indivC))
13+
Declaration(NamedIndividual(:indivD))
14+
Declaration(NamedIndividual(:indivE))
15+
Declaration(NamedIndividual(:indivF))
16+
17+
Declaration(ObjectProperty(:objProp01))
18+
Declaration(ObjectProperty(:objProp02))
19+
ObjectPropertyRange(:objProp02 :Cls01)
20+
21+
Declaration(DataProperty(:dataProp01))
22+
Declaration(DataProperty(:dataProp02))
23+
DataPropertyRange(:dataProp02 :someDataType)
24+
25+
Declaration(AnnotationProperty(:annProp01))
26+
Declaration(AnnotationProperty(:annProp02))
27+
AnnotationPropertyRange(:annProp02 :Cls03)
28+
29+
ObjectPropertyAssertion(:objProp01 :indivA :indivB)
30+
ObjectPropertyAssertion(:objProp02 :indivB :indivC)
31+
32+
DataPropertyAssertion(:dataProp01 :indivC "ABCD")
33+
DataPropertyAssertion(:dataProp02 :indivD "DCBA")
34+
35+
AnnotationAssertion(:annProp01 :indivE "wxyz")
36+
AnnotationAssertion(:annProp02 :indivF :someIRI)
37+
)

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,35 @@ class ForwardRuleReasonerOWLHorstTest extends FunSuite with SharedSparkContext w
207207
assert(inferred.contains(df.getOWLClassAssertionAxiom(cls01, indivB)))
208208
assert(inferred.contains(df.getOWLClassAssertionAxiom(cls02, indivD)))
209209
assert(inferred.contains(df.getOWLClassAssertionAxiom(cls03, indivF)))
210+
}
211+
212+
/**
213+
* R5:
214+
* Condition:
215+
* p rdfs:range o , s p v
216+
* Consequence:
217+
* v rdf:type o
218+
*/
219+
test("Rule R5 should return correct results") {
220+
val cls01 = df.getOWLClass(defaultPrefix + "Cls01")
221+
val indivC = df.getOWLNamedIndividual(defaultPrefix + "indivC")
222+
223+
val input = getClass.getResource(resourcePath + "test_r5.owl").getPath
224+
225+
val axiomsRDD = spark.owl(Syntax.FUNCTIONAL)(input)
226+
val reasoner = new ForwardRuleReasonerOWLHorst(sc, sc.defaultMinPartitions)
227+
val inferred: Seq[OWLAxiom] = reasoner.apply(axiomsRDD).collect()
210228

229+
// One axiom should be inferred:
230+
// ClassAssertion(:Cls01 :indivC)
231+
//
232+
// The axiom
233+
// AnnotationPropertyRange(:annProp02 :Cls03)
234+
// in connection with
235+
// AnnotationAssertion(:annProp02 :indivF :someIRI)
236+
// doesn't generate a new axiom (which is consistent with what e.g. HermiT
237+
// does).
238+
assert(inferred.size == 1)
239+
assert(inferred.contains(df.getOWLClassAssertionAxiom(cls01, indivC)))
211240
}
212241
}

0 commit comments

Comments
 (0)