- From: William Van Woensel <william.vanwoensel@gmail.com>
- Date: Wed, 4 Sep 2024 18:34:50 -0400
- To: Gregory Williams <greg@evilfunhouse.com>
- Cc: RDF-star WG <public-rdf-star-wg@w3.org>
- Message-Id: <C7433001-B47E-419E-BFD4-F16602EDB3F2@gmail.com>
Hi Greg, > On Sep 4, 2024, at 3:11 PM, Gregory Williams <greg@evilfunhouse.com> wrote: > > > >> On Sep 3, 2024, at 4:37 AM, William Van Woensel <william.vanwoensel@gmail.com> wrote: >> >> Hi Greg, >> >>> If we only allowed triple terms in statements with rdf:reifies as the predicate, then I think the reifier could probably be used in the way you describe (though the SPIN case might require some changes), but with arbitrary predicates, these triples *themselves* become important subjects of further annotation. >> >> >> You make a good point: IIUC, in case of reificationProperty, there is a need to break up _reification statements_ themselves, since the property then provides extra information. And, that currently leads to unintended consequences, such as the "meta-property" rdf:object / sp:object / ... being inferred as a reificationProperty; and the statement's resource being treated as a reifier/identifier for its triple term component. >> >> My only solution at this point would be to further break up the triple term as well (which I believe you propose as well): >> >>> <statement> a my:Statement ; >>> my:reifies <<( <s> <p> <o> )>> ; >>> my:subject <s> ; >>> my:predicate <p> ; >>> my:object <o> . >> >> To cope with the fact that <o> may be a nested triple term, this breaking down would have to be applied recursively. >> >> At least personally, I wouldn't see this as a major problem, since it also allows one to more easily introspect the triple term, i.e., using its individual components. This meta-modelling aspect could be a note in the recommendation. > > I think you’d have to pursue something like that in the SPIN case, but I don’t think it fully resolves the problem. In the example above, if we replace <o> with another triple term, so that in part it would be: > > <statement> rdf:reifies <<( <s> <p> <<( <x> <y> <z> )>> )>> . > > Then I think you’re suggesting the recursive breaking down of the my:object property, so that instead of: > > <statement> my:object <<( <x> <y> <z> )>> . > > You would have: > > <statement> my:object <statement2> . > <statement2> a my:Statement ; my:subject <x> ; … . > > But that is different from what was said. <statement> is meant to reify a triple whose object is a triple term, but now it’s actually reifying a triple whose object is another reifier. That felt like it made more sense a long time ago before we went in the direction of reifiers that could reify multiple triples. If you had a 1:1 correspondence between a reifier and reified triple, I think I could understand making a substitution like this, because you’d just follow the reifier to its reified triple. But now it just feels like an entirely different statement (reification of a Wedding, for example, instead of a single fact about the wedding like `<<( :liz :married :Richard )>>` ). Quick late night reply. I'm focusing on the following aspect (so I may be getting your overall problem wrong): > If you had a 1:1 correspondence between a reifier and reified triple, I think I could understand making a substitution like this, because you’d just follow the reifier to its reified triple. I believe the problem lies in the direct mapping between RDF 1.2 reification and your custom reification. In the former, reifiers have a many-to-many relation with triple terms, which is causing a "fan trap" here: i.e., when referring to a reifier such as <statement2>, you no longer know which triple term it was associated with, as it can be associated with any number of triple terms. (Sorry to bring up ER modelling; I believe there has been some discussion about this, but it was before my time though :-) But, in your custom reification, you can do what you want; e.g., you could have a single <tt> (for triple term) instance to represent an RDF 1.2 reification: <statement_1> rdf:reifies <<( <s> <p> <<( <x> <y> <z> )>> )>> . # RDF 1.2 reification <tt_x> a my:TripleTerm # custom reification my:subject <s> ; my:predicate <p> ; my:object <tt_y> ; my:reifier <statement_1> ; my:reificationProperty rdf:reifies . <tt_y> a my:TripleTerm my:subject <x> ; my:predicate <y> ; my:object <z> . Then you can have: <statement_1> rdf:reifies <<( <a> <b> <c> )>> . <statement_2> rdf:reifies <<( <s> <p> <<( <x> <y> <z> )>> )>> . With e.g., <tt_z> a my: TripleTerm my:subject <a> ; my:predicate <b> ; my:object <c> ; my:reifier <statement_1> ; my:reificationProperty rdf:reifies . Etc, without losing information, I think. In hindsight - this "custom reification" is starting to look pretty close to an abstract syntax tree of your RDF 1.2 statements... W > > thanks, > .greg >
Received on Wednesday, 4 September 2024 22:35:07 UTC