Skip to content

solid26: WebID Guidance#781

Draft
jeswr wants to merge 6 commits intosolid26from
feat/solid26-webid
Draft

solid26: WebID Guidance#781
jeswr wants to merge 6 commits intosolid26from
feat/solid26-webid

Conversation

@jeswr
Copy link
Copy Markdown
Member

@jeswr jeswr commented Apr 19, 2026

This PR adds the WebID 1.0 and the Solid WebID Profile to Solid26.

Additionally it provides:

  • Guidance on what can be concluded from all input documents to Solid26 as far as WebID's are concerned
  • Clear algorithms on how to construct a Solid WebID profile. I have intentionally been more prescriptive than the existing specification here so that implementors have clear guidance. I would very much appreciate a review from the authors of the Solid WebID profile document, and I am happy to contribute this to the Solid WebID profile spec.
  • A guide for "common clients" on how to authenticate a user, and construct their user profile

A preview link can be found here.

cc @uvdsl @csarven @jeff-zucker @VirginiaBalseiro @timea-solid

@jeff-zucker
Copy link
Copy Markdown
Member

jeff-zucker commented Apr 19, 2026 via email

@jeswr
Copy link
Copy Markdown
Member Author

jeswr commented Apr 19, 2026

Link fixed @jeff-zucker - thanks for catching!

Comment thread solid26.html
Comment thread solid26.html
<p>Per [<cite><a class="bibref" href="#ref-webid-profile">Solid WebID Profile</a></cite> § <a href="https://solid.github.io/webid-profile/#discovery">2 Discovery</a>], the full profile of an agent is the union of statements found in:</p>
<ul>
<li>the <a href="#dfn-webid-profile-document">WebID Profile Document</a>;</li>
<li>any <a href="#dfn-extended-profile-document">Extended Profile Documents</a> linked from it (e.g. via <code>rdfs:seeAlso</code>, <code>foaf:isPrimaryTopicOf</code>, or <code>owl:sameAs</code>);</li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For a normative view, that is probably sufficient, but for a practical guide to implementers, there are several things we should mention in the interest of preventing excessive loading. 1) What happens with seeAlso references inside seeAlso files? Implementers should be warned to prevent multiple loading and loops if, e.g., seeAlsoA both references and is referenced by seeAlso B. Also, to what depth does one descend? Personally, I think users should be warned against long chains of seeAlsos containing seeAlsos 2) I also think that users should be warned not to depend on information in sameAs links - that a client may want to read the specific profile they requested, not all the user's profiles. If someone gets to my software-dev profile, they may or may not want to include my fire-dancing profile.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

What happens with seeAlso references inside seeAlso files?

My interpretation of https://solid.github.io/webid-profile/#discovery is that there are two locations you look for seeAlso references:

  • The WebID Profile Document
  • The preference document

and that one should not recursively look up extended profiles from extended profiles, nor type indexes from typeindexes.

If this is the case, I can clarify the text here - "transitively" - is a bad word for me to be using in this context. If this is not the correct interpretation / not what is done in practise - I am happy to update here. We should probably also clarify that in https://solid.github.io/webid-profile/

  1. I also think that users should be warned not to depend on information in sameAs links - that a client may want to read the specific profile they requested, not all the user's profiles. If someone gets to my software-dev profile, they may or may not want to include my fire-dancing profile.

Interesting ... I had always thought about profiles a bit like how google chrome operates at the moment. Each profile corresponds to a different WebID (equivalently email when one is using chrome), and that is how you make the distinction.

Are there live examples of these different profiles within one Pod? If so, what are the context hints available; do we need to know the origin document / named graphs to know which statement comes from which profile? Are there other modelling hints?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

My interpretation of https://solid.github.io/webid-profile/#discovery is that there are two locations you look for seeAlso references:

There is one problem with your interpretation (and perhaps with our original doc): if the WebID Document is hosted outside of Solid, one needs one of those predicates to get from there to extended profile documents. If any Solid app is to be able to write seeAlso documents (seems like an important function for Solid Apps to be able to do) , in this case, they can't put a pointer to the seeAlso in the WebID doc because it is not on a Solid Resource server. Therefore the only place they can put a pointer to their new seeAlso is in a seeAlso.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

