From e727035403928039bbdd17e728043d7012cd1fe8 Mon Sep 17 00:00:00 2001 From: Jesse Wright <63333554+jeswr@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:40:14 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Add=20=C2=A72.1=20Assembling=20the=20Profil?= =?UTF-8?q?e=20algorithm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Defines the WebID Profile assembly procedure as a set-based fixed point. The user's WebIDs are the original WebID plus the transitive owl:sameAs closure within the working set. Discovery-link traversal (rdfs:seeAlso, foaf:isPrimaryTopicOf, pim:preferencesFile, owl:sameAs) follows triples whose subject is one of the user's WebIDs, recursing until no new documents are discovered. Type indexes are fetched from predicates on user WebIDs; the resulting graph is filtered to triples about user WebIDs, with solid:oidcIssuer retained only when sourced from a WebID Profile Document. Adds notes on bounded traversal (cycle detection, advisory depth limits), Preferences-link leniency, and entity reconciliation (augmentation vs rewriting). Mirrors the algorithm proposed in solid/specification#776. --- index.html | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/index.html b/index.html index 77b3a39..8c515a5 100644 --- a/index.html +++ b/index.html @@ -722,6 +722,16 @@

Table of Contents

>Discovery +
    +
  1. + 2.1 + Assembling the Profile +
  2. +
  • Note: + +
    +

    2.1 Assembling the Profile

    +
    +

    The Solid profile is the set S of statements assembled by the procedure below. The user's WebIDs are the original WebID together with every WebID transitively equated to it via owl:sameAs within S; this set grows as S grows. Apply cycle detection throughout: do not re-fetch a document already retrieved. On 401/403 with a logged-in user, retry authenticated; missing links are not errors.

    +
      +
    1. Initialise. GET the WebID Profile Document for the original WebID. If it cannot be retrieved, surface a clear error. Add its triples to S.
    2. +
    3. Discovery-link expansion. For each triple ?w ?p ?o in S where ?p is a discovery link (rdfs:seeAlso, foaf:isPrimaryTopicOf, pim:preferencesFile, or owl:sameAs), ?w is one of the user's WebIDs, and ?o is a URL whose document has not yet been fetched, GET ?o and add its triples to S. Repeat until no new documents are discovered.
    4. +
    5. Type Indexes. For each triple in S with predicate solid:publicTypeIndex or solid:privateTypeIndex whose subject is one of the user's WebIDs, GET the document at the object (if not already fetched) and add its triples to S.
    6. +
    7. Authoritative filter. Drop every solid:oidcIssuer triple in S that did not originate in a WebID Profile Document; that predicate is authoritative only when sourced there, mirroring the write protection in § Updating Profile.
    8. +
    9. Subject filter. Restrict S to triples whose subject or object is one of the user's WebIDs. The result is the Solid profile.
    10. +
    +
    + +
    +
    Note (Bounded traversal):
    +
    +

    Traversal of discovery links is unbounded; clients SHOULD apply cycle detection (no document fetched twice). Clients MAY also consider terminating traversal at a depth or document-count limit appropriate to their environment, to bound fetch cost and protect against pathological link chains.

    +
    +
    + +
    +
    Note (Preferences leniency):
    +
    +

    Including pim:preferencesFile in the discovery-link set is intentionally lenient. In practice an agent has a single Preferences Document linked from the original WebID Profile Document; the algorithm tolerates the pim:preferencesFile link appearing in any document already in S, provided its subject is one of the user's WebIDs.

    +
    +
    + +
    +
    Note (Entity reconciliation):
    +
    +

    The assembled graph may contain triples about more than one of the user's WebIDs. Depending on the client's context, these typically need to be reconciled into a single subject. Two common strategies:

    +
      +
    • Augmentation — for every triple in which one of the user's WebIDs appears as subject or object, add a parallel triple substituting the original WebID. Non-destructive; original sources are preserved.
    • +
    • Rewriting — replace every occurrence of any of the user's WebIDs (subject or object) with the original WebID, then delete the owl:sameAs triples.
    • +
    +
    +
    +
    From 1f0a9f3848c9377348d384b26b27f7c4f4fafb7f Mon Sep 17 00:00:00 2001 From: Jesse Wright <63333554+jeswr@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:11:34 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=C2=A72.1=20Bounded=20traversal:=20require?= =?UTF-8?q?=202-hop=20minimum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reframes the Bounded traversal note to ensure that owners of WebIDs hosted outside Solid storage can extend their profile via documents they control: clients follow at least two hops of discovery links from each WebID Profile Document, with early termination only beyond that. Per @jeff-zucker review on solid/webid-profile#128. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8c515a5..f82e29c 100644 --- a/index.html +++ b/index.html @@ -1112,7 +1112,7 @@

    2.1 Assembling the Pro
    Note (Bounded traversal):
    -

    Traversal of discovery links is unbounded; clients SHOULD apply cycle detection (no document fetched twice). Clients MAY also consider terminating traversal at a depth or document-count limit appropriate to their environment, to bound fetch cost and protect against pathological link chains.

    +

    Traversal of discovery links is unbounded. Clients apply cycle detection to avoid re-fetching documents. To ensure that owners of WebIDs hosted outside Solid storage can extend their profile via documents they control, clients follow at least two hops of discovery links from each WebID Profile Document (the document itself, the documents it links, and the documents those link in turn). Beyond two hops, clients can terminate at a depth or document-count limit appropriate to their environment.