Currently, the Solid protocol and its specifications lack the terms to express metadata related to the entities, roles, processes or infrastructure necessary to provide transparency to its data handling practices. In particular, these specifications do not have the terms to deal with the obligations and requirements brought by regulations related to (personal) data protection and privacy. The establishment of a metadata language such as PLASMA enables this by providing consistent taxonomies to describe the entities (e.g., providers, developers), the infrastructure, legal roles, policies, notices, registries and logs necessary to understand and establish responsibilities and accountability within the Solid ecosystem.

Introduction

PLASMA aims to provide a set of taxonomies to express Solid-related use-cases in terms of:

In addition to specifying a taxonomy of different types of policies, PLASMA promotes the usage of ODRL and DPV to determine access control to Solid Pod's resources and provides examples for using said policies.

PLASMA also provides the conditions for Pods, apps, services, users and agents to be conformant with this specification, as well as different workflows scenarios where the terms here defined are used, e.g., get a Pod, add data to a Pod, create policies or auditing apps. Finally, a legal compliance section was specified to describe how PLASMA terms can be related with data protection laws such as the GDPR and what is missing and needs to be considered.

Vocabulary

PLASMA aims to provide a set of taxonomies to represent the most relevant concepts for representing information regarding the what, who, where, why, when and how data is being handled in the Solid ecosystem.

The Base concepts correspond to the core entities and infrastructure necessary to ensure accountability in the Solid ecosystem, namely the providers and developers of Solid Pods, apps, or services. In addition, a taxonomy of Policies and Agreements is provided to establish usage preferences and requirements of Solid users, as well as to establish data requests and record data agreements in a machine-readable format.

The Entities section provides a set of terms to describe the providers and developers of infrastructure, apps, services and identity, specifies different users in regards with their ability to interact with data, and describes agents as virtual entities that act of behalf of users, apps and services. Notices can be provided to describe these entities data handling activities.

A taxonomy of Services is also provided as this is a new concept introduced in the Solid ecosystem by PLASMA. The idea is to separate apps from other functionalities that might not be needed to be packaged as such, e.g., an identity verification service that checks the validity of identity certificates. A Data taxonomy is also specified to describe logs and metadata of data related with users, apps, services, and registries.

Base concepts

PLASMA relies on (and expands) the existing Solid specifications to specify its core concepts regarding providers, developers, Pods, apps or services. Later, these concepts are expanded into taxonomies of entities, policies, services, notices, and data.

PLASMA's base concepts

Entities

Currently, Solid vocabularies do not provide terms to describe entities beyond the existing predicates in the WAC [] and ACP [] vocabularies to describe access conditions for agents, client applications or identity issuers. In PLASMA, we provide the terms to describe the providers and/or developers of Solid apps, services, and other Solid-related infrastructure, as well as terms to describe different types of users and agents.

PLASMA's entities and agents concepts

Infrastructure

Applications

Services

Identity

Users

Agents

Agents are entities that can act, whether by themselves (e.g. users), or on behalf or behest of other entities. They can be real (e.g. people, parents on behalf of children) or virtual (e.g. software agent). For Solid, we use Agent here to refer to the virtual agents so as to distinguish them from Entity which represents real or legal entities (i.e. those that can be held accountable).

The Solid Application Interoperability specification defines a specific type of application - an authorisation agent - appointed by a "Social Agent to be responsible for managing the access to data under their control" via registries. This definition is too narrow as a user might want to manage their pod data using other types of services or entities. Further details on the identity of this agent are currently missing.
Related issue on the usage of the Social Agent term: solid/data-interoperability-panel/issues/282

Policies

In the context of Solid, policies are documents used to specify the requirements of users, apps and services regarding data handling practices over data stored or shared through Solid Pods.

PLASMA's policy concepts

Note that these definitions are not limited to the data on Pod - this is intentional. Otherwise the policy will only relate to what is happening on the Pod, but not what happens after that. For example, to avoid cases such as to collect data for purpose X and then later decide to also perform purpose Y on it. This is to align the descriptions with legal requirements such as stating all purposes at the time of data collection, or going back and asking again for a new purpose.

