The singleton property option

For completeness (and perhaps to widen the perspective), here is the
singleton property option I briefly mentioned on the semantics call
(and alluded to in [1]). Also see [2] for the original; this is just a
quick strawman adaptation for the benefit of the LPG perspective.

It extends RDF 1.1 differently; no triple terms, no opacity, just:

1. Allow bnodes as predicates (blank predicates).
2. Define rdf:singletonPropertyOf for linking those to the property
they represent instances/occurrences/edges of.

3. Well-formedness conditions:
3.1 Bnode predicates are only to be used once; with one s and o
(similar to list cons nodes, who are "single purposed").
3.2 The rdf:singletonPropertyOf is semantically functional (exactly
like rdf:first and rdf:rest).

4. For optimization, implementations can put triples with blank
predicates in a dedicated table (using edgename as unique key),
relying on well-formedness for cohesion. Such a table is completed in
two steps: 1) the singleton assertion inserts s and o for edgename; 2)
the rdf:singletonPropertyOf assertion inserts p for edgename. If
well-formedness is broken, all optimization bets are off. Perhaps a
dedicated skolemization scheme can be employed for some more control
and/or "unstarring".

5. RDF-star syntax obviously needs no naming syntax; naming these
would break well-formedness.
6. What these *mean* of course needs a good definition (property
specializations, edge type instances or similar). Are they asserted?
Sure. Do they assert something using their rdf:singletonPropertyOf
property as predicate? No. (Could they? Well, they can be declared
("inline") to *also* be subPropertyOf the same property, and through
entailment that would happen.)
7. Reifiers become a usage pattern (informative) as suggested from the
property edge perspective. Any desired :reifiedBy or :partOf relation
can link predicate singletons to one or more "reifiers".

Basic example:

    << :s :p :o >> :source <stream662be7ba> ;
        :timestampMills 1714153402 .

Expands to:

    :s _:e1 :o .
    _:e1 rdf:singletonPropertyOf :p ;
        :source <stream662be7ba> ;
        :timestampMills 1714153402 .

Annotation syntax:

    :s :p :o {| :reifiedBy <#reifier> |} .

Expands to:

    :s :p :o .
    :s _:e1 :o .
    _:e1 rdf:singletonPropertyOf :p ;
      :reifiedBy <#reifier> .

Possible singleton property entailment?:

    _:e1 a rdf:SingletonProperty;
        rdf:subject :s ;
        rdf:prediate :p ;
        rdf:object :o .

Will entailment break well-formedness if (accidentally?) *put back*
into a regular graph? Of course, just as RDF lists are "broken"
whenever that happens (as in look terrible when serialized, make no
sense when queried, etc.).

Best regards,
Niklas

[1]: <https://lists.w3.org/Archives/Public/public-rdf-star-wg/2024Apr/0158.html>
[2]: <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4350149/>

Received on Friday, 26 April 2024 21:09:13 UTC