Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specify WebID #17

Closed
webr3 opened this issue Jun 16, 2023 · 59 comments
Closed

Specify WebID #17

webr3 opened this issue Jun 16, 2023 · 59 comments

Comments

@webr3
Copy link

webr3 commented Jun 16, 2023

I've reduced the WebID specification to it's MUSTs, and swapped two terms to BBB and CCC:

A BBB is a Web resource that MUST be available as text/turtle.
The server MUST provide a text/turtle representation of the requested BBB.
CCC (ambiguous, possibly specification) requires that servers MUST at least be able to provide Turtle representation of BBB
The Agent requesting the BBB MUST be able to parse documents in Turtle

Even if we prefix it with the (loose) definition:

A CCC is an HTTP URI which refers to an Agent (Person, Organization, Group, Device, etc.). A description of the CCC can be found in the BBB.

At best, the only specification I can pull from this is:

  • A CCC is an HTTP URI which refers to an Agent
  • A BBB is a text/turtle representation of the CCC.

Note, Agent is a loosely defined term, not a specific rdf:Type of thing from a specific ontology.

Note, WebID Profile is also loosely defined, to be a text/turtle document, no specific ontology must be used.

Thus, to conform to the current WebID specification, I need to publish a text/turtle document via http, which contains a description using any ontology of a thing which can in some manner be determined to be an Agent of some kind.

Or, a WebID is an HTTP URI which dereferences to a text/turtle document.

So if I publish the following at http://example.org/webid

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<> a rdfs:Resource .
<#x> a rdfs:Resource .

<http://example.org/webid#x> is a conforming WebID?

Note, I'm being gracious here, there's no BBB MUST describe CCC, so technically it would appear that only the first triple is required to conform.

@bblfish
Copy link
Contributor

bblfish commented Jun 16, 2023

Initially we used the foaf ontology. The agent we meant was foaf:Agent.

The whole point of WebId was to tie it to an authentication procedure: WebID-TLS, which did require the cert ontology,
and so the relationship was as follows

<#> a foaf:Agent;
   cert:key <#k> .

But that was 14 years ago, and since then, we have the security ontology standardised (see how I am using it in HTTPSig)

The webid-profile group is looking into what vocabulary to use in the profile document.
https://github.com/solid/webid-profile

@webr3
Copy link
Author

webr3 commented Jun 16, 2023

If the WebID specification only:
a) defines that a WebID is an HTTP URI which refers to an Agent
b) that a WebID Profile is a text/turtle document.

And https://github.com/solid/webid-profile will define a (solid compatible?) WebID Profile Document, and what vocab to use to describe People (or Agents)

What exactly can any WebID specification, specify?

An HTTP URI x is a WebID if it successfully derefences to a (argue about media types here) response which defines x as a some-vocab:Agent

Something like that? would that not be a one liner definition in the Solid WebID Profile spec?

@bblfish
Copy link
Contributor

bblfish commented Jun 16, 2023

The WebID spec is a micro spec. :-)

@webr3
Copy link
Author

webr3 commented Jun 16, 2023

I can't see any specification, would be my overriding point here, all that the spec actually specifies in any implementable way, is that an HTTP URI is a WebID Profile if it dereferences to literally any text/turtle response.

@namedgraph
Copy link

I would tend to agree. "Web Identity and Discovery" just declares Resource aliases, and the rest of the text is informative. It could go away in principle.

"WebID Authentication over TLS" is the core spec to me in the WebID suite. It actually contains a novel method.

@bblfish
Copy link
Contributor

bblfish commented Jun 21, 2023

@namedgraph

"WebID Authentication over TLS" is the core spec

The reason the WebID spec was created and separated from the WebID-TLS spec is to reduce the surface of disagreement and to define something that many other specs would have in common.

WebID-TLS was never going to be the only way to authenticate. Other methods, such as OpenID, existed at the time (see foaf:openid relation), Mozilla's BrowserID (later Mozilla Persona) or now Solid-OIDC were also going to be possible, not counting numerous other methods (even e-mail verification!).

I am now working on HttpSig and have put up a demo and explanation of how it works here:
https://twitter.com/bblfish/status/1666547828506742788

@namedgraph
Copy link

Yes but if you would replace "WebID" with simply "URI" in those specs, they would still work? :) I think that's what this issue is about.

@bblfish
Copy link
Contributor

bblfish commented Jun 21, 2023

It's a bit more. It's a URI that refers to an agent via a description on the HTTP Web. That's why it is important to Solid, as that is an HTTP based protocol. There may well be more things to add to this spec, but I think we should leave that to the the upcoming Solid WG to resolve. solid/solid-wg-charter#40

@jacoscaz
Copy link
Collaborator

jacoscaz commented Jul 5, 2023

There may well be more things to add to this spec, but I think we should leave that to the the upcoming Solid WG to resolve. solid/solid-wg-charter#40

Given the the group has not been able to produce a 1.0 in many years, I think this is the most sensible option.

That said, I think the current formulation covers enough ground to be considered a spec, albeit a micro one as per @bblfish 's comment. Quoting from the spec's terminology section:

