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

Commit e76db6e

Browse files
Added test for ForwardRuleReasonerOWLHorst R3 rule
1 parent f362f47 commit e76db6e

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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(ObjectProperty(:objProp01))
7+
Declaration(ObjectProperty(:objProp02))
8+
Declaration(ObjectProperty(:objProp03))
9+
10+
Declaration(DataProperty(:dataProp01))
11+
Declaration(DataProperty(:dataProp02))
12+
Declaration(DataProperty(:dataProp03))
13+
14+
Declaration(AnnotationProperty(:annProp01))
15+
Declaration(AnnotationProperty(:annProp02))
16+
Declaration(AnnotationProperty(:annProp03))
17+
18+
Declaration(NamedIndividual(:indivA))
19+
Declaration(NamedIndividual(:indivB))
20+
Declaration(NamedIndividual(:indivC))
21+
22+
SubObjectPropertyOf(:objProp02 :objProp01)
23+
SubDataPropertyOf(:dataProp02 :dataProp01)
24+
SubAnnotationPropertyOf(:annProp02 :annProp01)
25+
26+
ObjectPropertyAssertion(:objProp02 :indivA :indivB)
27+
ObjectPropertyAssertion(:objProp03 :indivB :indivC)
28+
29+
DataPropertyAssertion(:dataProp02 :indivA "ABCD")
30+
DataPropertyAssertion(:dataProp03 :indivB "DCBA")
31+
32+
AnnotationAssertion(:annProp02 :indivA "wxyz")
33+
AnnotationAssertion(:annProp03 :indivB "zyxw")
34+
)

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,43 @@ class ForwardRuleReasonerOWLHorstTest extends FunSuite with SharedSparkContext w
138138
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp03, annProp01)))
139139
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp01)))
140140
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp02)))
141+
}
142+
143+
/**
144+
* R3:
145+
* Condition:
146+
* s p o
147+
* p rdfs:subPropertyOf p1
148+
* Consequence:
149+
* s p1 o
150+
*/
151+
test("Rule R3 should return correct results") {
152+
val objProp01 = df.getOWLObjectProperty(defaultPrefix + "objProp01")
153+
val dataProp01 = df.getOWLDataProperty(defaultPrefix + "dataProp01")
154+
val annProp01 = df.getOWLAnnotationProperty(defaultPrefix + "annProp01")
155+
156+
val indivA = df.getOWLNamedIndividual(defaultPrefix + "indivA")
157+
val indivB = df.getOWLNamedIndividual(defaultPrefix + "indivB")
158+
159+
val input = getClass.getResource(resourcePath + "test_r3.owl").getPath
160+
161+
val axiomsRDD = spark.owl(Syntax.FUNCTIONAL)(input)
162+
val reasoner = new ForwardRuleReasonerOWLHorst(sc, sc.defaultMinPartitions)
163+
val inferred: Seq[OWLAxiom] = reasoner.apply(axiomsRDD).collect()
164+
165+
// Three axioms should be inferred:
166+
// ObjectPropertyAssertion(:objProp01 :indivA :indivB)
167+
// DataPropertyAssertion(:dataProp1 :indivA "ABCD")
168+
// AnnotationAssertion(:annProp01 :indivA "wxyz")
169+
assert(inferred.size == 3)
170+
assert(inferred.contains(
171+
df.getOWLObjectPropertyAssertionAxiom(objProp01, indivA, indivB)))
172+
assert(inferred.contains(
173+
df.getOWLDataPropertyAssertionAxiom(dataProp01, indivA,
174+
df.getOWLLiteral("ABCD"))))
175+
assert(inferred.contains(
176+
df.getOWLAnnotationAssertionAxiom(annProp01, indivA.getIRI,
177+
df.getOWLLiteral("wxyz"))))
141178

142179
}
143180
}

0 commit comments

Comments
 (0)