Skip to content
This repository was archived by the owner on Jan 7, 2020. It is now read-only.
This repository was archived by the owner on Jan 7, 2020. It is now read-only.

Improve Solid compatibility in WebID implementation #372

Open
@happybeing

Description

@happybeing

I've been looking into the experimental WebID implementation to understand how I can use this to demonstrate Solid applications using the SAFE Browser WebID drop down. I think I can do this without changes, but not in the typical way of Solid, where pod storage is present at the base URI of the WebID, and both storage and profile are accessed via paths based on the same subdomain and host.

For example, for the WebID https://thewebalyst.solid.community/profile/card#me I have a GUI at https://thewebalyst.solid.community/, storage at folders beneath this (e.g. https://thewebalyst.solid.community/public, and my WebID profile document at https://thewebalyst.solid.community/profile/card.

The experimental APIs cannot replicate this as things stand, so this issue is a request for these to follow Solid conventions (and so allow the above), unless there are good reasons not to.

At the moment I think the best I can do is to require Solid apps to use storage at a separate URI, which I think will work, but will not make as good a demo, or case for people to try Solid apps on SAFE. So ideally I'd like to try and replicate the above.

I've explained below, what I think the current implementation does, and the options for changing the implementation. I think the options are a) long term: include www service storage in a way that allows default APIs to follow the Solid conventions, and b) short term: fork the WebID Manager to create a Solid WebID manager that I think will allow the behaviour, while bypassing the RDF serialisation we have right now.

I'd appreciate feedback on the following, advice and suggestions for alternatives etc, before I embark on the option b) above

1) Current Experimental WebID Implementation

If the WebID is present, it will have as its service container a Mutable Data containing RDF, which is incompatible with the SAFE www service. Instead:

  • webFetch() on any URI beginning with the WebID (e.g. safe://me.happybeing) returns the WebID profile document.
  • webFetch() on the public name (e.g. safe://happybeing) returns "Requested service is not found." and there is no mechanism to add storage (e.g. for a www service as an NFS container) based on a WebID name. This feature could be added by extending the experimental API in webFetch(), fetchHelper() etc to support additional services on different subNames, but still not on the WebID URI itself (i.e. safe://me.happybeing). In Solid, this is generally assumed to be the default (i.e. storage would normally be provided at paths based on the WebID, such as safe://me.happybeing/public).

Long Term (option A)

To support storage based on the WebID URI itself would need the current implementation to change so that the storage for a web service and for the WebID profile use a common approach. This would mean that the profile document would appear within storage located at the URI of the hostname used in the WebID, as is the convention with Solid (e.g. safe://me.happybeing/card for the profile, and safe://me.happybeing/card#me for the WebID). I think it would be helpful for SAFE RDF APIs and default UI (e.g. for WebID creation) to follow Solid conventions such as this unless there are good reasons not to.

2) Bypassing the Experimental WebID Implementation

If there were both WebID and normal public name entry using the same name (e.g. happybeing), the public name entry and service will be used, and the WebID profile will not be accessible.

Short Term (option B)

So I propose making a WebID is changed to create the RDF entries as now and create a regular public name and 'www' service on the same name, then store the WebID profile as an NFS Turtle file in the www container. Then I think this implementation will be able to follow Solid conventions. If so this would be a useful short term way to demonstrate maximimum compatibility with Solid UX and applications, pending changes to allow this in the exising WebID/RDF serialisation APIs (option A).

Note: I've assumed that the SAFE Browser WebID drop down feature would not be broken by the presence of both a regular public name and a WebID using the same name, and have not looked into that. I think that provided we keep both copies of the profile in step, there should not be an issue (so ok for demos and Solid developers wishing to evaluate SAFE). Any comment on this would be useful.

To achieve this interim solution, all that I think is needed is a fork of the WebID manager and calling it a Solid WebID manager to reduce confusion.

I'm not entirely sure option B) will work, so would appreciate some eyes on the idea before I test it out, and as noted welcome any comments and feedback, and corrections.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions