The HGA pipeline requires that Stage 8 (NowGraph construction) know who is asking before it can produce an appropriate projection. The Viewer Pass is the formal mechanism by which that viewer context is established and carried into the pipeline.
The Viewer Pass sits logically upstream of Stage 8. It is populated
prior to or during the initial scene graph query, and is passed as an
input parameter to the hproj:SceneProjectionActivity. Without a Viewer
Pass, implementations MUST fall back to a generic anonymous viewer profile.
Key design principle: Viewer properties are NOT static profile fields. They are assertion events — time-stamped, provenanced, and weighted claims about a viewer entity that evolve over time. This preserves the full provenance chain and supports temporal reasoning about viewer state. The same viewer querying the same holon six months later may receive a different projection, correctly, because their assertion stream has evolved.
A hview:ViewerPass carries exactly four sub-structures:
ViewerProfile — who the viewer is. An agent IRI plus a stream of assertion events about viewer properties (role, expertise, preferences, affiliations, demographic attributes). Each property is an annotated triple carrying provenance, timestamp, and assertionWeight.
PriorContext — what the viewer already knows. A set of SHACL shape IRIs that the viewer’s existing knowledge is asserted to satisfy, plus optional named graph references to prior session DataBooks. Allows the NowGraph to suppress shared ground and foreground the delta.
StanceDeclaration — which authorities the viewer recognises. An ordered list of named graphs (by trust precedence) that the viewer accepts as authoritative for this session. Determines how contested assertions are resolved in the projection.
ResolutionProfile — at what granularity and along which dimensions the viewer needs the projection. Binding of rendering mode, projection depth, and foregrounded property dimensions.
The Viewer Pass is a bridge module. It:
hev:AssertionEvent reification for viewer property assertionshproj:NowGraph via hview:viewerRef (new bridge property)hproj:RenderingModeScheme for resolution mode selectionhproj:projectionDepth for containment depthhmk:AgentHolon identity modelling (Pass E §1)@prefix hspec: <http://w3id.org/holon/spec/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
hspec:HGAViewer a hspec:ConformanceClass ;
rdfs:label "HGA Viewer"@en ;
sh:order 7 ;
hspec:extends hspec:HGAProjection ;
dcterms:description """Extends HGA Projection. Implementations MUST additionally support:
(a) hview:ViewerPass envelope shape;
(b) hview:ViewerProfile with assertion event stream;
(c) hview:PriorContext with SHACL shape satisfaction declarations;
(d) hview:StanceDeclaration with named graph trust ordering;
(e) hview:ResolutionProfile binding to hproj: rendering vocabulary;
(f) hview:ViewerAssertionReifierShape for annotated viewer properties;
(g) hview:viewerRef bridge property on hproj:NowGraph;
(h) Anonymous viewer fallback when no ViewerPass is supplied."""@en .
@prefix hview: <http://w3id.org/holon/viewer/> .
@prefix holon: <http://w3id.org/holon/> .
@prefix hev: <http://w3id.org/holon/event/> .
@prefix hproj: <http://w3id.org/holon/projection/> .
@prefix hmk: <http://w3id.org/holon/markov/> .
@prefix hpol: <http://w3id.org/holon/policy/> .
@prefix hspec: <http://w3id.org/holon/spec/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
hview:ViewerPass a owl:Class ;
rdfs:label "Viewer Pass"@en ;
rdfs:comment """The top-level container for viewer context supplied to
Stage 8 NowGraph construction. Carries exactly one ViewerProfile,
one PriorContext, one StanceDeclaration, and one ResolutionProfile."""@en .
hview:ViewerProfile a owl:Class ;
rdfs:label "Viewer Profile"@en ;
rdfs:comment """Viewer identity and property assertion stream. Identifies
the viewer as an agent IRI and carries a set of annotated property
assertions (hview:ViewerAssertion) representing evolving viewer state."""@en .
hview:ViewerAssertion a owl:Class ;
rdfs:subClassOf hev:AssertionEvent ;
rdfs:label "Viewer Assertion"@en ;
rdfs:comment """A single annotated claim about a viewer property. Extends
hev:AssertionEvent with viewer-specific reification properties. The
assertion triple itself uses Turtle 1.2 reification; the reifier IRI
is typed as hview:ViewerAssertion."""@en .
hview:PriorContext a owl:Class ;
rdfs:label "Prior Context"@en ;
rdfs:comment """Declares which SHACL shapes the viewer's existing knowledge
is asserted to satisfy, and optionally references prior session DataBooks.
Used by Stage 8 to compute the delta between viewer prior knowledge and
holon content, suppressing shared ground from the NowGraph."""@en .
hview:StanceDeclaration a owl:Class ;
rdfs:label "Stance Declaration"@en ;
rdfs:comment """An ordered list of named graphs (by trust precedence) that
the viewer accepts as authoritative for this session. Resolves contested
assertions during NowGraph construction. Precedence is expressed via
hview:trustOrder (sh:order-style integer: lower = higher trust)."""@en .
hview:TrustEntry a owl:Class ;
rdfs:label "Trust Entry"@en ;
rdfs:comment """A single entry in a StanceDeclaration. Binds a named graph
IRI to a trust level and optional authority chain reference."""@en .
hview:ResolutionProfile a owl:Class ;
rdfs:label "Resolution Profile"@en ;
rdfs:comment """Binds rendering mode, projection depth, and foregrounded
property dimensions for this viewer session. Resolution is a vector,
not a scalar: it specifies which dimensions of the holon are
foregrounded, not merely how much detail to return."""@en .
hview:DimensionWeight a owl:Class ;
rdfs:label "Dimension Weight"@en ;
rdfs:comment """A weighted binding of a property or property path to
a salience value [0.0–1.0] within a ResolutionProfile. Dimensions with
weight 0.0 are suppressed; weight 1.0 are maximally foregrounded."""@en .
# --- ViewerPass structure ---
hview:hasProfile a owl:ObjectProperty ;
rdfs:domain hview:ViewerPass ;
rdfs:range hview:ViewerProfile ;
rdfs:label "has profile"@en .
hview:hasPriorContext a owl:ObjectProperty ;
rdfs:domain hview:ViewerPass ;
rdfs:range hview:PriorContext ;
rdfs:label "has prior context"@en .
hview:hasStance a owl:ObjectProperty ;
rdfs:domain hview:ViewerPass ;
rdfs:range hview:StanceDeclaration ;
rdfs:label "has stance"@en .
hview:hasResolution a owl:ObjectProperty ;
rdfs:domain hview:ViewerPass ;
rdfs:range hview:ResolutionProfile ;
rdfs:label "has resolution"@en .
# --- ViewerProfile ---
hview:viewerAgent a owl:ObjectProperty ;
rdfs:domain hview:ViewerProfile ;
rdfs:label "viewer agent"@en ;
rdfs:comment "Links ViewerProfile to the agent IRI (person, persona, system)." .
hview:hasAssertion a owl:ObjectProperty ;
rdfs:domain hview:ViewerProfile ;
rdfs:range hview:ViewerAssertion ;
rdfs:label "has assertion"@en .
# --- ViewerAssertion reification properties ---
hview:assertedProperty a owl:ObjectProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:label "asserted property"@en ;
rdfs:comment "The property being asserted about the viewer." .
hview:assertedValue a owl:DatatypeProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:label "asserted value"@en .
hview:assertedValueIRI a owl:ObjectProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:label "asserted value (IRI)"@en .
hview:assertedAt a owl:DatatypeProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:range xsd:date ;
rdfs:label "asserted at"@en .
hview:assertedBy a owl:ObjectProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:label "asserted by"@en ;
rdfs:comment "The authority (person, publication, system) making this assertion." .
hview:assertionWeight a owl:DatatypeProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:range xsd:decimal ;
rdfs:label "assertion weight"@en ;
rdfs:comment """Credence value in range [0.0, 1.0]. 1.0 = certain;
0.5 = equipoise; 0.0 = asserted false. Values below 0.3 SHOULD be
treated as contested by implementations."""@en .
hview:assertionPolarity a owl:DatatypeProperty ;
rdfs:domain hview:ViewerAssertion ;
rdfs:range xsd:boolean ;
rdfs:label "assertion polarity"@en ;
rdfs:comment "true = positive assertion; false = negation." .
# --- PriorContext ---
hview:satisfiesShape a owl:ObjectProperty ;
rdfs:domain hview:PriorContext ;
rdfs:label "satisfies shape"@en ;
rdfs:comment "IRI of a SHACL NodeShape the viewer's prior knowledge satisfies." .
hview:priorSession a owl:ObjectProperty ;
rdfs:domain hview:PriorContext ;
rdfs:label "prior session"@en ;
rdfs:comment "Reference to a previous session DataBook IRI." .
hview:priorSessionDate a owl:DatatypeProperty ;
rdfs:domain hview:PriorContext ;
rdfs:range xsd:date ;
rdfs:label "prior session date"@en .
# --- StanceDeclaration / TrustEntry ---
hview:hasTrustEntry a owl:ObjectProperty ;
rdfs:domain hview:StanceDeclaration ;
rdfs:range hview:TrustEntry ;
rdfs:label "has trust entry"@en .
hview:trustedGraph a owl:ObjectProperty ;
rdfs:domain hview:TrustEntry ;
rdfs:label "trusted graph"@en ;
rdfs:comment "Named graph IRI accepted as authoritative." .
hview:trustOrder a owl:DatatypeProperty ;
rdfs:domain hview:TrustEntry ;
rdfs:range xsd:integer ;
rdfs:label "trust order"@en ;
rdfs:comment "Precedence integer. Lower value = higher trust. MUST be unique within a StanceDeclaration." .
hview:trustScope a owl:ObjectProperty ;
rdfs:domain hview:TrustEntry ;
rdfs:label "trust scope"@en ;
rdfs:comment "Optional: restricts trust to a specific property or class IRI." .
# --- ResolutionProfile ---
hview:renderingMode a owl:ObjectProperty ;
rdfs:domain hview:ResolutionProfile ;
rdfs:label "rendering mode"@en ;
rdfs:comment "Binds to hproj:RenderingModeScheme concept IRI." .
hview:projectionDepth a owl:DatatypeProperty ;
rdfs:domain hview:ResolutionProfile ;
rdfs:range xsd:integer ;
rdfs:label "projection depth"@en ;
rdfs:comment "-1 = full subgraph; 0 = root only; n = n containment levels." .
hview:hasDimensionWeight a owl:ObjectProperty ;
rdfs:domain hview:ResolutionProfile ;
rdfs:range hview:DimensionWeight ;
rdfs:label "has dimension weight"@en .
hview:weightedProperty a owl:ObjectProperty ;
rdfs:domain hview:DimensionWeight ;
rdfs:label "weighted property"@en .
hview:salience a owl:DatatypeProperty ;
rdfs:domain hview:DimensionWeight ;
rdfs:range xsd:decimal ;
rdfs:label "salience"@en ;
rdfs:comment "Foreground weight in range [0.0, 1.0]." .
# --- NowGraph bridge ---
hview:viewerRef a owl:ObjectProperty ;
rdfs:domain hproj:NowGraph ;
rdfs:range hview:ViewerPass ;
rdfs:label "viewer ref"@en ;
rdfs:comment """Bridge property. Links a hproj:NowGraph to the
hview:ViewerPass that parameterised its construction. SHOULD be
set on every NowGraph when ViewerPass conformance is active."""@en .
hview:ViewerPassShape a sh:NodeShape ;
sh:targetClass hview:ViewerPass ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:hasProfile ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:class hview:ViewerProfile ;
sh:message "A ViewerPass MUST have exactly one ViewerProfile."@en
] ;
sh:property [
sh:path hview:hasPriorContext ;
sh:maxCount 1 ;
sh:class hview:PriorContext ;
sh:message "A ViewerPass MAY have at most one PriorContext."@en
] ;
sh:property [
sh:path hview:hasStance ;
sh:maxCount 1 ;
sh:class hview:StanceDeclaration ;
sh:message "A ViewerPass MAY have at most one StanceDeclaration."@en
] ;
sh:property [
sh:path hview:hasResolution ;
sh:maxCount 1 ;
sh:class hview:ResolutionProfile ;
sh:message "A ViewerPass MAY have at most one ResolutionProfile."@en
] .
hview:ViewerProfileShape a sh:NodeShape ;
sh:targetClass hview:ViewerProfile ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:viewerAgent ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:nodeKind sh:IRI ;
sh:message "A ViewerProfile MUST identify exactly one viewer agent IRI."@en
] ;
sh:property [
sh:path hview:hasAssertion ;
sh:class hview:ViewerAssertion ;
sh:message "All hasAssertion values MUST be typed hview:ViewerAssertion."@en
] .
This shape governs the reifier IRI (the ~ Event:id {| ... |} block),
not the subject triple itself. It extends the temporal reifier pattern
from Pass C §4.
hview:ViewerAssertionReifierShape a sh:NodeShape ;
sh:targetClass hview:ViewerAssertion ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:assertedAt ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:datatype xsd:date ;
sh:message "A ViewerAssertion MUST carry exactly one assertedAt date."@en
] ;
sh:property [
sh:path hview:assertedBy ;
sh:minCount 1 ;
sh:nodeKind sh:IRI ;
sh:message "A ViewerAssertion MUST identify at least one asserting authority."@en
] ;
sh:property [
sh:path hview:assertionWeight ;
sh:maxCount 1 ;
sh:datatype xsd:decimal ;
sh:minInclusive 0.0 ;
sh:maxInclusive 1.0 ;
sh:message "assertionWeight, if present, MUST be a decimal in [0.0, 1.0]."@en
] ;
sh:property [
sh:path hview:assertionPolarity ;
sh:maxCount 1 ;
sh:datatype xsd:boolean
] .
hview:StanceDeclarationShape a sh:NodeShape ;
sh:targetClass hview:StanceDeclaration ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:hasTrustEntry ;
sh:minCount 1 ;
sh:class hview:TrustEntry ;
sh:message "A StanceDeclaration MUST contain at least one TrustEntry."@en
] .
hview:TrustEntryShape a sh:NodeShape ;
sh:targetClass hview:TrustEntry ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:trustedGraph ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:nodeKind sh:IRI ;
sh:message "A TrustEntry MUST identify exactly one named graph IRI."@en
] ;
sh:property [
sh:path hview:trustOrder ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:datatype xsd:integer ;
sh:message "A TrustEntry MUST carry exactly one trustOrder integer."@en
] ;
sh:property [
sh:path hview:trustScope ;
sh:nodeKind sh:IRI
] .
hview:ResolutionProfileShape a sh:NodeShape ;
sh:targetClass hview:ResolutionProfile ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:renderingMode ;
sh:maxCount 1 ;
sh:nodeKind sh:IRI ;
sh:message "renderingMode, if present, MUST be a hproj:RenderingModeScheme concept IRI."@en
] ;
sh:property [
sh:path hview:projectionDepth ;
sh:maxCount 1 ;
sh:datatype xsd:integer ;
sh:minInclusive -1
] ;
sh:property [
sh:path hview:hasDimensionWeight ;
sh:class hview:DimensionWeight
] .
hview:DimensionWeightShape a sh:NodeShape ;
sh:targetClass hview:DimensionWeight ;
sh:closed true ;
sh:ignoredProperties ( rdf:type rdfs:label rdfs:comment ) ;
sh:property [
sh:path hview:weightedProperty ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:nodeKind sh:IRI
] ;
sh:property [
sh:path hview:salience ;
sh:minCount 1 ; sh:maxCount 1 ;
sh:datatype xsd:decimal ;
sh:minInclusive 0.0 ;
sh:maxInclusive 1.0
] .
The following example encodes a Viewer Pass for a named individual
(Person:JaneDoe) approaching a political analysis holon. Her political
alignment is an opinion event asserted by a third party with moderate
confidence; her professional role is self-asserted with certainty.
@prefix hview: <http://w3id.org/holon/viewer/> .
@prefix hproj: <http://w3id.org/holon/projection/> .
@prefix hev: <http://w3id.org/holon/event/> .
@prefix holon: <http://w3id.org/holon/> .
@prefix Person: <https://example.org/person/> .
@prefix Pub: <https://example.org/publication/> .
@prefix Org: <https://example.org/org/> .
@prefix Role: <https://example.org/role/> .
@prefix Concept: <https://example.org/concept/> .
@prefix Schema: <https://schema.org/> .
@prefix hshape: <http://w3id.org/holon/shape/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
## Viewer Pass container
<https://example.org/viewer/pass/jane-2026-06-13> a hview:ViewerPass ;
rdfs:label "Jane Doe — Viewer Pass, 2026-06-13"@en ;
hview:hasProfile <https://example.org/viewer/profile/jane> ;
hview:hasPriorContext <https://example.org/viewer/prior/jane> ;
hview:hasStance <https://example.org/viewer/stance/jane> ;
hview:hasResolution <https://example.org/viewer/resolution/jane-analyst> .
## Viewer Profile — identity + assertion stream
<https://example.org/viewer/profile/jane> a hview:ViewerProfile ;
rdfs:label "Jane Doe viewer profile"@en ;
hview:viewerAgent Person:JaneDoe ;
# Political alignment — third-party opinion assertion, moderate confidence
hview:hasAssertion <https://example.org/viewer/assert/pa1> .
Person:JaneDoe Schema:hasProperty Schema:politicalAlignment
~ <https://example.org/viewer/assert/pa1> {|
a hview:ViewerAssertion ;
hview:assertedValue Concept:PoliticalAlignment_LoyalLiberals ;
hview:assertedAt "2026-03-15"^^xsd:date ;
hview:assertedBy Pub:NewYorkTimes ;
hview:assertionWeight 0.65 ;
hview:assertionPolarity true
|} .
# Professional role — self-asserted, certain
# (hasAssertion triple omitted for brevity; same pattern)
Person:JaneDoe Schema:jobTitle "Senior Policy Analyst"
~ <https://example.org/viewer/assert/role1> {|
a hview:ViewerAssertion ;
hview:assertedAt "2025-09-01"^^xsd:date ;
hview:assertedBy Person:JaneDoe ;
hview:assertionWeight 1.0 ;
hview:assertionPolarity true
|} .
Person:JaneDoe Schema:memberOf Org:BrookingsInstitution
~ <https://example.org/viewer/assert/org1> {|
a hview:ViewerAssertion ;
hview:assertedAt "2025-09-01"^^xsd:date ;
hview:assertedBy Org:BrookingsInstitution ;
hview:assertionWeight 0.95 ;
hview:assertionPolarity true
|} .
## Prior Context — what Jane already knows
<https://example.org/viewer/prior/jane> a hview:PriorContext ;
hview:satisfiesShape hshape:PolicyAnalystDomainShape ;
hview:satisfiesShape hshape:USPoliticalOntologyShape ;
hview:priorSession <https://example.org/session/jane-2026-06-01> ;
hview:priorSessionDate "2026-06-01"^^xsd:date .
## Stance Declaration — which graphs Jane trusts, in what order
<https://example.org/viewer/stance/jane> a hview:StanceDeclaration ;
rdfs:label "Jane's authority stance — Brookings-first"@en ;
hview:hasTrustEntry [
a hview:TrustEntry ;
hview:trustedGraph <https://data.brookings.edu/graph/primary> ;
hview:trustOrder 1
] ;
hview:hasTrustEntry [
a hview:TrustEntry ;
hview:trustedGraph <https://example.org/graph/pew-research> ;
hview:trustOrder 2
] ;
hview:hasTrustEntry [
a hview:TrustEntry ;
hview:trustedGraph <https://example.org/graph/nyt-political> ;
hview:trustOrder 3 ;
hview:trustScope Schema:politicalAlignment
] .
## Resolution Profile — analyst view, financial + policy dimensions
<https://example.org/viewer/resolution/jane-analyst> a hview:ResolutionProfile ;
hview:renderingMode hproj:ImmersiveMode ;
hview:projectionDepth 2 ;
hview:hasDimensionWeight [
a hview:DimensionWeight ;
hview:weightedProperty Schema:politicalAlignment ;
hview:salience 0.9
] ;
hview:hasDimensionWeight [
a hview:DimensionWeight ;
hview:weightedProperty Schema:memberOf ;
hview:salience 0.8
] ;
hview:hasDimensionWeight [
a hview:DimensionWeight ;
hview:weightedProperty Schema:jobTitle ;
hview:salience 0.7
] .
## NowGraph linkage (bridge)
<https://example.org/nowgraph/jane-2026-06-13> a hproj:NowGraph ;
hview:viewerRef <https://example.org/viewer/pass/jane-2026-06-13> .
When no hview:ViewerPass is supplied to a hproj:SceneProjectionActivity,
implementations MUST construct a minimal anonymous pass:
<urn:hview:anonymous> a hview:ViewerPass ;
hview:hasProfile [
a hview:ViewerProfile ;
hview:viewerAgent <urn:hview:anonymous-agent>
] .
All four sub-structures are optional except hview:hasProfile. The anonymous
profile carries no assertions, no stance, and no resolution constraints.
The NowGraph is projected at default rendering mode and depth 1.
Standing Issue SI-G-01: Whether a missing ViewerPass should generate a
sh:Warning-levelhev:ViolationEventrather than silently triggering the anonymous fallback is deferred for future resolution. The silent fallback is the current default. Implementations MAY emit a warning log entry when the fallback is invoked; they MUST NOT reject the request.
hview:assertionWeight is an independent property. It is NOT declared
owl:sameAs or rdfs:subPropertyOf holon:concernLevel (Pass D §1).
Both use the same [0.0, 1.0] credence scale by convention, but they
govern different domains: holon:concernLevel annotates domain assertions
within holon payload graphs; hview:assertionWeight annotates viewer
property assertions within viewer profiles. Conflating them would allow
viewer-context triples to be interpreted as domain-level Bayesian
evidence, which is architecturally incorrect.
Implementations processing both properties SHOULD treat the scales as analogous for human-readable display purposes but MUST NOT merge the two property chains in inference or SPARQL queries without explicit mapping declared in a separate alignment DataBook.
A viewer property with hview:assertionWeight < 0.3 is contested and
SHOULD be surfaced as such in the projection rather than silently resolved.
When two hview:TrustEntry instances cover the same assertion and the
hview:trustScope does not disambiguate, the lower hview:trustOrder
integer wins. Ties are a validation error (caught by hview:TrustEntryShape
uniqueness constraint — implementations MAY add a SPARQL-based uniqueness
check as an extension).
At Stage 8, the scene projection engine SHOULD:
hview:satisfiesShape IRIs from hview:PriorContextThis minimises NowGraph size and focuses the Cartographer on what is actually new to this viewer.
The primary delta computation (§6.4) assumes the holon has been annotated
with SHACL shape membership — i.e., that individual resources carry
sh:shapesGraph or equivalent shape declarations linking them to the
hview:satisfiesShape IRIs. When this annotation is absent or incomplete,
implementations MUST fall back to the vocabulary query approach:
Step 1 — Property path extraction. For each hview:satisfiesShape IRI
S in the viewer’s hview:PriorContext, retrieve the sh:path values
from all sh:property constraints on S. These are the property IRIs the
shape governs.
SELECT ?path WHERE {
?shape sh:property/sh:path ?path .
VALUES ?shape { <S1> <S2> ... }
}
Step 2 — Vocabulary saturation. For each extracted property path,
collect all rdfs:domain / rdfs:range class IRIs and walk the
rdfs:subClassOf / owl:equivalentClass hierarchy to produce the full
set of class IRIs the viewer is asserted to be familiar with. This
constitutes the viewer’s known vocabulary set V.
Step 3 — Delta identification. Query the target holon for triples
whose predicate or subject/object type falls outside V:
CONSTRUCT { ?s ?p ?o }
WHERE {
?s ?p ?o .
FILTER NOT EXISTS {
VALUES ?knownPred { <p1> <p2> ... }
FILTER (?p = ?knownPred)
}
}
Step 4 — NowGraph population. Include the delta triples in the
NowGraph. Suppress known-vocabulary triples unless their specific
values are new (i.e., the predicate is known but the object IRI has
not appeared in any prior session DataBook referenced via
hview:priorSession).
Note: The vocabulary fallback is inherently coarser than the shape-membership approach. It suppresses by predicate familiarity rather than by structural pattern satisfaction. Implementations SHOULD log when the fallback is invoked and SHOULD treat its output as
sh:Warning-level rather than normative delta. Holon authors are encouraged to annotate resources with shape membership to enable the primary approach.
Copyright 2026 Kurt Cagle / Semantical LLC. Specification prose: W3C Document License. Ontology content: CC0-1.0.