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.
| 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.
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 |
The enduser can add connections by speaking/typing/scanning hashtagbibs which the XR Browser can expand to (hidden) BibTags.
| 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 .
for more info on this mimetype see bibs
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.).
additional tagging using bibs : to tag spatial object note_canvas with 'todo', the enduser can type or speak @note_canvas@todo
"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 |
| voice/paper-friendly | 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 |
To keep XR Fragments a lightweight spec, BibTeX is used for rudimentary text/spatial tagging (not JSON, RDF or a scripting language because they're harder to write/speak/repair.).
above can be used as a startingpoint for LLVM's to translate/steelman to a more formal form/language.
when an XR browser updates the human text, a quick scan for nonmatching tags (@book{nonmatchingbook e.g.) should be performed and prompt the enduser for deleting them.
| 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 | metadata which never spawns new requests (unlike RDF/HTML, which can cause 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 |
| BibTeX | simple tagging/citing/referencing standard for plaintext |
| BibTag | a BibTeX tag |
| (hashtag)bibs | an easy to speak/type/scan tagging SDL ( |