NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible
"When a car breaks down, the ones without turbosupercharger are easier to fix"
Humans first, machines (AI) later.
definition | explanation |
---|---|
human | a sentient being who thinks fuzzy, absorbs, and shares thought (by plain text, not markuplanguage) |
scene | a (local/remote) 3D scene or 3D file (index.gltf e.g.) |
3D object | an object inside a scene characterized by vertex-, face- and customproperty data. |
metadata | custom properties of text, 3D Scene or Object(nodes), relevant to machines and a human minority (academics/developers) |
XR fragment | URI Fragment with spatial hints like #pos=0,0,0&t=1,100 e.g. |
src | (HTML-piggybacked) metadata of a 3D object which instances content |
href | (HTML-piggybacked) metadata of a 3D object which links to content |
query | an URI Fragment-operator which queries object(s) from a scene like #q=cube |
visual-meta | |
requestless metadata | opposite of networked metadata (RDF/HTML requests can easily fan out into framerate-dropping, hence not used a lot in games). |
FPS | frames per second in spatial experiences (games,VR,AR e.g.), should be as high as possible |
introspective | inward sensemaking ("I feel this belongs to that") |
extrospective | outward sensemaking ("I'm fairly sure John is a person who lives in oklahoma") |
◻ | ascii representation of an 3D object/mesh |
(un)obtrusive | obtrusive: wrapping human text/thought in XML/HTML/JSON obfuscates human text into a salad of machine-symbols and words |
fragment | type | example | info |
---|---|---|---|
#pos | vector3 | #pos=0.5,0,0 | positions camera to xyz-coord 0.5,0,0 |
#rot | vector3 | #rot=0,90,0 | rotates camera to xyz-coord 0.5,0,0 |
#t | vector2 | #t=500,1000 | sets animation-loop range between frame 500 and 1000 |
#...... | string | #.cubes #cube | object(s) of interest (fragment to object name or class mapping) |
xyz coordinates are similar to ones found in SVG Media Fragments
key | type | example (JSON) | info |
---|---|---|---|
name | string | "name": "cube" | available in all 3D fileformats & scenes |
class | string | "class": "cubes" | available through custom property in 3D fileformats |
href | string | "href": "b.gltf" | available through custom property in 3D fileformats |
src | string | "src": "#q=cube" | available through custom property in 3D fileformats |
NOTE: XR Fragments are file-agnostic, which means that the metadata exist in programmatic 3D scene(nodes) too.
Humans first, machines (AI) later ( core principle
scope | matching algo |
---|---|
<b id="textual-tagging">textual</b> | text containing 'houses' is now automatically tagged with 'house' (incl. plaintext src child nodes) |
<b id="spatial-tagging">spatial</b> | spatial object(s) with "class":"house" (because of {#.house}) are now automatically tagged with 'house' (incl. child nodes) |
<b id="supra-tagging">supra</b> | text- or spatial-object(s) (non-descendant nodes) elsewhere, named 'house', are automatically tagged with 'house' (current node to root node) |
<b id="omni-tagging">omni</b> | text- or spatial-object(s) (non-descendant nodes) elsewhere, containing class/name 'house', are automatically tagged with 'house' (too node to all nodes) |
<b id="infinite-tagging">infinite</b> | text- or spatial-object(s) (non-descendant nodes) elsewhere, containing class/name 'house' or 'houses', are automatically tagged with 'house' (too node to all nodes) |
NOTE: infinite matches both 'house' and 'houses' in text, as well as spatial objects with "class":"house" or name "house". This multiplexing of id/category is deliberate because of the core principle .
This significantly expands expressiveness and portability of human tagged text, by postponing machine-concerns to the end of the human text in contrast to literal interweaving of content and markupsymbols (or extra network requests, webservices e.g.).
Applications are also free to attach any JSON(LD / RDF) to spatial objects using custom properties (but is not interpreted by this spec).
"When a car breaks down, the ones without turbosupercharger are easier to fix"
characteristic | UTF8 Plain Text (with BibTeX) | RDF |
---|---|---|
perspective | introspective | extrospective |
structure | fuzzy (sensemaking) | precise |
space/scope | local | world |
everything is text (string) | yes | no |
paperfriendly | no | |
leaves (dictated) text intact | yes | no |
markup language | just an appendix | ~4 different |
polyglot format | no | yes |
easy to copy/paste content+metadata | yes | up to application |
easy to write/repair for layman | yes | depends |
easy to (de)serialize | yes (fits on A4 paper) | depends |
infrastructure | selfcontained (plain text) | (semi)networked |
freeform tagging/annotation | yes, terse | yes, verbose |
can be appended to text-content | yes | up to application |
copy-paste text preserves metadata | yes | up to application |
emoji | yes | depends on encoding |
predicates | free | semi pre-determined |
implementation/network overhead | no | depends |
used in (physical) books/PDF | yes (visual-meta) | no |
terse non-verb predicates | yes | no |
nested structures | no (but: BibTex rulers) | yes |
above can be used as a startingpoint for LLVM's to translate/steelman to a more formal form/language.
For example: #q=.foo is a shorthand for #q=class:foo, which will select objects with custom property class:foo. Just a simple #q=cube will simply select an object named cube.
operator | info |
---|---|
* | select all objects (only useful in src custom property) |
- | removes/hides object(s) |
: | indicates an object-embedded custom property key/value |
. | alias for "class" :".foo" equals class:foo |
> < | compare float or int number |
/ | reference to root-scene. Useful in case of (preventing) showing/hiding objects in nested scenes (instanced by src) (*) |
* = #q=-/cube hides object cube only in the root-scene (not nested cube objects)
#q=-cube hides both object cube in the root-scene <b>AND</b> nested skybox objects |
An example query-parser (which compiles to many languages) can be found here
Example: ://foo.com/my3d.gltf#pos=1,0,0&prio=-5&t=0,100
Demo | Explanation |
---|---|
pos=1,2,3 | vector/coordinate argument e.g. |
pos=1,2,3&rot=0,90,0&q=.foo | combinators |