Skip to content

Require pim:storage in WebID profile#772

Closed
langsamu wants to merge 2 commits intomainfrom
solid26-storage-webid
Closed

Require pim:storage in WebID profile#772
langsamu wants to merge 2 commits intomainfrom
solid26-storage-webid

Conversation

@langsamu
Copy link
Copy Markdown

Current section 9.1 mentions WebID as "underpinning component" and "used as the primary identifier" in Solid.

This change adds a requirement for WebID Profiles to be dereferencable 'publicly'.


The Protocol currently enables discovery of the root container from a Solid resource

However there is no defined mechanism for discovering a Solid storage from a WebID.

This change aims to improve interoperability by adding a normative requirement which corresponds to overwhelming practice in implementations of WebID in the ecosystem.

Copy link
Copy Markdown
Member

@uvdsl uvdsl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WebID] has been profiled for the Solid ecosystem in the [Solid WebID Profile]

The suggested addition to the Solid Protocol is already covered by that Solid WebID profile, see https://solid.github.io/webid-profile/#webid-profile-data-model .

Also note, that an agent identified by a WebID does not necessarily have a storage, and is not required to obtain a storage at any point. Whether that is useful depends on the use case: There might be a (software) agent which is identified by a WebID but does not have/own storages itself but writes only to external ones.

In addition, requiring the inclusion of the storage on a WebID top-level breaks existing approaches to hide the storage in extended profiles to only let authorized agents (e.g., clients) discover this protected storage.

I suggest to point to the [Solid WebID Profile] instead of breaking with the orthogonality of specifications employed by the current Solid Protocol.

Copy link
Copy Markdown
Member

@csarven csarven left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRs above correction class 1 should target ED/protocol.html not TR/protocol.


I believe the proposed change is essentially already covered in https://solidproject.org/ED/protocol#client-rdf-storage .

As for parts that's proposing to define the Solid WebID Profile model in the Solid Protocol, it'd be great to maintain adherence (or some sense of it) to the principle of orthogonal specifications. This is expressed in the introduction, as well as in comments #771 (review) and #772 (review) (which mentions the Solid WebID Profile data model being the best place). If you believe that a Solid WebID Profile (or its extensions) ought to contain at least one pim:storage relation, consider making the proposal against that spec since currently it is set to "zero or more" - based on consensus that some profiles may not wish to use or disclose their storage, but can still participate in the Solid ecosystem. In any case, that discussion can continue elsewhere if you'd like to bring in new information that hasn't been already (adequately) evaluated.

Aside: re "overwhelming practice in implementations" [citation needed], but I won't argue against anecdotal evidence. For instance, and FWIW, the data at https://jeff-zucker.github.io/solid-load-profile/ indicates that ldp:inbox is used more frequently than pim:storage. So, perhaps to "improve interoperability" as argued, profiles should also include one inbox. After all, there is not much "social" or any sense of communication between agents or interactions around documents, if one agent can't notify other things in some shape or form 🤷

@elf-pavlik
Copy link
Copy Markdown
Member

This is just one of the approaches for discovery, I'm mentioning another one in w3c/lws-protocol#106 (comment)
My implementation doesn't use pim:storage at all and WebIDs will not have it.

👎 on having it a MUST

@elf-pavlik
Copy link
Copy Markdown
Member

I added it to the agenda of our weekly CG call
https://hackmd.io/@solid/cg-weekly/#WebID-or-WebID-Profile

@jeswr
Copy link
Copy Markdown
Member

jeswr commented Mar 31, 2026

The challenge that @langsamu and I were trying to address was reducing the complexity of storage discovery.

The primary case we were looking to mitigate is that where a WebID is located within a Solid Pod, and the WebID does not advertise the storage root within the WebID -- requiring clients, like Bashlib, to traverse up the resource heirachy until they discover a container of type pim:Storage.

This means that there are implementations including the default CSS configuration which continue to not advertise the storage via pim:storage even though it is discoverable by other means.

Given this, would a more appropriate wording to suggest be along the lines of: "If a WebID is contained in a Storage, it is assumed that the WebID is the owner of the Solid Storage. In this case the WebID MUST contain the triple ?webid pim:storage ?root - where ?webid is the WebID and ?root is the root container of the storage in which it is contained."

Is https://solidproject.org/ED/protocol#client-rdf-storage making an equivalently strong statement @csarven? If so, then is it then a matter of getting that statement into TR and raising it with the CSS team?

