GraphDB ruleset usage optimisationΒΆ
GraphDB applies the following rules to optimise the ruleset usage so that inferred statements such as <P a rdf:Property>
, <P rdfs:subPropertyOf P>
and <X a rdfs:Resource>
can appear in the repository:
/*partialRDFS*/
Id: rdf1_rdfs4a_4b
x a y
-------------------------------
a <rdf:type> <rdf:Property>
x <rdf:type> <rdfs:Resource>
a <rdf:type> <rdfs:Resource>
y <rdf:type> <rdfs:Resource>
/*partialRDFS*/
Id: rdfs6
a <rdf:type> <rdf:Property>
-------------------------------
a <rdfs:subPropertyOf> a
According to them, whatever statement comes into the repository, its subject, predicate and object are resources and its predicate is an rdf:Property
, which then becomes subPropertyOf
itself using the second rule (the reflexivity of subPropertyOf
). These rules, however, if executed every time, present a similar challenge to when using owl:sameAs
. To avoid the performance drop, GraphDB obtains these statements through code so that <P a rdf:Property>
and <X a rdfs:Resource>
are asserted only once – when a property or a resource is encountered for the first time (except in the ‘optimized’ rulesets, where rdfs:Resource
is omitted because of the very limited use of such inference).
If we start with the empty
ruleset, <P a rdf:Property>
, <P rdfs:subPropertyOf P>
and <X a rdfs:Resource>
statements won’t be inferred until we switch the ruleset. Then the inference will take place for the new properties and resources only.
Inversely, if we start with a non-empty ruleset and switch to the empty
one, then the statements <P a rdf:Property>
, <P rdfs:subPropertyOf P>
and <X a rdfs:Resource>
inferred so far will remain. This is true even if we delete statements or recompute the inferred closure.