Referential opacity: current state of affairs

Hi all,

following the discussions about referential opacity [1,2], let me share 
the results of some experiments that I have done. I created a small 
python script [3] which:

* feeds a small RDF* in the triple store, and then

* checks the result of a few ASK queries on that graph.

I ran it with GraphDB, Stardog, Corese and Fuseki (all with OWL RL 
inference enabled). The findings are the following.

  * All 4 implementations treat IRIs inside embedded triple as
    referentially opaque, i.e. << :s :p :o1 >> and << :s :p :o2 >> are
    considered different, even if :o1 owl:sameAs :o2. (NB: Stardog
    issues an error on that test, but that's a bug that I discussed
    privately with Pavel, and he confirmed that the intended behaviour
    is the same as the others).

  * 3 of the 4 implementations treat literals inside embedded triples as
    referentially opaque, i.e. << :s :p "42"^^xsd:integer >> and << :s
    :p "042"^^xsd:integer >> are considered different.

  * The handling of bnodes is more heterogeneous; the 1st test replaces
    an IRI by a bnode, the 2nd test replaces a bnode by another bnode. I
    suspect the heterogeneity is related to the bug mentioned above in
    Stardog, and a known issue in Jena [4].


Here are the detailed results (note that the tests are about referential 
*transparency* (the ASK query will return False if the terms are 
referentially opaque).

GraphDB
         supports owl:sameAs:     True
         RDF* mode:       SA
         ref. transp. IRI:        False
         ref. transp. lit.:       False
         ref. transp. bnode:      True
         ref. transp. bnode2:     True
Stardog
         supports owl:sameAs:     True
         RDF* mode:       PG
         ref. transp. IRI:        (ERROR)
         ref. transp. lit.:       False
         ref. transp. bnode:      False
         ref. transp. bnode2:     True
Corese
         supports owl:sameAs:     True
         RDF* mode:       PG
         ref. transp. IRI:        False
         ref. transp. lit.:       True
         ref. transp. bnode:      True
         ref. transp. bnode2:     True
Fuseki
         supports owl:sameAs:     True
         RDF* mode:       SA
         ref. transp. IRI:        False
         ref. transp. lit.:       False
         ref. transp. bnode:      False
         ref. transp. bnode2:     False

   best


[1] https://github.com/w3c/rdf-star/issues/22

[2] https://w3c.github.io/rdf-star/Minutes/2020-11-13.html#item03 
<https://w3c.github.io/rdf-star/Minutes/2020-11-13.html#item03>

[3] https://gist.github.com/pchampin/a53f53cb23591776cf33c012cc32c090

[4] https://issues.apache.org/jira/browse/JENA-1952 
<https://issues.apache.org/jira/browse/JENA-1952>

Received on Monday, 16 November 2020 10:21:10 UTC