PREFIX : <#>
PREFIX solid: <http://www.w3.org/ns/solid/terms>
PREFIX interop: <http://www.w3.org/ns/solid/interop#>
PREFIX st: <http://www.w3.org/ns/shapetree#>
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 owl: <http://www.w3.org/2002/07/owl#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX acl: <http://www.w3.org/ns/auth/acl#>

<>
dcterms:issued "2020-06-14"^^xsd:date ;
dcterms:modified "2020-09-24"^^xsd:date ;
rdfs:label "Terms for application interoperability in Solid"@en .

#############################################################################

:Agent
  a rdfs:Class ;
  rdfs:comment "An agent profile for the Solid Ecosystem"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Agent"@en .

:SocialAgent
  rdfs:subClassOf :Agent ;
  rdfs:comment "A strongly identifiable individual, group, or organization"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Social Agent"@en .

:hasRegistrySet
  a rdf:Property ;
  rdfs:comment "Links a Social Agent to their registry set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :SocialAgent ;
  rdfs:range :RegistrySet ;
  rdfs:label "Has Registry Set"@en .

:hasAuthorizationAgent
  rdfs:comment "Links a Social Agent to their Authorization Agent"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :SocialAgent ;
  rdfs:range :Application ;
  rdfs:label "Has authorization agent"@en .

#############################################################################
# Authorization Agent
#############################################################################
:AuthorizationAgent
  a rdfs:Class ;
  rdfs:subClassOf :Agent ;
  rdfs:comment "Service used by end user to manage access"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "AuthorizationAgent"@en .

:hasAuthorizationRedirectEndpoint
  a rdf:Property ;
  rdfs:comment "URI expected to be used for redirect to obtain authorization"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AuthorizationAgent ;
  rdfs:label "Has Authorization Redirect Endpoint"@en .


# RegistrySet Class
#############################################################################
:RegistrySet
  a rdfs:Class ;
  rdfs:comment "A collection of Registry instances"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Registry Set"@en .

:hasRegistry
  a rdf:Property ;
  rdfs:comment "Links to a registry in a registry set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :RegistrySet ;
  rdfs:range :Registry ;
  rdfs:label "Has registry"@en .

:hasAgentRegistry
  rdfs:subPropertyOf :hasRegistry ;
  rdfs:comment "Links to an Agent Registry in a registry set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :RegistrySet ;
  rdfs:range :AgentRegistry ;
  rdfs:label "Has Agent Registry"@en .

:hasAuthorizationRegistry
  rdfs:subPropertyOf :hasRegistry ;
  rdfs:comment "Links to an Authorization Registry in a registry set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :RegistrySet ;
  rdfs:range :AuthorizationRegistry ;
  rdfs:label "Has Authorization Registry"@en .

:hasDataRegistry
  rdfs:subPropertyOf :hasRegistry ;
  rdfs:comment "Links to an Data Registry in a registry set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :RegistrySet ;
  rdfs:range :DataRegistry ;
  rdfs:label "Has Data registry"@en .

:hasDataRegistration
  rdfs:subPropertyOf :hasRegistration ;
  rdfs:comment "Links to a DataRegistration in a Data Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :DataRegistry :DataAuthorization :DataGrant :DelegatedDataGrant ) ] ;
  rdfs:range :DataRegistration ;
  rdfs:label "Has Data Registration"@en .

# Registry Class
#############################################################################
:Registry
  a rdfs:Class ;
  rdfs:comment "A collection of things pertinent to the operation of the Solid ecosystem"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Registry"@en .

:hasRegistration
  a rdf:Property ;
  rdfs:comment "Links to a registration in a given registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Registry ;
  rdfs:range :Registration ;
  rdfs:label "Has registration"@en .

# Registration Class
#############################################################################
:Registration
  a rdfs:Class ;
  rdfs:comment "An individual member of a Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Registration"@en .

:registeredBy
  a rdf:Property ;
  rdfs:comment "Links to the Social Agent that created the registration"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :SocialAgent ;
  rdfs:label "Registered By"@en .