A WebID is a URI with an HTTP or HTTPS scheme that denotes an Agent (Person, Organization, Group, Device, etc.). For WebIDs with fragment identifiers (e.g., #me), the URI without the fragment denotes the WebID Profile Document. For WebIDs without fragment identifiers an HTTP request on the WebID MUST return a 303 with a Location header URI referring to the WebID Profile Document.

@melvincarvalho
Copy link

melvincarvalho commented Jul 5, 2023

Two observations

  • The group spent a decent amount of time agreeing consensus that JSON-LD should be added, we should try and do that
  • The Solid Charter still needs to be ratified by the W3C and that wont happen for a few months still, so there is a window in which the group can still work

It would be much easier if we had 2 chairs. But as @jacoscaz as editor, and I think the whole group is behind him, it may be possible to make a bit of progress, if he has time

@kidehen
Copy link

kidehen commented Nov 11, 2023

For additional context, a few term definitions:

A WebID is an HTTP based identifier that unambiguously names an Agent.
A WebID-Profile Document describes an Agent named by a WebID using an Entity Relationship Graph.

The only things specified are:

  1. Use of an HTTP based identifier
  2. Entity Relationship Graph

Note:
There's no mention of RDF, RDF-Turtle, JSON-LD, JSON, SPARQL, TLS, OAuth, or any other implementation detail.

@webr3
Copy link
Author

webr3 commented Nov 11, 2023

For additional context, a few term definitions:

A WebID is an HTTP based identifier that unambiguously names an Agent. A WebID-Profile Document describes an Agent named by a WebID using an Entity Relationship Graph.

The only things specified are:

  1. Use of an HTTP based identifier
  2. Entity Relationship Graph

Note: There's no mention of RDF, RDF-Turtle, JSON-LD, JSON, SPARQL, TLS, OAuth, or any other implementation detail.

A specification must be implementable, an agreement between parties which facilitates interoperability. What you outline above is an abstract idea, it cannot be implemented.

@namedgraph
Copy link

namedgraph commented Nov 11, 2023 via email

@kidehen
Copy link

kidehen commented Nov 11, 2023

For additional context, a few term definitions:
A WebID is an HTTP based identifier that unambiguously names an Agent. A WebID-Profile Document describes an Agent named by a WebID using an Entity Relationship Graph.
The only things specified are:

  1. Use of an HTTP based identifier
  2. Entity Relationship Graph

Note: There's no mention of RDF, RDF-Turtle, JSON-LD, JSON, SPARQL, TLS, OAuth, or any other implementation detail.

A specification must be implementable, an agreement between parties which facilitates interoperability. What you outline above is an abstract idea, it cannot be implemented.

I provided a definition of terms that do not need to be compromised in the name of implementation.

You can write a specification for an HTML-based WebID Profile document comprising and entity relationship graph expressed in a JSON-LD structured data island (a/k/a rich metadata). Nothing about that requires terminology confusion.

A WebID is one thing. A Profile Document is another. They shouldn't be conflated, which is my prime concern when providing terminology definitions.

As for what can or cannot be implemented, here is a simple example of what I've described that's already being implemented by companies publishing content to the Web.

Recent Microsoft Blog Post

Structured Data Island Excerpt.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/",
      "url": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/",
      "name": "AutoGen Agents Meet Semantic Kernel | Semantic Kernel",
      "isPartOf": {
        "@id": "https://devblogs.microsoft.com/semantic-kernel/#website"
      },
      "primaryImageOfPage": {
        "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/#primaryimage"
      },
      "image": {
        "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/#primaryimage"
      },
      "thumbnailUrl": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/11/sk-blog.006.jpeg",
      "datePublished": "2023-11-02T22:31:42+00:00",
      "dateModified": "2023-11-03T01:24:06+00:00",
      "author": {
        "@id": "https://devblogs.microsoft.com/semantic-kernel/#/schema/person/5e0c53e0d7c106911583b8455530f366"
      },
      "breadcrumb": {
        "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/#breadcrumb"
      },
      "inLanguage": "en-US",
      "potentialAction": [
        {
          "@type": "ReadAction",
          "target": [
            "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/"
          ]
        }
      ]
    },
    {
      "@type": "ImageObject",
      "inLanguage": "en-US",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/#primaryimage",
      "url": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/11/sk-blog.006.jpeg",
      "contentUrl": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/11/sk-blog.006.jpeg",
      "width": 1920,
      "height": 1080,
      "caption": "Image sk blog 006"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/autogen-agents-meet-semantic-kernel/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://devblogs.microsoft.com/semantic-kernel/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "AutoGen Agents Meet Semantic Kernel"
        }
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/#website",
      "url": "https://devblogs.microsoft.com/semantic-kernel/",
      "name": "Semantic Kernel",
      "description": "The latest news from the Semantic Kernel team for developers",
      "potentialAction": [
        {
          "@type": "SearchAction",
          "target": {
            "@type": "EntryPoint",
            "urlTemplate": "https://devblogs.microsoft.com/semantic-kernel/?s={search_term_string}"
          },
          "query-input": "required name=search_term_string"
        }
      ],
      "inLanguage": "en-US"
    },
    {
      "@type": "Person",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/#/schema/person/5e0c53e0d7c106911583b8455530f366",
      "name": "John Maeda",
      "image": {
        "@type": "ImageObject",
        "inLanguage": "en-US",
        "@id": "https://devblogs.microsoft.com/semantic-kernel/#/schema/person/image/",
        "url": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/02/John-Maeda-96x96.jpg",
        "contentUrl": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/02/John-Maeda-96x96.jpg",
        "caption": "John Maeda"
      },
      "description": "American technologist and product experience leader. Currently VP of design and artificial intelligence at Microsoft. Author of five books including a gentle intro to AI/ML \"How to Speak Machine (Penguin)\" and the \"Laws of Simplicity (MIT Press).\" Represented in the permanent collections of the Museum of Modern Art, NYC and the Cartier Foundation, Paris.",
      "sameAs": [
        "https://twitter.com/https://twitter.com/semantic_kernel"
      ],
      "jobTitle": "VP Design & AI",
      "url": "https://devblogs.microsoft.com/semantic-kernel/author/johnmaeda/"
    }
  ]
} 

