Actor
incubatingStatus of this Document
This report was published by the User Journal Graph Community Group . It is not a W3C Standard nor is it on the W3C Standards Track. Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. Learn more about W3C Community and Business Groups .
1. Overview
This optional module defines a minimal graph-native vocabulary for attaching actor responsibility and eligibility metadata to foundational Graph nodes.
Without an actor primitive, implementations tend to hide responsibility, approval eligibility, or participant metadata in opaque payloads and extensions. That makes governance and human-in-the-loop questions difficult to validate, query, or preserve across tools.
This first version is intentionally small. It declares Actor nodes and two references for Graph
metadata. It does not define identity systems, accounts, enforcement, provenance, or runtime
attribution.
2. Normative Artifacts
This module is published through the following artifacts:
actor.ttl: ontology, published athttps://ujg.specs.openuji.org/ed/ns/actoractor.context.jsonld: JSON-LD term mappings, published athttps://ujg.specs.openuji.org/ed/ns/actor.context.jsonldactor.shape.ttl: SHACL validation rules, published athttps://ujg.specs.openuji.org/ed/ns/actor.shape
Examples in this page compose the shared baseline context https://ujg.specs.openuji.org/ed/ns/context.jsonld
with the Actor context.
3. Terminology
Actor: An addressable participant, role-like entity, system, organization, or other responsible party represented as a Core
Node.Responsible actor: The actor responsible for ownership or stewardship of a Graph node.
Eligible actor: An actor described as eligible to perform, approve, or trigger a transition-like Graph edge.
4. Attachment Model
The module introduces two interoperable attachments:
actor:responsibleActorReflinks an allowed Graph node to one Actor.actor:eligibleActorRefslinks an allowed transition-like Graph edge to one or more Actors.
The allowed host nodes are intentionally limited.
responsibleActorRef is allowed on:
eligibleActorRefs is allowed on:
A Graph node without Actor references remains fully valid and traversable. Consumers MAY ignore this module and still process the graph.
5. Non-Goals
Actor does not define:
authentication
authorization enforcement
IAM groups
user accounts
PII fields
org charts
legal accountability
runtime access-control APIs
delegation workflows
cryptographic signing
traversal semantics
transition eligibility evaluation
Actor v0 also does not attach actors to runtime nodes, journey stacks, experience annotations, opaque extension payloads, or nodes defined by other optional modules.
6. Runtime Attribution Research Notice
Runtime actor attribution is intentionally not standardized in Actor v0.
Runtime Evidence can identify an observing actor for execution-level or event-level runtime metadata. Open questions such as observed performer, uploader, or domain subject remain outside Actor v0 and should stay implementation-specific or be carried in extensions until a future module defines them.
7. Ontology
The normative Actor ontology is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/actor.
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .
<https://ujg.specs.openuji.org/ed/ns/actor#> a owl:Ontology ;
rdfs:label "UJG Actor Editor's Draft Vocabulary"@en ;
dct:description "UJG Actor ontology declaration" .
### Classes
ujgactor:Actor a owl:Class ;
rdfs:subClassOf ujg:Node .
### Properties
ujgactor:responsibleActorRef a owl:ObjectProperty ;
rdfs:domain [
a owl:Class ;
owl:unionOf (
ujggraph:Journey
ujggraph:State
ujggraph:CompositeState
ujggraph:Transition
ujggraph:OutgoingTransition
ujggraph:OutgoingTransitionGroup
)
] ;
rdfs:range ujgactor:Actor .
ujgactor:eligibleActorRefs a owl:ObjectProperty ;
rdfs:domain [
a owl:Class ;
owl:unionOf (
ujggraph:Transition
ujggraph:OutgoingTransition
)
] ;
rdfs:range ujgactor:Actor . @prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .
<https://ujg.specs.openuji.org/ed/ns/actor#> a owl:Ontology ;
rdfs:label "UJG Actor Editor's Draft Vocabulary"@en ;
dct:description "UJG Actor ontology declaration" .
### Classes
ujgactor:Actor a owl:Class ;
rdfs:subClassOf ujg:Node .
### Properties
ujgactor:responsibleActorRef a owl:ObjectProperty ;
rdfs:domain [
a owl:Class ;
owl:unionOf (
ujggraph:Journey
ujggraph:State
ujggraph:CompositeState
ujggraph:Transition
ujggraph:OutgoingTransition
ujggraph:OutgoingTransitionGroup
)
] ;
rdfs:range ujgactor:Actor .
ujgactor:eligibleActorRefs a owl:ObjectProperty ;
rdfs:domain [
a owl:Class ;
owl:unionOf (
ujggraph:Transition
ujggraph:OutgoingTransition
)
] ;
rdfs:range ujgactor:Actor . 8. JSON-LD Context
The normative Actor JSON-LD context is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/actor.context.jsonld.
{
"@context": {
"@version": 1.1,
"ujgactor": "https://ujg.specs.openuji.org/ed/ns/actor#",
"actor": "https://ujg.specs.openuji.org/ed/ns/actor#",
"Actor": "ujgactor:Actor",
"responsibleActorRef": {
"@id": "ujgactor:responsibleActorRef",
"@type": "@id"
},
"eligibleActorRefs": {
"@id": "ujgactor:eligibleActorRefs",
"@type": "@id",
"@container": "@set"
}
}
} {
"@context": {
"@version": 1.1,
"ujgactor": "https://ujg.specs.openuji.org/ed/ns/actor#",
"actor": "https://ujg.specs.openuji.org/ed/ns/actor#",
"Actor": "ujgactor:Actor",
"responsibleActorRef": {
"@id": "ujgactor:responsibleActorRef",
"@type": "@id"
},
"eligibleActorRefs": {
"@id": "ujgactor:eligibleActorRefs",
"@type": "@id",
"@container": "@set"
}
}
} 9. Validation
The normative Actor SHACL shape is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/actor.shape.
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgactorshape: <https://ujg.specs.openuji.org/ed/ns/actor.shape#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
ujgactorshape:ActorShape a sh:NodeShape ;
sh:targetClass ujgactor:Actor ;
sh:nodeKind sh:IRI .
ujgactorshape:ResponsibleActorHostShape a sh:NodeShape ;
sh:targetClass
ujggraph:Journey,
ujggraph:State,
ujggraph:CompositeState,
ujggraph:Transition,
ujggraph:OutgoingTransition,
ujggraph:OutgoingTransitionGroup ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgactor:responsibleActorRef ;
sh:class ujgactor:Actor ;
sh:nodeKind sh:IRI ;
sh:maxCount 1 ;
] .
ujgactorshape:EligibleActorHostShape a sh:NodeShape ;
sh:targetClass ujggraph:Transition, ujggraph:OutgoingTransition ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgactor:eligibleActorRefs ;
sh:class ujgactor:Actor ;
sh:nodeKind sh:IRI ;
] . @prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgactorshape: <https://ujg.specs.openuji.org/ed/ns/actor.shape#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
ujgactorshape:ActorShape a sh:NodeShape ;
sh:targetClass ujgactor:Actor ;
sh:nodeKind sh:IRI .
ujgactorshape:ResponsibleActorHostShape a sh:NodeShape ;
sh:targetClass
ujggraph:Journey,
ujggraph:State,
ujggraph:CompositeState,
ujggraph:Transition,
ujggraph:OutgoingTransition,
ujggraph:OutgoingTransitionGroup ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgactor:responsibleActorRef ;
sh:class ujgactor:Actor ;
sh:nodeKind sh:IRI ;
sh:maxCount 1 ;
] .
ujgactorshape:EligibleActorHostShape a sh:NodeShape ;
sh:targetClass ujggraph:Transition, ujggraph:OutgoingTransition ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgactor:eligibleActorRefs ;
sh:class ujgactor:Actor ;
sh:nodeKind sh:IRI ;
] . The rules below define the remaining module semantics beyond the structural constraints captured by the SHACL shape.
Graph metadata only: Actor references describe Graph responsibility and eligibility metadata. They MUST NOT create hidden graph edges or change traversal behavior.
Responsibility meaning:
responsibleActorRefidentifies ownership or stewardship, not legal accountability.Eligibility meaning:
eligibleActorRefsdescribes intended actor eligibility, not authorization enforcement.Graceful degradation: Consumers that do not implement this module MAY ignore Actor semantics, but SHOULD preserve recognized JSON-LD data during read-transform-write when possible.
Host boundary: Actor v0 MUST NOT be interpreted as defining actor attachments for nodes outside the allowed Graph host classes.
10. Minimal Example
{
"@context": [
"https://ujg.specs.openuji.org/ed/ns/context.jsonld",
"https://ujg.specs.openuji.org/ed/ns/actor.context.jsonld"
],
"@id": "https://example.com/ujg/actor/physical-ai-decision.jsonld",
"@type": "UJGDocument",
"nodes": [
{
"@id": "urn:ujg:actor:physical-ai-system",
"@type": "Actor",
"label": "Physical AI System"
},
{
"@id": "urn:ujg:actor:production-engineer",
"@type": "Actor",
"label": "Production Engineer"
},
{
"@id": "urn:ujg:actor:supervisor",
"@type": "Actor",
"label": "Supervisor"
},
{
"@id": "urn:ujg:journey:physical-ai-review",
"@type": "Journey",
"startStateRef": "urn:ujg:state:engineer-approval-required",
"stateRefs": [
"urn:ujg:state:engineer-approval-required",
"urn:ujg:state:decision-approved"
],
"transitionRefs": ["urn:ujg:transition:approve-ai-decision"],
"responsibleActorRef": "urn:ujg:actor:production-engineer"
},
{
"@id": "urn:ujg:state:engineer-approval-required",
"@type": "State",
"label": "Engineer approval required",
"responsibleActorRef": "urn:ujg:actor:production-engineer"
},
{
"@id": "urn:ujg:state:decision-approved",
"@type": "State",
"label": "Decision approved"
},
{
"@id": "urn:ujg:transition:approve-ai-decision",
"@type": "Transition",
"from": "urn:ujg:state:engineer-approval-required",
"to": "urn:ujg:state:decision-approved",
"eligibleActorRefs": [
"urn:ujg:actor:production-engineer",
"urn:ujg:actor:supervisor"
]
}
]
} {
"@context": [
"https://ujg.specs.openuji.org/ed/ns/context.jsonld",
"https://ujg.specs.openuji.org/ed/ns/actor.context.jsonld"
],
"@id": "https://example.com/ujg/actor/physical-ai-decision.jsonld",
"@type": "UJGDocument",
"nodes": [
{
"@id": "urn:ujg:actor:physical-ai-system",
"@type": "Actor",
"label": "Physical AI System"
},
{
"@id": "urn:ujg:actor:production-engineer",
"@type": "Actor",
"label": "Production Engineer"
},
{
"@id": "urn:ujg:actor:supervisor",
"@type": "Actor",
"label": "Supervisor"
},
{
"@id": "urn:ujg:journey:physical-ai-review",
"@type": "Journey",
"startStateRef": "urn:ujg:state:engineer-approval-required",
"stateRefs": [
"urn:ujg:state:engineer-approval-required",
"urn:ujg:state:decision-approved"
],
"transitionRefs": ["urn:ujg:transition:approve-ai-decision"],
"responsibleActorRef": "urn:ujg:actor:production-engineer"
},
{
"@id": "urn:ujg:state:engineer-approval-required",
"@type": "State",
"label": "Engineer approval required",
"responsibleActorRef": "urn:ujg:actor:production-engineer"
},
{
"@id": "urn:ujg:state:decision-approved",
"@type": "State",
"label": "Decision approved"
},
{
"@id": "urn:ujg:transition:approve-ai-decision",
"@type": "Transition",
"from": "urn:ujg:state:engineer-approval-required",
"to": "urn:ujg:state:decision-approved",
"eligibleActorRefs": [
"urn:ujg:actor:production-engineer",
"urn:ujg:actor:supervisor"
]
}
]
}