Solid Application Interoperability Primer

Editor’s Draft,

This version:
https://solid.github.io/data-interoperability-panel/primer/
Issue Tracking:
GitHub
Inline In Spec
Editor:
elf Pavlik

Abstract

Primer for the Solid interoperability.

Status of this document

1. Introduction

Write introduction

Overview

Explain visual language

2. Data

All Turtle and ShExC code snippets in this primer will assume following prefixes.

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX ldp: <http://www.w3.org/ns/ldp#>
PREFIX solid: <http://www.w3.org/ns/solid/terms#>
PREFIX acl: <http://www.w3.org/ns/auth/acl#>
PREFIX interop: <http://www.w3.org/ns/solid/interop#>
PREFIX shapetrees: <http://www.w3.org/ns/shapetrees#>

# Fictional
PREFIX solidshapes: <https://solidshapes.example/shapes/>
PREFIX solidtrees: <https://solidshapes.example/trees/>
PREFIX pm: <https://vocab.example/project-management/>

# ACME
PREFIX acme: <https://acme.example/>
PREFIX acme-rnd: <https://rnd.acme.example/>
PREFIX acme-finance: <https://finance.acme.example/>

# Alice
PREFIX alice: <https://alice.example/>
PREFIX alice-auth: <https://auth.alice.example/>
PREFIX alice-pro: <https://pro.alice.example/>
PREFIX alice-home: <https://home.alice.example/>

# Bob
PREFIX bob: <https://bob.example/>
common prefixes

2.1. solidshapes.example

2.1.1. Shapes

solidshapes:Project {
  a [ pm:Project ] ;
  rdfs:label xsd:string ;
  pm:hasTask IRI *
}
Project shape (ShEx)
solidshapes:Task {
  a [ pm:Task ] ;
  rdfs:label xsd:string
}
Task shape (ShEx)

2.1.2. Shape Trees

solidtrees:Project
  a shapetrees:ShapeTree ;
  shapetrees:expectsType shapetrees:Resource ;
  shapetrees:shape solidshapes:Project ;
  shapetrees:references uuid:54b5e4f6-c6b5-4c9a-b885-cbf69d08370d .

uuid:54b5e4f6-c6b5-4c9a-b885-cbf69d08370d
  shapetrees:hasShapeTree solidtrees:Task ;
  shapetrees:viaShapePath
    "@<https://solidshapes.example/shapes/Project>~<https://vocab.example/project-management/hasTask>" .
Project shape tree
solidtrees:Task
  a shapetrees:ShapeTree ;
  shapetrees:expectsType shapetrees:ShapeTreeResource ;
  shapetrees:validatedBy solidshapes:Task .
Task shape tree

2.2. acme.example

acme:\#corp
  a interop:Agent .
ACME’s WebID Document

2.3. rnd.acme.example

2.3.1. Data Registrations

acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475
  a interop:DataRegistration ;
  interop:registeredBy <https://garry.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-08-23T21:12:27.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:iriPrefix "https://rnd.acme.example/" ;
  ldp:contains
    acme-rnd:02c8217e-9933-4681-9fe3-f9d207a77a91\#project ,
    acme-rnd:18e75c28-3649-4c24-9e58-530df3813ca3\#project .
ACME’s data registration for RnD projects
acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539
  a interop:DataRegistration ;
  interop:registeredBy <https://garry.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-08-23T21:12:45.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:iriPrefix "https://rnd.acme.example/" ;
  ldp:contains
    acme-rnd:a51a89f5-0d4d-4213-9a9e-ea2dbadc56ea\#task ,
    acme-rnd:b51fb352-a098-4681-81aa-b655b9434932\#task ,
    acme-rnd:d1a7b2ff-a021-40f1-8c16-ab56407a0740\#task ,
    acme-rnd:58814556-9955-482f-9d1f-0a89677f9881\#task .
ACME’s data registration for RnD tasks

2.3.2. Data Instances

acme-rnd:02c8217e-9933-4681-9fe3-f9d207a77a91\#project
  a pm:Project ;
  rdfs:label "P-Ar-1" ;
  pm:hasTask
    acme-rnd:a51a89f5-0d4d-4213-9a9e-ea2dbadc56ea\#task ,
    acme-rnd:b51fb352-a098-4681-81aa-b655b9434932\#task .
ACME’sRnD project 1
acme-rnd:18e75c28-3649-4c24-9e58-530df3813ca3\#project
  a pm:Project ;
  rdfs:label "P-Ar-2" ;
  pm:hasTask
    acme-rnd:d1a7b2ff-a021-40f1-8c16-ab56407a0740\#task ,
    acme-rnd:58814556-9955-482f-9d1f-0a89677f9881\#task .
ACME’sRnD project 2
acme-rnd:a51a89f5-0d4d-4213-9a9e-ea2dbadc56ea\#task
  a pm:Task ;
  rdfs:label "T-Ar-1" .
ACME’s RnD task 1
acme-rnd:b51fb352-a098-4681-81aa-b655b9434932\#task
  a pm:Task ;
  rdfs:label "T-Ar-2" .
ACME’s RnD task 2
acme-rnd:d1a7b2ff-a021-40f1-8c16-ab56407a0740\#task
  a pm:Task ;
  rdfs:label "T-Ar-3" .
ACME’s RnD task 3
acme-rnd:58814556-9955-482f-9d1f-0a89677f9881\#task
  a pm:Task ;
  rdfs:label "T-Ar-4" .
Alice’s RnD task 4

2.4. finance.acme.example

2.4.1. Data Registrations

acme-finance:882eea27-b968-44e7-b8f5-87b234089057
  a interop:DataRegistration ;
  interop:registeredBy <https://garry.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-08-23T21:12:27.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:iriPrefix "https://finance.acme.example/" ;
  ldp:contains
    acme-finance:e7a5a287-9481-417e-91bf-40ea738fa737\#project ,
    acme-finance:c2883a4d-cece-43c2-9568-5f0aa1ac64be\#project .
ACME’s data registration for Finance projects
acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad
  a interop:DataRegistration ;
  interop:registeredBy <https://garry.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-08-23T21:12:45.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:iriPrefix "https://finance.acme.example/" ;
  ldp:contains
    acme-finance:ea7a7621-b2fd-41b1-8992-c85d624f6bcc\#task ,
    acme-finance:ab6fd32b-ce6f-4c1e-baf3-0e42f1aae7e5\#task ,
    acme-finance:e44e3ddc-a383-4a98-ad59-a3153eea5aaf\#task .
ACME’s data registration for Finance tasks

2.4.2. Data Instances

acme-finance:e7a5a287-9481-417e-91bf-40ea738fa737\#project
  a pm:Project ;
  rdfs:label "P-Af-1" ;
  pm:hasTask
    acme-finance:ea7a7621-b2fd-41b1-8992-c85d624f6bcc\#task ,
    acme-finance:ab6fd32b-ce6f-4c1e-baf3-0e42f1aae7e5\#task .
