Re: Blank nodes and OWL reasoning: inherent problem or tool limitation?

FYI, Bijan Parsia kindly provided the following answer, reposted with 
his permission.  Tony (or Eric) can you please try it with hasSSN 
declared as functional and see what you get?  Also please try making it 
*inverse* functional, since I think that would be the more normal case.

Thanks,
David

-------- Forwarded Message --------
Subject: Re: Blank nodes and OWL reasoning: inherent problem or tool 
limitation?
Date: Wed, 6 May 2015 14:51:08 +0100
From: Bijan Parsia <bparsia@cs.man.ac.uk>
To: David Booth <david@dbooth.org>
CC: Jim Hendler <hendler@cs.rpi.edu>

Hi ho,

Blank nodes definitely are tricky in OWL. Semantically, they are 
existential variables. So:

:x :loves _:y.

Is the same as:

:x rdf:type [someValuesFrom owl:Thing; onProperty :loves].

In order to retain decidability, OWL DL has pretty specific restrictions 
on the permissible pattern of existential (some are enforced by the 
variable free syntax).

Furthermore, bnodes are used in the syntax of expressions as well. Hence 
more restrictions :)

Finally, qua existential variables, they are subject to renaming. So:

:x :loves _:y.
:x :loves _:x.

Is the same as:

:x :loves _:y.

That is, for arbitrary bnodes _:y, _:z there’s no even hint that they 
are distinct.

SPARQL (in default entailment regime), basically treats them as names 
and returns them as such.

Finally, there’s the question of variable bindings. In generally, in DL 
instance retrieval, we only retrieve *named* individuals.

But a very quick glance (without testing), shows that the problem the last.

If you make hasSSN functional, then you  should be able to infer that 
frank has at least two children.

Cheers,
Bijan.

On 05/05/2015 02:25 PM, David Booth wrote:
> We are working on an RDF representation and ontology for FHIR (a new
> healthcare data standard)
> http://wiki.hl7.org/index.php?title=FHIR
> and in some cases the most natural RDF to generate would involve blank
> nodes for some nodes instead of URIs.  However, we are noticing that
> this is causing (at least some) OWL reasoners to fail to classify those
> nodes as we would like.  The problem goes away if we use a URI instead
> of a blank node.
>
> Is this an inherent feature of OWL reasoners or a limitation of specific
> tools?
>
> For example, in the turtle below, a DLQuery "hasSSN some xsd:string"
> returns 1 instance: frankson.  In contrast, a SPARQL query
>    prefix : <http://BlankNodeTest/>
>    SELECT ?subject ?object
>    WHERE { ?subject :hasSSN ?object }"
> returns the desired 2 solutions.  Notice the two children of :frank in
> the following example Turtle:
>
> [[
>    @prefix : <http://BlankNodeTest/> .
>    @prefix owl: <http://www.w3.org/2002/07/owl#> .
>    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>    @prefix xml: <http://www.w3.org/XML/1998/namespace> .
>    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
>    @base <http://BlankNodeTest> .
>
>    <http://BlankNodeTest> a owl:Ontology .
>
>    :hasChild a owl:AsymmetricProperty , owl:ObjectProperty .
>
>    :hasHairColor a owl:ObjectProperty ;
>      rdfs:range :HairColor .
>
>    # :hasSSN a owl:ObjectProperty .
>    :hasSSN a owl:DatatypeProperty .
>    :value a owl:DatatypeProperty .
>
>    :code a owl:Class .
>    :HairColor a owl:Class ; rdfs:subClassOf :code .
>
>    :BrownHaired a owl:Class ;
>      owl:equivalentClass [
>          a owl:Class ;
>          owl:intersectionOf (
>            :HairColor
>            [ owl:onProperty :value ; owl:hasValue "brown" ]
>          )
>        ] ;
>      rdfs:subClassOf :HairColor .
>
>    :brown1 a :HairColor , owl:NamedIndividual ;
>      :value "brown" .
>
>    :Person a owl:Class .
>
>    :frank a :Person , owl:NamedIndividual ;
>      :hasChild
>        [
>          a :Person ;
>          :hasSSN "123-45-6789" ;
>          :hasHairColor [
>              a :HairColor ;
>              :value "brown"
>            ]
>        ], :frankson .
>
>    :frankson
>          a :Person ;
>          :hasSSN "123-45-6790" ;
>          :hasHairColor [
>              a :HairColor ;
>              :value "brown"
>            ]
>        .
>   ]]
>
> Thanks,
> David Booth
>
>

Received on Wednesday, 6 May 2015 14:29:37 UTC