1. Introduction
Context Associations
is a modeling approach for modeling and interpreting
a target reference consisting of a closed set of statements in RDF.
The approach provides guarantees of remaining unambiguous under
storage, exchange and processing in the Semantic Web ecosystem.
Current models for signatures, provenance and policy information
often do not specify explicit boundaries of their target information in
the RDF ecosystem, relying on external interpretation or non-rdf processing
to define target boundaries.
The ability to define the target of these context definitions as a closed
set of statements within the local scope enables the combined processing
of these context definitions using the RDF stack.
>Content-Type : text/trig; profile=https : //w3 id. org/ca/graph_occurence@prefix dcat: <http://www.w3.org/ns/dcat#> . @prefix dcterms: <http://purl.org/dc/terms/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix sign: <https://example.org/signature#> . _ : graph { <http://people.org/ruben> foaf : name "Ruben" ; foaf : age 28 . } _ : graph a dcat : Resource ; dcterms : creator <http://people.org/ruben> ; dcterms : created "2021-01-01" ^^ xsd : date . _ : signature a sign : Signature ; sign : target _ : graph ; sign : issuer <http://people.org/ruben> . ...
To model target sets of statements, we make use of Named Graphs in RDF. § 2 Named Graph references defines the modeling requirements for these Named Graphs that enables uniform interpretation throughout the ecosystem. § 3 Blank Node Graphs defines the requirements for ensuring target sets of statements are closed in the local scope, making them immutable from external sources.
2. Named Graph references
Defining contextual information that targets a set of statements encompassed in a Named graph, the ability to reference the RDF Graph contained in the name-graph pair using its name identifier is required.To enforce this interpretation, the RDF profile https://w3id.org/ca/graph_occurence
can be defined on the source using profile negotiation in HTTP in an approach that enforces the above interpretation over the full data source:
> Content-type text/turtle;profile=https://w3id.org/ca/graph_occurence _:graphName { ... }
Any RDF datasource retrieved advertising the profile https://w3id.org/ca/graph_occurence
MUST interpret name identifiers of named graphs in its content
as referencing the associated RDF Graph of the named graph.
todo: incorporate other expressions of profile negotiation
Alternatively, the interpretation can be hinted in the RDF scope
by defining the name identifier of a named graph as an rdf:type
of ca:GraphIdentifier
.
@prefix ca: <https://w3id.org/ca/> . _ : graphName a ca : GraphIdentifier . _ : graphName { ... }
Any identifier defined with an rdf:type
of ca:GraphIdentifer
MUST be interpreted as referencing the associated RDF Graph of the named graph.
3. Blank Node Graphs
The definition of target sets of statements an Named Graphs, in addition to requiring the name identifier to reference the contained RDF Graph also requires the set of statements contained by this RDF Graph to remain unambiguous throughout its lifespan.
To enforce the unique definition of Named Graph, its name identifier MUST be defined as EITHER a Blank Node identifier, or as a Skolemized identifier in cases where external references are required to ensure the unique generation of the name identifier.
@prefix sign: <https://example.org/signature#> . @prefix prov: <https://example.org/provenance#> . @prefix pol: <https://example.org/policy#> . @prefix reg: <https://example.org/government/registry#> . @prefix med: <https://example.org/government/medical#> . @prefix skolem: <https://example/org/.well-known/skolem/8b98b360-9a70-4845-b52c-c675af60ad01#> . skolem : policySignatureGraph { _ : s a sign : Signature ; sign : value "..." ; sign : target skolem : dataGraph ; sign : issuer <http://people.org/Ruben> . } skolem : policyGraph { _ : p a pol : Policy ; pol : permission [ pol : target skolem : dataGraph ; pol : action pol : Read ; pol : assigner <http://people.org/Ruben> ; pol : assignee med : MedicalService . ]. } skolem : dataSignatureGraph { _ : s a sign : Signature ; sign : value "..." ; sign : target skolem : dataGraph ; sign : issuer reg : CitizenDatabase . } skolem : dataGraph { <http://people.org/Ruben> foaf : name "Ruben" . foaf : age 28 . med : PatientRecord19237128149 : targetUser <http://people.org/Ruben> . med : date "2021-01-01" ^^ xsd : date . med : doctor ...; }