@csarven
Copy link
Copy Markdown
Member

csarven commented Mar 31, 2026

Solid Protocol does not particularly single out the types of resources a #storage may contain. This is one of the reasons for why the requirement only describes how a #Client can discover a resource's storage or the storage of which the resource may be a part.

When a client encounters a WebID, it is not necessarily stored in a Solid Protocol-based storage.

When a WebID Profile does not mention its storage location, clients are not required to find its storage. The Solid Protocol only explains that if a client wants to try to determine a resource's - in this case the WebID Profile - storage, there is a way to do that.

It is not the responsibility of the Solid Protocol to dictate how a WebID Profile should be expressed. The Solid WebID Profile is the appropriate place to define if and how an agent's storage can be discovered. Moreover, if a URI owner chooses to delegate to a server that does not adhere to a given specification, that is a decision outside the scope of any specification to mandate. Since WebID Profiles are not required to indicate a storage (as mentioned above "based on consensus that some profiles may not wish to use or disclose their storage, but can still participate in the Solid ecosystem") I believe there is nothing further to address here.

@elf-pavlik
Copy link
Copy Markdown
Member

The primary case we were looking to mitigate is that where a WebID is located within a Solid Pod, and the WebID does not advertise the storage root within the WebID -- requiring clients, like Bashlib, to traverse up the resource heirachy until they discover a container of type pim:Storage.

Why not to discover it from Storage Description?

based on what @mrkvon days it doesn't work in NSS but it seems like simple nonconformance which can't be fixed by adding another requirement to the spec.

jeswr added a commit to solid/webid-profile that referenced this pull request Mar 31, 2026
Following the discussion in solid/specification#772 - this PR requires that WebID's conforming to the Solid WebID profile use `pim:storage` to advertise the storage in which a WebID is contained, if the WebID is contained in Solid Storage.

The goal of this is to prevent the majority of client applications from needing to implement discovery of storages using link headers.
@jeswr
Copy link
Copy Markdown
Member

jeswr commented Mar 31, 2026

Why not to discover it from Storage Description?

Implementors of client libraries and applications often fail to do this (e.g. [1, 2, 3]), so this requirement seemingly creates a footgun for those developers.

When a WebID Profile does not mention its storage location, clients are not required to find its storage. The Solid Protocol only explains that if a client wants to try to determine a resource's - in this case the WebID Profile - storage, there is a way to do that.

In practise, we see servers such as the CSS -- which intentionally exclude the pim:storage claim in its default configuration. I would argue, hat with a default configuration of the CSS, it should be a fair assumption that I can log-in with my WebID and discover associated storages for use. This is only made possible if clients choose to discover that storage using the Storage Description.

As mentioned, the goal is to discourage/prevent server implementations from unnecessarily excluding that claim -- so as to simplify the implementation of a common class of client applications. The common class of clients in question being those that support the flow "Log in with a WebID" -> use that WebID to discover the user storages for reading/writing.

It is not the responsibility of the Solid Protocol to dictate how a WebID Profile should be expressed. The Solid WebID Profile is the appropriate place to define if and how an agent's storage can be discovered.

👍 -- have opened up solid/webid-profile#123

@csarven
Copy link
Copy Markdown
Member

csarven commented Mar 31, 2026

Solid Protocol's Privacy Considerations section advises the following about WebID Profile Privacy:

The decision to include or exclude any information (e.g., storage, inbox) in a WebID Profile served from a Solid storage lies with the Agent controlling the WebID (or the URI owner). A URI allocated to a WebID in a Solid storage does not imply that the WebID is the storage owner.

@jeff-zucker
Copy link
Copy Markdown
Member

If the goal is interoperability, I do not see how a storage statement is sufficient. If my WebID doc is on a non-Solid server and it points to a storage on a Solid server, how does an app go from there to discovery? The root of the storage will indicate the owner which points back to the WebID document. There is no required pointer from the storage root to anywhere else in the storage so the only option for discovery is laborious walking the tree. What there should be instead is a requirement that there be at least one rdfs:seeAlso or foaf:primaryTopicOf link in the WebID doc pointing to a document on a Solid resource server. That would provide a reliable path for discovery.

@jeswr
Copy link
Copy Markdown
Member

jeswr commented Apr 1, 2026

Closing this issue following the discussion in today's CG call

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants