restrict rdf:reifies to many-to-one and use rdf:memberReifier to allow multi-set of triple-terms

Following are some of the issues I see with multi-valued (i.e., many-to-many) rdf:reifies:
1) a single reifier cannot associate with two identical triple-terms (needed for parallel edges), and
2) creates a confusion regarding whether the annotations hanging from the single reifier applies to every triple-term individually or only to the set of triple-terms as a whole.

My feeling is that It is important to be able to be able to hang annotations  independently:
1) to individual triple-terms, and
2) to a mutli-set of triple-terms as a whole.

Given this, I'd like to propose the following:
1) Keep rdf:reifies single-valued (that is, allow many-to-one and disallow many-to-many).
2) Use a new property, rdf:memberReifier, to create a set of reifiers so that we can attach annotations for a multi-set of triple-terms (the need for which may arise because the data creator wants it that way and/or because of triple-terms derived via entailment).

Example 1:  annotations for individual triple-terms and annotations for a multi-set of triple-terms
=========
# individual triple-term
:e1 rdf:reifies <<( :s1 :p1 :o1 )>> .

# two identical (individual) triple-terms (parallel edges)
:e2a rdf:reifies <<( :s2 :p2 :o2 )>> .
:e2b rdf:reifies <<( :s2 :p2 :o2 )>> .

# a multi-set of triple-terms and annotations for it
:e rdf:memberReifier :e1, :e2a, :e2b
    ; :source :src1
    ; :year 2023 .

# add annotations for individual triple-terms
:e1 :month 5 .
:e2a :month 12 .
:e2b :month 9 .

Example 2: handling entailment by creating a multi-set (unless already present) and copying annotations
=========
# asserted triple-term (with annotation) and OWL axioms
:f1 rdf:reifies <<( :john :married :mary )>>
    ; :location :Rome .

:married rdf:type owl:SymmatricProperty .
:married owl:equivalentProperty :spouseOf .

# derives and stores in a multi-set: (:f1a, :f1b, :f1c, and :f are new identifiers that have to be created)
:f1a rdf:reifies <<( :mary :married :john )>> . # using symmetry
:f1b rdf:reifies <<( :mary :spouseOf :john )>> . # using equivalent property
:f1c rdf:reifies <<( :john :spouseOf :mary )>> . # using equivalent property

:f rdf:memberReifier :f1, :f1a, :f1b, :f1c
    ; :location :Rome . # forms the multi-set and duplicates the annotations of :f1

Received on Thursday, 18 April 2024 14:10:00 UTC