Agreements

An Agreement is a document that describes an arrangement between entities. In the context of Solid, an AppAgreement, ServiceAgreement or PodAgreement can be governed by a contract between the User and the entity responsible for the App, Service or Pod, or can be based on the UserConsent.

Currently, the Solid specifications do not include any information on such agreements - only resources related to authorised accesses are established between Users and Apps in the form of ACL authorisations or ACP access grants.
  • UserConsent: Agreement between a User and an Entity regarding the processing of Data in a Pod and based on the User's consent.
  • AppAgreement: Agreement between a User and an Entity regarding the processing of Data in a Pod and based on a contract between the User and the Entity having responsibility for the App.
  • ServiceAgreement: Agreement between a User and an Entity regarding the processing of Data in a Pod and based on a contract between the User and the Entity having responsibility for the Service.
  • PodAgreement: Agreement between a User and an Entity regarding the processing of Data in a Pod and based on a contract between the User and the Entity having responsibility for the Pod.

Notices

A Notice is a document to provide information about the entities, operations, data, location, etc. involved in a particular process. In the context of Solid, notices can be provided to declare the Providers/Developers of Apps, Services, infrastructure, to describe data processing practices, etc.

PLASMA's notice concepts

Services

Services are processes or functionalities executed in the background, i.e., execution happens without an active front-end for the User to interact, that may or may not use Data stored within a Pod. Examples include identity management, querying or communication services. A Service can be an isolated process or can be associated with an App.

PLASMA's services concepts

Data

While Solid's overall purpose is to provide individuals with a data storage service for their Data, it should also contain (meta)data related with Users, Providers, Apps, Services, Logs or Registries.

PLASMA's data concepts

Log: A provenance record associated with a process.

UserData: Data belonging or about the User.

AppData: Data required by an App to provide its functionalities, or recording relevant contextual information.

ServiceData: Data required by a Service to provide its functionalities, or recording relevant contextual information.

PodManagementData: Data required by a Pod to provide its functionalities. For example, storing the Pod metadata regarding Provider, Developer, PodAgreement, or credentials associated with Pod infrastructure.

SchemaData: Schemas, formats or shapes for the Data recognised or supported by Apps, Services or Pods.

Registry: An indexed record for providing collective and convenient access to Data within a Pod.

Using Policies

Currently, Solid has two specifications to determine access authorisations to resources in Solid Pods.

Given that Solid provides a way for personal data to be stored and managed by individuals, it is important to consider the impact and application of data protection and privacy laws such as the GDPR that define specific concepts and obligations for how personal data can be collected, stored, used, and shared. In particular, GDPR's Articles 13 and 14 require that entities processing personal data provide transparent information on identity, purpose for processing, personal data categories, legal basis, recipients and so on, when they use personal data directly or indirectly obtained from individuals.

Neither WAC nor ACP provide the terms to deal with these requirements. To overcome this issue, PLASMA promotes the usage of the Open Digital Rights Language (ODRL), which is a W3C standard for policy expression and provides a convenient extension mechanism, through ODRL profiles, that can be integrated into the Solid architecture. Since ODRL is a general policy language, to invoke data protection-specific terms, the Data Privacy Vocabulary (DPV) can be used. DPV provides a rich set of taxonomies that can be used to specify purposes, personal data types, technical and organisational measures, rights, risks or entities. The ODRL profile for Access Control (OAC) [] already integrates these two resources to manage access control to Solid Pods' resources and uses ACLs access modes, i.e., acl:Read, acl:Write and acl:Append, when possible to express the level of access to be permitted or prohibited, as well as DPV's taxonomies to express policies over particular types of data, to express constraints over purposes, recipients or legal basis and so on.

The following sub-sections contain a set of examples that use OAC to specify UserPreferences, UserRequirements, UserOffers, DataRequests and DataAgreements as ODRL policies.