ACME’sFinance project 1
acme-finance:c2883a4d-cece-43c2-9568-5f0aa1ac64be\#project
  a pm:Project ;
  rdfs:label "P-Af-2" ;
  pm:hasTask
    acme-finance:e44e3ddc-a383-4a98-ad59-a3153eea5aaf\#task .
ACME’sFinance project 2
acme-finance:ea7a7621-b2fd-41b1-8992-c85d624f6bcc\#task
  a pm:Task ;
  rdfs:label "T-Af-1" .
ACME’s Finance task 1
acme-finance:ab6fd32b-ce6f-4c1e-baf3-0e42f1aae7e5\#task
  a pm:Task ;
  rdfs:label "T-Af-2" .
ACME’s Finance task 2
acme-finance:e44e3ddc-a383-4a98-ad59-a3153eea5aaf\#task
  a pm:Task ;
  rdfs:label "T-Af-3" .
ACME’s Finance task 3

2.5. auth.acme.example

2.5.1. Access Grant

acme-auth:7b6915b4-c135-4025-899c-ce53875bffe2
  a interop:AccessGrant ;
    interop:registeredBy <https://dan.example/#id> ;
    interop:registeredWith <https://auth.acme.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:providedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:fromAgent <https://acme.example/#corp> ;
    interop:viaAgent <https://acme.example/#corp> ;
    interop:hasAccessGrantSubject
      acme-auth:7b6915b4-c135-4025-899c-ce53875bffe2\#grant-subject ;
    interop:hasDataGrant
      acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 ,
      acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e ,
      acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 ,
      acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa .

acme-auth:7b6915b4-c135-4025-899c-ce53875bffe2\#grant-subject
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> .
ACME’s access grant for Alice
acme-auth:f8064946-cb67-469a-8b28-652fd17090f6
  a interop:DataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:AllInstances .

acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e
    interop:inheritsFromGrant
      acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 .

acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475
  interop:iriPrefix "https://rnd.acme.example/" .
ACME’s data grant for Alice - RnD Projects
acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e
  a interop:DataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:inheritsFromGrant
      acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 .

acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539
  interop:iriPrefix "https://rnd.acme.example/" .
ACME’s data grant for Alice - RnD Tasks
acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264
  a interop:DataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration acme-finance:882eea27-b968-44e7-b8f5-87b234089057 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:AllInstances .
acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa
    interop:inheritsFromGrant
      acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 .

acme-finance:882eea27-b968-44e7-b8f5-87b234089057
  interop:iriPrefix "https://finance.acme.example/" .
ACME’s data grant for Alice - Finance Projects
acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa
  a interop:DataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:inheritsFromGrant
      acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 .

acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad
  interop:iriPrefix "https://finance.acme.example/" .
ACME’s data grant for Alice - Finance Tasks

2.6. omni.example

omni:\#corp
  a interop:Agent .
Omni’s WebID Document

2.7. na.omni.example

2.7.1. Data Registrations

omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140
  a interop:DataRegistration ;
  interop:registeredBy <https://erica.example/#id> ;
  interop:registeredWith <https://authbot.example/#bot> ;
  interop:registeredAt "2020-08-23T21:12:45.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:iriPrefix "https://na.omni.example/" ;
  ldp:contains
    omni-na:30da889a-d65f-461d-ae52-50e19c77ed79\#project .
Omni’s data registration for NA projects
omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3
  a interop:DataRegistration ;
  interop:registeredBy <https://erica.example/#id> ;
  interop:registeredWith <https://authbot.example/#bot> ;
  interop:registeredAt "2020-08-23T21:12:45.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:iriPrefix "https://na.omni.example/" ;
  ldp:contains
    omni-na:79a1cc9e-e498-4a66-a2f8-9957a64e9488\#task ,
    omni-na:d2748fbd-565a-4a52-8709-b07a39f1fd4a\#task .
Omni’s data registration for NA tasks

2.7.2. Data Instances

omni-na:30da889a-d65f-461d-ae52-50e19c77ed79\#project
  a pm:Project ;
  rdfs:label "P-On-1" ;
  pm:hasTask
    omni-na:79a1cc9e-e498-4a66-a2f8-9957a64e9488\#task ,
    omni-na:d2748fbd-565a-4a52-8709-b07a39f1fd4a\#task .
Omni’sNA project 1
omni-na:79a1cc9e-e498-4a66-a2f8-9957a64e9488\#task
  a pm:Task ;
  rdfs:label "T-On-1" .
Omni’s NA task 1
omni-na:d2748fbd-565a-4a52-8709-b07a39f1fd4a\#task
  a pm:Task ;
  rdfs:label "T-On-2" .
Omni’s NA task 2

2.8. auth.omni.example

2.8.1. Access Grant

omni-auth:11558b5c-a827-4355-bdff-6c200f9377e3
  a interop:AccessGrant ;
    interop:registeredBy <https://dan.example/#id> ;
    interop:registeredWith <https://auth.omni.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:providedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:fromAgent <https://omni.example/#corp> ;
    interop:viaAgent <https://omni.example/#corp> ;
    interop:hasAccessGrantSubject
      omni-auth:11558b5c-a827-4355-bdff-6c200f9377e3\#grant-subject ;
    interop:hasDataGrant
      omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce ,
      omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8 .

omni-auth:11558b5c-a827-4355-bdff-6c200f9377e3\#grant-subject
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> .
Omni’s access grant for Alice
omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce
  a interop:DataGrant ;
    interop:dataOwner <https://omni.example/#corp> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:AllInstances .

omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8
    interop:inheritsFromGrant
      omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .

omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140
  interop:iriPrefix "https://na.omni.example/" .
Omni’s data grant for Alice - NA Projects
omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8
  a interop:DataGrant ;
    interop:dataOwner <https://omni.example/#corp> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:inheritsFromGrant
      omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .

omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3
  interop:iriPrefix "https://na.omni.example/" .
Omni’s data grant for Alice - NA Tasks

2.9. alice.example

2.9.1. WebID Document

Snippet below needs to be updated

alice:\#id
  a interop:Agent ;
  interop:hasAuthorizationAgent <https://auth.alice.example/> .
Alice’s WebID document

2.10. pro.alice.example

2.10.1. Data Registry

alice-pro:71e96aaa-f3dc-4263-97d6-a5b4c83524cb
  a interop:DataRegistry ;
  interop:hasDataRegistration
    alice-pro:773605f0-b5bf-4d46-878d-5c167eac8b5d ,
    alice-pro:4d594c61-7cff-484a-a1d2-1f353ee4e1e7 .
Alice’s pro data registry

2.10.2. Data Registrations

