Re: New proposal for RDF* Semantics

On 1/12/21 3:29 AM, Pierre-Antoine Champin wrote:
>
>
> On 08/01/2021 19:56, Peter F. Patel-Schneider wrote:
>> Oops, I mixed up RDF graphs and RDF intepretations.  This makes some of my
>> complaints incorrect.
>>
>>
>> On 1/8/21 1:22 PM, Pierre-Antoine Champin wrote:
>>
>>> On 08/01/2021 17:05, Peter F. Patel-Schneider wrote:
>>>> What advantages does this semantics have over a mapping to RDF reification?
>>> RDF reification is referentially transparent, while this proposal keeps IRIs
>>> and literals in embedded triples referentially opaque. 
>> But it is possible to use an extended mapping to achieve referential opacity.
> I am not sure what you mean by "extended mapping" here.



The original demonstration that an extension of RDF reification can achieve
partial referential opacity is in
https://lists.w3.org/Archives/Public/public-rdf-star/2020Nov/0044.html


Here is a modification of the approach that uses new datatypes, somewhat
similar to part of https://github.com/w3c/rdf-star/pull/81.  This modification
also streamlines some aspects of the approach and uses fewer new identifiers.


Let rdf* be an IRI namespace.

Let rdf*:literal be the IRI of a datatype.  The lexical space of this datatype
consists of strings of the form "l"^^<d> if d is not the IRI rdf:langString
and "l"@t^^<d> otherwise, where l is a Unicode string, d is an IRI, and t is a
language tag.  The lexical to value mapping of rdf*:literal is the identity
function.

Let rdf*:IRI be the IRI of a datatype.  The lexical space of this dataype is
strings that are IRIs.  The lexical to value mapping of rdf*:IRI is the
identity function.

Define a mapping L on RDF literals and IRIs as follows:
For an RDF literal t with lexical form l, optional language tag t, and
datatype d, L(l) is the RDF literal with datatype rdf*:literal and lexical
form "l"^^<d> or "l"@t^^<d>, as appropriate.
For an IRI i, L(i) is the RDF literal with datatype rdf*:IRI and lexical form i.

Given a set of recognized datatypes, the mapping -* from RDF* graphs to RDF
graphs is defined as follows:

Pick some embedded triple ( s, p, o ) such that none of s, p, and o are
triples, replace all occurrences of it by a fresh blank node b, and add the
triples
  ( b, rdf:type, rdf:Statement )
  ( b, rdf:subject, s ) if s is not a malformed literal
  ( b, rdf*:subject, L(s) ) if s is not a blank node
  ( b, rdf:predicate, p ) if p is not a malformed literal
  ( b, rdf*:predicate, L(p) ) if p is not a blank node
  ( b, rdf:object, o ) if o is not a malformed literal
  ( b, rdf*:object, L(o) )  if o is not a blank node

Finish when there are no embedded triples left.

This assumes that IRIs cannot contain angle brackets.  If they can, then some
slight modifications are needed.


An RDF* interpretation is then just an RDF interpretation.   In normal use an
RDF* system would always recognize rdf*:literal and rdf*:IRI but this is not
strictly necessary.

Received on Tuesday, 12 January 2021 16:03:53 UTC