User Preferences

In this example, User A issued a preference policy https://example.com/preference1 that permits oac:Read access operations over its oac:Age data for the purpose of dpv:AcademicResearch if the legal basis is dpv:Consent.
<https://example.com/preference1> a oac:Preference, plasma:UserPreference ;
  odrl:profile oac: ;
  dct:description "Preference to read age data for academic research based on consent." ;
  dct:creator ex:userA ;
  dct:issued "2022-11-08T18:00:47"^^xsd:dateTime ;
  odrl:uid ex:preference1 ;
  odrl:permission [
    odrl:assigner ex:userA ;
    odrl:action oac:Read ;
    odrl:target oac:Age ;
    odrl:constraint [
      odrl:and 
        [
          dct:title "Purpose for access is to conduct academic research." ;
          odrl:leftOperand oac:Purpose ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:AcademicResearch
        ] ,
        [
          dct:title "Legal basis for access is consent." ;
          odrl:leftOperand oac:LegalBasis ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:Consent
        ]
    ]
  ] .
      

User Requirements

In this example, User A issued a requirement policy https://example.com/requirement1 that permits oac:Read access operations over its oac:Identifier data for the purpose of dpv:IdentityVerification if the legal basis is dpv:Consent.
<https://example.com/requirement1> a oac:Requirement, plasma:UserRequirement ;
  odrl:profile oac: ;
  dct:description "Requirement to read identifier data for identity verification based on consent." ;
  dct:creator ex:userA ;
  dct:issued "2022-11-08T18:05:09"^^xsd:dateTime ;
  odrl:uid ex:requirement1 ;
  odrl:permission [
    odrl:assigner ex:userA ;
    odrl:action oac:Read ;
    odrl:target oac:Identifier ;
    odrl:constraint [
      odrl:and 
        [
          dct:title "Purpose for access is to verify the identity of the assigner." ;
          odrl:leftOperand oac:Purpose ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:IdentityVerification
        ] ,
        [
          dct:title "Legal basis for access is consent." ;
          odrl:leftOperand oac:LegalBasis ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:Consent
        ]
    ]
  ] .
      

User Offer

In this example, User A issued an odrl:Offer with the identifier https://example.com/offer1, based on the requirement https://example.com/requirement1 and preference https://example.com/preference1 policies, as is indicated by the dct:source property. The permission associated with the requirement policy contains the property dpv:hasContext associated with the term dpv:Required to indicate that said permission is a requirement, while the term dpv:Optional is used to identify the rules related with a preference policy.
<https://example.com/offer1> a odrl:Offer, plasma:UserOffer ;
  odrl:profile oac: ;
  dct:description "Offer to read identifier data for identity verification and age data for academic research based on consent." ;
  dct:creator ex:userA ;
  dct:source ex:preference1, ex:requirement1 ;
  dct:issued "2022-11-08T18:07:34"^^xsd:dateTime ;
  odrl:uid ex:offer1 ;
  odrl:permission [
    dpv:hasContext dpv:Required ;
    odrl:assigner ex:userA ;
    odrl:action oac:Read ;
    odrl:target oac:Identifier ;
    odrl:constraint [
      odrl:and 
        [
          dct:title "Purpose for access is to verify the identity of the assigner." ;
          odrl:leftOperand oac:Purpose ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:IdentityVerification
        ] ,
        [
          dct:title "Legal basis for access is consent." ;
          odrl:leftOperand oac:LegalBasis ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:Consent
        ]
    ]
  ] ;
  odrl:permission [
    dpv:hasContext dpv:Optional ;
    odrl:assigner ex:userA ;
    odrl:action oac:Read ;
    odrl:target oac:Age ;
    odrl:constraint [
      odrl:and 
        [
          dct:title "Purpose for access is to conduct academic research." ;
          odrl:leftOperand oac:Purpose ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:AcademicResearch
        ] ,
        [
          dct:title "Legal basis for access is consent." ;
          odrl:leftOperand oac:LegalBasis ;
          odrl:operator odrl:isA ;
          odrl:rightOperand dpv:Consent
        ]
    ]
  ] .
      