alice-pro:773605f0-b5bf-4d46-878d-5c167eac8b5d
  a interop:DataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-10-17T11:42:35.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:iriPrefix "https://pro.alice.example/" ;
  ldp:contains
    alice-pro:ccbd77ae-f769-4e07-b41f-5136501e13e7\#project ,
    alice-pro:7a130c38-668a-4775-821a-08b38f2306fb\#project .
Alice’s data registration for pro projects
alice-pro:4d594c61-7cff-484a-a1d2-1f353ee4e1e7
  a interop:DataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-10-17T11:42:36.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:iriPrefix "https://pro.alice.example/" ;
  ldp:contains
    alice-pro:576520a6-af5a-4cf9-8b40-8b1512b59c73\#task ,
    alice-pro:106a82aa-6911-4a7e-a49b-383cbaa9da66\#task ,
    alice-pro:4d713903-d114-4890-a87c-eaed50c33e5e\#task ,
    alice-pro:210cf13a-4082-487f-ab2b-ad54edb234a0\#task .
Alice’s data registration for pro tasks

2.10.3. Data Instances

alice-pro:ccbd77ae-f769-4e07-b41f-5136501e13e7\#project
  a pm:Project ;
  rdfs:label "P-Ap-1" ;
  pm:hasTask
    alice-pro:576520a6-af5a-4cf9-8b40-8b1512b59c73\#task ,
    alice-pro:106a82aa-6911-4a7e-a49b-383cbaa9da66\#task .
Alice’s pro project 1
alice-pro:7a130c38-668a-4775-821a-08b38f2306fb\#project
  a pm:Project ;
  rdfs:label "P-Ap-2" ;
  pm:hasTask
    alice-pro:4d713903-d114-4890-a87c-eaed50c33e5e\#task .
Alice’s pro project 2
alice-pro:576520a6-af5a-4cf9-8b40-8b1512b59c73\#task
  a pm:Task ;
  rdfs:label "T-Ap-1" .
Alice’s pro task 1
alice-pro:106a82aa-6911-4a7e-a49b-383cbaa9da66\#task
  a pm:Task ;
  rdfs:label "T-Ap-2" .
Alice’s pro task 2
alice-pro:4d713903-d114-4890-a87c-eaed50c33e5e\#task
  a pm:Task ;
  rdfs:label "T-Ap-3" .
Alice’s pro task 3
alice-pro:210cf13a-4082-487f-ab2b-ad54edb234a0\#task
  a pm:Task ;
  rdfs:label "T-Ap-4" .
Alice’s pro task 4

2.11. home.alice.example

2.11.1. Data Registry

alice-home:2d3d97b4-a26d-434e-afa2-e3bc8e8e2b56
  a interop:DataRegistry ;
  interop:hasDataRegistration
    alice-home:f6ccd3a4-45ea-4f98-8a36-98eac92a6720 ,
    alice-home:92f43be4-d12c-4ca3-9bd6-c18e83167b2f .
Alice’s home data registry

2.11.2. Data Registrations

alice-home:f6ccd3a4-45ea-4f98-8a36-98eac92a6720
  a interop:DataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-10-17T11:42:35.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:iriPrefix "https://home.alice.example/" ;
  ldp:contains
    alice-home:0fd3daa3-dd6b-4484-826b-9ebaef099241\#project .
Alice’s data registration for home projects
alice-home:92f43be4-d12c-4ca3-9bd6-c18e83167b2f
  a interop:DataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2020-10-17T11:42:36.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:iriPrefix "https://home.alice.example/" ;
  ldp:contains
    alice-home:f950bae5-247c-49b2-a537-b12cda8d5758\#task ,
    alice-home:46fea403-8605-473b-a9a1-a86f50fb1633\#task ,
    alice-home:72eb1958-5ad1-4268-96cb-739a71592cc0\#task .
Alice’s data registration for home tasks

2.11.3. Data Instances

alice-home:0fd3daa3-dd6b-4484-826b-9ebaef099241\#project
  a pm:Project ;
  rdfs:label "P-Ah-1" ;
  pm:hasTask
    alice-home:f950bae5-247c-49b2-a537-b12cda8d5758\#task ,
    alice-home:46fea403-8605-473b-a9a1-a86f50fb1633\#task .
Alice’s home project 1
alice-home:f950bae5-247c-49b2-a537-b12cda8d5758\#task
  a pm:Task ;
  rdfs:label "T-Ah-1" .
Alice’s home task 1
alice-home:46fea403-8605-473b-a9a1-a86f50fb1633\#task
  a pm:Task ;
  rdfs:label "T-Ah-2" .
Alice’s home task 2
alice-home:72eb1958-5ad1-4268-96cb-739a71592cc0\#task
  a pm:Task ;
  rdfs:label "T-Ah-3" .
Alice’s home task 3

2.12. auth.alice.example

alice-auth:e2765d6c-848a-4fc0-9092-556903730263
  a interop:DataConsent ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:onDataOwnedBy <https://acme.example/#corp> ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfConsent interop:AllRemoteFromAgent .
alice-auth:6a9feb57-252b-43b2-8470-5a938888b2fa
    interop:inheritsFromConsent
      alice-auth:e2765d6c-848a-4fc0-9092-556903730263 .
Alice’s data consent for Projectron - ACME’s Projects
alice-auth:6a9feb57-252b-43b2-8470-5a938888b2fa
  a interop:DataConsent ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:accessMode acl:Read, acl:Write ;
    interop:onDataOwnedBy <https://acme.example/#corp> ;
    interop:scopeOfGrant interop:InheritRemoteInstances ;
    interop:inheritsFromConsent
      alice-auth:e2765d6c-848a-4fc0-9092-556903730263 .
Alice’s data consent for Projectron - ACME’s Tasks
alice-auth:329eb90a-feb9-4c95-a427-2ef23989abe9
  a interop:DataConsent ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:accessMode acl:Read, acl:Write ;
    interop:onDataOwnedBy <https://omni.example/#corp> ;
    interop:scopeOfConsent interop:SelectedRemote ;
    interop:selectedDataGrant
      omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .
alice-auth:fe442ef3-5200-4b06-b4bc-fc0b495603a9
    interop:inheritsFromConsent
      alice-auth:329eb90a-feb9-4c95-a427-2ef23989abe9 .
Alice’s access consent for Projectron - Omni’s NA Projects
alice-auth:fe442ef3-5200-4b06-b4bc-fc0b495603a9
  a interop:DataConsent ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:accessMode acl:Read, acl:Write ;
    interop:onDataOwnedBy <https://omni.example/#corp> ;
    interop:scopeOfConsent interop:InheritRemoteInstances ;
    interop:inheritsFromConsent
      alice-auth:329eb90a-feb9-4c95-a427-2ef23989abe9 .
Alice’s access consent for Projectron - Omni’s NA Tasks
alice-auth:a691ee69-97d8-45c0-bb03-8e887b2db806
  a interop:DataConsent ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:accessMode acl:Read ;
  interop:scopeOfConsent interop:AllRemote .
