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

Commit f362f47

Browse files
Added test for ForwardRuleReasonerOWLHorst R2 rule
1 parent aed373e commit f362f47

2 files changed

Lines changed: 103 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
Declaration(ObjectProperty(:objProp04))
10+
Declaration(ObjectProperty(:objProp05))
11+
12+
Declaration(DataProperty(:dataProp01))
13+
Declaration(DataProperty(:dataProp02))
14+
Declaration(DataProperty(:dataProp03))
15+
Declaration(DataProperty(:dataProp04))
16+
Declaration(DataProperty(:dataProp05))
17+
18+
Declaration(AnnotationProperty(:annProp01))
19+
Declaration(AnnotationProperty(:annProp02))
20+
Declaration(AnnotationProperty(:annProp03))
21+
Declaration(AnnotationProperty(:annProp04))
22+
Declaration(AnnotationProperty(:annProp05))
23+
24+
25+
SubObjectPropertyOf(:objProp02 :objProp01)
26+
SubObjectPropertyOf(:objProp03 :objProp02)
27+
SubObjectPropertyOf(:objProp04 :objProp03)
28+
SubObjectPropertyOf(:objProp05 :objProp01)
29+
30+
SubDataPropertyOf(:dataProp02 :dataProp01)
31+
SubDataPropertyOf(:dataProp03 :dataProp02)
32+
SubDataPropertyOf(:dataProp04 :dataProp03)
33+
SubDataPropertyOf(:dataProp05 :dataProp01)
34+
35+
SubAnnotationPropertyOf(:annProp02 :annProp01)
36+
SubAnnotationPropertyOf(:annProp03 :annProp02)
37+
SubAnnotationPropertyOf(:annProp04 :annProp03)
38+
SubAnnotationPropertyOf(:annProp05 :annProp01)
39+
)

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,70 @@ class ForwardRuleReasonerOWLHorstTest extends FunSuite with SharedSparkContext w
7474
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls03, cls01)))
7575
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls04, cls01)))
7676
assert(inferred.contains(df.getOWLSubClassOfAxiom(cls04, cls02)))
77+
}
78+
79+
/**
80+
* R2:
81+
* Condition:
82+
* p rdfs:subPropertyOf p1
83+
* p1 rdfs:subPropertyOf p2
84+
* Consequence:
85+
* p rdfs:subPropertyOf p2
86+
*/
87+
test("Rule R2 should return correct results") {
88+
/*
89+
* Property hierarchies:
90+
*
91+
* :objProp01 :dataProp01 :annProp01
92+
* / \ / \ / \
93+
* :objProp02 :objProp05 :dataProp02 :dataProp05 :annProp02 :annProp05
94+
* | | |
95+
* :objProp03 :dataProp03 :annProp03
96+
* | | |
97+
* :objProp04 :dataProp04 :annProp04
98+
*/
99+
val objProp01 = df.getOWLObjectProperty(defaultPrefix + "objProp01")
100+
val objProp02 = df.getOWLObjectProperty(defaultPrefix + "objProp02")
101+
val objProp03 = df.getOWLObjectProperty(defaultPrefix + "objProp03")
102+
val objProp04 = df.getOWLObjectProperty(defaultPrefix + "objProp04")
103+
104+
val dataProp01 = df.getOWLDataProperty(defaultPrefix + "dataProp01")
105+
val dataProp02 = df.getOWLDataProperty(defaultPrefix + "dataProp02")
106+
val dataProp03 = df.getOWLDataProperty(defaultPrefix + "dataProp03")
107+
val dataProp04 = df.getOWLDataProperty(defaultPrefix + "dataProp04")
108+
109+
val annProp01 = df.getOWLAnnotationProperty(defaultPrefix + "annProp01")
110+
val annProp02 = df.getOWLAnnotationProperty(defaultPrefix + "annProp02")
111+
val annProp03 = df.getOWLAnnotationProperty(defaultPrefix + "annProp03")
112+
val annProp04 = df.getOWLAnnotationProperty(defaultPrefix + "annProp04")
113+
114+
115+
val input = getClass.getResource(resourcePath + "test_r2.owl").getPath
116+
117+
val axiomsRDD = spark.owl(Syntax.FUNCTIONAL)(input)
118+
val reasoner = new ForwardRuleReasonerOWLHorst(sc, sc.defaultMinPartitions)
119+
val inferred: Seq[OWLAxiom] = reasoner.apply(axiomsRDD).collect()
120+
121+
// Nine axioms should be inferred:
122+
// SubObjectPropertyOf(:objProp03 :objProp01)
123+
// SubObjectPropertyOf(:objProp04 :objProp01)
124+
// SubObjectPropertyOf(:objProp04 :objProp02)
125+
// SubDataPropertyOf(:dataProp03 :dataProp01)
126+
// SubDataPropertyOf(:dataProp04 :dataProp01)
127+
// SubDataPropertyOf(:dataProp04 :dataProp02)
128+
// SubAnnotationProperty(:annProp03 :annProp01)
129+
// SubAnnotationProperty(:annProp04 :annProp01)
130+
// SubAnnotationProperty(:annProp04 :annProp02)
131+
assert(inferred.size == 9)
132+
assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp03, objProp01)))
133+
assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp04, objProp01)))
134+
assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp04, objProp02)))
135+
assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp03, dataProp01)))
136+
assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp04, dataProp01)))
137+
assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp04, dataProp02)))
138+
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp03, annProp01)))
139+
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp01)))
140+
assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp02)))
77141

78142
}
79143
}

0 commit comments

Comments
 (0)