I have recently migrated from 4.0.5 to 4.2 in my Linux machine. After the change I think I was getting different results from 4.0.5 to 4.2, but I did not notice anything different, perhaps they were subtle due to my queries. The issue started when I installed 4.2 from scratch in a Windows machine, loaded the same data that were in my Linux, and got different results from my queries. I compared them both and I could only see that the Windows Web access had a "Strict Parsing" and "Preserve BNode identifiers" that the Linux one didn't (under
http://localhost:5820/#/databases/mydb). That was strange.
Then I started checking my queries. At the beginning I thought the issue came from a different treatment of the "inverse" and "self" features. When I move the database from the Linux computer directly into the Windows computer I also got different results than those I got from loading the data. So there must be something in my Linux database that I did not migrate properly, even though I tried to use the "migrate" option.
Then I traced down some of the strange things I saw and after some hours of testing I could get an example for you to reproduce that looks funny. It is very simple... I am not sure I am doing anything wrong, but I can't find my mistake. So these are the example data:
:microsoft rdf:type :Institution .
:microsoft rdf:type owl:NamedIndividual .
:project rdf:type :SmallProject .
:project rdf:type owl:NamedIndividual .
:microsoft :participatesIn :project .
:project :conductsTask :task1 .
:usesOffice rdf:type owl:ObjectProperty ;
rdfs:range :Office ;
owl:propertyChainAxiom
( :conductsTask
:usesOffice
) .
:Office rdf:type owl:Class .
:Institution rdf:type owl:Class .
This was working before my upgrade to 4.2. If something conducts a task that uses an office, it is also considered to use an office:
conductsTask(x,y) ^ usesOffice(y,z) -> usesOffice(x,z)
Because of the range, it is inferred that :microsoft is an office (always with reasoning ON, under SL):
SELECT ?o
WHERE {
:microsoft rdf:type ?o
}
RESULTS:
o
owl:Thing
Moreover, anything is an office:
SELECT ?o
WHERE {
:whatever_doesntexist rdf:type ?o
}
RESULTS:
o
owl:Thing
I have tried a reasoner externally to double check and I don't get this unexpected result.
Is there something I am missing? Why it worked and now it does not?