alice-auth:ecdf7b5e-5123-4a93-87bc-86ef6de389ff
  interop:inheritsFromConsent
    alice-auth:a691ee69-97d8-45c0-bb03-8e887b2db806 .
Alice’s data consent for PerformChart - Projects
alice-auth:ecdf7b5e-5123-4a93-87bc-86ef6de389ff
  a interop:DataConsent ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:accessMode acl:Read ;
  interop:scopeOfConsent interop:InheritRemoteInstances ;
  interop:inheritsFromConsent
    alice-auth:a691ee69-97d8-45c0-bb03-8e887b2db806 .
Alice’s data consent for PerformChart - Tasks

2.12.2. Access Grant Registry

alice-auth:0d0a1f64-39b1-438f-85f6-37cafee3ce21
  a interop:AccessGrantRegistry ;
    interop:hasRegistration
      alice-auth:3fcef0f6-5807-4f1b-b77a-63d64df25a69 ,
      alice-auth:6b1b6e39-75e4-44f8-84f3-104b1a8210ad .
Alice’s access grant registry

2.12.3. Access Grant

alice-auth:3fcef0f6-5807-4f1b-b77a-63d64df25a69
  a interop:AccessGrant ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:hasAccessGrantSubject <#grant-subject> ;
    interop:hasAccessNeedGroup <#need-group-pm> ;
    interop:hasDataGrant
      alice-auth:cd247a67-0879-4301-abd0-828f63abb252 ,
      alice-auth:9827ae00-2778-4655-9f22-08bb9daaee26 ,
      alice-auth:7b2bc4ff-b4b8-47b8-96f6-06695f4c5126 ,
      alice-auth:54b1a123-23ca-4733-9371-700b52b9c567 ,
      alice-auth:12daf870-a343-4684-b828-c67c5c9c997a ,
      alice-auth:7be5a39f-583d-4464-8ad8-a39e24b99fce ,
      alice-auth:c205e9da-2dc5-4d1f-8be9-a3f90c13eedc ,
      alice-auth:68dd1212-b0f3-4611-aae2-f9f5ea30ee07 ,
      alice-auth:92328851-ffb0-427d-847e-f6d9c8417648 ,
      alice-auth:a2e961fa-a26a-4cd6-b00d-7992b8cfd1b8 .

<#grant-subject>
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> ;
    interop:accessByApplication <https://projectron.example/#app> .
Alice’s access grant for Projectron
alice-auth:cd247a67-0879-4301-abd0-828f63abb252
  a interop:DataGrant ;
    interop:dataOwner <https://alice.example/#id> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration alice-pro:773605f0-b5bf-4d46-878d-5c167eac8b5d ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:SelectedInstances ;
    interop:hasDataInstance
      alice-pro:7a130c38-668a-4775-821a-08b38f2306fb\#project .

alice-auth:9827ae00-2778-4655-9f22-08bb9daaee26
    interop:inheritsFromGrant
      alice-auth:cd247a67-0879-4301-abd0-828f63abb252 .

alice-pro:773605f0-b5bf-4d46-878d-5c167eac8b5d
  interop:iriPrefix "https://pro.alice.example/" .
Alice’s data grant for Projectron - Pro Projects
alice-auth:9827ae00-2778-4655-9f22-08bb9daaee26
  a interop:DataGrant ;
    interop:dataOwner <https://alice.example/#id> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration alice-pro:4d594c61-7cff-484a-a1d2-1f353ee4e1e7 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:inheritsFromGrant
      alice-auth:cd247a67-0879-4301-abd0-828f63abb252 .

alice-pro:4d594c61-7cff-484a-a1d2-1f353ee4e1e7
  interop:iriPrefix "https://pro.alice.example/" .
Alice’s data grant for Projectron - Pro Tasks
alice-auth:7b2bc4ff-b4b8-47b8-96f6-06695f4c5126
  a interop:DataGrant ;
    interop:dataOwner <https://alice.example/#id> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration alice-home:f6ccd3a4-45ea-4f98-8a36-98eac92a6720 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:AllInstances .

alice-auth:54b1a123-23ca-4733-9371-700b52b9c567
    interop:inheritsFromGrant
      alice-auth:7b2bc4ff-b4b8-47b8-96f6-06695f4c5126 .

alice-home:f6ccd3a4-45ea-4f98-8a36-98eac92a6720
  interop:iriPrefix "https://home.alice.example/" .
Alice’s data grant for Projectron - Home Projects
alice-auth:54b1a123-23ca-4733-9371-700b52b9c567
  a interop:DataGrant ;
    interop:dataOwner <https://alice.example/#id> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration alice-home:92f43be4-d12c-4ca3-9bd6-c18e83167b2f ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:inheritsFromGrant
      alice-auth:7b2bc4ff-b4b8-47b8-96f6-06695f4c5126 .

alice-home:92f43be4-d12c-4ca3-9bd6-c18e83167b2f
  interop:iriPrefix "https://home.alice.example/" .
Alice’s data grant for Projectron - Home Tasks
alice-auth:12daf870-a343-4684-b828-c67c5c9c997a
  a interop:DelegatedDataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:hasDataRegistration acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:AllInstances ;
    interop:delegationOfGrant
      acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 .

alice-auth:c205e9da-2dc5-4d1f-8be9-a3f90c13eedc
    interop:inheritsFromGrant
      alice-auth:12daf870-a343-4684-b828-c67c5c9c997a .

acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475
  interop:iriPrefix "https://rnd.acme.example/" .
Alice’s delegated data grant for Projectron - ACME’s RnD Projects
alice-auth:7be5a39f-583d-4464-8ad8-a39e24b99fce
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasDataRegistration acme-finance:882eea27-b968-44e7-b8f5-87b234089057 ;
  interop:accessMode acl:Read, acl:Write ;
  interop:scopeOfGrant interop:AllInstances ;
  interop:delegationOfGrant
    acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 .

alice-auth:68dd1212-b0f3-4611-aae2-f9f5ea30ee07
  interop:inheritsFromGrant
    alice-auth:7be5a39f-583d-4464-8ad8-a39e24b99fce .

acme-finance:882eea27-b968-44e7-b8f5-87b234089057
  interop:iriPrefix "https://finance.acme.example/" .
Alice’s delegated data grant for Projectron - ACME’s Finance Projects
alice-auth:c205e9da-2dc5-4d1f-8be9-a3f90c13eedc
  a interop:DelegatedDataGrant ;
    interop:dataOwner <https://acme.example/#corp> ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:hasDataRegistration acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539 ;
    interop:accessMode acl:Read, acl:Write ;
    interop:scopeOfGrant interop:InheritInstances ;
    interop:delegationOfGrant
      acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e ;
    interop:inheritsFromGrant
      alice-auth:12daf870-a343-4684-b828-c67c5c9c997a .

acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539
  interop:iriPrefix "https://rnd.acme.example/" .
Alice’s delegated data grant for Projectron - RnD ACME’s Tasks
alice-auth:68dd1212-b0f3-4611-aae2-f9f5ea30ee07
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:hasDataRegistration acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad ;
  interop:accessMode acl:Read, acl:Write ;
  interop:scopeOfGrant interop:InheritInstances ;
  interop:delegationOfGrant
    acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa ;
  interop:inheritsFromGrant
    alice-auth:7be5a39f-583d-4464-8ad8-a39e24b99fce .

acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad
  interop:iriPrefix "https://finance.acme.example/" .
Alice’s delegated data grant for Projectron - Finance ACME’s Tasks
alice-auth:92328851-ffb0-427d-847e-f6d9c8417648
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://omni.example/#corp> ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasDataRegistration omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140 ;
  interop:accessMode acl:Read, acl:Write ;
  interop:scopeOfGrant interop:AllInstances ;
  interop:delegationOfGrant
    omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .

alice-auth:a2e961fa-a26a-4cd6-b00d-7992b8cfd1b8
  interop:inheritsFromGrant
    alice-auth:92328851-ffb0-427d-847e-f6d9c8417648 .

omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140
  interop:iriPrefix "https://na.omni.example/" .
Alice’s delegated data grant for Projectron - Omni’s NA Projects
alice-auth:a2e961fa-a26a-4cd6-b00d-7992b8cfd1b8
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://omni.example/#corp> ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:hasDataRegistration omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3 ;
  interop:accessMode acl:Read, acl:Write ;
  interop:scopeOfGrant interop:InheritInstances ;
  interop:delegationOfGrant
    omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8 ;
  interop:inheritsFromGrant
    alice-auth:92328851-ffb0-427d-847e-f6d9c8417648 .

omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3
  interop:iriPrefix "https://na.omni.example/" .
Alice’s delegated data grant for Projectron - Omni’s NA Tasks
alice-auth:6b1b6e39-75e4-44f8-84f3-104b1a8210ad
  a interop:AccessGrant ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://jarvis.alice.example/#agent> ;
  interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:hasAccessGrantSubject <#grant-subject> ;
  interop:hasDataGrant
    alice-auth:995eda6f-1567-41de-b55a-97260e6b38d9 ,
    alice-auth:d8f282b3-4a0e-4093-90d1-169cf7a090e8 ,
    alice-auth:1d2e21fb-b8be-4ca7-acf7-13bf2340801f ,
    alice-auth:cb7b6b70-2c62-4ec6-88b8-b20ffb42d0b2 ,
    alice-auth:ae7564dd-73f7-490a-9a0b-76215ffca9d3 ,
    alice-auth:0978d42e-3eb3-4137-9c7f-160759e77860 .

<#grant-subject>
  a interop:AccessGrantSubject ;
  interop:accessByAgent  <https://alice.example/#id> ;
  interop:accessByApplication <https://performchart.example/#app> .
Alice’s access grant for PerformChart
alice-auth:995eda6f-1567-41de-b55a-97260e6b38d9
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasDataRegistration acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475 ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:AllInstances ;
  interop:delegationOfGrant
    acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 .

alice-auth:1d2e21fb-b8be-4ca7-acf7-13bf2340801f
  interop:inheritsFromGrant
    alice-auth:995eda6f-1567-41de-b55a-97260e6b38d9 .

acme-rnd:6e3b9ac3-254f-41cc-adbe-3f3293fd0475
  interop:iriPrefix "https://rnd.acme.example/" .
Alice’s delegated data grant for PerformChart - ACME’s RnD Projects
alice-auth:d8f282b3-4a0e-4093-90d1-169cf7a090e8
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasDataRegistration acme-finance:882eea27-b968-44e7-b8f5-87b234089057 ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:AllInstances ;
  interop:delegationOfGrant
    acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 .

alice-auth:cb7b6b70-2c62-4ec6-88b8-b20ffb42d0b2
  interop:inheritsFromGrant
    alice-auth:d8f282b3-4a0e-4093-90d1-169cf7a090e8 .

acme-finance:882eea27-b968-44e7-b8f5-87b234089057
  interop:iriPrefix "https://finance.acme.example/" .
Alice’s delegated data grant for PerformChart - ACME’s Finance Projects
alice-auth:1d2e21fb-b8be-4ca7-acf7-13bf2340801f
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:hasDataRegistration acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539 ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:InheritInstances ;
  interop:delegationOfGrant
    acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e ;
  interop:inheritsFromGrant
    alice-auth:995eda6f-1567-41de-b55a-97260e6b38d9 .

acme-rnd:f56235d6-4e58-4492-97ec-42d3b5bfa539
  interop:iriPrefix "https://rnd.acme.example/" .
Alice’s delegated data grant for PerformChart - RnD ACME’s Tasks
alice-auth:cb7b6b70-2c62-4ec6-88b8-b20ffb42d0b2
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://acme.example/#corp> ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:hasDataRegistration acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:InheritInstances ;
  interop:delegationOfGrant
    acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa ;
  interop:inheritsFromGrant
    alice-auth:d8f282b3-4a0e-4093-90d1-169cf7a090e8 .

acme-finance:4f3fbf70-49df-47ce-a573-dc54366b01ad
  interop:iriPrefix "https://finance.acme.example/" .
Alice’s delegated data grant for PerformChart - Finance ACME’s Tasks
alice-auth:ae7564dd-73f7-490a-9a0b-76215ffca9d3
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://omni.example/#corp> ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasDataRegistration omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140 ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:AllInstances ;
  interop:delegationOfGrant
    omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .

alice-auth:0978d42e-3eb3-4137-9c7f-160759e77860
  interop:inheritsFromGrant
    alice-auth:ae7564dd-73f7-490a-9a0b-76215ffca9d3 .

omni-na:823e7976-13cc-4641-be0f-a4a78c2d7140
  interop:iriPrefix "https://na.omni.example/" .
Alice’s delegated data grant for PerformChart - Omni’s NA Projects
alice-auth:0978d42e-3eb3-4137-9c7f-160759e77860
  a interop:DelegatedDataGrant ;
  interop:dataOwner <https://omni.example/#corp> ;
  interop:registeredShapeTree solidtrees:Task ;
  interop:hasDataRegistration omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3 ;
  interop:accessMode acl:Read ;
  interop:scopeOfGrant interop:InheritInstances ;
  interop:delegationOfGrant
    omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8 ;
  interop:inheritsFromGrant
    alice-auth:ae7564dd-73f7-490a-9a0b-76215ffca9d3 .

omni-na:6b800a8a-1d53-45b5-81bd-e76f1a87bdd3
  interop:iriPrefix "https://na.omni.example/" .
Alice’s delegated data grant for PerformChart - Omni’s NA Tasks

2.12.4. Application Registry

