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

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 Tuesday, 5 May 2015 18:25:48 UTC