:registeredWith
  a rdf:Property ;
  rdfs:comment "Links to the client Application that was used to create the registration"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :Application ;
  rdfs:label "Registered With"@en .

:registeredAt
  a rdf:Property ;
  rdfs:comment "Data and time the registration was created"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range xsd:dateTime ;
  rdfs:label "Registered At"@en .

:updatedAt
  a rdf:Property ;
  rdfs:comment "Date and time the registration was updated"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range xsd:dateTime ;
  rdfs:label "Updated At"@en .

#############################################################################
# Agent Registration
#############################################################################
:AgentRegistry
  rdfs:subClassOf :Registry ;
  rdfs:comment "A collection of Agent Registrations"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Agent Registry"@en .

:AgentRegistration
  rdfs:subClassOf :Registration ;
  rdfs:comment "An individual member of an Agent Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Agent Registration"@en .

:SocialAgentRegistration
  rdfs:subClassOf :AgentRegistration ;
  rdfs:comment "An registered Social Agent in an Agent Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Social Agent Registration"@en .

:SocialAgentInvitation
  rdfs:subClassOf :AgentRegistration ;
  rdfs:comment "An invited Social Agent in an Agent Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Social Agent Invitation"@en .

:ApplicationRegistration
  rdfs:subClassOf :AgentRegistration ;
  rdfs:comment "A registered Application in an Agent Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Application Registration"@en .

:registeredAgent
  a rdf:Property ;
  rdfs:comment "Links to the Application registered by an ApplicationRegistration"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AgentRegistration ;
  rdfs:range :Agent ;
  rdfs:label "Registered Agent"@en .

:hasSocialAgentRegistration
  rdfs:subPropertyOf :hasRegistration ;
  rdfs:comment "Links to an AgentRegistration for a SocialAgent"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AgentRegistry :AccessReceipt ) ] ;
  rdfs:range :SocialAgentRegistration ;
  rdfs:label "Has Social Agent Registration"@en .

:hasApplicationRegistration
  rdfs:subPropertyOf :hasRegistration ;
  rdfs:comment "Links to an AgentRegistration for an Application"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AgentRegistry ;
  rdfs:range :ApplicationRegistration ;
  rdfs:label "Has Application Registration"@en .

#############################################################################
# Data Registration
#############################################################################
:DataRegistry
  rdfs:subClassOf :Registry ;
  rdfs:comment "A collection of Data Registration instances"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Data Registry"@en .

:DataRegistration
  rdfs:subClassOf :Registration ;
  rdfs:comment "An individual member of a Data Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Data Registration"@en .

:registeredShapeTree
  a rdf:Property ;
  rdfs:comment "Links to the relevant shape tree"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range st:ShapeTree ;
  rdfs:label "Registered Shape Tree"@en .

:hasDataInstance
  a rdf:Property ;
  rdfs:comment "Links to instances of the shape tree in a data registration"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AccessNeed :DataAuthorization :DataGrant ) ] ;
  rdfs:label "Data Instance"@en .

#############################################################################
# Access Authorizations
#############################################################################
:AuthorizationRegistry
  rdfs:subClassOf :Registry ;
  rdfs:comment "A collection of Access Authorizations"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Authorization Registry"@en .

:hasAccessAuthorization
  rdfs:subPropertyOf :hasRegistration ;
  rdfs:comment "Links to an AccessAuthorization in an Authorization Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AuthorizationRegistry ) ] ;
  rdfs:range :AccessAuthorization ;
  rdfs:label "Has Access Authorization"@en .

:AccessAuthorization
  rdfs:subClassOf :Registration ;
  rdfs:comment "Records an access authorization made by a Social Agent to another Agent for data in their control"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Authorization"@en .

:replaces
  a rdf:Property ;
  rdfs:comment "Links to a previous immutable resource that has been superseded"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AccessAuthorization :AccessNeedGroup ) ] ;
  rdfs:range [ owl:unionOf ( :AccessAuthorization :AccessNeedGroup) ] ;
  rdfs:label "Replaces"@en .

:DataAuthorization
  a rdfs:Class ;
  rdfs:comment "Records the decision of a Social Agent to grant access to a specific type of data in their control"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Data Authorization"@en .