alice-auth:1cf3e08b-ffe2-465a-ac5b-94ce165cb8f0
  a interop:ApplicationRegistry ;
    interop:hasRegistration
      alice-auth:bcf22534-0187-4ae4-b88f-fe0f9fa96659 ,
      alice-auth:170c12ac-7d4f-47fe-b36d-7a9944c429d9 .
Alice’s application registry

2.12.5. Application Registration

alice-auth:bcf22534-0187-4ae4-b88f-fe0f9fa96659
  a interop:ApplicationRegistration ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-04-04T20:15:47.000Z"^^xsd:dateTime ;
    interop:updatedAt "2020-04-04T21:11:33.000Z"^^xsd:dateTime ;
    interop:registeredApplication <https://projectron.example/#app> ;
    interop:hasAccessReceipt alice-auth:dd442d1b-bcc7-40e2-bbb9-4abfa7309fbe .
Alice’s application registration for Projectron
alice-auth:170c12ac-7d4f-47fe-b36d-7a9944c429d9
  a interop:ApplicationRegistration ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-04-04T20:15:47.000Z"^^xsd:dateTime ;
    interop:updatedAt "2020-04-04T21:11:33.000Z"^^xsd:dateTime ;
    interop:registeredApplication <https://performchart.example/#app> ;
    interop:hasAccessReceipt alice-auth:7b513402-d2a2-455f-a6d1-4a54ef90cb78 .
Alice’s application registration for PerformChart

2.12.6. Access Receipt

alice-auth:b6c24b2a-3d4c-4518-8c1f-d739a51cca0d
  a interop:AccessReceipt ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:providedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:fromAgent <https://acme.example/#corp> ;
    interop:viaAgent <https://acme.example/#corp> ;
    interop:hasAccessGrantSubject
      acme-auth:7b6915b4-c135-4025-899c-ce53875bffe2\#grant-subject ;
    interop:hasDataGrant
      acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 ,
      acme-auth:cafafd6f-9cc6-4a5d-9cbd-8eeea95d3d4e ,
      acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 ,
      acme-auth:6e069259-7836-4495-ba35-fc7eca97e5aa .

acme-auth:7b6915b4-c135-4025-899c-ce53875bffe2\#grant-subject
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> .
Alice’s access receipt from ACME
alice-auth:7b065498-fa43-4abd-a08b-467d49f3cac8
  a interop:AccessReceipt ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:providedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:fromAgent <https://omni.example/#corp> ;
    interop:viaAgent <https://omni.example/#corp> ;
    interop:hasAccessGrantSubject
      omni-auth:11558b5c-a827-4355-bdff-6c200f9377e3\#grant-subject ;
    interop:hasDataGrant
      omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce ,
      omni-auth:73c5f23c-099e-452e-ab29-cbfc8c8a19f8 .

omni-auth:11558b5c-a827-4355-bdff-6c200f9377e3\#grant-subject
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> .
Alice’s access receipt from Omni
alice-auth:dd442d1b-bcc7-40e2-bbb9-4abfa7309fbe
  a interop:AccessReceipt ;
    interop:registeredBy <https://alice.example/#id> ;
    interop:registeredWith <https://jarvis.alice.example/#agent> ;
    interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:providedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
    interop:fromAgent <https://alice.example/#id> ;
    interop:viaAgent <https://alice.example/#id> ;
    interop:hasAccessGrantSubject
      alice-auth:3fcef0f6-5807-4f1b-b77a-63d64df25a69\#grant-subject ;
    interop:hasAccessNeedGroup <#need-group-pm> ;
    interop:hasDataGrant
      alice-auth:cd247a67-0879-4301-abd0-828f63abb252 ,
      alice-auth:9827ae00-2778-4655-9f22-08bb9daaee26 ,
      alice-auth:7b2bc4ff-b4b8-47b8-96f6-06695f4c5126 ,
      alice-auth:54b1a123-23ca-4733-9371-700b52b9c567 ,
      alice-auth:12daf870-a343-4684-b828-c67c5c9c997a ,
      alice-auth:7be5a39f-583d-4464-8ad8-a39e24b99fce ,
      alice-auth:c205e9da-2dc5-4d1f-8be9-a3f90c13eedc ,
      alice-auth:68dd1212-b0f3-4611-aae2-f9f5ea30ee07 ,
      alice-auth:92328851-ffb0-427d-847e-f6d9c8417648 ,
      alice-auth:a2e961fa-a26a-4cd6-b00d-7992b8cfd1b8 .

alice-auth:3fcef0f6-5807-4f1b-b77a-63d64df25a69\#grant-subject
  a interop:AccessGrantSubject ;
    interop:accessByAgent  <https://alice.example/#id> ;
    interop:accessByApplication <https://projectron.example/#app> .
Alice’s access receipt for Projectron
alice-auth:7b513402-d2a2-455f-a6d1-4a54ef90cb78
  a interop:AccessReceipt ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://jarvis.alice.example/#agent> ;
  interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:hasAccessGrantSubject
    alice-auth:6b1b6e39-75e4-44f8-84f3-104b1a8210ad\#grant-subject ;
  interop:hasDataGrant
    alice-auth:995eda6f-1567-41de-b55a-97260e6b38d9 ,
    alice-auth:d8f282b3-4a0e-4093-90d1-169cf7a090e8 ,
    alice-auth:1d2e21fb-b8be-4ca7-acf7-13bf2340801f ,
    alice-auth:cb7b6b70-2c62-4ec6-88b8-b20ffb42d0b2 ,
    alice-auth:ae7564dd-73f7-490a-9a0b-76215ffca9d3 ,
    alice-auth:0978d42e-3eb3-4137-9c7f-160759e77860 .

alice-auth:6b1b6e39-75e4-44f8-84f3-104b1a8210ad\#grant-subject
  a interop:AccessGrantSubject ;
  interop:accessByAgent  <https://alice.example/#id> ;
  interop:accessByApplication <https://performchart.example/#app> .
Alice’s access receipt for PerformChart

2.12.7. Remote Data Registrations

alice-auth:33caf7be-f804-4155-a57a-92216c577bd4
  a interop:RemoteDataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://jarvis.alice.example/#agent> ;
  interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:hasRemoteAgentDataRegistration
    alice-auth:3a019d90-c7fb-4e65-865d-4254ef064667 ,
    alice-auth:19479afc-00b9-4f7b-b602-9cc612d4b9cf .
Alice’s remote data registration for projects
alice-auth:3a019d90-c7fb-4e65-865d-4254ef064667
  a interop:RemoteAgentDataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://jarvis.alice.example/#agent> ;
  interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:fromAgent <https://acme.example/#corp> ;
  interop:satisfiesDataGrant
    acme-auth:f8064946-cb67-469a-8b28-652fd17090f6 ,
    acme-auth:80ef3361-730b-4f7c-93ba-4a4415de7264 .
