Data model for third-party metadata on Collections and Objects #572
Replies: 3 comments 6 replies
-
Note that the app currently uses @inrupt/solid-client for accessing data. Back when we were discussing the heritage object data model, we found out blank nodes aren't supported by this lib. I would guess it does not support RDF-star, n-ary relationships either. |
Beta Was this translation helpful? Give feedback.
-
I have some questions in regards to the scenario:
Maybe it's "old thinking" but isn't L the "authority" on the data of X. This makes the action of B - adding it's own description - seem questionable. But if this is the distributed way, then I think we still have to consider if the data-model suits L in the case that they want to alter D1 as was suggested by D2. Will L get a notification about D2 for X from B? And, will B show only D2 or D2 and D1 with provenance info? |
Beta Was this translation helpful? Give feedback.
-
We discussed it a bit further and twe can take the following pragmatic approach using Named Graphs. CSS should support this without problems, athough I'm not a 100% sure how the Solid API will react. In
But if this doesn't work with the solid-client, your best chance is to use option 1 reification: // Perspective of L
const a = buildThing()
.addUrl(rdf.subject, "X")
.addUrl(rdf.predicate, schema.description)
.addStringNoLocale(rdf.object, "D2")
.setDatetime(schema.created, "2022-01-20T01:52:02Z")
.addUrl(schema.author, "D2")
.build(); |
Beta Was this translation helpful? Give feedback.
-
As discussed in today's status meeting (9/02/22), we need a way to model metadata added by the Borrower to the Loan Collection of the Lender. The main question was wether a new resource should be created that somehow links back to the original resource and if so, with which vocabulary this construct should be described.
Example Scenario:
D2 is stored in the data pod of LD2 is stored in the data pod of BHow do you represent D1 and D2 in RDF so that you can 1) tell them apart and 2) tell who the source is?
There are a few routes we can take and it largely depends on what we consider "a loan collection at the side of the borrower" to be. I'm deliberately cutting some corners here so the examples don't become too complex.
Using RDF reification and provenance
There is only one collection X and D1 and D2 are both descriptions. Reification is used to describe the provencance of D1 and D2.
Using RDF-star and provenance
There is only one collection X and D1 and D2 are both descriptions. RDFstar is used to describe the provenance of D1 and D2.
We need to be careful though, because if we would encounter cases where both triples would be the same, we wouldn't be able to tell which date goes with which author (triples are unique in rdf-star). So a safer option is:
Using n-ary relationships / schema:Role
An n-ary relationship goes beyond the standard binary relationship in RDF, ie. adding additional attributes describing a relation, such as when somebody president of USA. In RDF, you can do this by adding an extra node.
RDF has a predicate for describing structured values in this manner:
Schema.org has its own construct Role, mainly to specify what in what role somebody contributed to a work, but you can make it work for this use case:
Using events
An event is a new resource that can relate one resource to another one. Collection X would be two different resources: one for Lender L and one for Borrower B. This is the approach that Prov-O and Web Annotation use.
In web annotation, this would be something like
(THB, I don't think Web Annotations fits the use case we have here, because the description itself is not something we publish as a resource)
Conclusion
IMO, the collection does not change; both B and L are describing the same thing and are therefore following the "anyone can say anything about anything" principle. Hence, it makes sense that the collection is only represented by a single resource and B also describes . When both descriptions are merged, you need provenance information of the statements. RDF-star and RDF-reification seem like the most lean/orthogonal ways to do this, but using
rdf:value
orschema:Role
would (for this use case at least) also work.If for practical reasons, a new resource must be created (eg. the data pod of B needs a LDP container to store the data under ), then a owl:sameAs or skos:exactMatch would work, although you could use PROV as well.
Beta Was this translation helpful? Give feedback.
All reactions