Data Request

In this example, User B issued an odrl:Request with the identifier https://example.com/request1 to oac:Use oac:Age data for the purpose of conducting an academic research project X.
<https://example.com/request1> a odrl:Request, plasma:DataRequest ;
  odrl:profile oac: ;
  dct:description "Request to read age data for academic research." ;
  dct:creator ex:userB ;
  dct:issued "2022-11-08T18:15:56"^^xsd:dateTime ;
  odrl:uid ex:request1 ;
  odrl:permission [
    odrl:assignee ex:userB ;
    odrl:action oac:Use ;
    odrl:target oac:Age ;
    odrl:constraint [
      dct:title "Purpose for access is to conduct research in the academic project X, conducted in University Y." ;
      odrl:leftOperand oac:Purpose ;
      odrl:operator odrl:eq ;
      odrl:rightOperand ex:AcademicResearchProjectX
    ]
  ] .

ex:AcademicResearchProjectX a dpv:AcademicResearch ;
  rdfs:label "Conduct research in the academic project X, conducted in University Y." .
      
In this example, User A and B reach an agreement to allow oac:Read access operations over User A's Age data for the purpose of academic research in project X. This odrl:Agreement is the result of the matching of https://example.com/offer1 and https://example.com/request1, as indicated by the dct:references property. The legal basis of the agreement is consent, as is specified in the policy with the dpv:hasLegalBasis dpv:Consent terms, and User A and User B are registered as the data subject and data controller in question, respectively, using the dpv:hasDataSubject and dpv:hasDataController terms.
<https://example.com/agreement1> a odrl:Agreement, plasma:UserConsent ;
  odrl:profile oac: ;
  dct:description "Agreement to read age data for academic research based on consent." ;
  dct:creator ex:userA ;
  dct:issued "2022-11-08T18:13:37"^^xsd:dateTime ;
  odrl:uid ex:agreement1 ;
  dct:references ex:offer1, ex:request1 ;
  dpv:hasDataSubject ex:userA ;
  dpv:hasDataController ex:userB ;
  dpv:hasLegalBasis dpv:Consent ;
  odrl:permission [
    odrl:assigner ex:userA ;
    odrl:assignee ex:userB ;
    odrl:action oac:Read ;
    odrl:target oac:Age ;
    odrl:constraint [
      dct:title "Purpose for access is to conduct research in the academic project X, conducted in University Y." ;
      odrl:leftOperand oac:Purpose ;
      odrl:operator odrl:eq ;
      odrl:rightOperand ex:AcademicResearchProjectX ] ] .
      

Contract Agreement

In this example, User A and B reach an agreement to allow oac:Read access operations over User A's Contact data for the purpose of academic research project X. This odrl:Agreement is the result of the matching of https://example.com/offer2 and https://example.com/request2, as indicated by the dct:references property. The legal basis of the agreement is a contract, as is specified in the policy with the dpv:hasLegalBasis dpv:Contract terms, and User A and User B are registered as the data subject and data controller in question, respectively, using the dpv:hasDataSubject and dpv:hasDataController terms.
<https://example.com/agreement2> a odrl:Agreement, plasma:DataAgreement ;
  odrl:profile oac: ;
  dct:description "Agreement to read age data for academic research based on a contract." ;
  dct:creator ex:userA ;
  dct:issued "2022-11-14T01:11:29"^^xsd:dateTime ;
  odrl:uid ex:agreement2 ;
  dct:references ex:offer2, ex:request2 ;
  dpv:hasDataSubject ex:userA ;
  dpv:hasDataController ex:userB ;
  dpv:hasLegalBasis dpv:Contract ;
  odrl:permission [
    odrl:assigner ex:userA ;
    odrl:assignee ex:userB ;
    odrl:action oac:Read ;
    odrl:target oac:Contact ;
    odrl:constraint [
      dct:title "Purpose for access is to conduct research in the academic project X, conducted in University Y." ;
      odrl:leftOperand oac:Purpose ;
      odrl:operator odrl:eq ;
      odrl:rightOperand ex:AcademicResearchProjectX ] ] .
      