Alice’s remote data registration for projects from ACME
alice-auth:19479afc-00b9-4f7b-b602-9cc612d4b9cf
  a interop:RemoteAgentDataRegistration ;
  interop:registeredBy <https://alice.example/#id> ;
  interop:registeredWith <https://jarvis.alice.example/#agent> ;
  interop:registeredAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:updatedAt "2020-09-05T06:15:01Z"^^xsd:dateTime ;
  interop:registeredShapeTree solidtrees:Project ;
  interop:fromAgent <https://omni.example/#corp> ;
  interop:satisfiesDataGrant
    omni-auth:a7f7d66d-13ba-4ba6-8908-3ea9c2703fce .
Alice’s remote data registration for projects from Omni

2.13. bob.example

2.13.1. Clinical example

To optimize for data and tool reusability, clinical data tends to use complex structures composed of generic properties. For instance, the FHIR link property links many different types of document (see the graphical and ShEx representations of a FHIR Care Plan).

Note: if accepted, move to notation section In the following examples, resources have descriptive names. The convention A-<descriptive name>-F indicates that the system may provide any name to avoid collisions. One strategy for this is to use UUIDs for every such path fragment.

Note: if accepted, move to notation section Examples that represent instance data within a POD typically start with a BASE directive to clarify where they would reside on the POD.

2.13.1.1. Clinical data described by ShEx shapes

The following FHIR Care Plan schema and example Care Plan data have been simplified for presentation here:

<CarePlan> CLOSED {
  a [fhir:CarePlan];
  fhir:partOf @<Reference>*;
  fhir:status @<code> AND @fhirvs:request-status;
  fhir:intent @<code> AND @fhirvs:care-plan-intent;
  fhir:category @<CodeableConcept>*;
  fhir:subject @<Reference>;
  fhir:activity CLOSED {
    fhir:performedActivity @<CodeableReference>*;
    fhir:plannedActivityReference @<Reference>?;
    fhir:plannedActivityDetail CLOSED {
      fhir:kind @<code> AND @fhirvs:care-plan-activity-kind?;
      fhir:code @<CodeableConcept>?;
      fhir:status @<code> AND @fhirvs:care-plan-activity-status;
      fhir:location @<CodeableReference>?;
      fhir:reported @<boolean> OR @<Reference> ?;
    } AND @<AppointmentConstraints>?;
  }*;
}

<AppointmentConstraints> { fhir:kind NOT ["Appointment"]? } OR {
  fhir:location {
    # Appointment location MUST have a reference
    fhir:CodeableReference.reference @<AppointmentLocation>
  }
}

<AppointmentLocation> {
  fhir:link IRI
}
simplified FHIR Care Plan (ShEx) shapes
BASE <http://bob.example/data/A-CarePlan-F/>

<A-HypoglycemiaManagement-F> a fhir:CarePlan;
  fhir:partOf [
    fhir:Reference.type fhir:CarePlan;
    fhir:link <A-Wellness-F> ;
    fhir:Reference.display "Dietetic care plan"
  ];
  fhir:status "active";
  fhir:intent "plan";
  fhir:category [
    fhir:CodeableConcept.coding [ a sct:737433005 ] ;
    fhir:CodeableConcept.text "Hypoglycemia management plan"
  ];
  fhir:subject [
    fhir:link <../A-Person-F/A-Me-F>;
    fhir:Reference.display "J.R. \"Bob\" Dobbs"
  ];
  fhir:activity [
    fhir:plannedActivityDetail [
      fhir:kind "Appointment";
      fhir:code [
        fhir:CodeableConcept.coding [ a sct:425604002 ];
        fhir:CodeableConcept.coding [ a icd10:E16.2XXD ];
        fhir:CodeableConcept.text "Follow-up encounter"
      ];
      fhir:status "scheduled";
      fhir:location [
        fhir:CodeableReference.concept [
          fhir:CodeableConcept.coding [
            a hl7code:v3-RoleCode\#PTRES ;
            fhir:Coding.display "Patient's Residence"
          ]
        ] ;
        fhir:CodeableReference.reference [
          fhir:link <../A-Location-F/A-HomeAddress-F>;
        ]
      ];
      fhir:reported true
    ]
  ] .
simplified FHIR Care Plan instance data [try it]

This CarePlan for unspecified hypoglyceamia includes a reference to Bob’s home address. The referenced ../Location/HomeAddress contains contact information and addresses:

BASE <http://bob.example/data/A-Location-F>

<A-HomeAddress-F> a fhir:Location;
  fhir:nodeRole fhir:treeRoot;
  fhir:status "active";
  fhir:description "Patient's Home";
  fhir:mode "instance";
  fhir:type [
    fhir:CodeableConcept.coding [
      fhir:link hl7code:v3-RoleCode\#PTRES;
      fhir:Coding.display "Patient's Residence"
    ]
  ];
  fhir:telecom [
    fhir:ContactPoint.system "phone";
    fhir:ContactPoint.value "(+1) 734-677-7777"
  ], [
    fhir:ContactPoint.system "fax";
    fhir:ContactPoint.value "(+1) 734-677-6622"
  ], [
    fhir:ContactPoint.system "email";
    fhir:ContactPoint.value "hq@HL7.org"
  ];
  fhir:address [
    fhir:Address.line "3300 Washtenaw Avenue, Suite 227";
    fhir:Address.city "Ann Arbor";
    fhir:Address.state "MI";
    fhir:Address.postalCode "48104";
    fhir:Address.country "USA"
  ];
  fhir:physicalType [
    fhir:CodeableConcept.coding [
      a hl7code:location-physical-type\#bu ;
      fhir:Coding.display "Building"
    ]
  ];
  fhir:position [
    fhir:longitude "42.256500"^^xsd:decimal;
    fhir:latitude "-83.694710"^^xsd:decimal
  ] .
simplified Location for Bob

Anyone overseeing logistics for the CarePlan’s Appointments will need access to that location. This is selected with the ShapePath @<AppointmentLocation> ~ fhir:link. (If the schema did not provide a specific shape for AppointmentLocation, we would need to start a path from a defined shape, e.g., @<CarePlan> ~ fhir:activity ~ fhir:plannedActivityDetail[fhir:kind="Appointment"] ~ fhir:CodeableReference.reference ~ fhir:link.)

2.13.1.3. Clinical data Shape Tree and Shape Tree Locator

The Care Plan Shape Tree resource captures the conventions for resources hierarchies of Care Plans (see specification). It it typically hosted on a Web site geared towards hosting standards. I’m trying to set expectations about what’s in the POD and what’s out there on teh interwebs.

fhirshapeTree:CarePlanContainer
  a shapetrees:ShapeTree ;
  shapetrees:expectsType shapetrees:ShapeTreeContainer ;
  shapetrees:contains fhirshapeTree:CarePlan .

