@@ -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