1. Introduction
The RDF Trust Envelope is a modeling approach for straightforward definition and processing of contextual information in transit. It models an association of a set of RDF statements with its policy, signature, and provenance information.
To model Trust Envelopes in RDF, we make use of the Context Association model that models target sets of statements as named graphs with a blank node identifier that can be referenced to target the contained RDF graph.
2. Defining the Trust Envelope
For a target Blank Node Graph T
with name identifier Tname
that we wish to wrap in an envelope,
we use the following steps to create our trust envelope:
-
Model an envelope entity
e
of type te:Envelope in a Blank Node GraphE
with name identifierEname
. -
Create a signature
s
over theT
, by hashing all quads where the graph term =Tname
. -
Create a policy
p
overT
. -
Add signature
s
to envelopee
using thete:signature
predicate -
Add policy
p
to envelopee
using thete:policy
predicate -
Define the target graph
T
on envelopee
using thete:data
predicate -
Define
Tname
to be of typeca:GraphIdentifier
to enforce the reference to its connected RDF Graph -
Add any provenance information for
T
to the envelope graphE
-
Sign the envelope Graph
E
, and optionally contain this signature in its own Graph -
Define
Ename
be of typeca:GraphIdentifier
@prefix ca: <http://ex.org/context-associations#> @prefix te: <http://ex.org/trust-envelopes#> @prefix sign: <http://ex.org/signatures#> @prefix pol: <http://ex.org/policy#> @prefix prov: <http://ex.org/provenance#> _ : optionalSignatureGraph { _ : envelopeSignature a sign : Signature ; sign : target _ : envelopeGraph ; sign : issuer <Ruben> ; sign : value "..." . _ : envelopeGraph a ca : GraphIdentifier ; } _ : envelopeGraph { _ : envelope a te : Envelope ; te : creator <Ruben> ; te : signature _ : s ; te : policy _ : p ; te : data _ : dataGraph . _ : s a sign : Signature ; sign : target _ : dataGraph ; sign : issuer <Ruben> ; sign : value "..." . _ : p a pol : Policy ; pol : permission: [ pol : issuer <Ruben> ; pol : target _ : dataGraph . pol : action pol : Use . ] _ : dataGraph a ca : GraphIdentifier ; prov : origin <pod.org/ruben/resource1> ; prov : generatedAt "2025-01-05" ^^ xsd : date . } _ : dataGraph { <a> <b> <c> . <x> <y> <z> . }