fhirshapeTree:CarePlan
  a shapetrees:ShapeTree ;
  shapetrees:expectsType shapetrees:ShapeTreeResource ;
  shapetrees:validatedBy fhirshapes:CarePlan ;
  shapetrees:references [
    shapetrees:hasShapeTree fhirshapeTree:Location ;
    shapetrees:shapePathLocator "@<AppointmentLocation>~fhir:link"
  ] .

fhirshapeTree:Location
  a shapetrees:ShapeTree ;
  shapetrees:expectsType shapetrees:ShapeTreeResource ;
  shapetrees:validatedBy fhirshapes:Location .
simplified Care Plan Shape Tree

The Shape Tree Locator resides in a POD and associates instance data with the Shape Trees that describe it (see specification).

BASE <http://bob.example/data/A-CarePlan-F/>

<A-HypoglycemiaManagement-F?stloc#loc>
  a st:ShapeTreeLocator ;
  st:location [
    st:hasRootShapeTree fhirshapetree:CarePlanContainer ;
    st:hasRootShapeTreeInstance <..> ;

    st:hasShapeTree fhirshapetree:CarePlan ;
    st:node <A-HypoglycemiaManagement-F> ;
    st:shape fhirshapes:CarePlan ;
] .
simplified Care Plan ShapeTree Locator
BASE <http://bob.example/data/A-Location-F/>

<A-HomeAddress-F?stloc#loc>
  a st:ShapeTreeLocator ;
  st:location [
    st:hasRootShapeTree fhirshapetree:LocationContainer ;
    st:hasRootShapeTreeInstance <..> ;

    st:hasShapeTree fhirshapetree:Location ;
    st:node <A-HomeAddress-F> ;
    st:shape fhirshapes:Location ;
] .
simplified (Clinical) Location ShapeTree Locator
2.13.1.4. Following ShapePath references for access controls

An authentication agent can now allow a user to set permissions on A-CarePlan-F/A-HypoglycemiaManagement-F and extend those permissions to the referenced A-Location-F/A-HomeAddress-F:

  1. The HTTP headers for A-CarePlan-F/A-HypoglycemiaManagement-F identify that resource’s Shape Tree Locator:

    Link: A-HypoglycemiaManagement-F?stloc#loc rel=http://shapetrees.org/#ShapeTreeLocator
    
  2. The Shape Tree Locator A-HypoglycemiaManagement-F?stloc#loc has the Shape Tree fhirshapetree:CarePlan:

        st:hasShapeTree fhirshapetree:CarePlan ;
    

    and states that the node A-HypoglycemiaManagement-F conforms to the shape fhirshapes:CarePlan:

        st:node <A-HypoglycemiaManagement-F> ;
        st:shape fhirshapes:CarePlan ;
    
  3. The Shape Tree fhirshapetree:CarePlan references fhirshapeTree:Location with the Shape Path @<AppointmentLocation>~fhir:link:

        shapetrees:hasShapeTree fhirshapeTree:Location ;
        shapetrees:shapePathLocator "@<AppointmentLocation>~fhir:link"
      ] .
    
  4. When evaluated on the FHIR Care Plan schema, this Shape Path identifies this fhir:link triple constraint in the schema:

    <AppointmentLocation> {
      fhir:link IRI
    }
    
  5. When validating the node A-HypoglycemiaManagement-F against the shape fhirshapes:CarePlan, the fhir:link triple in

            fhir:CodeableReference.reference [
              fhir:link <../A-Location-F/A-HomeAddress-F>;
            ]
    

    matches the fhir:link triple constraint identified by the Shape Path.

2.13.1.5. Clinical data registration

The CarePlan data registration would reference the /data/A-CarePlan-F/ container which includes A-HypoglycemiaManagement-F and A-Wellness-F mentioned above:

BASE <https://bob.example/>

</system/registrations/A-fhir-CarePlan-DataRegistration-F>
  a interop:DataRegistration ;
  interop:registeredBy <https://bob.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2019-03-14T13:42:32.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree fhirshapeTree:CarePlan ;
  ldp:contains
      </data/A-CarePlan-F/A-Wellness-F> ,
      </data/A-CarePlan-F/A-HypoglycemiaManagement-F> .
data registration for FHIR Care Plan
BASE <https://bob.example/>

</system/registrations/A-fhir-Location-DataRegistration-F>
  a interop:DataRegistration ;
  interop:registeredBy <https://bob.example/#id> ;
  interop:registeredWith <https://solidmin.example/#app> ;
  interop:registeredAt "2019-03-14T13:42:32.000Z"^^xsd:dateTime ;
  interop:registeredShapeTree fhirshapeTree:Location ;
  ldp:contains
      </data/A-Location-F/A-HomeAddress-F> .
data registration for FHIR Location

2.14. performchart.example

Snippet below needs to be updated

performchart:\#app
  a interop:Application ;
  interop:applicationName "PerformChart" ;
  interop:applicationDescription
    "Creates performance statistics and visualisation for the projects you work on" ;
  interop:hasAccessNeedGroup <#access> .

<#access>
  interop:hasAccessNeed <#project> ;
  interop:hasAccessNeedOverride <#task> ;
  interop:hasAccessDecoratorIndex performchart:44430955-4844-466b-9e1b-04893d0a0d50 .

<#project>
    a interop:AccessNeed ;
    interop:registeredShapeTree solidtrees:Project ;
    interop:recursivelyAuthorize true ;
    interop:accessNecessity interop:AccessRequired ;
    interop:accessMode acl:Read .

<#task> # Override to stop recursion
    a interop:AccessNeed ;
    interop:registeredShapeTree solidtrees:Task ;
    interop:recursivelyAuthorize false ;
    interop:accessNecessity interop:AccessRequired ;
    interop:accessMode acl:Read .
PerformChart’s application profile document

2.15. Sequence diagrams

2.15.1. Combined OIDC Provider and Authorization Agent

2.15.1.1. Authorization Agent stores Registrations and Grants

2.15.1.2. Authorization Agent gets Registrations and Grants from Storage

Conformance

Document conventions

Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.

All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

Examples in this specification are introduced with the words “for example” or are set apart from the normative text with class="example", like this:

This is an example of an informative example.

Informative notes begin with the word “Note” and are set apart from the normative text with class="note", like this:

Note, this is an informative note.

Conformant Algorithms

Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and abort these steps") are to be interpreted with the meaning of the key word ("must", "should", "may", etc) used in introducing the algorithm.

Conformance requirements phrased as algorithms or specific steps can be implemented in any manner, so long as the end result is equivalent. In particular, the algorithms defined in this specification are intended to be easy to understand and are not intended to be performant. Implementers are encouraged to optimize.

References

Normative References

[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119

Issues Index

Write introduction
Explain visual language
Snippet below needs to be updated
if accepted, move to notation section
if accepted, move to notation section
I’m trying to set expectations about what’s in the POD and what’s out there on teh interwebs.
Snippet below needs to be updated