To accommodate this need for a place to write pointers to seeAlsos, my load-profile app descends exactly two levels of seeAlsos - from the WebID doc to a seeAlso and from there to any seeAlso it lists, but not seeAlso's listed in the second set of seeAlsos.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are there live examples of these different profiles within one Pod?

Not that I know of and I believe there are so many unknowns about what that would cause that we should either warn against it or perhaps better just not mention it.

I was talking about sameAs pointers to profiles on other pods or in non-pod location like Wikipedia. To be frank, these are not widely used - Tim and Kingsley have many and almost no one else has any.

@jeswr jeswr force-pushed the feat/solid26-webid branch from 9099764 to 39dfce9 Compare April 19, 2026 16:48
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.

Thanks for kicking this off. Though I don't understand why this is not carried out in the main solid26 PR. I've only looked through the WebID related parts in this PR, and don't necessary dis/agree or endorse whatever else is included in this document.

Indicating section numbers of referenced material is not particularly reliable generally. For snapshots, the numbers may be reliable but it still reads a bit odd e.g., "§ 3.2". Could leave them out IMO or they should always be used consistently in the whole document.

Left inline comments.

Comment thread solid26.html

<div class="note">
<h4><span>Note</span></h4>
<p>The Solid WebID Profile [<cite><a class="bibref" href="#ref-webid-profile">WEBID-PROFILE</a></cite>] does not standardise predicates for rendering an agent's identity (see <a href="https://solid.github.io/webid-profile/#other-predicates">§ 7 Other predicates</a>). For empirical data on which predicates are actually populated across the ecosystem &mdash; and at what frequency &mdash; implementers should consult <a href="https://jeff-zucker.github.io/solid-load-profile/">solid-load-profile</a>, which loads and summarises predicate usage from a wide sample of live Solid profiles. The list below aligns with the companion <a href="https://github.com/solid/webid-profile/blob/main/shapes/profile-shapes.ttl"><code>profile-shapes.ttl</code></a> in the <a href="https://github.com/solid/webid-profile/tree/main/shapes"><code>solid/webid-profile</code> shapes</a> &mdash; which targets <code>foaf:Person</code>, <code>vcard:Individual</code>, and <code>schema:Person</code> &mdash; supplemented with widely-used fallbacks populated by existing profile editors (<a href="https://github.com/SolidOS/solidos">SolidOS</a>/<a href="https://github.com/SolidOS/mashlib">mashlib</a>, <a href="https://github.com/inrupt/pod-browser">Inrupt PodBrowser</a>, <a href="https://github.com/pod-os/PodOS">PodOS</a>, <a href="https://gitlab.com/vincenttunru/penny">Penny</a>). Vocabularies referenced: FOAF [<cite><a class="bibref" href="#ref-foaf">FOAF</a></cite>], vCard [<cite><a class="bibref" href="#ref-vcard">VCARD-RDF</a></cite>], Schema.org [<cite><a class="bibref" href="#ref-schema">SCHEMA-ORG</a></cite>], <a href="http://www.w3.org/ns/org#">Org</a>, and <a href="http://www.w3.org/ns/solid/terms#">Solid Terms</a>.</p>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The implementation reports normally mention software, so it may not be particularly meaningful to list them in this kind of a document.

Otherwise, please add dokieli (source) to the list. Dokieli makes use of a wide range of information about agents, their additional/extended profiles, assets, preferences, policies, as well as their social connections. It also makes use of variety of equivalent properties.

Also agree with earlier comments that referencing abandoned software, like PodBrowser, is neither useful or attractive.

Comment thread solid26.html
<ul>
<li><strong>Name:</strong> <code>vcard:fn</code>&dagger;, with fallbacks to <code>foaf:name</code>, <code>schema:name</code>, or <code>rdfs:label</code>.</li>
<li><strong>Short name / nickname:</strong> <code>foaf:nick</code>&dagger;, with fallback to <code>vcard:nickname</code>.</li>
<li><strong>Avatar / photo:</strong> <code>vcard:hasPhoto</code>&dagger;, with fallbacks to <code>foaf:img</code> or <code>schema:image</code>.</li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll use this as an example but it holds true for this whole list. Stating that vcard:hasPhoto has higher priority than foaf:img is not accurate. It may be the case for ODI or SolidOS (or wherever it is pulled from) but that's not universally agreed upon by all implementations. In fact, clients are more robust when they can take into several of them into account to cater for different circumstances. For instance, dokieli in fact makes use of the following properties in this order:

      ns.as.image,
      ns.as.icon,
      ns.foaf.img,
      ns.schema.image,
      ns.vcard.photo,
      ns.vcard.hasPhoto,
      ns.sioc.avatar,
      ns.foaf.depiction

