Re: Mapping Turtle syntax to triples.

Correction:

Some of the option 2 examples do not take into account the specific
well-formedness condition of option 2. The condition requires the 
uniqueness of the subject blank for the 
rdf:subject/rdf:predicate/rdf:object triples.

https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Jan/0138.html
and
https://github.com/w3c/rdf-star-wg/wiki/Revision-of-the-sugar-proposal

"""
_:b a fresh new blank node, unique within the RDF graph.
"""

"""
**Definition**: An RDF graph is reification well-formed iff:

   1.  The object of each `rdf-star:is-reification-of` triple is a blank 
node.
   2.  Any blank node appearing as object of a 
`rdf-star:is-reification-of` triple occurs only in that triple and 
exactly once as subject of a `rdf:subject` triple, a `rdf:predicate` 
triple, and a `rdf:object` triple.
"""

In the Friday (2024-02-09) Semantics TF call, a discussion about RDF 
merge concluded that RDF merge would be extended to preserve the 
well-formedness so that merging two well-formed graphs produced a 
well-formed graph.

     Andy

--- Corrections ---
The major effect is on "Turtle predicate-object lists" case.

== Case: Repeated text (given name)

   << :e | :s :p :o >> :x :y .
   << :e | :s :p :o >> :x :y .

-- Option2

Each use of << :e | :s :p :o >> must be defined to use the same blank node.

Triples (NT-level)
   :e        rdf:nameOf    _:blank .
   _:blank  rdf:subject   :s .
   _:blank  rdf:predicate :p .
   _:blank  rdf:object    :o .
   # Second usage adds the same triples.

   :e :x :y .

== Case: Repeated text (implicit blank node)

   << :s :p :o >> :x :y .
   << :s :p :o >> :x :y .

-- Option2

Triples (NT-level)

   ## Fresh blank node per occurrence, same blank node per triple.

   _:a1     rdf:nameOf    _:blank .
   _:blank  rdf:subject   :s .
   _:blank  rdf:predicate :p .
   _:blank  rdf:object    :o .
   _:a1 :x :y.

   _:a2     rdf:nameOf    _:blank .
   _:a2 :x :y.

== Case: Turtle predicate-object lists

Because  << :e | :s :p :o >> has the same blank node

   ## [A]
   << :e | :s :p :o >>
      :x1 :y1 ;
      :x2 :y2 .

and

   ## [B]
   << :e | :s :p :o >> :x1 :y1 .
   << :e | :s :p :o >> :x2 :y2 .

produce the same N-Triples.


== Case: Annotations 1

Annotations translate to named occurrences and these translate again to 
the data model (here, written in N-Triples).

   :s :p :o {| :x1 :y1 ; :x1a y1a |}
   :s :p :o {| :x2 :y2 |}

which is (still in "agreed" syntax):

   :s :p :o .
   << _:a1 | :s :p :o >> :x1 :y1 .
   << _:a2 | :s :p :o >> :x2 :y2 .
   _:a1 :x1 :y1 .
   _:a1 :x1a :y1  .
   _:a2 :x2 :y2 .

for new blank nodes _:a1 and _:a2.

The :x1/:y1 and :x2/:y2 have been kept apart.

-- Option 2

Triples (NT level)

   :s :p :o .
   _:a1     rdf:nameOf    _:blank .
   _:blank  rdf:subject   :s .
   _:blank  rdf:predicate :p .
   _:blank  rdf:object    :o .
   _:a1 :x1 :y1 .
   _:a1 :x1a :y1a .

   _:a2     rdf:nameOf    _:blank .
   _:a2 :x2 :y2 .

== Case: Annotations 2

   :s :p :o {| :e | :x1 :y1 |}
   :s :p :o {| :e | :x2 :y2 |}

translates to

   :s :p :o .
   << :e | :s :p :o >> :x1 :y1 .
   << :e | :s :p :o >> :x2 :y2 .
   :e :x1 :y1 .
   :e :x2 :y2 .

-- Option 2

Triples (NT level)

   :s :p :o .

   :e       rdf:nameOf    _:blank .
   _:blank  rdf:subject   :s .
   _:blank  rdf:predicate :p .
   _:blank  rdf:object    :o .

   :e :x1 :y1 .
   :e :x2 :y2 .

Received on Friday, 9 February 2024 17:49:25 UTC