Hi all,
After last week's meeting (March 23rd), I looked into #86 again in more detail (as well as related issues #67, #69, #71, #77, #83, #90, #95). A more uniform treatment of resources and containers, in particular using Link Sets, is very similar to what we have been doing in A4DS (and its research implementation), which uses ODRL (also used in LWS's Access Requests and Grants ED) as policy layer for User-Managed Access (UMA). Moreover, both approaches practically re-invent LDP Direct Containers (cf. a comment I made 3y ago). In this issue, I therefore want to propose a unified model, based on Link Sets (RFC 9264), that addresses the issues listed above, as well as several concerns voiced in them by different people.
- The core idea is to treat all resources as opaque entities, with arbitrary representations (and any API), that can have zero or more relations of arbitrary types, maintained as zero or more Link Set representations of those resources.
- Basic containers (LWS/Solid/LDP) are then resources whose Link Set representation includes
ldp:contains relations, and whose standard representation is (a serialization of) that Link Set.
- On top of that, however, resource servers would freely decide which relations to track between resources, and whether clients have direct control over these relations. This info can be declared in resource- or server-specific metadata (e.g., storage description).
- Operations on Link Sets can be supported via
GET and PATCH, in two ways (accommodating for different concerns):
- Resource servers may allow direct interaction at the resource itself, negotiated with media types
application/linkset+json (for GET) and application/linkpatch+json (for PATCH; name TBD); this provides a performant method, but requires content negotiation.
- Resource servers may add one or more
Link headers in responses to HEAD/GET requests, deferring interaction to auxiliary URIs, which are the content location of a specific Link Set representation. This requires an extra hop, but can be generated on the fly, without content negotiation, and should thus not pose an additional burden on the server.
As indicated above, such a model would be very similar to the ones of LDP and A4DS. Considering a resource server, compliant with the points above, which serves a resource's Link Set representation as one auxiliary URI per different relation type; there exists a one-to-one mapping between the following:
- LDP's
ldp:DirectContainer, A4DS's odrl:AssetCollection, and a Link Set representation;
- LDP's
ldp:membershipResource, A4DS's odrl:source, and the Link Set's anchor;
- LDP's
ldp:isMemberRelation, A4DS's a4ds:relation, and the Link Set's rev (or switching anchor and href);
- LDP's
ldp:hasMemberRelation, A4DS's use of @reverse, and the Link Set's rel;
- LDP's
ldp:contains, (the inverse of) A4DS's odrl:partOf, and the Link Set's href.
In each of these cases, the set/collection/(direct)container is an 'auxiliary resource' representing all resources related to the (membership) (re)source/anchor via the (member) relation. Conceptually, each resource server managing resources Ri and tracking relation types Pj has such an auxiliary for each pair (Rn,Pm). This abstraction of containment allows resource servers to track any hierarchy of relations they deem interesting, not limited to listing other resources (e.g., relations relevant to policy management, derivation, composition). In particular, resources can be related via multiple different relation types, both with one single resource as with different resources.
The actual interface providing this metadata to clients can be quite flexible: the Link Set representations could be provided on multiple auxiliary URIs, in line with their conceptual separation (as above); they could be bundled and served from single auxiliary URI; or the same bundle could be served through content negotiation on the URI of the resource itself (cf. above). Note that none of this limits the API of the resources themselves in any way. To the contrary, the model can be applied to any kind of API, and allows operations on that API (or even completely out-of-band) to indirectly affect relational metadata. For example, traditional LDP/Solid/LWS operations (POST to a container, DELETE a resource ...) affect the ldp:contains metadata of the (basic) container; interaction with UMA's resource registration endpoint in A4DS affects the odrl:partOf metadata of the asset collections.
In two follow-up comments, I will provide example requests and responses following this approach in general, and applying this approach to the concrete case of traditional LDP/Solid/LWS containers.
Hi all,
After last week's meeting (March 23rd), I looked into #86 again in more detail (as well as related issues #67, #69, #71, #77, #83, #90, #95). A more uniform treatment of resources and containers, in particular using Link Sets, is very similar to what we have been doing in A4DS (and its research implementation), which uses ODRL (also used in LWS's Access Requests and Grants ED) as policy layer for User-Managed Access (UMA). Moreover, both approaches practically re-invent LDP Direct Containers (cf. a comment I made 3y ago). In this issue, I therefore want to propose a unified model, based on Link Sets (RFC 9264), that addresses the issues listed above, as well as several concerns voiced in them by different people.
ldp:containsrelations, and whose standard representation is (a serialization of) that Link Set.GETandPATCH, in two ways (accommodating for different concerns):application/linkset+json(forGET) andapplication/linkpatch+json(forPATCH; name TBD); this provides a performant method, but requires content negotiation.Linkheaders in responses toHEAD/GETrequests, deferring interaction to auxiliary URIs, which are the content location of a specific Link Set representation. This requires an extra hop, but can be generated on the fly, without content negotiation, and should thus not pose an additional burden on the server.As indicated above, such a model would be very similar to the ones of LDP and A4DS. Considering a resource server, compliant with the points above, which serves a resource's Link Set representation as one auxiliary URI per different relation type; there exists a one-to-one mapping between the following:
ldp:DirectContainer, A4DS'sodrl:AssetCollection, and a Link Set representation;ldp:membershipResource, A4DS'sodrl:source, and the Link Set'sanchor;ldp:isMemberRelation, A4DS'sa4ds:relation, and the Link Set'srev(or switchinganchorandhref);ldp:hasMemberRelation, A4DS's use of@reverse, and the Link Set'srel;ldp:contains, (the inverse of) A4DS'sodrl:partOf, and the Link Set'shref.In each of these cases, the set/collection/(direct)container is an 'auxiliary resource' representing all resources related to the (membership) (re)source/anchor via the (member) relation. Conceptually, each resource server managing resources
Riand tracking relation typesPjhas such an auxiliary for each pair(Rn,Pm). This abstraction of containment allows resource servers to track any hierarchy of relations they deem interesting, not limited to listing other resources (e.g., relations relevant to policy management, derivation, composition). In particular, resources can be related via multiple different relation types, both with one single resource as with different resources.The actual interface providing this metadata to clients can be quite flexible: the Link Set representations could be provided on multiple auxiliary URIs, in line with their conceptual separation (as above); they could be bundled and served from single auxiliary URI; or the same bundle could be served through content negotiation on the URI of the resource itself (cf. above). Note that none of this limits the API of the resources themselves in any way. To the contrary, the model can be applied to any kind of API, and allows operations on that API (or even completely out-of-band) to indirectly affect relational metadata. For example, traditional LDP/Solid/LWS operations (
POSTto a container,DELETEa resource ...) affect theldp:containsmetadata of the (basic) container; interaction with UMA's resource registration endpoint in A4DS affects theodrl:partOfmetadata of the asset collections.In two follow-up comments, I will provide example requests and responses following this approach in general, and applying this approach to the concrete case of traditional LDP/Solid/LWS containers.