@@ -94,4 +94,67 @@ class ForwardRuleReasonerRDFSTest extends FunSuite with SharedSparkContext with
9494 assert(inferred.size == 1 )
9595 assert(inferred.contains(df.getOWLClassAssertionAxiom(cls01, indivC)))
9696 }
97+
98+ /**
99+ * rdfs5
100+ * Condition:
101+ * xxx rdfs:subPropertyOf yyy .
102+ * yyy rdfs:subPropertyOf zzz .
103+ * Consequence:
104+ * xxx rdfs:subPropertyOf zzz .
105+ */
106+ test(" Rule rdfs5 should return correct results" ) {
107+ /*
108+ * Property hierarchies:
109+ *
110+ * :objProp01 :dataProp01 :annProp01
111+ * / \ / \ / \
112+ * :objProp02 :objProp05 :dataProp02 :dataProp05 :annProp02 :annProp05
113+ * | | |
114+ * :objProp03 :dataProp03 :annProp03
115+ * | | |
116+ * :objProp04 :dataProp04 :annProp04
117+ */
118+ val objProp01 = df.getOWLObjectProperty(defaultPrefix + " objProp01" )
119+ val objProp02 = df.getOWLObjectProperty(defaultPrefix + " objProp02" )
120+ val objProp03 = df.getOWLObjectProperty(defaultPrefix + " objProp03" )
121+ val objProp04 = df.getOWLObjectProperty(defaultPrefix + " objProp04" )
122+
123+ val dataProp01 = df.getOWLDataProperty(defaultPrefix + " dataProp01" )
124+ val dataProp02 = df.getOWLDataProperty(defaultPrefix + " dataProp02" )
125+ val dataProp03 = df.getOWLDataProperty(defaultPrefix + " dataProp03" )
126+ val dataProp04 = df.getOWLDataProperty(defaultPrefix + " dataProp04" )
127+
128+ val annProp01 = df.getOWLAnnotationProperty(defaultPrefix + " annProp01" )
129+ val annProp02 = df.getOWLAnnotationProperty(defaultPrefix + " annProp02" )
130+ val annProp03 = df.getOWLAnnotationProperty(defaultPrefix + " annProp03" )
131+ val annProp04 = df.getOWLAnnotationProperty(defaultPrefix + " annProp04" )
132+
133+ val input = getClass.getResource(resourcePath + " test_rdfs5.owl" ).getPath
134+
135+ val axiomsRDD = spark.owl(Syntax .FUNCTIONAL )(input)
136+ val reasoner = new ForwardRuleReasonerRDFS (sc, sc.defaultMinPartitions)
137+ val inferred : Seq [OWLAxiom ] = reasoner.apply(axiomsRDD).collect()
138+
139+ // Nine axioms should be inferred:
140+ // SubObjectPropertyOf(:objProp03 :objProp01)
141+ // SubObjectPropertyOf(:objProp04 :objProp01)
142+ // SubObjectPropertyOf(:objProp04 :objProp02)
143+ // SubDataPropertyOf(:dataProp03 :dataProp01)
144+ // SubDataPropertyOf(:dataProp04 :dataProp01)
145+ // SubDataPropertyOf(:dataProp04 :dataProp02)
146+ // SubAnnotationProperty(:annProp03 :annProp01)
147+ // SubAnnotationProperty(:annProp04 :annProp01)
148+ // SubAnnotationProperty(:annProp04 :annProp02)
149+ assert(inferred.size == 9 )
150+ assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp03, objProp01)))
151+ assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp04, objProp01)))
152+ assert(inferred.contains(df.getOWLSubObjectPropertyOfAxiom(objProp04, objProp02)))
153+ assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp03, dataProp01)))
154+ assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp04, dataProp01)))
155+ assert(inferred.contains(df.getOWLSubDataPropertyOfAxiom(dataProp04, dataProp02)))
156+ assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp03, annProp01)))
157+ assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp01)))
158+ assert(inferred.contains(df.getOWLSubAnnotationPropertyOfAxiom(annProp04, annProp02)))
159+ }
97160}
0 commit comments