In order to comply with PLASMA, a set of conformance conditions is described in this section for Pod, app, service, user and agent conformance, specifically to specify what is mandatory to be provided, what is optional and how conformity should be assessed and ensured.

Pod Conformance

For a Pod to be conformant with this specification, the following conditions should be satisfied:

The requirements for Pod conformance necessitate shapes or forms to be developed for specifying information in a well-defined / commonly-agreed manner. This includes:

  • Shape for PodManagementData
  • Shape for AccessControlRegistry
  • Shape for PolicyRegistry
  • Shape for DataRegistry
  • Shape for DataSchemaRegistry
  • Shape for UserRegistry

App Conformance

For an App to be conformant with this specification, the following conditions should be satisfied:

The requirements for app conformance necessitate shapes or forms to be developed for specifying information in a well-defined / commonly-agreed manner. This includes:

  • Shape for AppManifest
  • Shape for AppRegistry

Service Conformance

For a Service to be conformant with this specification, the following conditions should be satisfied:

The requirements for service conformance necessitate shapes or forms to be developed for specifying information in a well-defined / commonly-agreed manner. This includes:

User Conformance

For a User to be conformant with this specification, the following conditions should be satisfied:

The requirements for user conformance necessitate shapes or forms to be developed for specifying information in a well-defined / commonly-agreed manner. This includes:

  • Shape for IdentityLog
  • Shape for DataLog
  • Shape for AccessControlLog
  • Shape for PolicyLog
  • Shape for SecurityLog
  • Shape for UserRegistry

Agent Conformance

For an Agent to be conformant with this specification, the following conditions should be satisfied:

Is it enough to associate Logs, e.g., AppLogs, ServiceLogs, DataLogs, etc., with the agents that generated them (in case there is an agent acting on behalf of something), or should it be defined one or more shapes, depending on the type of agent, for an AgentLog?

Workflows

In this section we define different scenarios and explain how the terms defined in PLASMA should be used, assuming that the entities and infrastructure used in the scenario are in conformance with the requirements specified in Section 4.

Provisioning a Pod

The provision of a Pod, and related infrastructure used to implement it, may have different setups depending on the actors that develop and provide the Pods, e.g., in a completely self-managed scenario, the User is the Entity responsible for the provision of the infrastructure, platform and software deployed for the usage of Pods, while in an opposite scenario, the User relies on Providers and/or Developers to implement and deploy all the infrastructure needed to use a Pod.

Provide examples in RDF using PLASMA terms

Adding Data to a Pod

Different scenarios whould be considered when adding Data to a Pod, i.e., data can be generated by the Users or other DataProviders or can be added by Apps, Services or Agents. In order to deal with these different scenarios, the following requirements should be taken into consideration:

Provide examples in RDF using PLASMA terms

Creating User Policies

Users should add Policies to determine access to Data stored on their Pod.

Provide examples in RDF using PLASMA terms

Apps Requesting Data

An App request to use Pod Data is encoded as a DataRequest.

Provide examples in RDF using PLASMA terms

Services Requesting Data

A Service request to use Pod Data is encoded as a DataRequest.

Provide examples in RDF using PLASMA terms

Returning Results Derived from Processing Operations

In the specific case where processing operations over Data stored in Solid Pods are processed outside of the Solid platform, the User might want to have the results of said processing returned and stored in a specific container of their Pod.

Provide examples in RDF using PLASMA terms

Auditing Pods, Data, and Apps

External entities, e.g. data protection supervisory authorities, might need to have access to provenance data such as entities data, logs, policies, etc., kept in Solid Pods in order to procede with an auditing activity.

Provide examples in RDF using PLASMA terms