:hasDataAuthorization
  a rdf:Property ;
  rdfs:comment "Link to a DataAuthorization"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessAuthorization ;
  rdfs:range :DataAuthorization ;
  rdfs:label "Has Data Authorization"@en .

:scopeOfAuthorization
  a rdf:Property ;
  rdfs:comment "Identifies the access scope of a Data Authorization"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DataAuthorization ;
  rdfs:range :AccessScope ;
  rdfs:label "Scope of Authorization"@en .

:inheritsFromAuthorization
  a rdf:Property ;
  rdfs:comment "Data Authorization to inherit from"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DataAuthorization ;
  rdfs:range :DataAuthorization ;
  rdfs:label "Inherits From Authorization"@en .

:grantedBy
  a rdf:Property ;
  rdfs:comment "Social agent that granted authorization or grant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AccessAuthorization :AccessGrant :AccessReceipt ) ] ;
  rdfs:range :SocialAgent ;
  rdfs:label "Granted By"@en .

:grantedWith
  a rdf:Property ;
  rdfs:comment "Application used by a Social Agent to grant authorization or issue access grant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessAuthorization ;
  rdfs:range :Application ;
  rdfs:label "Granted With"@en .

:grantedAt
  a rdf:Property ;
  rdfs:comment "Time that authorization or grant was granted"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AccessAuthorization :AccessGrant ) ] ;
  rdfs:range xsd:dateTime ;
  rdfs:label "Granted At"@en .

:grantee
  a rdf:Property ;
  rdfs:comment "Recipient of authorization or grant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain [ owl:unionOf ( :AccessAuthorization :DataAuthorization :AccessGrant :DataGrant ) ] ;
  rdfs:range xsd:dateTime ;
  rdfs:label "Granted At"@en .

# AccessGrant Class
#############################################################################

:AccessGrant
  a rdfs:Class ;
  rdfs:comment "Provides an Agent with a detailed description of access that has been granted to them"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Grant"@en .

:hasDataGrant
  a rdf:Property ;
  rdfs:comment "Links to a Data Grant associated with an Access Grant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessGrant ;
  rdfs:range :DataGrant ;
  rdfs:label "Has Data Grant"@en .

# DataGrant Class
#############################################################################
:DataGrant
  a rdfs:Class ;
  rdfs:comment "Associates a DataRegistration with an AccessGrant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Data Grant"@en .

:satisfiesAccessNeed
  a rdf:Property ;
  rdfs:comment "Links to an AccessNeed that the grant satisfies"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DataGrant ;
  rdfs:range :AccessNeed ;
  rdfs:label "Satisfies Access Need"@en .

:scopeOfGrant
  a rdf:Property ;
  rdfs:comment "Links to a scope identifier for one of the grant types"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DataGrant ;
  rdfs:range :AccessScope ;
  rdfs:label "Scope of Grant"@en .

:dataOwner
  a rdf:Property ;
  rdfs:comment "Identifies the Social Agent that owns a given data set"@en ;
  rdfs:domain [ owl:unionOf (:DataAuthorization :DataGrant) ] ;
  rdfs:range :SocialAgent ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Data Owner"@en .

:inheritsFromGrant
  a rdf:Property ;
  rdfs:comment "Links to a Data Grant that another Data Grant inherits from"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DataGrant ;
  rdfs:range :DataGrant ;
  rdfs:label "Inherits From Grant"@en .

:DelegatedDataGrant
  rdfs:subClassOf :DataGrant ;
  rdfs:comment "A type of Data Grant where a grantee re-shares or delegates access they have received to another Agent"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Delegated Data Grant"@en .

:delegationOfGrant
  rdfs:comment "Data Grant which is being delegated"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :DelegatedDataGrant ;
  rdfs:range :DataGrant ;
  rdfs:label "Delegation of Grant"@en .
# IRIs for various grant scopes
#############################################################################
:AccessScope
  a rdfs:Class ;
  rdfs:comment "Class of access scopes"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "AccessScope"@en .

:All
  a :AccessScope ;
  rdfs:comment "All of the data owners data of a specified type, and all data shared with the owner of that type, across the owners registries"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "All"@en .

