This library provides the definitions and reference implementation
for the fundamental
This library provides the definitions and reference implementations
for the fundamental
A ValOS Resource
represents a well-defined part of
the world. It has a well-defined state at each particular moment in time.
A ValOS Event
represents a dynamic change to a
resource by describing the change from previous to subsequent resource
states at a particular time.
The interplay of these distinct yet interwoven systems forms the foundation of the Valaa Open System.
This library provides:
and the other core types.
component which stores in-memory representations of the resources.
which a corpus uses to convert (
) events into changes of its resource representations.
the kuery language
definition and the kuery engine
component for accessing and manipulating the resources.
mechanism which unifies the object
oriented instantiation and inheritance principles into a single
but powerful mechanism for ValOS resources.
mechanism which allows referential
integrity and the definition of different types of reference
semantics like ownership, global references and local references.
specification which defines globally unique
identifiers for ValOS resources.
specification which allows for universal locating of resources.
definition as a distributed set of resources
containing references to each other using the VRLs.
mechanism which allows for unlimited scalability of
into a singular globally distributed and
unified object space.
ValOS URL is used to specify a parameterized location reference to a ValOS Resource. It has two major parts separated by the URI fragment separator `#`: *chronicle URI* part and a *local reference* part.
*Chronicle URI* identifies the target authority and chronicle of the reference. It corresponds to scheme, hierarchical and query parts of an URI; everything but the fragment. Its precise structure and interpretation is specified by the scheme but typically the scheme and hierarchical part identify an authority and query part identifies a chronicle.
*Local reference* identifies a particular resource inside a chronicle but also contains optional *coupling*, *ghost path*, *lens* (and other) parts which further parameterize the reference itself. It corresponds to the URI fragment part but has sub-structure which is specified in this document.
valos-url ┌────────────────────────────────────────────────┴─────────────────────────────────────────────────┐ chronicle-uri resource-ref ┌───────────────────────┴────────────────────────┐ ┌──────────────────────┴────────────────────────┐ resource-url ref-params ┌──────────────────────────────┴────────────────────────────────┐ ┌───────────────┴───────────────┐ authority-uri chronicle-id resource-id coupling lens ┌──────────────┴───────────────┐ ┌─────┴──────┐ ┌─────┴──────┐ ┌───────┴────────┐ ┌─────┴──────┐
└─────┬──────┘ └──────────────┬────────────────┘ nss q-component └───┬────┘ └──────┬──────┘ └┬┘ └───────┬───────┘ └──────────────────────┬────────────────────────┘ scheme authority path query fragment └────────┬────────┘ hier-part
The division between chronicle URI and local reference has many curious dualistic qualities: backend vs. frontend, hierarchical vs. flat, routing vs. computation, extensible vs. fixed, absolute vs. contextual, coarse vs. granular, self-contained vs. part-of-a-whole.
ValOS backends deal with the indivisible chronicles and thus don't care about the particularities of local references to individual resources. This corresponds to how in web architecture URI fragments are not sent to backend with resource requests. Conversely, ValOS frontends don't care where a resource comes from once it has been loaded, but about its identity, relationships and the parameters of those relationships. This is reflected in how frontend code regularily drops the chronicle URI.
By the nature of its distributed event sourcing architecture ValOS focuses heavily on the frontend. The cross-compatibility between components is driven by how new backends can integrate and talk with existing front-end clients. This is facilitated by front-end spindle systems which enables new ValOS URI schemes to specify new routing solutions and fundamentally new backend infrastructures, as long as said infrastructures can route ValOS event streams to clients. This corresponds to how ValOS doesn't specify how a *chronicle URI* identifies and locates chronicles and authorities but leaves it to the scheme specifications and their reference implementations of frontend spindles.
Web architecture specifies that all or none of the document is retrieved. This corresponds to the behaviour of ValOS chronicles which are always retrieved as a whole. Chronicle URI's contain all and nothing but the components which identify web resources, that is everything but the fragment.
@valos/raem ontology specifies the Valospace core types and properties directly to the @valos/kernel namespace.
|rdfs:comment||The class of all valospace types. Instances of valospace types are called valospace resources. Only valospace resources can appear as a subject in valospace resource and event triple graphs.|
|rdfs:comment||The class of all resources which can appear as a predicate in valospace triple graphs or which can are accessible inside valospace from valospace resources. The instances of this class are called 'valospace fields'. All valospace fields have valos_raem:Type or one of its sub-classes as their rdf:domain.|
|rdfs:comment||The class of valospace fields which have a full triple expression in all regular query and graph contexts (as opposed to fields with non-triple semantics or triple expression only in limited contexts).|
|rdfs:comment||The class of valospace fields which have both a triple state expression inside valospace and a change impression in event logs; these are the primary, persisted sources of truth.|
|rdfs:comment||The class of valospace fields which have triple expression inside valospace via coupled fields but no event log impression.|
|rdfs:comment||The class of inferred fields where a field is not associated with raw valospace triples but the triples are fully generated by the expressor, with scope values: - valos_raem:0 as the field owner, - valos_raem:1 as the field id, and - valos_raem:2 as undefined.|
|rdfs:comment||The class of valospace fields with no general triple expression but with custom semantics for specific queries.|
|rdfs:comment||The class of inferred fields called alias fields where each such field has an 'aliasOf' RDF property or valos Field. Alias fields are mutation-inference symmetric so that triples with an alias field as predicate are inferred from triples with aliasOf as predicate and mutations with an alias field as predicate are translated to use the aliasOf as predicate.|
|rdfs:comment||The class of all resources representing some VPath rule or pseudo-rule. 'vrid'. If this class is used as literal datatype URI the literal contains the flat string VPath rule representation. Otherwise when this class is the range of a property which is used as a predicate in a triple, and the object of the triple is not a literal, then the object contains the segmented representation of the VPath rule value as an rdf List.|
|rdfs:comment||The class of all resources representing the VPath rule 'vpath' (always begins with '@')|
|rdfs:comment||The class of all resources representing the VPath pseudo-rule 'vrid', ie. a resource identifier with VGRID as the first step (always begins with '@')|
|rdfs:comment||The class of all resources representing the VPath pseudo-rule 'verbs', ie. a path between other resources without a VGRID as the first step (always begins with '@').|
|rdfs:comment||The class of all resources representing the VPath rule 'vgrid' (always begins with '$').|
|rdfs:comment||The class of all resources representing the VPath pseudo-rule 'vparam' (always begins with '$' or ':').|
|rdfs:comment||The class of all verb names. Each context which performs VPath computation valks provides native implementations for the resolvers it supports in its VPath valks.|
|rdfs:comment||The class of all resolver names. Resolvers are verbs which are used for resolving generated properties.|
|rdfs:comment||The custom expressor of an ExpressedField as a VPath. If defined and whenever a triple expression for this field is required the expressor VPath is valked with scope values: - valos_raem:0 being the field owner, - valos_raem:1 being the field id, and - valos_raem:2 being the possible field raw triple object value if it exists, otherwise undefined. The resulting valk value is used as the object of a new triple, with field owner and field id used as the subject and predicate.|
|rdfs:comment||The custom impressor of an EventLoggedField as a VPath. Whenever an event log entry is required for an update that targets this field the impressor VPath is valked with scope values: - valos_raem:0 as the field owner, - valos_raem:1 as the field id, - valos_raem:2 as the possible current field raw triple object value or undefined otherwise, and - valos_raem:3 the new value being updated to this field.|
|rdfs:comment||The alias target property specifies the inference source and mutation target of an alias field.|
|rdfs:comment||This field refers to a resource which is owned by the field subject resource. If the subject resource is is destroyed or if this field is removed then the owned resource is cascade destroyed.|
|rdfs:comment||This field refers to a resource which owns the field subject resource. If the owner is destroyed or if the coupled field (which is marked with isOwnerOf) is removed from the owner then the subject resource will be cascade destroyed. Removing the isOwnedBy field itself will only orphan the subject resource.|
|rdfs:comment||Field with this property prevent destruction of their subject resource if the field has active couplings inside the same chronicle.|
|rdfs:comment||If set to false this field not be visible for DUPLICATED class of events.|
|rdfs:comment||The implicit initial value of the resource field when the resource is created.|
|rdfs:comment||The value of a resource field which doesn't have an own value defined (ie. is evaluated before prototype field lookup).|
|rdfs:comment||The value of a resource field which doesn't have a value defined by any resource in its prototype chain.|
|rdfs:comment||Bypass the default behavior which forces transient fields to be plural to allow for singular fields.|
|rdfs:comment||assign via VPath|
|rdfs:comment||resolve context term against the event log of the given resource|
|rdfs:comment||resolve resource id of the given resource|
|rdfs:comment||resolve resource VRID object of the given resource|
|rdfs:comment||resolve dominant type name of the given resource|
|rdfs:comment||resolve only owns-fields-only transient of this resource|
|rdfs:comment||resolve the ghost prototype of this ghost|
|rdfs:comment||resolve the ghost host of this ghost|
|rdfs:comment||resolve octet count of the octet-stream associated with the Bvob|
|rdfs:comment||positional argument 0|
|rdfs:comment||positional argument 1|
|rdfs:comment||positional argument 2|
|rdfs:comment||positional argument 3|
|rdfs:comment||positional argument 4|