Chunk that uses WebID exactly how I've describe it.

    {
      "@type": "Person",
      "@id": "https://devblogs.microsoft.com/semantic-kernel/#/schema/person/5e0c53e0d7c106911583b8455530f366",
      "name": "John Maeda",
      "image": {
        "@type": "ImageObject",
        "inLanguage": "en-US",
        "@id": "https://devblogs.microsoft.com/semantic-kernel/#/schema/person/image/",
        "url": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/02/John-Maeda-96x96.jpg",
        "contentUrl": "https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2023/02/John-Maeda-96x96.jpg",
        "caption": "John Maeda"
      }

@csarven
Copy link
Member

csarven commented Jan 4, 2024

Let me try to understand better. Are some folks proposing that since, for example, there is no requirement for a ex:Agent in WebID 1.0 (ED) - assuming for the sake of the argument that it is something to introduce - there should be a new specification including that? Let me ask differently and with the assumptions that's being used: given that a ex:Agent can't be introduced to WebID 1.0 (ED), there should be an alternative specification including that requirement?

How certain are some folks about not being able to improve unclarity or underspecified parts of the WebID 1.0? Will they also promise not get in the way of those that can demonstrate that the spec can be improved?

A few words on quality assurance:

"Testing" does not strictly entail automated scripting and verification. In fact, W3C Evaluation and Report Language (EARL) 1.0 Schema, which is one of the key outputs of the W3C QA Activity, provides a set of Test Modes, including: "automatic", "manual", "semiAuto", "undisclosed", "unknownMode".

So, conformance in a specification can be written in different ways towards what would qualify as a product to be interoperable. In practise, not every notion or requirement is necessarily tested or applicable or only testable with a single test case. That said, of course being testable strengthens the legitimacy of implementation's conformance through reports. But even then EARL for example acknowledges possible Outcomes Value such as "cantTell", "inapplicable", "untested".

Certain notions or intentions of a specification may not be practical to test. Take for example the notion of URI Ownership as per Web Architecture. If the owner of a URI says that it is allocated to represent today's weather, or an agent's profile (document) - and that can be stated in many ways - it does not entail that there must be specific wording/statement in a given representation with a specific testing. If there were to be the case, it would be generally infeasible or impractical to test. That's just an example. When I say https://csarven.ca/#i is my WebID, it is so, first and foremost, because I said so (even just with this sentence). As the URI owner ( one of the intended audience: #29 ), I also have the responsibility to manage its representations. To quote a AWWW principle: "Reference does not imply dereference". So, when the WebID spec defines WebID (the identifier) using an existing URI scheme (HTTP), there are limits to what can be tested. (It certainly does not entail coming up with several specs.)

I've shared quite a bit of considerations in #21 (comment) essentially about expressing conformance requirements and interoperable product classes, categories of the specification, and weighing actual complexity / fragmentation of alternatives.

If a particular Class, media types, and other things are so desired, I'm all ears about why this can't be done in the current WebID 1.0 ED. If the "title" of the specification has been a show starter or prevented uptake, I'd love to get some data behind those claims as opposed to perceptions. Or any other random thing that's being put forward that somehow justifies a new spec instead of improving the current.

Aside: Noting that the title of the specification is "WebID 1.0", and subtitle "Web Identity and Discovery". If it helps to contrast, see "Decentralized Identifiers (DIDs) v1.0" with subtitle "Core architecture, data model, and representations"). If an adjustment to the subtitle is desired, it could be along the lines of DID's. In fact, the DID spec, from the perspective of conformance and scope is not entirely different from the WebID spec.