:AllFromAgent
  a :AccessScope ;
  rdfs:comment "All data of a given type shared by a specified Social Agent with the owner, across that Social Agents registries"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "All From Agent"@en .

:AllFromRegistry
  a :AccessScope ;
  rdfs:comment "All of the data owners data of a specified type in a specified Data Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "All From Registry"@en .

:SelectedFromRegistry
  a :AccessScope ;
  rdfs:comment "Only specified Data Instances of the data owners of a given type in a specified Data Registry"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Selected From Registry"@en .

:Inherited
  a :AccessScope ;
  rdfs:comment "Only Data Instances of the data owners that are associated with Data Instances allowed by another authorization or grant"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Inherited"@en .

:NoAccess
  a :AccessScope ;
  rdfs:comment "No access"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "No Access"@en .

#############################################################################
# Access Receipts
#############################################################################

:AccessReceipt
  rdfs:subClassOf :AccessGrant ;
  rdfs:comment "A record of access granted by another Social Agent in the ecosystem"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Receipt"@en .

:fromSocialAgent
  a rdf:Property ;
  rdfs:comment "Social Agent sending a message"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :SocialAgent ;
  rdfs:label "From Social Agent"@en .

:viaSocialAgent
  a rdf:Property ;
  rdfs:comment "Social Agent providing access on behalf of fromAgent"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :Agent ;
  rdfs:label "Via Social Agent"@en .

#############################################################################
# Application
#############################################################################
:Application
  a rdfs:Class ;
  rdfs:subClassOf :Agent ;
  rdfs:comment "A client software application in the Solid Ecosystem"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Application"@en .

:applicationName
  a rdf:Property ;
  rdfs:comment "Name of the Application"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Application ;
  rdfs:range xsd:string ;
  rdfs:label "Application Name"@en .

:applicationDescription
  a rdf:Property ;
  rdfs:comment "Description of the Application"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Application ;
  rdfs:range xsd:string ;
  rdfs:label "Application Description"@en .

:applicationAuthor
  a rdf:Property ;
  rdfs:comment "Author of the Application"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Application ;
  rdfs:range :SocialAgent ;
  rdfs:label "Application Author"@en .

:applicationThumbnail
  a rdf:Property ;
  rdfs:comment "Thumbnail for the application"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Application ;
  rdfs:label "Application Thumbnail"@en .

:hasAccessNeedGroup
  a rdf:Property ;
  rdfs:comment "Links to AccessNeedGroup"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :AccessNeedGroup ;
  rdfs:label "Has Access Need Group"@en .

:hasAuthorizationCallbackEndpoint
  a rdf:Property ;
  rdfs:comment "URI expected to be used for redirect after authorization"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :Application ;
  rdfs:label "Has Authorization Callback Endoint"@en .

#############################################################################
# Access Needs
#############################################################################
:AccessNeedGroup
  a rdfs:Class ;
  rdfs:comment "A grouping of access needs"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Need Group"@en .

:hasAccessNeed
  a rdf:Property ;
  rdfs:comment "Links to an Access Need"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessNeedGroup ;
  rdfs:range :AccessNeed ;
  rdfs:label "Has Access Need"@en .

:hasAccessDescriptionSet
  a rdf:Property ;
  rdfs:comment "Link to an Access Description Set"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range :AccessDescriptionSet ;
  rdfs:label "Has Access Description Set"@en .

:authenticatesAs
  a rdf:Property ;
  rdfs:comment "Agent or mode the Application authenticates as"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessNeedGroup ;
  rdfs:range [ owl:unionOf ( :SocialAgent :Application ) ] ;
  rdfs:label "Authenticates As"@en .

# AccessNeed Class
#############################################################################
:AccessNeed
  a rdfs:Class ;
  rdfs:comment "Request for access to a type of data at a specified access level"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Need"@en .

:inAccessNeedGroup
  a rdf:Property ;
  rdfs:comment "Identifies the AccessNeedGroup the AccessNeed belongs to"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessNeed ;
  rdfs:range :AccessNeedGroup ;
  rdfs:label "In Access Need Group"@en .

