Hi,

it is reasonably common in RDF vocabularies to see that a property is
defined as an rdfs:subPropertyOf a blank node, such as in this example:

### vocabulary.ttl

PREFIX :     <http://example.com/>
PREFIX owl:  <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

:p1 rdfs:subPropertyOf _:b1 .
_:b1 owl:inverseOf :p2 .

###

Example data using this vocabulary:

### data.ttl

PREFIX : <http://example.com/>

:e1 :p1 :e2 .

###

When RDFS inference is applied to this data, using the vocabulary with
Jena's command-line tool infer (the current 3.13.1 version, source code:
https://github.com/apache/jena/blob/master/jena-cmds/src/main/java/riotcmd/infer.java),
i.e. infer --rdfs vocabulary.ttl data.ttl, we get the following result
(here prettified):

###

PREFIX : <http://example.com/>

:e1 :p1 :e2 ;
  _:b2 :e2 .

###

As you can see, we infer that :e1 _:b2 :e2, which is invalid, because blank
nodes (i.e. _:b2) are not permitted as predicates in RDF (
https://www.w3.org/TR/rdf11-concepts/#h3_section-triples).

Now, it is clear how that follows from the rdfs:subPropertyOf inference
rules (set aside that what we might actually want an RDFS/OWL reasoner that
would give us :e2 :p2 :e1), but should such inference be made if it
violates the RDF data model?

I wonder if checking the produced inferences for validity is expensive, or
if Jena's infer assumes a superset of RDF. Removing such inferences in
post-processing is a bit tricky because RDF parsers recognize this as an
error and fail.

- Jindrich

-- 
Jindrich Mynarz
https://mynarz.net/#jindrich

Reply via email to