Entry Binding
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 vocabulary for binding opaque materialization-context values to JourneyEntry contracts. It lets a producer publish stable entry selection values without putting browser, native, command-line, kiosk, QR, or other platform notation in [UJG Graph].
This module is optional. It annotates JourneyEntry contracts with external invocation values, but it does not change graph topology, traversal rules, entry ownership, or import resolution.
2. Terminology
EntryBinding: An addressable binding from an opaque
valueto a JourneyEntry.
3. EntryBinding
An EntryBinding is an addressable resource that identifies one opaque value for selecting one JourneyEntry. The value is interpreted by the current materialization context outside UJG.
classDiagram
class EntryBinding {
id
entryRef
value
}
class JourneyEntry
EntryBinding --> JourneyEntry : entryRef Example JSON node:
{
"@type": "EntryBinding",
"@id": "urn:ujg:entry-binding:checkout",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout"
} {
"@type": "EntryBinding",
"@id": "urn:ujg:entry-binding:checkout",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout"
} 4. Attachment Model
The module introduces real JSON-LD terms and RDF edges for entry binding:
entryReflinks anEntryBindingto a JourneyEntry.valuecarries an opaque string interpreted outside UJG by the current materialization context.
EntryBinding does not declare a touchpoint, materialization discriminator, fallback target,
structured invocation fields, or execution rule.
5. Normative Artifacts
This module is published through the following artifacts:
entry-binding.ttl: ontology, published athttps://ujg.specs.openuji.org/ed/ns/entry-bindingentry-binding.context.jsonld: JSON-LD term mappings, published athttps://ujg.specs.openuji.org/ed/ns/entry-binding.context.jsonldentry-binding.shape.ttl: SHACL validation rules, published athttps://ujg.specs.openuji.org/ed/ns/entry-binding.shape
Examples in this page compose the shared baseline context https://ujg.specs.openuji.org/ed/ns/context.jsonld
with the Entry Binding context.
Non-goals:
This module does not define platform-specific invocation syntax or matching.
This module does not introduce traversal semantics beyond [UJG Graph].
This module does not bind entries to [UJG Surface] touchpoints.
This module does not replace opaque vendor-private hints carried in [UJG Core]
extensions.
5.1. Ontology
The normative Entry Binding ontology is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/entry-binding. It is the authoritative structural definition
for EntryBinding and the properties declared by this module.
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgentrybinding: <https://ujg.specs.openuji.org/ed/ns/entry-binding#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dct: <http://purl.org/dc/terms/> .
<https://ujg.specs.openuji.org/ed/ns/entry-binding#> a owl:Ontology ;
rdfs:label "UJG Entry Binding Editor's Draft Vocabulary"@en ;
dct:description "UJG Entry Binding ontology declaration" .
### Classes
ujgentrybinding:EntryBinding a owl:Class ;
rdfs:subClassOf ujg:Node ;
rdfs:label "Entry Binding" ;
rdfs:comment "An opaque materialization-context value that selects a JourneyEntry." .
### Properties
ujgentrybinding:entryRef a owl:ObjectProperty ;
rdfs:domain ujgentrybinding:EntryBinding ;
rdfs:range ujggraph:JourneyEntry ;
rdfs:label "entry ref" ;
rdfs:comment "References the JourneyEntry selected by this EntryBinding." .
ujgentrybinding:value a owl:DatatypeProperty ;
rdfs:domain ujgentrybinding:EntryBinding ;
rdfs:range xsd:string ;
rdfs:label "value" ;
rdfs:comment "Opaque materialization-context value for selecting the referenced JourneyEntry." . @prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgentrybinding: <https://ujg.specs.openuji.org/ed/ns/entry-binding#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dct: <http://purl.org/dc/terms/> .
<https://ujg.specs.openuji.org/ed/ns/entry-binding#> a owl:Ontology ;
rdfs:label "UJG Entry Binding Editor's Draft Vocabulary"@en ;
dct:description "UJG Entry Binding ontology declaration" .
### Classes
ujgentrybinding:EntryBinding a owl:Class ;
rdfs:subClassOf ujg:Node ;
rdfs:label "Entry Binding" ;
rdfs:comment "An opaque materialization-context value that selects a JourneyEntry." .
### Properties
ujgentrybinding:entryRef a owl:ObjectProperty ;
rdfs:domain ujgentrybinding:EntryBinding ;
rdfs:range ujggraph:JourneyEntry ;
rdfs:label "entry ref" ;
rdfs:comment "References the JourneyEntry selected by this EntryBinding." .
ujgentrybinding:value a owl:DatatypeProperty ;
rdfs:domain ujgentrybinding:EntryBinding ;
rdfs:range xsd:string ;
rdfs:label "value" ;
rdfs:comment "Opaque materialization-context value for selecting the referenced JourneyEntry." . 5.2. JSON-LD Context
The normative Entry Binding JSON-LD context is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/entry-binding.context.jsonld. It provides the compact JSON-LD
term mappings and coercions for Entry Binding-specific properties and classes.
{
"@context": {
"@version": 1.1,
"ujgentrybinding": "https://ujg.specs.openuji.org/ed/ns/entry-binding#",
"entrybinding": "https://ujg.specs.openuji.org/ed/ns/entry-binding#",
"EntryBinding": "ujgentrybinding:EntryBinding",
"entryRef": {
"@id": "ujgentrybinding:entryRef",
"@type": "@id"
},
"value": "ujgentrybinding:value"
}
} {
"@context": {
"@version": 1.1,
"ujgentrybinding": "https://ujg.specs.openuji.org/ed/ns/entry-binding#",
"entrybinding": "https://ujg.specs.openuji.org/ed/ns/entry-binding#",
"EntryBinding": "ujgentrybinding:EntryBinding",
"entryRef": {
"@id": "ujgentrybinding:entryRef",
"@type": "@id"
},
"value": "ujgentrybinding:value"
}
} 5.3. Validation
The normative Entry Binding SHACL shape is defined below and is published at
https://ujg.specs.openuji.org/ed/ns/entry-binding.shape. It is the authoritative validation
artifact for Entry Binding structural constraints.
@prefix ujgentrybinding: <https://ujg.specs.openuji.org/ed/ns/entry-binding#> .
@prefix ujgentrybindingshape: <https://ujg.specs.openuji.org/ed/ns/entry-binding.shape#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ujgentrybindingshape:EntryBindingShape a sh:NodeShape ;
sh:targetClass ujgentrybinding:EntryBinding ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgentrybinding:entryRef ;
sh:class ujggraph:JourneyEntry ;
sh:nodeKind sh:IRI ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path ujgentrybinding:value ;
sh:datatype xsd:string ;
sh:minCount 1 ;
sh:maxCount 1 ;
] . @prefix ujgentrybinding: <https://ujg.specs.openuji.org/ed/ns/entry-binding#> .
@prefix ujgentrybindingshape: <https://ujg.specs.openuji.org/ed/ns/entry-binding.shape#> .
@prefix ujggraph: <https://ujg.specs.openuji.org/ed/ns/graph#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ujgentrybindingshape:EntryBindingShape a sh:NodeShape ;
sh:targetClass ujgentrybinding:EntryBinding ;
sh:nodeKind sh:IRI ;
sh:property [
sh:path ujgentrybinding:entryRef ;
sh:class ujggraph:JourneyEntry ;
sh:nodeKind sh:IRI ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path ujgentrybinding:value ;
sh:datatype xsd:string ;
sh:minCount 1 ;
sh:maxCount 1 ;
] . The rules below define the remaining module semantics beyond the structural constraints captured by the SHACL shape.
Entry selection only: Entry Binding properties MUST NOT change Graph validity, graph traversal behavior, import resolution, or core node identity.
Opaque value: Consumers MUST NOT infer materialization syntax, protocol, addressing semantics, execution behavior, fallback behavior, or structured invocation data from
value.Graceful degradation: A consumer that does not implement this module MAY ignore Entry Binding semantics, but it SHOULD preserve recognized JSON-LD data during read-transform-write when possible.
Private runtime hints: Platform-specific invocation configuration that is not intended for shared queryability or validation SHOULD remain in Core
extensions.
6. Examples
6.1. Combined JSON Example
{
"@context": [
"https://ujg.specs.openuji.org/ed/ns/context.jsonld",
"https://ujg.specs.openuji.org/ed/ns/entry-binding.context.jsonld"
],
"@id": "https://example.com/ujg/entry-binding/checkout.jsonld",
"@type": "UJGDocument",
"nodes": [
{
"@type": "Journey",
"@id": "urn:ujg:journey:checkout",
"label": "Checkout",
"defaultEntryRef": "urn:ujg:entry:checkout-default",
"entryRefs": [
"urn:ujg:entry:checkout-default"
],
"stateRefs": [
"urn:ujg:state:checkout-start"
]
},
{
"@type": "JourneyEntry",
"@id": "urn:ujg:entry:checkout-default",
"label": "Checkout default",
"stateRef": "urn:ujg:state:checkout-start"
},
{
"@type": "State",
"@id": "urn:ujg:state:checkout-start",
"label": "Checkout start"
},
{
"@type": "EntryBinding",
"@id": "urn:ujg:entry-binding:checkout",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout"
}
]
} {
"@context": [
"https://ujg.specs.openuji.org/ed/ns/context.jsonld",
"https://ujg.specs.openuji.org/ed/ns/entry-binding.context.jsonld"
],
"@id": "https://example.com/ujg/entry-binding/checkout.jsonld",
"@type": "UJGDocument",
"nodes": [
{
"@type": "Journey",
"@id": "urn:ujg:journey:checkout",
"label": "Checkout",
"defaultEntryRef": "urn:ujg:entry:checkout-default",
"entryRefs": [
"urn:ujg:entry:checkout-default"
],
"stateRefs": [
"urn:ujg:state:checkout-start"
]
},
{
"@type": "JourneyEntry",
"@id": "urn:ujg:entry:checkout-default",
"label": "Checkout default",
"stateRef": "urn:ujg:state:checkout-start"
},
{
"@type": "State",
"@id": "urn:ujg:state:checkout-start",
"label": "Checkout start"
},
{
"@type": "EntryBinding",
"@id": "urn:ujg:entry-binding:checkout",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout"
}
]
} 6.2. Private Invocation Hints
{
"@id": "urn:ujg:entry-binding:checkout",
"@type": "EntryBinding",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout",
"extensions": {
"com.acme.launcher": {
"prefetch": "intent",
"cachePolicy": "stale-while-revalidate"
}
}
} {
"@id": "urn:ujg:entry-binding:checkout",
"@type": "EntryBinding",
"entryRef": "urn:ujg:entry:checkout-default",
"value": "checkout",
"extensions": {
"com.acme.launcher": {
"prefetch": "intent",
"cachePolicy": "stale-while-revalidate"
}
}
}