§ Main VPlot rules
vplot = "@" *(vstep "@") "@" vstep = [ verb-type ] *vparam vparam = "$" [ context-term ] "." vvalue vvalue = vplot / "$" / 1*( unencoded / pct-encoded )
Editorial Note: the urn:valos is fully speculative as of 2019-11. On one hand there is salient overlap between valos VRID and URN principles: URN calls for structured and managed process of name assignment and resolution and VRID system is precisely that. On the other hand VRID defers a lot of detail to specific VGRID format-term specifications which might prove problematic for actual standardization process. It is possible that instead of a generic urn:valos namespace there would be specific urn namespaces for specific VRID formats (e.g. urn:valos-u4, urn:valos-cc) or that urn:valos would stand for one specific format (which would most likely be the ~cc).
§ Informative verb rules
vverb = verb-type *vparam vparam = "$" [ context-term ] "." vvalue verb-type = 1*unencoded context-term = ALPHA *unreserved-nt vvalue = vplot / "$" / 1*( unencoded / pct-encoded )
§ Property selector example
Triple pattern `?s <urn:valos:.$.myProp> ?o` matches like:Mnemonic: '.' is traditional property accessor (ie. ScopeProperty).?o V:scope ?s ; V:name "myProp"
§ Sequence selector example
Triple pattern `?s <urn:valos:-out--$.PERMISSIONS> ?o` matches like:Mnemonic: '*' for many things as per regex/glob syntax (Relations are the only things that can have multiple instances with the same name).?o V:source ?s ; V:name "PERMISSIONS"
§ Container selector example
Triple pattern `?s <urn:valos:*$.Scripts> ?o` matches like:Mnemonic: "+" is a list-view symbol of an expandable container.?o V:parent ?s ; V:name "Scripts"
§ Content selector example
Triple pattern `?s <urn:valos:~$.foo.vs> ?o` matches like:Mnemonic: "~" has no mnemonic yet.?o V:folder ?s ; V:name "foo.vs"
§ Property selector example
Triple pattern `?s <urn:valos:.O> ?o` matches like:Mnemonic: follow line '-' to target.?s rdf:object ?o
§ Language subspace selector example
Triple pattern `?s <urn:valos:.$.myProp@_$lang.fi> ?o` matches like:Mnemonic: '_' is underscore is subscript is subspace.?_sp V:scope ?s ; V:name "myProp" . ?o V:subspacePrototype* ?_sp ; V:language "fi"
§ Ghost subspace selector example
Triple pattern `?s <urn:valos:_$~u4.ba54> ?o` matches like:Mnemonic: The '_$~' is a 'subspace of ghoStS'.?o V:ghostHost ?s ; V:ghostOf <urn:valos:$~u4.ba54>
Editorial Note: this section should be greatly improved. The purpose of computation verbs lies more on representing various conversions (as part of dynamic operations such as web API route mapping) and less on clever SPARQL trickery. The illustration here uses (questionable) SPARQL primarily for consistency.
§ Computation selector example
Triple pattern `?s <urn:valos:!$valk.add$number.10$.@!$.myVal@@> ?o` matches like:?_:0 V:scope ?s ; V:name "myVal" ; V:value ?myVal . FILTER (?o === 10 + ?myVal)
§ Informative VRID rules
vrid = "@" "$" vgrid "@" *(vstep "@") "@" vgrid = format-term "." vgrid-value *vparam
§ Informative VGRID rules
vgrid = format-term "." vgrid-value *vparam format-term = "~" 1*unreserved-nt vgrid-value = 1*unreserved-nt unreserved-nt = ALPHA / DIGIT / "-" / "_" / "." ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9
Note: when using base64 encoded values as VGRID vvalue, use the url-and-filename-readybase64url characters.
Note: uuid v4 (format term `~u4`) is recommended for now, but eventually VGRID generation will be tied to the deterministic event id chain (format term `~cc`). This in turn should be seeded by some ValOS authority.
Rule: When resources are transferred between event logs the semantics of their context terms and body-parts must remain equivalent.
Principle: a fixed sub-resource using a particular vsteps-tail in its identifying VRID will always infer the triples that are required to satisfy the same vsteps-tail in a query context which starts from the same global resource.
§ Fixed ghost triple inference
`<urn:valos:$~u4.f00b@_$~u4.ba54>` reads as "inside the instance resource `f00b` the ghost of the $~u4 resource `ba54`" and infers triples:<urn:valos:$~u4.f00b@_$~u4.ba54> V:ghostHost <urn:valos:$~u4.f00b> ; V:ghostOf <urn:valos:$~u4.ba54>
§ Recursive ghost triple inference
`<urn:valos:$~u4.f00b@_$~u4.ba54@_$~u4.b7e4>` reads as "inside the instance resource `f00b` the ghost of `<urn:valos:$~u4.ba54@_$~u4.b7e4>`" and infers triples:<urn:valos:$~u4.f00b@_$~u4.ba54@_$~u4.b7e4> V:ghostHost <urn:valos:$~u4.f00b> ; V:ghostOf <urn:valos:$~u4.ba54@_$~u4.b7e4>
§ Fixed subspace triple inference
`<urn:valos:$~u4.f00b@.$.myProp@_$lang.fi>` is a lang fi variant of f00b myProp and infers triples:<urn:valos:$~u4.f00b@.$.myProp@_$lang.fi> a V:ScopeProperty ; V:subspacePrototype <urn:valos:$~u4.f00b@.$.myProp> , <urn:valos:$~u4.f00b-b507-0763@.$.myProp@_$lang.fi> ; V:language "fi"
§ Fixed subspace recursive inference
`<urn:valos:$~u4.f00b@_$~u4.b453@_$lang.fi@_$~u4.b74e@.$.myProp>` infers triples:<urn:valos:$~u4.f00b@_$~u4.b453@_$lang.fi@_$~u4.b74e@.$.myProp> a V:ScopeProperty ; V:ghostHost <urn:valos:$~u4.f00b> ; V:ghostOf <urn:valos:$~u4.b453@_$lang.fi@_$~u4.b74e@.$.myProp> ; V:subspacePrototype <urn:valos:$~u4.f00b@_$~u4.b453@_$~u4.b74e@_$lang.fi@.$.myProp> ; V:language "fi"
§ Fixed scope property triple inference
`<urn:valos:$~u4.f00b@.$.myProp>` is a resource with fixed name "myProp", dominant type ScopeProperty, $~u4 resource f00b as the owning scope and a structurally homologous prototype inside f00b-b507-0763 and thus infers triples:<urn:valos:$~u4.f00b@.$.myProp> a V:ScopeProperty ; V:scope <urn:valos:$~u4.f00b> ; V:hasPrototype <urn:valos:$~u4.f00b-b507-0763@.$.myProp> ; V:name "myProp"
§ Fixed rdf:object triple inference
`<urn:valos:$~u4.f00b@-out--$.PERMISSIONS:@.O-$~ih.8766>` is a PERMISSIONS relation with fixed ~ih target 8766 and infers triples:Mnemonic: these verbs are read right-to-left, eg. `.O-` -> 'Relation rdf:object property is V:target'<urn:valos:$~u4.f00b@-out--$.PERMISSIONS:@.O-$~ih.8766> a V:Relation ; V:ownerSource <urn:valos:$~u4.f00b> ; V:specializationOf <urn:valos:$~u4.f00b-b507-0763@-out--$.PERMISSIONS:@.O-$~ih.8766> ; V:name "PERMISSIONS" ; V:target <urn:valos:$~u4.8766>
§ Fixed relation triple inference
`<urn:valos:$~u4.f00b@-out--$.PERMISSIONS@_$.1>` is a resource with fixed name "PERMISSIONS", dominant type Relation, ~u4 f00b as the source, a structurally homologous prototype inside f00b-b507-0763 and thus infers triples:<urn:valos:$~u4.f00b@-out--$.PERMISSIONS> a V:Relation ; V:ownerSource <urn:valos:$~u4.f00b> ; V:hasPrototype <urn:valos:$~u4.f00b-b507-0763@-out--$.PERMISSIONS> ; V:name "PERMISSIONS" <urn:valos:$~u4.f00b@-out--$.PERMISSIONS@_$.1> a V:Relation ; V:subspacePrototype <urn:valos:$~u4.f00b@-out--$.PERMISSIONS> , <urn:valos:$~u4.f00b-b507-0763@-out--$.PERMISSIONS@_$.1>
§ Fixed Entity triple inference
`<urn:valos:$~u4.f00b@*$.Scripts>` has a fixed name "scripts", dominant type Entity, $~u4 resource f00b as the owning container and a structurally homologous prototype inside f00b-b507-0763 and thus infers triples:<urn:valos:$~u4.f00b@*$.Scripts> a V:Entity ; V:parent <urn:valos:$~u4.f00b> ; V:hasPrototype <urn:valos:$~u4.f00b-b507-0763@*$.Scripts> ; V:name "scripts"
§ Fixed Media triple inference
`<urn:valos:$~u4.f00b@~$.foo.vs>` has a fixed name "foo.vs", dominant type Media, $~u4 resource f00b as the owning folder and a structurally homologous prototype inside f00b-b507-0763 and thus infers triples:<urn:valos:$~u4.f00b@~$.foo.vs> a V:Media ; V:folder <urn:valos:$~u4.f00b> ; V:hasPrototype <urn:valos:$~u4.f00b-b507-0763@~$.foo.vs> ; V:name "foo.vs"
vplot = 1*( "(" vstep ")" )
vstep = vparam *( "'" vparam )
vparam = vplot / [ vterm ] [ "!" ( vvalue / "!" vdata ) ]
route-vplot = vstep *( "/" vstep )
urn-vplot = vstep *( ":" vstep )
vterm = 1*unencoded
vvalue = 1*unencoded
vdata = 1*b64urlchar
unencoded = b64urlchar / "." / "~" / "*"
b64urlchar = ALPHANUM / "-" / "_"
ALPHANUM = %x30-39 / %x41-5A / %x61-7A ; 0-9 / A-Z / a-z
vverb = verb-type *vparam
vcontext-param = "$" context-term "." vvalue
vrid = "@" "$" vgrid "@" *(vstep "@") "@"
vgrid = format-term "." vgrid-value *vparam
format-term = "~" 1*(ALPHA / DIGIT / "_")
vgrid-value = 1*( unencoded / pct-encoded )
context-term-ns = ALPHA 0*30unreserved-nt ( ALPHA / DIGIT )
Editorial Note: which context was this again? Neither SPARQL, Turtle nor JSON-LD have this limitation.
Editorial Note: "(" and ")" can in principle be substantially inconvenient in many contexts. But as they're grouped with "!" / "*" / "'" which have their uses in verb-type's all five are for now retained as allowed characters.
Note: This is completely regular. If the consumer is known to explicitly decode query values and because VPlots can contain "%" characters they must be appropriately symmetrically encoded. This can result in double encoding. However as the intent is that VPlot expansion should be considered to be part of the URI parsing and separation itself any separate encoding and decoding should not be needed.
Prefix | IRI |
---|---|
rdf | http://www.w3.org/1999/02/22-rdf-syntax-ns# |
rdfs | http://www.w3.org/2000/01/rdf-schema# |
xsd | http://www.w3.org/2001/XMLSchema# |
owl | http://www.w3.org/2002/07/owl# |
dc | http://purl.org/dc/elements/1.1/ |
VPlot | https://valospace.org/plot/0# |
VKernel | https://valospace.org/kernel/0# |
VState | https://valospace.org/state/0# |
VLog | https://valospace.org/log/0# |
VValk | https://valospace.org/valk/0# |
rdfs:subClassOf | description |
---|---|
#VPlotLiteral | |
rdfs:Literal rdfs:List | The class of all literals which can be represented as some VPlot rule or pseudo-rule. If this class is used as literal datatype URI the literal contains the flat string VPlot 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 VPlot rule value as an rdf List. |
#VPlot | |
VPlot:VPlotLiteral | The class of all resources that can be represented by the VPlot rule 'vplot' (the string representation always begins with '@') |
#VRID | |
VPlot:VPlotLiteral | The class of all resources that can be represented by the VPlot pseudo-rule 'vrid', ie. which have have a 'vgrid' as their first step (the string representation always begins with '@') |
#Verbs | |
VPlot:VPlotLiteral | The class of all resources that can be represented by the VPlot pseudo-rule 'verbs', ie. which represent a path between resources ie. which don't have a 'vgrid' as their first step (the string representation always begins with '@'). |
#Verb | |
VPlot:VPlotLiteral | The class of all verb names. A context that performs VPlot valks shall provide the conforming implementations for the subset of verbs that it has declared to support. |
#VGRID | |
VPlot:VPlotLiteral | The class of all resources representing the VPlot rule 'vgrid' (always begins with '$'). |
#VParam | |
VPlot:VPlotLiteral | The class of all resources representing the VPlot pseudo-rule 'vparam' (always begins with '$' or ':'). |
rdfs:domain | rdfs:range |
---|
rdfs:domain | rdfs:range |
---|
rdf:type | Comment |
---|
rdf:type | rdfs:subClassOf |
---|