All that said, if folks still want to pursue an alternative one or two or five specs, then go ahead as a new work item ( #31 ) but leave the current work alone. There are existing dependencies and social expectations out there. It would be inappropriate to break them as I see it. There is at least one WG charter that's interested in carrying that particular WebID (or thereabouts) forward in a WG. Reminder to us all that the current WebID 1.0 has a track record of "working" irrespective to the level of pedantry of a handful of people (i.e., us) may express about the spec. There is data behind that claim whereas all alternative proposals... ?

@webr3
Copy link
Author

webr3 commented Jan 4, 2024

Are some folks proposing that since, for example, there is no requirement for a ex:Agent in WebID 1.0 (ED) - assuming for the sake of the argument that it is something to introduce - there should be a new specification including that?

Yes and no. There were volumes of discussion about many details, mainly centered on which media types should or should not be in the specification (add json-ld, remove turtle, require multiple, require conneg, require none).

As per the top of this issue, if you remove the media type (turtle) from the current ED, you are left with precisely nothing, no MUSTs.

I position that:

  • agreeing a single media type is impossible, as there are camps of json-ld and turtle users
  • agreeing must 2 media types is impossible, as that introduces a conneg requirement
  • agreeing no media types, leaves a specification which defines nothing - unless, it defines
  • (a) use (dereferenceable?) (HTTP?) URIs
  • (b) which dereference to a (RDF?) response which asserts <uri> a ex:Agent either directly or indirectly via range/domain #i ex:profile <> for example.

So the notion of a super and sub spec setup, was entirely to "unlock" an unresolvable status and a decade of arguing about media types, whilst allowing a webid specification to at least specify something useful and implementable, and ensuring that different pockets of work (projects using turtle, projects using json-ld, others) could all agree on a superset of constraints (a,b) above. Hence, super and sub.

To reiterate:

  • If turtle requirement is removed from the ED, nothing is specified
  • if turtle is retained, all non-turtle implementations do not conform, or must implement conneg (won't happen)
  • if turtle is changed to another media type, all turtle based implementations do not conform
  • if 2+ mediatypes are adopted, conneg is required (won't be implemented or implementable often, awful requirement to have in a spec)
  • the specification does not answer the question "what is a webid" in a way which differentiates it from any other http uri or dereferencable linked data uri.

Only one of those things can be addressed (or so I thought).

@csarven
Copy link
Member

csarven commented Jan 4, 2024

Allow me to reiterate that if there isn't one (which would be the lowest barrier for actual interop, i.e., actual products enabling user features) or more (at increasing complexity) media type, there is no strong interop at the end of the day. I've tried to communicate that at least a couple of times in recent memory: #21 (comment) and #3 (comment) . On one end there is the hypothetical interop, and on other the end the real and more complicated. (The current spec is on the easy end but people have opinions..) Yes, it is quite feasible to have a test suite that has all the RDF parsers under the sun, and be able to check whether an implementation can express a particular data model and get a pass with flying colours, but that doesn't actually say anything since in the wild, one particular implementation may only speak Turtle, and another JSON-LD, and yet another something else. No interop. Splitting whatever into several specs makes zero difference at the end of the day because the fundamental / actually useful interop (or not) will remain the same.

Majority of the arguments about media types that are being raised AFAICT is essentially within a year. Which is after the fact of the WebID spec, as we know it, based on Turtle, despite with all the "flaws" and staleness, {insert concern}, has some notable update. It using only Turtle as MUST (single requirement that guarantees interop) was sufficient for all sorts of uptake. It is misleading to think that it was a show-stopper. I want to be clear that I'm not arguing for a particular concrete RDF syntax here but the idea that one of them "did the job". But of course that doesn't (and didn't) stop anyone from +1'ing one or two, and -1'ing one or two. That's a common thing to observe in the standards space. That said, not everyone is on board with RDF stuff or even JSON-LD/schema.org in HTML either. If we had a few very vocal people that said the media type should be PDF or EXE, then what? So, of course who shows up here matters but let's not conflate that with anyone speaking on behalf of the developers out there. Evidence is welcome. Do you think that all those developers publishing JSON-LD/schema.org in HTML about persons/agents/orgs or what have you are going to add ex:Agent into what they're doing?

As for what is a WebID (the identifier), that cuts into core definitions and language gymnastics involving URI ownership. That's relatively the easy part as I see it. Agreeing on the media type(s) is harder, and I agree with you. That said, if there is strong reason to change WebID 1.0, we can do that. If a new set of specifications are desired, call it something else and keep it along the currently adopted specification. Let the market decide?

@kidehen
Copy link

kidehen commented Jan 4, 2024

To reiterate:

  • if 2+ mediatypes are adopted, conneg is required (won't be implemented or implementable often, awful requirement to have in a spec)

How about https://www2.deloitte.com/us/en/profiles/beena-ammanath.html#this approach? You can apply that to a .json or .jsonld document too.

A "#" indexical is a powerful solution for these issues.

  • the specification does not answer the question "what is a webid" in a way which differentiates it from any other http uri or dereferencable linked data uri.

It didn't need to do that. This is simply a consequence of conflating identity (WebID, and HTTP URI for unambiguous agent naming) and identification (WebID-Profile Doc) with authentication in mind (TLS).

Possible solution:
Use PRs to fix the broken spec, by addressing:

  1. Multiple document types via the use of "#" indexical -- rather than presuming content negotiation using HTTP 303's
  2. Decouple the concepts of identity and identification

@csarven:

Are 1&2 possible?

@webr3
Copy link
Author

webr3 commented Jan 4, 2024

WebID, and HTTP URI for unambiguous agent naming

Define the difference between WebID and HTTP URI please

@namedgraph
Copy link

if 2+ mediatypes are adopted, conneg is required (won't be implemented or implementable often, awful requirement to have in a spec)

@webr3 this is a personal and subjective view which is out of place here.

Conneg is part of the AWWW: https://www.w3.org/TR/webarch/#frag-coneg

@kidehen
Copy link

kidehen commented Jan 4, 2024

Define the difference between WebID and HTTP URI please

In prose:
A WebID is specific use of an HTTP URI for naming an Agent (person, organization, bot, etc.) unambiguously.

Why is this specific use of an HTTP URI required?
Agents come into play for the purpose of identity authenticity facilitated by an authentication protocol.
An authentication protocol depends on agent profile documents for agent identification.

What are the distinguishing, machine-computable, characteristics of an Agent?
One or more distinguishing attribute-value pairings that coalesce around an agent identifier in an entity relationship graph.

@melvincarvalho
Copy link

Turtle is a MUST in the Solid version of WebID, and it's anticipated to remain so at least until 2026 (when it goes to 1.0). Barring any unforeseen developments, Turtle's status as a MUST is unlikely to change in ED 2014.

That being said, there's room for a JSON-LD version of WebID to coexist alongside the Turtle specification. This approach seems particularly suitable for deployments planned c. 2024. The key is ensuring that both specifications maintain a common framework for defining a WebID. As currently stated:

"A WebID is a specific use of an HTTP URI for naming an Agent (person, organization, bot, etc.) unambiguously."

This definition is a solid starting point, though its breadth might raise questions about whether it's "intentionally vague".

Our current approach has been to include various examples in the text. However, this leads us to an important consideration: how to develop a test suite for conformance if the specifications are not explicitly detailed.

@melvincarvalho
Copy link

In prose:
A WebID is specific use of an HTTP URI for naming an Agent (person, organization, bot, etc.) unambiguously.

This is a good start, but this doesnt answer the questions:

  1. Is a URI a WebID?
  2. Is a given deployment conformant with the WebID spec?
  3. How does an existing deployment conform with the WebID spec?
  4. How does a new deployment conform with the WebID spec?

We need to be able to specify it enough so that a test suite can be written, and these questions can be answered.

@kidehen
Copy link

kidehen commented Jan 5, 2024

  • Is a URI a WebID?

A WebID is a kind of URI.

  • Is a given deployment conformant with the WebID spec?

As I've stated repeatedly, this spec effort isn't going to solve the longstanding problems associated with using HTTP URIs as names.

A name is a kind of identifier that comprises both denotation and connotation by way of realm-specific indirection.

In the realm provided by the HTTP protocol based Web, that's achieved implicitly by tacking on an "#" indexical on to an HTTP URL or explicitly via 303 redirection.

The notion of an HTTP URI as a Name is a matter for AWWW docs and specs (e.g., this one).

  • How does an existing deployment conform with the WebID spec?

That is a vague question that isn't precisely answerable due to the current state of affairs. That said,
there are existing implementations that already work with the current spec. The problem is that said implementations implement the WebID-TLS protocol -- due to inherent conflation problems in the current spec.

OpenLink has implementations that will pass any tests based on the current broken spec -- FWIW.

  • How does a new deployment conform with the WebID spec?

By implementation, as we've done for eons.

The fundamental issue here is that the current spec is Turtle and WebID-TLS bound (covertly). Basically, What we are trying to fix right now via PRs or nuclear options.

@webr3
Copy link
Author

webr3 commented Jan 5, 2024 via email

@kidehen
Copy link

kidehen commented Jan 5, 2024

A URI cannot be classified as a WebID until it's confirmed to unambiguously refer to an Agent. It's not a WebID until this has been established. The unambiguously bit is that it refers to an Agent, not a pipe. This is what's leading to the mass confusion.

Again, you are discounting the role of natural language rose. The current WebID specification isn't specifically about machine computation.

Your point, as I continue to see it, is primarily from the perspective of writing code which works better if we are talking about a machine-computable (or readable) Profile Document rather than one of its components (i.e., a moniker for an HTTP URI used in a specific way).

My passport number vs passport document analogy is about that issue.

Why didn't we simply stick with the Linked Data Principles angle?

Because the spec was derived from FOAF+SSL, retrospectively. TimBL has already got the "Get Yourself a Personal URI" meme peculating just before FOAF+SSL (which is actually partly based on said meme), and we desperately wanted to negate all the distracting debates swirling around Linked Data and the need (or lack thereof) for content-negotiation etc..

JSON-LD didn't exist then, and when it initially emerged: it did so without support for "#" based relative HTTP URIs.

I really don't want to belabor these points, but there's a little more to this problem than meets the eye. You have branding mangled with technical specification etc..

I think we can fix this problem if we put all of these issues into context:

  1. JSON-LD is no longer a problem -- its prior issues with "#" based relative HTTP URIs have been fixed in the 1.1 release
  2. Turtle-specificity has become a problem -- due to its niche status, which isn't going to be changing anytime soon
  3. WebID originated as a usage-scenario specific moniker for an HTTP URI based name
  4. HTTP URIs as names is a AWWW spec matter -- i.e., it can't be solved in a generic WebID Spec about specific use under the "WebID" moniker; naturally, one or more RDF triples is an appropriate requirement for a WebID-Profile document oriented spec

@webr3
Copy link
Author

webr3 commented Jan 5, 2024

A URI cannot be classified as a WebID until it's confirmed to unambiguously refer to an Agent. It's not a WebID until this has been established. The unambiguously bit is that it refers to an Agent, not a pipe. This is what's leading to the mass confusion.

Again, you are discounting the role of natural language rose. The current WebID specification isn't specifically about machine computation.

Again, disagree, it is a facilitator of things which do require computation, such as auth*.

One does not need a specification to say my web page is this and have some agent visit it and determine that it is indeed about them. That, is not something that needs specified.

@kidehen
Copy link

kidehen commented Jan 6, 2024

Wait, are you to trying to say WebID the term is an abstract concept and not a fixed thing.

Not saying or inferring any such thing.

I am saying:
A WebID is an HTTP URI that names an Agent unambiguously. No more, no less.

Dereference functionality is an affordance inherited from the host operating environment i.e., a HTTP based network.

@webr3
Copy link
Author

webr3 commented Jan 6, 2024

A WebID is an HTTP URI that names an Agent unambiguously. No more, no less.

But until you dereference and establish it names an Agent, it doesn't name an agent unambiguously.

@kidehen
Copy link

kidehen commented Jan 6, 2024

But until you dereference and establish it names an Agent, it doesn't name an agent unambiguously.

It does, when defined as part of a WebID-Profile Document specification.

Your sticky point arises when its done outside a WebID-Profile Document specification.

I am telling you this because I know how "WebID" came to be the short for "Personal URI" . I was the one that suggested the play on OpenID to WebID with the sole focus of making the idea more palatable to the general Web User.

Unfortunately, I just can't find the IRC chat logs where that conversation occurred. The sole purpose what to have a simply moniker that encapsulated what was introduced in this TimBL post.

A WebID is an HTTP URI for naming an entity, unambiguously. It inherits its disambiguation prowess by being derived from an HTTP URL which is part of the operating network provided by HTTP.

Note, TimBL never said anything about FOAF. He simply outlined the following sequence:

  1. Pick an HTTP URI for yourself
  2. Go to your FOAF profile doc and add some triples

We discussed our way into using "WebID" to replace "Get yourself a URI" long before FOAF+SSL came into being, because the focus was entity naming that provided a conduit to all your existing social-media content.

Related

@webr3
Copy link
Author

webr3 commented Jan 6, 2024

A WebID is an HTTP URI for naming an entity, unambiguously
A WebID is an HTTP URI that names an Agent unambiguously

We cannot proceed with this conversation until you decide which of those you want to say it is. Cannot be both.

@jonassmedegaard
Copy link

jonassmedegaard commented Jan 6, 2024

A WebID is an HTTP URI that names an Agent unambiguously. No more, no less.

But until you dereference and establish it names an Agent, it doesn't name an agent unambiguously.

A passport number is a citizen identifier that names a passport holder unambiguously.

Possibly it is an invalid identifier. Only by dereferencing the passport number - i.e. looking up the number in a governmental database and seeing that data for that passport number appears - is it known that the number functionally works.
A passport number and dereferencing it is loosely coupled, in the sense that you and I meaningfully refer to it as a passport number even if we can "only" talk about or read/collect/exchange, without any of us having access to governmental databases.

Possibly it is an unacceptable identifier. Only by authenticating the passport number - i.e. comparing the dereferenced data with physical traits of the holder of the passport (and whatever other rules might be imposed - e.g. "disregard if holder presents themself as on a business trip if data lack business information and vice versa") - is it known if the passport is acceptable as proof of the identity of the passport holder.
A passport number and authenticating it is loosely coupled, in the sense that you and I meaningfully refer to it as a passport number even if it fails to authenticate its holder.

Passport number dereferencing and authentication may also potentially be loosely coupled, in that it is at least theoretically possible for an authentication scheme to not consult the data and therefore not require access to it.

Hope that helps.

@jonassmedegaard
Copy link

A WebID is an HTTP URI for naming an entity, unambiguously
A WebID is an HTTP URI that names an Agent unambiguously

We cannot proceed with this conversation until you decide which of those you want to say it is. Cannot be both.

Agent!

("entity" gotta be simply a typo)

@kidehen
Copy link

kidehen commented Jan 6, 2024

A WebID is an HTTP URI for naming an Agent, unambiguously.

That's my preference, if it helps move matters forward.

@webr3
Copy link
Author

webr3 commented Jan 6, 2024

Tis an important point here Jonas

Passport Number is to Number, as Agent is to Entity, as WebID is to URI.

You don't know if a number is a passport number till you confirm it on a passport or db lookup

You don't know an Entity is an Agent until you dereference and find that out

You don't know a URI is a WebID until you establish that via the previous step, or again some statement in a dB lookup. That is, that it's a URI identifying an Agent, not a pipe.

It's a key point, is a number a passport number, is an entity an agent, is a uri a WebID.

That's the basic test I position were trying to specify the answer to.

Let's ground this in an example, given 3 URIs:

http://example.com/#36be
http://example.com/#72e7
http://example.com/#bf72

how do we establish that one is a WebID, and the other two are not.

A WebID is an HTTP URI for naming an Agent, unambiguously.

Such that this can be determined. (thanks for confirming @kidehen )

@kidehen
Copy link

kidehen commented Jan 6, 2024

Passport Number is to Number, as Agent is to Entity, as WebID is to URI.

It is an identifier.

You don't know if a number is a passport number till you confirm it on a passport or db lookup

You lookup the passport number (an identifier) via the passport system which is just another network.

You don't know an Entity is an Agent until you dereference and find that out

The passport number lookup leads you to the credentials in the passport.

I use this analogy to once again attempt to orient the spec toward the Passport rather that its Passport Number.

Passport Number, as identifiers, are a feature of the Passport Network.

"Passport Number" doesn't imply "Cannot be an Identifier" .

Finally, you can't find a definition of Passport Number in the Marriam Webster Dictionary, but you will find one for Passport. Naturally, you will find a definition for Identifier -- point here being loose-coupling of related concepts that make up a system.

@webr3
Copy link
Author

webr3 commented Jan 6, 2024

@kidehen apologies mate, I posted an edit at the same time you posted a new comment!

@kidehen
Copy link

kidehen commented Jan 6, 2024

That's the basic test I position were trying to specify the answer to.

Let's ground this in an example, given 3 URIs:

http://example.com/#36be
http://example.com/#72e7
http://example.com/#bf72

Once again, you can determine that it names an Agent by saying so informatively in prose -- using natural language. You can put that in a document solely focused on a particular use of an HTTP URI.

In machine-readable form, specifically via a WebID Profile Document Specification, you can achieve that objective by qualifying triples from a chosen vocabulary.

In relation to the latest Editor's Draft by @jacoscaz, this problem could be solved by fixing the draft spec's title i.e., changing "Web 1.0" to "WebID Identity and Discovery [WebID] 1.0" (where WebID functions as a recursive acronym that can be used to refer to more than one thing). I don't like it per se., but I can live with it.

@webr3
Copy link
Author

webr3 commented Jan 6, 2024

In relation to the latest Editor's Draft by @jacoscaz, this problem could be solved by fixing the draft spec's title i.e., changing "Web 1.0" to "WebID Identity and Discovery [WebID] 1.0" (where WebID functions as a recursive acronym that can be used to refer to more than one thing). I don't like it per se., but I can live with it.

Works for me too, also don't like it per se, as I'm not sure what would go in a WebID specification other than perhaps no requirements just a text introduction describing what WebID is (note, WebID as opposed to a WebID) so that it can cover "it's a system" and "it's an identifier". But I can also live with both.

Ultimately all I care about is that there's one document with any name that provides a base which allows this test to be passed, as mentioned in #33 (comment)

I personally view one part of the spec as being relatively stable in time (the part just mentioned), and other parts such as new auths or crypto types or properties as being much more fluid and open to change over the years to come.

Hence bias strongly toward a minimal agreement that facilitates interop, where one can implement if(thing an Agent) then followed by checks and tests for different properties and bits of data to enable features, whatever they may be, or turn out to be in 5-15 years.

edit: @kidehen if you 're going to follow with all the http stuff, 303 and #hash goes in the WebID base spec, and only that w/ description, that's golden by me - it'd be like having a base linked data spec outlining good practice.

@kidehen
Copy link

kidehen commented Jan 7, 2024

"Good Practice" or "Suggested Practice" or even "Best Practice" guides all sit well with me too!

Things I am wary of:

  1. Something that isn't implementable in a generally acceptable manner, capable of gaining developer traction
  2. Something that isn't describable in a generally acceptable manner, capable of engaging a broad spectrum of developers

1&2 ultimately lead to wasting lots of time that people simply don't have i.e., you're darned when you do attempt an implementation and you are equally darned when you don't.

@webr3
Copy link
Author

webr3 commented Jan 7, 2024

Well now, I do believe that all the elements of this particular set of recipes are already well defined, specified even, so perhaps it's more a case of aggregate, describe, and defer/point to that which is already set in rec.

@kidehen
Copy link

kidehen commented Jan 7, 2024

My suggestion at this point, is simply a title change with regards to the draft put out earlier by @jacoscaz. Alternatively, by way of PR, it should be possible to merge the latest draft with the current spec en route to a solution.

I am happy with either approach, as I really want this matter resolved.

@webr3
Copy link
Author

webr3 commented Jan 7, 2024

Likewise

This comes with the territory, the term lives at two layers, and when we apply separation of concerns, we find it at both levels - I believe at this point we both and all understand well enough, and it seems inescapable that there is a fixed concept, a fixed for unknown period of time base layer at both sides of http, and then some more fluid components.

If we tightly couple the three together there just always will be issues, most of which will be a symptom of time passing, as with json and turtle.

So I guess we are left with a living single entity of a specification, or a good for a decade or so base

@melvincarvalho
Copy link

melvincarvalho commented Jan 12, 2024

A passport number is a citizen identifier that names a passport holder unambiguously.

I appreciate the effort to draw an analogy here, but I feel it might be leading to some confusion, as it's not quite a like-for-like comparison. Consider this: a passport number scribbled on a napkin loses its context – it could be a passport number or perhaps a phone number. However, a WebID inscribed on that same napkin retains its identity as a WebID, thanks to the inherent universality of URIs.

The beauty of using URIs to name things, unlike mere numbers, is that WebID plays a pivotal role in unifying the social web. A passport number is only valid in the context of the passport it's associated with, and particularly your passport. In contrast, if you place a URI in someone else’s document, it contributes to the fabric of the web rather than causing ambiguity.

Moreover, for a direct comparison with a WebID, the passport itself would need to serve as an identifier. A WebID is remarkable because, even when noted in the most informal manner like on a napkin, it allows us to retrieve the entire identity document. This capability is what sets it apart – it’s not just a number. It’s special because it can reside in any document, weaving a network of identifiers. It's special because of its ability to be dereferenced, revealing not just the identity document but also its place within that document, and crucially confirming its nature as a WebID, denoting an Agent or a Person. This goes beyond a mere conceptual analogy and enters the realm of practical, machine-testable functionality.

Edit: so as not to bloat potential RFCs, I've elaborated on this distinction in this mailing list post

@jonassmedegaard
Copy link

Thanks for sharing your view on how much of the WebID+WebID-Profile+WebID-Auth-* trinity lies with the WebID component.

If we choose to not loosely couple the trinity of WebID+WebID-Profile+WebID-Auth-*, then it is reasonable to shift from comparing WebID to a passport. Otherwise it is reasonable to compare WebID to a passport number, and compare WebID+WebID-Profile to a passport.

WebID is link between passport content and authentication of passport content - both of which relating to an agent.

Certainly WebID is not equal to a passport number, because an IRI is richer on information and more stable in interpretation. a closer analogy is "danish passport: 62991411-1" scribbled on a napkin. With only that napkin you can resolve further information by contacting the issuers of danish passports - danish authorities by way of police or embassies - to (maybe, if permitted) retrieve my eye color from them. Analogous with only a WebID you can (if my webserver permits you) retriece my eye color as an RDF graph from the issuer of my WebID - me by way of my website.

The analogy was brought up in a discussion wether we MUST require a WebID to be resolvable as an RDF graph. I argue that a WebID is a WebID if loosely declared that it is - analogous to writing on a napkin not only "62991411-1" but "danish passport: 62991411-1". That statement may turn out to be bogus, but it is not the purpose of a WebID to ensure its own validity as data, only to ensure its own validity as syntax: an IRI structure.

@melvincarvalho
Copy link

melvincarvalho commented Jan 12, 2024

I respect your perspective, but I must emphasize a pivotal aspect of WebIDs that differentiates them from passport numbers: a WebID inherently denotes an Agent. This isn't just syntactic but a fundamental semantic distinction. It defines the WebID as an active, engaging entity within the web, capable of interaction and not just a static identifier.

Without recognizing a WebID as an Agent, we lose the essence of its role in the semantic web—facilitating a web of trust and interactivity, not merely data reference. Thus, a WebID is intrinsically more than a number; it's a representation of agency and function in the digital ecosystem.

@jonassmedegaard
Copy link

I agree that it is more than a number (as in what needs scribbled onto a napkin for comparison).

It seems to me that my position is that a WebID is an URI linking to an agent which is capable of dereferencing agent profile and by various means to authenticate said agent".

It seems to me that your position is that a WebID is an URI linking to an agent which must then dereference agent profile and by various means to authenticate said agent".

I fail to see how keeping a loose relationship fails the ability for the trinity of WebID+WebID-Profile+WebID-auth-* to facilitate a web of trust and interactivity, as in my view for both approaches a WebID is a representation of agency - the difference is (but perhaps this is where my understanding of the words using in this conversation fails short) that with loose coupling the function is not in the WebID but in the combination of WebID with other parts of the trinity.

@melvincarvalho
Copy link

Thank you for keeping the dialogue alive and vibrant on this matter.

Let's simplify the equation a bit, in light of Henry's succinct observation that the WebID spec is indeed a "micro spec." This indicates a lean and focused approach, steering us away from the notion of a trinity and more towards a binary or dual structure, with authentication being a separate, orthogonal aspect.

The distinction you're drawing between "capable" and "must" in terms of dereferencing a WebID is intriguing. How do we indeed ascertain if a URI is a WebID? The answer lies in the action of dereferencing it. This is more than a syntactical exercise; it's the gateway to understanding the nature of the URI.

Take, for example, the URI 'https://example.org/alice#me?type=Agent'. Does the query string define it as an Agent? Not necessarily. The true test of its identity and function as an Agent comes from dereferencing this URI. It's in this process that we uncover the real semantics encoded within, not just in the URI's structure but in the interconnected data it leads us to.

This approach underscores the unique strength of WebID. It's not confined within the strict boundaries of syntax; instead, it dynamically interacts with the web's rich tapestry of data. Authentication, while crucial, runs parallel to this. It's a distinct process, ensuring that while a WebID points us to an Agent, the authentication mechanisms validate and secure the interactions with this Agent.

@melvincarvalho
Copy link

Once again, you can determine that it names an Agent by saying so informatively in prose -- using natural language. You can put that in a document solely focused on a particular use of an HTTP URI.

Thanks for the suggestion on specifying WebID via natural language. However, reliance on prose alone doesn't meet the need for precision and testability across implementations. Natural language, while useful for clarification, carries inherent ambiguities. Our goal is to ensure WebID's functionality is clearly testable and interoperable, avoiding the pitfalls of misinterpretation that can arise without concrete, testable criteria.

For WebID to serve its purpose effectively across the web, it's crucial that specifications are not just informative but also objectively verifiable. This ensures consistent implementation and interoperability. Let’s focus on integrating testable specifications alongside natural language descriptions to balance clarity with rigor.

@melvincarvalho
Copy link

I am telling you this because I know how "WebID" came to be the short for "Personal URI" . I was the one that suggested the play on OpenID to WebID with the sole focus of making the idea more palatable to the general Web User.

Unfortunately, I just can't find the IRC chat logs where that conversation occurred.

For accuracy, it’s important to clarify the origin of 'WebID' within our discussions. The transition from 'FOAF+SSL' to 'WebID' was initiated on the foaf-protocols mailing list in 2008, a suggestion credited to Toby Inkster following the acquisition of the domain foafssl.org by Henry. The change aimed to address the unwieldiness of the term 'FOAF+SSL'. At that time, @kidehen expressed a preference for 'Secure Web Identity (SWI)' or 'Secure Web Identity via FOAF (SWIF)', rather than 'WebID'.

Given this historical preference for SWI/SWIF over 'WebID', claims of suggesting 'WebID' to parallel 'OpenID' for broader appeal appear incongruent with documented discussions. The name 'WebID' ultimately prevailed, as detailed in this discussion.

While using URIs to name things is useful in itself, and that is inherited from awww, as @timbl points out. It's not a WebID until it is an Agent, and this is a vital distinction. Otherwise it's just anyURI, and NOT a WebID.

@jacoscaz
Copy link
Collaborator

Closed by #60.

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

No branches or pull requests

8 participants