I suspect that others implementations may have a different order given their application environment.

So, what I suggest here is a recommendation that makes it clear that there consumers and writers of WebID may encounter or need to create different properties/classes depending on their area of application. This is typically accompanied with Protocols and Data Models that are used alongside Solid Protocol and Solid WebID Profile. And lastly, applications may consume from a range of terms but they may write in a particular one.

It is not so clear cut at as e.g., use hasPhoto if not image.

Comment thread solid26.html
The WebID Profile Document is the resource obtained by dereferencing the WebID HTTP URI: for a WebID with a fragment identifier (e.g. <code>#me</code>), the URI without the fragment denotes the Profile Document; for a WebID without a fragment, an HTTP <code>GET</code> on the WebID MUST return a <code>303 See Other</code> response whose <code>Location</code> header URI denotes the Profile Document [<cite><a class="bibref" href="#ref-webid">WebID 1.0</a></cite> § <a href="https://www.w3.org/2005/Incubator/webid/spec/identity/#terminology">2 Terminology</a>; <cite><a class="bibref" href="#ref-webid">WebID 1.0</a></cite> § <a href="https://www.w3.org/2005/Incubator/webid/spec/identity/#the-webid-http-uri">3 The WebID HTTP URI</a>].
</li>
<li>
A WebID Document MAY be hosted anywhere on the Web; it MAY, but need not, reside in a Solid storage [<cite><a class="bibref" href="#ref-webid">WebID 1.0</a></cite> § <a href="https://www.w3.org/2005/Incubator/webid/spec/identity/#publishing-the-webid-profile-document">5 Publishing the WebID Profile Document</a>].
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Guide the implementer here. Tell them that a WebID in a Solid storage guarantees certain affordances for reading and writing with the support of Solid Protocol.

Comment thread solid26.html
A WebID Document MAY be hosted anywhere on the Web; it MAY, but need not, reside in a Solid storage [<cite><a class="bibref" href="#ref-webid">WebID 1.0</a></cite> § <a href="https://www.w3.org/2005/Incubator/webid/spec/identity/#publishing-the-webid-profile-document">5 Publishing the WebID Profile Document</a>].
</li>
<li>
The WebID Profile Document MUST have a <code>text/turtle</code> representation [<cite><a class="bibref" href="#ref-webid">WebID 1.0</a></cite> § <a href="https://www.w3.org/2005/Incubator/webid/spec/identity/#publishing-the-webid-profile-document">5 Publishing the WebID Profile Document</a>].
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is either redundant or underspecified. It is redundant because it talks about a base WebID Profile Document. It is underspecified because it completely overlooks what Solid WebID Profile says: https://solid.github.io/webid-profile/#reader-application-webid-profile , including JSON-LD. Again, related to the server that's behind it, and that Solid server provides some expectations.

Comment thread solid26.html
<li>
An agent may have zero or more Solid storages, and any number of these MAY be discoverable from the WebID Profile via statements of the form <code>?webid pim:storage ?storage</code>, where <code>?webid</code> is the WebID and each <code>?storage</code> is the IRI of a storage owned by that agent [<cite><a class="bibref" href="#ref-solid-protocol">Solid Protocol</a></cite> § <a href="https://solidproject.org/TR/2024/protocol-20240512#storage">4 Storage</a>].
</li>
</ol>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This should also list ldp:inbox given that:

Comment thread solid26.html
<div datatype="rdf:HTML" property="schema:description">
<p>The <a href="https://solid.github.io/webid-profile/">Solid WebID Profile</a> (CG Draft Report, v1.0.0, 12 May 2024) is included with the following comments:</p>
<ul>
<li>Unlike the other pinned specifications, the Solid WebID Profile is <em>not</em> normatively referenced by the Solid Protocol. It is included here as the only specification that describes the structure of a Solid Profile and the predicates clients use to discover its parts.</li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't find this framing helpful. The purpose of solid26 is not about what's referenced from the "pinned specifications". The frame is about what's useful for implementers from the https://solidproject.org/TR/ so they can build useful tools. I suggest expressing this paragraph differently. It should be about why do we need a WebID Profile document? What is it useful for? What are the use cases? It should capture the essence of use cases: https://solid.github.io/webid-profile/#use-cases

Comment thread solid26.html
Comment on lines +440 to +443
<div class="note">
<h4><span>Note</span></h4>
<p>Throughout this document, references to "the WebID specification" or [<cite><a class="bibref" href="#ref-webid">WEBID</a></cite>] refer to WebID 1.0 as pinned here. WebID 1.0 has the status of a W3C Editor's Draft from the (now closed) W3C WebID Incubator Group; it has not progressed to a W3C Recommendation. The Solid Protocol and Solid-OIDC normatively reference WebID 1.0 for the definition of the term <em>WebID</em>.</p>
</div>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is this information useful or need to be mentioned for implementers?

Comment thread solid26.html
Comment on lines +655 to +657
<dt id="ref-bio">[BIO]</dt>
<dd><cite><a href="https://vocab.org/bio/">BIO: A vocabulary for biographical information</a></cite>. Ian Davis; David Galbraith. URL: <a href="https://vocab.org/bio/">https://vocab.org/bio/</a></dd>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't quite follow why this is here.

Comment thread solid26.html
<ul>
<li>Unlike the other pinned specifications, the Solid WebID Profile is <em>not</em> normatively referenced by the Solid Protocol. It is included here as the only specification that describes the structure of a Solid Profile and the predicates clients use to discover its parts.</li>
<li>Most clients only need <a href="https://solid.github.io/webid-profile/#discovery">§ 2 Discovery</a> and <a href="https://solid.github.io/webid-profile/#reading-profile">§ 3.1 Reading Profile</a>; the <a href="https://solid.github.io/webid-profile/#dfn-writer-application">Writer Application</a> sections (<a href="https://solid.github.io/webid-profile/#updating-profile">§ 3.2</a>, <a href="https://solid.github.io/webid-profile/#extending-profile">§ 3.3</a>) primarily apply to profile editors and onboarding flows.</li>
<li>The companion <a href="https://github.com/solid/webid-profile/tree/main/shapes">shapes</a> in <code>solid/webid-profile</code> &mdash; <a href="https://github.com/solid/webid-profile/blob/main/shapes/profile-discovery-shape.ttl"><code>profile-discovery-shape.ttl</code></a> (discovery predicates) and <a href="https://github.com/solid/webid-profile/blob/main/shapes/profile-shapes.ttl"><code>profile-shapes.ttl</code></a> (profile data) &mdash; can be used by implementers to validate WebID Profiles, though they are not part of the pinned specification.</li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This whole utterance of "pinned specification" is undermining the purpose of things. There is no value to the reader other than potentially causing confusion. They need to know that either this document is sure / confident about what should be implemented / encouraged and what is not encouraged. Not: "oohh, you know, if you really want to use it, go for it, I guess, but just sayin' that it is not part of the pinned specifications club that we pulled out of thin air..."

@elf-pavlik
Copy link
Copy Markdown
Member

If Solid26 guide includes Solid WebID Profile and CG Type Indexes (LWS WG has more privacy aware version), I think it should also mention known security & privacy issues with both of those proposals. I can PR them once we agree where exactly they should go.

@jeswr
Copy link
Copy Markdown
Member Author

jeswr commented Apr 19, 2026

Thanks for kicking this off.

Thanks for the review(s)!

Though I don't understand why this is not carried out in the main solid26 PR. I've only looked through the WebID related parts in this PR, and don't necessary dis/agree or endorse whatever else is included in this document.

There is quite a lot of discussion on the other PR. I opened this up separately so that I can easily see and action comments specifically on the WebID without it getting lost amongst all the existing comments on the main PR.

Once I have incorporated most of the feedback from the Solid WebID Profile authors I plan to merge this into the solid26 branch.

Indicating section numbers of referenced material is not particularly reliable generally. For snapshots, the numbers may be reliable but it still reads a bit odd e.g., "§ 3.2". Could leave them out IMO or they should always be used consistently in the whole document.

Thanks for the steer. Happy to drop section numbers!

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.

4 participants