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

Commit 83d809a

Browse files
Fixed #1 - literals in subject position of RDF triples
In order to avoid RDF triples with literals as subject, we have to check for non-literals in several rules. Right now, I added checks for rules rdfs3 and rdfs4b. Fixes #1
1 parent c9b185b commit 83d809a

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

sansa-inference-spark/src/main/scala/net/sansa_stack/inference/spark/forwardchaining/triples/ForwardRuleReasonerRDFS.scala

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class ForwardRuleReasonerRDFS(sc: SparkContext, parallelism: Int = 2) extends Tr
120120

121121
val triplesRDFS3 =
122122
otherTriples
123-
.filter(t => rangeMapBC.value.contains(t.p))
123+
.filter(t => !t.getObject.isLiteral && rangeMapBC.value.contains(t.p)) // check for non-literals here
124124
.map(t => Triple.create(t.o, RDF.`type`.asNode(), rangeMapBC.value(t.p)))
125125
.setName("rdfs3")
126126

@@ -179,12 +179,20 @@ class ForwardRuleReasonerRDFS(sc: SparkContext, parallelism: Int = 2) extends Tr
179179
// rdf1: (s p o) => (p rdf:type rdf:Property)
180180

181181
// rdfs4a: (s p o) => (s rdf:type rdfs:Resource)
182-
// rdfs4a: (s p o) => (o rdf:type rdfs:Resource)
183-
val rdfs4 = allTriples.flatMap(t => Set(
184-
Triple.create(t.s, RDF.`type`.asNode(), RDFS.Resource.asNode()),
185-
Triple.create(t.o, RDF.`type`.asNode, RDFS.Resource.asNode)
186-
// RDFTriple(t.predicate, RDF.`type`.getURI, RDF.Property.getURI)
187-
))
182+
// rdfs4b: (s p o) => (o rdf:type rdfs:Resource) // filter by literals
183+
// TODO not sure which version is more effcient, using a FILTER + UNION, or doing it via faltMap but creating Set objects
184+
// val rdfs4 = allTriples.map(t => Triple.create(t.s, RDF.`type`.asNode(), RDFS.Resource.asNode()))
185+
// .union(
186+
// allTriples.filter(!_.getObject.isLiteral).map(t => Triple.create(t.o, RDF.`type`.asNode(), RDFS.Resource.asNode())))
187+
188+
val rdfs4 = allTriples.flatMap(t => {
189+
var set = Set(Triple.create(t.s, RDF.`type`.asNode(), RDFS.Resource.asNode()))
190+
191+
if (!t.getObject.isLiteral) {
192+
set += Triple.create(t.o, RDF.`type`.asNode, RDFS.Resource.asNode)
193+
}
194+
set
195+
})
188196

189197
// rdfs12: (?x rdf:type rdfs:ContainerMembershipProperty) -> (?x rdfs:subPropertyOf rdfs:member)
190198
val rdfs12 = typeTriples

0 commit comments

Comments
 (0)