:accessNecessity
  a rdf:Property ;
  rdfs:comment "Identifies the necessity of the AccessNeed"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range [ owl:oneOf ( :AccessRequired :AccessOptional ) ] ;
  rdfs:label "Requested Access Necessity"@en .

:accessScenario
  a rdf:Property ;
  rdfs:comment "Provides context types for sharing scenarios"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range [ owl:oneOf ( :PersonalAccess :SharedAccess ) ] ;
  rdfs:label "Access Scenario"@en .

:accessMode
  a rdf:Property ;
  rdfs:comment "A requested acl:mode of access for an AccessNeed"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range [ owl:oneOf ( acl:Read acl:Write acl:Control acl:Append acl:Create acl:Update acl:Delete ) ] ;
  rdfs:label "Access Mode"@en .

:creatorAccessMode
  a rdf:Property ;
  rdfs:comment "An additional requested acl:mode of access for the creator of a resource"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range [ owl:oneOf ( acl:Read acl:Write acl:Control acl:Append acl:Create acl:Update acl:Delete ) ] ;
  rdfs:label "Creator Access Mode"@en .

:hasAccessNeedGroupDescription
  a rdf:Property ;
  rdfs:comment "Links to an AccessNeedGroupDescription"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessNeedGroup ;
  rdfs:range :AccessNeedGroupDescription ;
  rdfs:label "Has Access Need Group Description"@en .

:hasShapeTreeDecorator
  a rdf:Property ;
  rdfs:comment "Links to a ShapeTreeDecorator"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:range st:ShapeTreeDecorator ;
  rdfs:label "Has Shape Tree Decorator"@en .

:hasAccessNeedDescription
  a rdf:Property ;
  rdfs:comment "Links to an AccessNeedDescription"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:domain :AccessNeed ;
  rdfs:range :AccessNeedDescription ;
  rdfs:label "Has Access Need Description"@en .

:inheritsFromNeed
  a rdf:Property ;
  rdfs:comment "Links to an Access Need that another Access Need inherits from"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Inherits From Need"@en .

# IRIs for accessNecessity types
#############################################################################
:AccessRequired
  rdfs:comment "AccessNeed is required"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Required"@en .

:AccessOptional
  rdfs:comment "AccessNeed is not required"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Optional"@en .

# IRIs for accessScenario types
#############################################################################
:PersonalAccess
  rdfs:comment "Access is for personal use of the Social Agent"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Personal Access"@en .

:SharedAccess
  rdfs:comment "Access is to be shared with other Social Agents"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Shared Access"@en .

# AccessDescriptionSet class
#############################################################################
:AccessDescriptionSet
  a rdfs:Class ;
  rdfs:comment "A set of SKOS poly-hierarchies to describe AccessNeeds in an AccessNeedGroup"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Description Set"@en .

:usesLanguage
  a rdf:Property ;
  rdfs:domain :AccessDescriptionSet ;
  rdfs:range xsd:lang ;
  rdfs:comment "Language code"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Uses Language"@en .

:inAccessDescriptionSet
  a rdf:Property ;
  rdfs:range :AccessDescriptionSet ;
  rdfs:comment "Access Description Set the description belongs to"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "In Access Description Set"@en .

# AccessDescription class
#############################################################################
:AccessDescription
  a rdfs:Class ;
  rdfs:comment "Describes the association between a SKOS label and an Access Need"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Description"@en .

# AccessNeedDescription class
#############################################################################
:AccessNeedDescription
  rdfs:subClassOf :AccessDescription ;
  rdfs:comment "Describes the association between a SKOS label and an Access Need"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Need Description"@en .

# AccessNeedGroupDescription class
#############################################################################
:AccessNeedGroupDescription
  rdfs:subClassOf :AccessDescription ;
  rdfs:comment "Describes the association between a SKOS label and an Access Need Group"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Need Group Description"@en .

# AccessRequest Class
#############################################################################
:AccessRequest
  a rdfs:Class ;
  rdfs:comment "Request for access from one agent to another"@en ;
  rdfs:isDefinedBy <> ;
  rdfs:label "Access Request"@en .
