Conversation
|
Great! Thanks. Minor quible: 404 on the link to "here".
…On Sun, Apr 19, 2026 at 7:39 AM Jesse Wright ***@***.***> wrote:
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 who to authenticate a user, and
construct their user profile
A preview link can be found here
<https://htmlpreview.github.io/?https://github.com/solid/specification/blob/solid26-webid/solid26.html>
.
cc @uvdsl <https://github.com/uvdsl> @csarven <https://github.com/csarven>
@jeff-zucker <https://github.com/jeff-zucker> @VirginiaBalseiro
<https://github.com/VirginiaBalseiro> @timea-solid
<https://github.com/timea-solid>
------------------------------
You can view, comment on, or merge this pull request online at:
#781
<#781?email_source=notifications&email_token=AKVJCJARRQ2FLZZENRQO7434WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K24DSL5XXAZLOL5RWY2LDNM>
Commit Summary
- 0e5cf2c
<0e5cf2c?email_source=notifications&email_token=AKVJCJG5BR5EIXD2326UAZT4WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K64DSL5RW63LNNF2F6Y3MNFRWW>
feat: boostrap webid section
- 8d3dbe4
<8d3dbe4?email_source=notifications&email_token=AKVJCJG5BR5EIXD2326UAZT4WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K64DSL5RW63LNNF2F6Y3MNFRWW>
feat: enhance Solid26 guidance sections
File Changes
(1 file
<https://github.com/solid/specification/pull/781/files?email_source=notifications&email_token=AKVJCJFPVWNSGPWGMGPMUSL4WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K44DSL5TGS3DFONPWG3DJMNVQ>
)
- *M* solid26.html
<https://github.com/solid/specification/pull/781/files?email_source=notifications&email_token=AKVJCJGGVLWSZDB6MKWAQW34WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K24DSL5TGS3DFL5RWY2LDNM#diff-e25c223e19f18bbcf46b73537d402acc9646640a8623a8e2756ac78755883dc2>
(212)
Patch Links:
- https://github.com/solid/specification/pull/781.patch
<#781.patch?email_source=notifications&email_token=AKVJCJB43AHOFTV3HVSHRTD4WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K44DSL5YGC5DDNBPWG3DJMNVQ>
- https://github.com/solid/specification/pull/781.diff
<#781.diff?email_source=notifications&email_token=AKVJCJCDB3W7FQXEHBRJFG34WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2K24DSL5SGSZTGL5RWY2LDNM>
—
Reply to this email directly, view it on GitHub
<#781?email_source=notifications&email_token=AKVJCJHFLZG3Y2COUZS53AT4WTQKBA5CNFSNUABEM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UF4ZTKNJSGE4DCOBVGCTHEZLBONXW5J3NMVXHI2LPN2SWK5TFNZ2KYZTPN52GK4S7MNWGSY3L>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AKVJCJGKO765JNSIEZFCI5T4WTQKBAVCNFSM6AAAAACX6SQ6EOVHI2DSMVQWIX3LMV43ASLTON2WKOZUGI4TCMJUG44TKMY>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
Link fixed @jeff-zucker - thanks for catching! |
… and refined predicate listings
| <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> |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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/
- 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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
9099764 to
39dfce9
Compare
csarven
left a comment
There was a problem hiding this comment.
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.
|
|
||
| <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 — and at what frequency — 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> — which targets <code>foaf:Person</code>, <code>vcard:Individual</code>, and <code>schema:Person</code> — 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> |
There was a problem hiding this comment.
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.
| <ul> | ||
| <li><strong>Name:</strong> <code>vcard:fn</code>†, 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>†, with fallback to <code>vcard:nickname</code>.</li> | ||
| <li><strong>Avatar / photo:</strong> <code>vcard:hasPhoto</code>†, with fallbacks to <code>foaf:img</code> or <code>schema:image</code>.</li> |
There was a problem hiding this comment.
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.
| 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>]. |
There was a problem hiding this comment.
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.
| 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>]. |
There was a problem hiding this comment.
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.
| <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> |
There was a problem hiding this comment.
This should also list ldp:inbox given that:
- Solid WebID Profile refers to it: https://solid.github.io/webid-profile/#webid-profile-data-model and it is on equal requirement as some other properties like storage.
- Solid Protocol refers to LDN for servers and clients: https://solidproject.org/TR/protocol#linked-data-notifications .
- Data at https://jeff-zucker.github.io/solid-load-profile/ indicates there is substantial amount of deployments out there using it (context: e.g., foaf:name 76, solid:oidcIssuer 71, ldp:inbox: 66, space:storage 64, solid:publicTypeIndex: 64, foaf:knows 53).
- An agent's inbox contributes towards the "social" aspect of Solid.
- ActivityPub's as:inbox aliases ldp:inbox, so there is a wider interop opportunity when they are used interchangeably depending on the context.
- ...
| <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> |
There was a problem hiding this comment.
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
| <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> |
There was a problem hiding this comment.
Is this information useful or need to be mentioned for implementers?
| <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> | ||
|
|
There was a problem hiding this comment.
I don't quite follow why this is here.
| <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> — <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) — can be used by implementers to validate WebID Profiles, though they are not part of the pinned specification.</li> |
There was a problem hiding this comment.
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..."
|
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. |
Thanks for the review(s)!
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
Thanks for the steer. Happy to drop section numbers! |
This PR adds the WebID 1.0 and the Solid WebID Profile to Solid26.
Additionally it provides:
A preview link can be found here.
cc @uvdsl @csarven @jeff-zucker @VirginiaBalseiro @timea-solid