update documentation

This commit is contained in:
Leon van Kammen 2023-09-21 13:30:14 +02:00
parent 72f1e69aad
commit 81ff83d5ad
5 changed files with 280 additions and 255 deletions

View file

@ -447,11 +447,13 @@ In case of <code>buttonA</code> the end-user will be teleported to another locat
<p>The URL-processing-flow for hypermedia browsers goes like this:</p> <p>The URL-processing-flow for hypermedia browsers goes like this:</p>
<p>1.IF a <code>#cube</code> matches a custom property-key (of an object) in the 3D file/scene (<code>#cube</code>: <code>#......</code>) <b>THEN</b> execute that predefined_view. <ol>
2.IF scene operators (<code>pos</code>) and/or animation operator (<code>t</code>) are present in the URL then (re)position the camera and/or animation-range accordingly. <li>IF a <code>#cube</code> matches a custom property-key (of an object) in the 3D file/scene (<code>#cube</code>: <code>#......</code>) <b>THEN</b> execute that predefined_view.</li>
3.IF no camera-position has been set in <b>step 1 or 2</b> update the top-level URL with <code>#pos=0,0,0</code> (<a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]]">example</a>) <li>IF scene operators (<code>pos</code>) and/or animation operator (<code>t</code>) are present in the URL then (re)position the camera and/or animation-range accordingly.</li>
4.IF a <code>#cube</code> matches the name (of an object) in the 3D file/scene then draw a line from the enduser(&rsquo;s heart) to that object (to highlight it). <li>IF no camera-position has been set in <b>step 1 or 2</b> update the top-level URL with <code>#pos=0,0,0</code> (<a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]]">example</a>)</li>
5.IF a <code>#cube</code> matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects).</p> <li>IF a <code>#cube</code> matches the name (of an object) in the 3D file/scene then draw a line from the enduser(&rsquo;s heart) to that object (to highlight it).</li>
<li>IF a <code>#cube</code> matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects).</li>
</ol>
<h1 id="embedding-xr-content-src-instancing">Embedding XR content (src-instancing)</h1> <h1 id="embedding-xr-content-src-instancing">Embedding XR content (src-instancing)</h1>
@ -722,7 +724,7 @@ How does the scale of the object (with the embedded properties) impact the scale
<h1 id="visible-links">Visible links</h1> <h1 id="visible-links">Visible links</h1>
<p>When predefined views, XRWG fragments and ID fragments (<code>#cube</code> or <code>#mytag</code> e.g.) are triggered by the enduser (via <code>href</code> of toplevel URL):</p> <p>When predefined views, XRWG fragments and ID fragments (<code>#cube</code> or <code>#mytag</code> e.g.) are triggered by the enduser (via toplevel URL or clicking <code>href</code>):</p>
<ol> <ol>
<li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname)</li> <li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname)</li>
@ -730,14 +732,21 @@ How does the scale of the object (with the embedded properties) impact the scale
<li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their <code>src</code> or <code>href</code> value</li> <li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their <code>src</code> or <code>href</code> value</li>
</ol> </ol>
<p>The obvious approach is to consult the XRWG, which basically has all these things already collected/organized for you.</p> <p>The obvious approach for this, is to consult the XRWG (<a href="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</a>), which basically has all these things already collected/organized for you during scene-load.</p>
<p><strong>UX</strong></p>
<ol start="4">
<li>do not update the wires when the enduser moves, leave them as is</li>
<li>offer a control near the back/forward button which allows the user to (turn off) control the correlation-intensity of the XRWG</li>
</ol>
<h1 id="text-in-xr-tagging-linking-to-spatial-objects">Text in XR (tagging,linking to spatial objects)</h1> <h1 id="text-in-xr-tagging-linking-to-spatial-objects">Text in XR (tagging,linking to spatial objects)</h1>
<p>How does XR Fragments interlink text with objects?</p> <p>How does XR Fragments interlink text with objects?</p>
<blockquote> <blockquote>
<p>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong>), augmented by Bib(s)Tex.</p> <p>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong> <a href="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</a>), augmented by Bib(s)Tex.</p>
</blockquote> </blockquote>
<p>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br> <p>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br>
@ -752,7 +761,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
<p>Hence:</p> <p>Hence:</p>
<ol> <ol>
<li>XR Fragments promotes (de)serializing a scene to the XRWG</li> <li>XR Fragments promotes (de)serializing a scene to the XRWG (<a href="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</a>)</li>
<li>XR Fragments primes the XRWG, by collecting words from the <code>tag</code> and name-property of 3D objects.</li> <li>XR Fragments primes the XRWG, by collecting words from the <code>tag</code> and name-property of 3D objects.</li>
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype &amp; Data URI)</li> <li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype &amp; Data URI)</li>
<li><a href="https://github.com/coderofsalvation/hashtagbibs">Bib&rsquo;s</a> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li> <li><a href="https://github.com/coderofsalvation/hashtagbibs">Bib&rsquo;s</a> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li>

View file

@ -280,11 +280,11 @@ In case of `buttonA` the end-user will be teleported to another location and tim
The URL-processing-flow for hypermedia browsers goes like this: The URL-processing-flow for hypermedia browsers goes like this:
1.IF a `#cube` matches a custom property-key (of an object) in the 3D file/scene (`#cube`: `#......`) <b>THEN</b> execute that predefined_view. 1. IF a `#cube` matches a custom property-key (of an object) in the 3D file/scene (`#cube`: `#......`) <b>THEN</b> execute that predefined_view.
2.IF scene operators (`pos`) and/or animation operator (`t`) are present in the URL then (re)position the camera and/or animation-range accordingly. 2. IF scene operators (`pos`) and/or animation operator (`t`) are present in the URL then (re)position the camera and/or animation-range accordingly.
3.IF no camera-position has been set in <b>step 1 or 2</b> update the top-level URL with `#pos=0,0,0` ([example](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]])) 3. IF no camera-position has been set in <b>step 1 or 2</b> update the top-level URL with `#pos=0,0,0` ([example](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]]))
4.IF a `#cube` matches the name (of an object) in the 3D file/scene then draw a line from the enduser('s heart) to that object (to highlight it). 4. IF a `#cube` matches the name (of an object) in the 3D file/scene then draw a line from the enduser('s heart) to that object (to highlight it).
5.IF a `#cube` matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects). 5. IF a `#cube` matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects).
# Embedding XR content (src-instancing) # Embedding XR content (src-instancing)
@ -456,20 +456,24 @@ Here's how to write a query parser:
# Visible links # Visible links
When predefined views, XRWG fragments and ID fragments (`#cube` or `#mytag` e.g.) are triggered by the enduser (via `href` of toplevel URL): When predefined views, XRWG fragments and ID fragments (`#cube` or `#mytag` e.g.) are triggered by the enduser (via toplevel URL or clicking `href`):
1. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname) 1. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname)
1. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that `tag` value 2. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that `tag` value
1. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their `src` or `href` value 3. draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their `src` or `href` value
The obvious approach is to consult the XRWG, which basically has all these things already collected/organized for you. The obvious approach for this, is to consult the XRWG ([example](https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js)), which basically has all these things already collected/organized for you during scene-load.
**UX**
4. do not update the wires when the enduser moves, leave them as is
5. offer a control near the back/forward button which allows the user to (turn off) control the correlation-intensity of the XRWG
# Text in XR (tagging,linking to spatial objects) # Text in XR (tagging,linking to spatial objects)
How does XR Fragments interlink text with objects? How does XR Fragments interlink text with objects?
> The XR Fragments does this by collapsing space into a **Word Graph** (the **XRWG**), augmented by Bib(s)Tex. > The XR Fragments does this by collapsing space into a **Word Graph** (the **XRWG** [example](https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js)), augmented by Bib(s)Tex.
Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br> Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br>
Perhaps the following question is related: why is HTML adopted less in games outside the browser? Perhaps the following question is related: why is HTML adopted less in games outside the browser?
@ -480,7 +484,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
Hence: Hence:
1. XR Fragments promotes (de)serializing a scene to the XRWG 1. XR Fragments promotes (de)serializing a scene to the XRWG ([example](https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js))
2. XR Fragments primes the XRWG, by collecting words from the `tag` and name-property of 3D objects. 2. XR Fragments primes the XRWG, by collecting words from the `tag` and name-property of 3D objects.
3. XR Fragments primes the XRWG, by collecting words from **optional** metadata **at the end of content** of text (see default mimetype & Data URI) 3. XR Fragments primes the XRWG, by collecting words from **optional** metadata **at the end of content** of text (see default mimetype & Data URI)
4. [Bib's](https://github.com/coderofsalvation/hashtagbibs) and BibTex are first tag citizens for priming the XRWG with words (from XR text) 4. [Bib's](https://github.com/coderofsalvation/hashtagbibs) and BibTex are first tag citizens for priming the XRWG with words (from XR text)

View file

@ -79,19 +79,19 @@ Table of Contents
7. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 8 7. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 8
8. Top-level URL processing . . . . . . . . . . . . . . . . . . 9 8. Top-level URL processing . . . . . . . . . . . . . . . . . . 9
9. Embedding XR content (src-instancing) . . . . . . . . . . . . 9 9. Embedding XR content (src-instancing) . . . . . . . . . . . . 9
10. Navigating content (href portals) . . . . . . . . . . . . . . 11 10. Navigating content (href portals) . . . . . . . . . . . . . . 12
10.1. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 13 10.1. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 13
10.2. Scaling instanced content . . . . . . . . . . . . . . . 13 10.2. Scaling instanced content . . . . . . . . . . . . . . . 13
11. XR Fragment queries . . . . . . . . . . . . . . . . . . . . . 13 11. XR Fragment queries . . . . . . . . . . . . . . . . . . . . . 14
11.1. including/excluding . . . . . . . . . . . . . . . . . . 14 11.1. including/excluding . . . . . . . . . . . . . . . . . . 14
11.2. Query Parser . . . . . . . . . . . . . . . . . . . . . . 15 11.2. Query Parser . . . . . . . . . . . . . . . . . . . . . . 15
12. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 15 12. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 16
13. Text in XR (tagging,linking to spatial objects) . . . . . . . 16 13. Text in XR (tagging,linking to spatial objects) . . . . . . . 16
13.1. Default Data URI mimetype . . . . . . . . . . . . . . . 20 13.1. Default Data URI mimetype . . . . . . . . . . . . . . . 20
13.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 21 13.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 21
13.3. XR Text example parser . . . . . . . . . . . . . . . . . 22 13.3. XR Text example parser . . . . . . . . . . . . . . . . . 22
14. Security Considerations . . . . . . . . . . . . . . . . . . . 24 14. Security Considerations . . . . . . . . . . . . . . . . . . . 24
15. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 15. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25
17. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 25 17. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 25
18. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 25 18. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 25
@ -463,18 +463,21 @@ Internet-Draft XR Fragments September 2023
The URL-processing-flow for hypermedia browsers goes like this: The URL-processing-flow for hypermedia browsers goes like this:
1.IF a #cube matches a custom property-key (of an object) in the 3D 1. IF a #cube matches a custom property-key (of an object) in the 3D
file/scene (#cube: #......) <b>THEN</b> execute that predefined_view. file/scene (#cube: #......) <b>THEN</b> execute that
2.IF scene operators (pos) and/or animation operator (t) are present predefined_view.
in the URL then (re)position the camera and/or animation-range 2. IF scene operators (pos) and/or animation operator (t) are
accordingly. 3.IF no camera-position has been set in <b>step 1 or present in the URL then (re)position the camera and/or animation-
2</b> update the top-level URL with #pos=0,0,0 (example range accordingly.
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ 3. IF no camera-position has been set in <b>step 1 or 2</b> update
three/navigator.js#L31]])) 4.IF a #cube matches the name (of an the top-level URL with #pos=0,0,0 (example (https://github.com/co
object) in the 3D file/scene then draw a line from the enduser('s derofsalvation/xrfragment/blob/main/src/3rd/js/three/
heart) to that object (to highlight it). 5.IF a #cube matches navigator.js#L31]]))
anything else in the XR Word Graph (XRWG) draw wires to them (text or 4. IF a #cube matches the name (of an object) in the 3D file/scene
related objects). then draw a line from the enduser('s heart) to that object (to
highlight it).
5. IF a #cube matches anything else in the XR Word Graph (XRWG) draw
wires to them (text or related objects).
9. Embedding XR content (src-instancing) 9. Embedding XR content (src-instancing)
@ -482,6 +485,27 @@ Internet-Draft XR Fragments September 2023
href="https://www.w3.org/html/wiki/Elements/iframe">iframe</a>. href="https://www.w3.org/html/wiki/Elements/iframe">iframe</a>.
It instances content (in objects) in the current scene/asset. It instances content (in objects) in the current scene/asset.
van Kammen Expires 24 March 2024 [Page 9]
Internet-Draft XR Fragments September 2023
+========+==========+==============================================+ +========+==========+==============================================+
|fragment| type | example value | |fragment| type | example value |
+========+==========+==============================================+ +========+==========+==============================================+
@ -499,13 +523,6 @@ Internet-Draft XR Fragments September 2023
Table 6 Table 6
van Kammen Expires 24 March 2024 [Page 9]
Internet-Draft XR Fragments September 2023
Here's an ascii representation of a 3D scene-graph with 3D objects Here's an ascii representation of a 3D scene-graph with 3D objects
&#9723; which embeds remote & local 3D objects &#9723; with/out using &#9723; which embeds remote & local 3D objects &#9723; with/out using
queries: queries:
@ -536,6 +553,15 @@ Internet-Draft XR Fragments September 2023
Resizing will be happen accordingly to its placeholder object Resizing will be happen accordingly to its placeholder object
aquariumcube, see chapter Scaling. aquariumcube, see chapter Scaling.
van Kammen Expires 24 March 2024 [Page 10]
Internet-Draft XR Fragments September 2023
| Instead of cherrypicking objects with #bass&tuna thru src, queries | Instead of cherrypicking objects with #bass&tuna thru src, queries
| can be used to import the whole scene (and filter out certain | can be used to import the whole scene (and filter out certain
| objects). See next chapter below. | objects). See next chapter below.
@ -550,18 +576,6 @@ Internet-Draft XR Fragments September 2023
names (to support recursive selectors). (example code) (https://g names (to support recursive selectors). (example code) (https://g
ithub.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/ ithub.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/
xrf/src.js) xrf/src.js)
van Kammen Expires 24 March 2024 [Page 10]
Internet-Draft XR Fragments September 2023
3. <b>local</b> src values indicating a query (#q=), means that all 3. <b>local</b> src values indicating a query (#q=), means that all
included objects (from the current scene) will be copied to the included objects (from the current scene) will be copied to the
instanced scene (before applying the query) while preserving instanced scene (before applying the query) while preserving
@ -596,6 +610,14 @@ Internet-Draft XR Fragments September 2023
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/src.js) three/xrf/src.js)
&#187; example 3D asset &#187; example 3D asset
van Kammen Expires 24 March 2024 [Page 11]
Internet-Draft XR Fragments September 2023
(https://github.com/coderofsalvation/xrfragment/blob/main/example/ (https://github.com/coderofsalvation/xrfragment/blob/main/example/
assets/src.gltf#L192) assets/src.gltf#L192)
&#187; discussion (https://github.com/coderofsalvation/xrfragment/ &#187; discussion (https://github.com/coderofsalvation/xrfragment/
@ -605,19 +627,6 @@ Internet-Draft XR Fragments September 2023
navigation, portals & mutations navigation, portals & mutations
van Kammen Expires 24 March 2024 [Page 11]
Internet-Draft XR Fragments September 2023
+==========+==================+============================+ +==========+==================+============================+
| fragment | type | example value | | fragment | type | example value |
+==========+==================+============================+ +==========+==================+============================+
@ -658,6 +667,13 @@ Internet-Draft XR Fragments September 2023
7. portal-rendering: a 2:1 ratio texture-material indicates an 7. portal-rendering: a 2:1 ratio texture-material indicates an
equirectangular projection equirectangular projection
van Kammen Expires 24 March 2024 [Page 12]
Internet-Draft XR Fragments September 2023
&#187; example implementation &#187; example implementation
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/href.js) three/xrf/href.js)
@ -667,13 +683,6 @@ Internet-Draft XR Fragments September 2023
&#187; discussion (https://github.com/coderofsalvation/xrfragment/ &#187; discussion (https://github.com/coderofsalvation/xrfragment/
issues/1) issues/1)
van Kammen Expires 24 March 2024 [Page 12]
Internet-Draft XR Fragments September 2023
10.1. UX spec 10.1. UX spec
End-users should always have read/write access to: End-users should always have read/write access to:
@ -713,15 +722,6 @@ Internet-Draft XR Fragments September 2023
scale-vector (a common property of a 3D node) of the scale-vector (a common property of a 3D node) of the
<b>placeholder</b> object. <b>placeholder</b> object.
| TODO: needs intermediate visuals to make things more obvious
11. XR Fragment queries
Include, exclude, hide/shows objects using space-separated strings:
@ -730,6 +730,12 @@ van Kammen Expires 24 March 2024 [Page 13]
Internet-Draft XR Fragments September 2023 Internet-Draft XR Fragments September 2023
| TODO: needs intermediate visuals to make things more obvious
11. XR Fragment queries
Include, exclude, hide/shows objects using space-separated strings:
+==================+==========================================+ +==================+==========================================+
| example | outcome | | example | outcome |
+==================+==========================================+ +==================+==========================================+
@ -772,12 +778,6 @@ Internet-Draft XR Fragments September 2023
| / | reference to root-scene. | | / | reference to root-scene. |
| | Useful in case of (preventing) showing/hiding | | | Useful in case of (preventing) showing/hiding |
| | objects in nested scenes (instanced by src) (*) | | | objects in nested scenes (instanced by src) (*) |
+----------+-------------------------------------------------+
Table 9
@ -786,6 +786,10 @@ van Kammen Expires 24 March 2024 [Page 14]
Internet-Draft XR Fragments September 2023 Internet-Draft XR Fragments September 2023
+----------+-------------------------------------------------+
Table 9
| * = #q=-/cube hides object cube only in the root-scene (not nested | * = #q=-/cube hides object cube only in the root-scene (not nested
| cube objects) | cube objects)
| #q=-cube hides both object cube in the root-scene <b>AND</b> | #q=-cube hides both object cube in the root-scene <b>AND</b>
@ -826,13 +830,9 @@ Internet-Draft XR Fragments September 2023
| (https://github.com/coderofsalvation/xrfragment/blob/main/src/ | (https://github.com/coderofsalvation/xrfragment/blob/main/src/
| xrfragment/Query.hx) | xrfragment/Query.hx)
12. Visible links
When predefined views, XRWG fragments and ID fragments (#cube or
#mytag e.g.) are triggered by the enduser (via href of toplevel URL):
1. draw a wire from the enduser (preferabbly a bit below the camera,
heartposition) to object(s) matching that ID (objectname)
@ -842,21 +842,39 @@ van Kammen Expires 24 March 2024 [Page 15]
Internet-Draft XR Fragments September 2023 Internet-Draft XR Fragments September 2023
12. Visible links
When predefined views, XRWG fragments and ID fragments (#cube or
#mytag e.g.) are triggered by the enduser (via toplevel URL or
clicking href):
1. draw a wire from the enduser (preferabbly a bit below the camera,
heartposition) to object(s) matching that ID (objectname)
2. draw a wire from the enduser (preferabbly a bit below the camera, 2. draw a wire from the enduser (preferabbly a bit below the camera,
heartposition) to object(s) matching that tag value heartposition) to object(s) matching that tag value
3. draw a wire from the enduser (preferabbly a bit below the camera, 3. draw a wire from the enduser (preferabbly a bit below the camera,
heartposition) to object(s) containing that in their src or href heartposition) to object(s) containing that in their src or href
value value
The obvious approach is to consult the XRWG, which basically has all The obvious approach for this, is to consult the XRWG (example
these things already collected/organized for you. (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/
src/3rd/js/XRWG.js)), which basically has all these things already
collected/organized for you during scene-load.
*UX*
4. do not update the wires when the enduser moves, leave them as is
5. offer a control near the back/forward button which allows the
user to (turn off) control the correlation-intensity of the XRWG
13. Text in XR (tagging,linking to spatial objects) 13. Text in XR (tagging,linking to spatial objects)
How does XR Fragments interlink text with objects? How does XR Fragments interlink text with objects?
| The XR Fragments does this by collapsing space into a *Word Graph* | The XR Fragments does this by collapsing space into a *Word Graph*
| (the *XRWG*), augmented by Bib(s)Tex. | (the *XRWG* example
| (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/
| src/3rd/js/XRWG.js)), augmented by Bib(s)Tex.
Instead of just throwing together all kinds media types into one Instead of just throwing together all kinds media types into one
experience (games), what about their tagged/semantical relationships? experience (games), what about their tagged/semantical relationships?
@ -873,9 +891,18 @@ Internet-Draft XR Fragments September 2023
| (https://github.com/coderofsalvation/hashtagbibs#bibs--bibtex- | (https://github.com/coderofsalvation/hashtagbibs#bibs--bibtex-
| combo-lowest-common-denominator-for-linking-data)) | combo-lowest-common-denominator-for-linking-data))
van Kammen Expires 24 March 2024 [Page 16]
Internet-Draft XR Fragments September 2023
Hence: Hence:
1. XR Fragments promotes (de)serializing a scene to the XRWG 1. XR Fragments promotes (de)serializing a scene to the XRWG
(example (https://github.com/coderofsalvation/xrfragment/blob/fe
at/macros/src/3rd/js/XRWG.js))
2. XR Fragments primes the XRWG, by collecting words from the tag 2. XR Fragments primes the XRWG, by collecting words from the tag
and name-property of 3D objects. and name-property of 3D objects.
3. XR Fragments primes the XRWG, by collecting words from 3. XR Fragments primes the XRWG, by collecting words from
@ -890,14 +917,6 @@ Internet-Draft XR Fragments September 2023
6. The XRWG should be recalculated when textvalues (in src) change 6. The XRWG should be recalculated when textvalues (in src) change
7. HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they 7. HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they
fit better in the application-layer) fit better in the application-layer)
van Kammen Expires 24 March 2024 [Page 16]
Internet-Draft XR Fragments September 2023
8. Applications don't have to be able to access the XRWG 8. Applications don't have to be able to access the XRWG
programmatically, as they can easily generate one themselves by programmatically, as they can easily generate one themselves by
traversing the scene-nodes. traversing the scene-nodes.
@ -910,6 +929,31 @@ Internet-Draft XR Fragments September 2023
Example: Example:
van Kammen Expires 24 March 2024 [Page 17]
Internet-Draft XR Fragments September 2023
http://y.io/z.fbx | Derived XRWG (expressed as BibTex) http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
----------------------------------------------------------------------------+-------------------------------------- ----------------------------------------------------------------------------+--------------------------------------
| @house{castle, | @house{castle,
@ -934,26 +978,6 @@ Internet-Draft XR Fragments September 2023
Another example: Another example:
van Kammen Expires 24 March 2024 [Page 17]
Internet-Draft XR Fragments September 2023
http://y.io/z.fbx | Derived XRWG (expressed as BibTex) http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
----------------------------------------------------------------------------+-------------------------------------- ----------------------------------------------------------------------------+--------------------------------------
| |
@ -977,6 +1001,15 @@ Internet-Draft XR Fragments September 2023
| same XRWG, however on top of that 2 tages (house and todo) are now | same XRWG, however on top of that 2 tages (house and todo) are now
| associated with text/objectname/tag 'baroque'. | associated with text/objectname/tag 'baroque'.
van Kammen Expires 24 March 2024 [Page 18]
Internet-Draft XR Fragments September 2023
As seen above, the XRWG can expand bibs As seen above, the XRWG can expand bibs
(https://github.com/coderofsalvation/hashtagbibs) (and the whole (https://github.com/coderofsalvation/hashtagbibs) (and the whole
scene) to BibTeX. scene) to BibTeX.
@ -998,18 +1031,6 @@ Internet-Draft XR Fragments September 2023
Table 10 Table 10
van Kammen Expires 24 March 2024 [Page 18]
Internet-Draft XR Fragments September 2023
| hashtagbibs (https://github.com/coderofsalvation/hashtagbibs) | hashtagbibs (https://github.com/coderofsalvation/hashtagbibs)
| potentially allow the enduser to annotate text/objects by | potentially allow the enduser to annotate text/objects by
| *speaking/typing/scanning associations*, which the XR Browser | *speaking/typing/scanning associations*, which the XR Browser
@ -1037,6 +1058,14 @@ Internet-Draft XR Fragments September 2023
(contextmenu e.g.) of any XR text, anywhere anytime. (contextmenu e.g.) of any XR text, anywhere anytime.
11. respect multi-line BiBTeX metadata in text because of the core 11. respect multi-line BiBTeX metadata in text because of the core
principle (#core-principle) principle (#core-principle)
van Kammen Expires 24 March 2024 [Page 19]
Internet-Draft XR Fragments September 2023
12. Default font (unless specified otherwise) is a modern monospace 12. Default font (unless specified otherwise) is a modern monospace
font, for maximized tabular expressiveness (see the core font, for maximized tabular expressiveness (see the core
principle (#core-principle)). principle (#core-principle)).
@ -1053,19 +1082,6 @@ Internet-Draft XR Fragments September 2023
Fictional chat: Fictional chat:
van Kammen Expires 24 March 2024 [Page 19]
Internet-Draft XR Fragments September 2023
<John> Hey what about this: https://my.com/station.gltf#pos=0,0,1&rot=90,2,0&t=500,1000 <John> Hey what about this: https://my.com/station.gltf#pos=0,0,1&rot=90,2,0&t=500,1000
<Sarah> I'm checking it right now <Sarah> I'm checking it right now
<Sarah> I don't see everything..where's our text from yesterday? <Sarah> I don't see everything..where's our text from yesterday?
@ -1098,6 +1114,14 @@ Internet-Draft XR Fragments September 2023
This indicates that: This indicates that:
* utf-8 is supported by default * utf-8 is supported by default
van Kammen Expires 24 March 2024 [Page 20]
Internet-Draft XR Fragments September 2023
* lines beginning with @ will not be rendered verbatim by default * lines beginning with @ will not be rendered verbatim by default
(read more (https://github.com/coderofsalvation/ (read more (https://github.com/coderofsalvation/
hashtagbibs#hashtagbib-mimetypes)) hashtagbibs#hashtagbib-mimetypes))
@ -1114,14 +1138,6 @@ Internet-Draft XR Fragments September 2023
Advantages: Advantages:
van Kammen Expires 24 March 2024 [Page 20]
Internet-Draft XR Fragments September 2023
* auto-expanding of hashtagbibs * auto-expanding of hashtagbibs
(https://github.com/coderofsalvation/hashtagbibs) associations (https://github.com/coderofsalvation/hashtagbibs) associations
* out-of-the-box (de)multiplex human text and metadata in one go * out-of-the-box (de)multiplex human text and metadata in one go
@ -1145,6 +1161,23 @@ Internet-Draft XR Fragments September 2023
13.2. URL and Data URI 13.2. URL and Data URI
van Kammen Expires 24 March 2024 [Page 21]
Internet-Draft XR Fragments September 2023
+--------------------------------------------------------------+ +------------------------+ +--------------------------------------------------------------+ +------------------------+
| | | author.com/article.txt | | | | author.com/article.txt |
| index.gltf | +------------------------+ | index.gltf | +------------------------+
@ -1171,13 +1204,6 @@ Internet-Draft XR Fragments September 2023
| object note_canvas with 'todo', the enduser can type or speak | object note_canvas with 'todo', the enduser can type or speak
| #note_canvas@todo | #note_canvas@todo
van Kammen Expires 24 March 2024 [Page 21]
Internet-Draft XR Fragments September 2023
13.3. XR Text example parser 13.3. XR Text example parser
To prime the XRWG with text from plain text src-values, here's an To prime the XRWG with text from plain text src-values, here's an
@ -1200,6 +1226,14 @@ xrtext = {
}, },
decode: (str) => { decode: (str) => {
van Kammen Expires 24 March 2024 [Page 22]
Internet-Draft XR Fragments September 2023
// bibtex: ↓@ ↓<tag|tag{phrase,|{ruler}> ↓property ↓end // bibtex: ↓@ ↓<tag|tag{phrase,|{ruler}> ↓property ↓end
let pat = [ /@/, /^\S+[,{}]/, /},/, /}/ ] let pat = [ /@/, /^\S+[,{}]/, /},/, /}/ ]
let tags = [], text='', i=0, prop='' let tags = [], text='', i=0, prop=''
@ -1227,13 +1261,6 @@ xrtext = {
return {text, tags} return {text, tags}
}, },
van Kammen Expires 24 March 2024 [Page 22]
Internet-Draft XR Fragments September 2023
encode: (text,tags) => { encode: (text,tags) => {
let str = text+"\n" let str = text+"\n"
for( let i in tags ){ for( let i in tags ){
@ -1256,6 +1283,13 @@ Internet-Draft XR Fragments September 2023
| above can be used as a startingpoint for LLVM's to translate/ | above can be used as a startingpoint for LLVM's to translate/
| steelman to a more formal form/language. | steelman to a more formal form/language.
van Kammen Expires 24 March 2024 [Page 23]
Internet-Draft XR Fragments September 2023
str = ` str = `
hello world hello world
here are some hashtagbibs followed by bibtex: here are some hashtagbibs followed by bibtex:
@ -1276,20 +1310,6 @@ console.log( xrtext.encode(text,tags) ) // multiplex text & bibtex back to
This expands to the following (hidden by default) BibTex appendix: This expands to the following (hidden by default) BibTex appendix:
van Kammen Expires 24 March 2024 [Page 23]
Internet-Draft XR Fragments September 2023
hello world hello world
here are some hashtagbibs followed by bibtex: here are some hashtagbibs followed by bibtex:
@ -1318,6 +1338,14 @@ Internet-Draft XR Fragments September 2023
* filter out sensitive data when copy/pasting (XR text with * filter out sensitive data when copy/pasting (XR text with
tag:secret e.g.) tag:secret e.g.)
van Kammen Expires 24 March 2024 [Page 24]
Internet-Draft XR Fragments September 2023
15. FAQ 15. FAQ
*Q:* Why is everything HTTP GET-based, what about POST/PUT/DELETE *Q:* Why is everything HTTP GET-based, what about POST/PUT/DELETE
@ -1327,25 +1355,6 @@ Internet-Draft XR Fragments September 2023
(for example, an XR Hypermedia browser can decide to support (for example, an XR Hypermedia browser can decide to support
POST/PUT/DELETE requests for embedded HTML thru src values) POST/PUT/DELETE requests for embedded HTML thru src values)
van Kammen Expires 24 March 2024 [Page 24]
Internet-Draft XR Fragments September 2023
*Q:* Why isn't there support for scripting *A:* This is out of scope, *Q:* Why isn't there support for scripting *A:* This is out of scope,
and up to the XR hypermedia browser. Javascript seems to been able and up to the XR hypermedia browser. Javascript seems to been able
to turn webpages from hypermedia documents into its opposite to turn webpages from hypermedia documents into its opposite
@ -1385,6 +1394,14 @@ Internet-Draft XR Fragments September 2023
| | vertex-, face- and customproperty data. | | | vertex-, face- and customproperty data. |
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| metadata | custom properties of text, 3D Scene or | | metadata | custom properties of text, 3D Scene or |
van Kammen Expires 24 March 2024 [Page 25]
Internet-Draft XR Fragments September 2023
| | Object(nodes), relevant to machines and a | | | Object(nodes), relevant to machines and a |
| | human minority (academics/developers) | | | human minority (academics/developers) |
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
@ -1394,14 +1411,6 @@ Internet-Draft XR Fragments September 2023
| the XRWG | wordgraph (collapses 3D scene to tags) | | the XRWG | wordgraph (collapses 3D scene to tags) |
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| the hashbus | hashtags map to camera/scene-projections | | the hashbus | hashtags map to camera/scene-projections |
van Kammen Expires 24 March 2024 [Page 25]
Internet-Draft XR Fragments September 2023
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| spacetime | positions camera, triggers scene-preset/time | | spacetime | positions camera, triggers scene-preset/time |
| hashtags | | | hashtags | |
@ -1441,6 +1450,14 @@ Internet-Draft XR Fragments September 2023
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| extrospective | outward sensemaking ("I'm fairly sure John is | | extrospective | outward sensemaking ("I'm fairly sure John is |
| | a person who lives in oklahoma") | | | a person who lives in oklahoma") |
van Kammen Expires 24 March 2024 [Page 26]
Internet-Draft XR Fragments September 2023
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| &#9723; | ascii representation of an 3D object/mesh | | &#9723; | ascii representation of an 3D object/mesh |
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
@ -1450,14 +1467,6 @@ Internet-Draft XR Fragments September 2023
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| BibTeX | simple tagging/citing/referencing standard | | BibTeX | simple tagging/citing/referencing standard |
| | for plaintext | | | for plaintext |
van Kammen Expires 24 March 2024 [Page 26]
Internet-Draft XR Fragments September 2023
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
| BibTag | a BibTeX tag | | BibTag | a BibTeX tag |
+-----------------+-----------------------------------------------+ +-----------------+-----------------------------------------------+
@ -1490,15 +1499,6 @@ Internet-Draft XR Fragments September 2023

View file

@ -358,11 +358,14 @@ In case of <tt>buttonA</tt> the end-user will be teleported to another location
<section anchor="top-level-url-processing"><name>Top-level URL processing</name> <section anchor="top-level-url-processing"><name>Top-level URL processing</name>
<blockquote><t>Example URL: <tt>://foo/world.gltf#cube&amp;pos=0,0,0</tt></t> <blockquote><t>Example URL: <tt>://foo/world.gltf#cube&amp;pos=0,0,0</tt></t>
</blockquote><t>The URL-processing-flow for hypermedia browsers goes like this:</t> </blockquote><t>The URL-processing-flow for hypermedia browsers goes like this:</t>
<t>1.IF a <tt>#cube</tt> matches a custom property-key (of an object) in the 3D file/scene (<tt>#cube</tt>: <tt>#......</tt>) &lt;b&gt;THEN&lt;/b&gt; execute that predefined_view.
2.IF scene operators (<tt>pos</tt>) and/or animation operator (<tt>t</tt>) are present in the URL then (re)position the camera and/or animation-range accordingly. <ol spacing="compact">
3.IF no camera-position has been set in &lt;b&gt;step 1 or 2&lt;/b&gt; update the top-level URL with <tt>#pos=0,0,0</tt> (<eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]]">example</eref>) <li>IF a <tt>#cube</tt> matches a custom property-key (of an object) in the 3D file/scene (<tt>#cube</tt>: <tt>#......</tt>) &lt;b&gt;THEN&lt;/b&gt; execute that predefined_view.</li>
4.IF a <tt>#cube</tt> matches the name (of an object) in the 3D file/scene then draw a line from the enduser('s heart) to that object (to highlight it). <li>IF scene operators (<tt>pos</tt>) and/or animation operator (<tt>t</tt>) are present in the URL then (re)position the camera and/or animation-range accordingly.</li>
5.IF a <tt>#cube</tt> matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects).</t> <li>IF no camera-position has been set in &lt;b&gt;step 1 or 2&lt;/b&gt; update the top-level URL with <tt>#pos=0,0,0</tt> (<eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/navigator.js#L31]]">example</eref>)</li>
<li>IF a <tt>#cube</tt> matches the name (of an object) in the 3D file/scene then draw a line from the enduser('s heart) to that object (to highlight it).</li>
<li>IF a <tt>#cube</tt> matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects).</li>
</ol>
</section> </section>
<section anchor="embedding-xr-content-src-instancing"><name>Embedding XR content (src-instancing)</name> <section anchor="embedding-xr-content-src-instancing"><name>Embedding XR content (src-instancing)</name>
@ -627,19 +630,25 @@ Useful in case of (preventing) showing/hiding objects in nested scenes (instance
</section> </section>
<section anchor="visible-links"><name>Visible links</name> <section anchor="visible-links"><name>Visible links</name>
<t>When predefined views, XRWG fragments and ID fragments (<tt>#cube</tt> or <tt>#mytag</tt> e.g.) are triggered by the enduser (via <tt>href</tt> of toplevel URL):</t> <t>When predefined views, XRWG fragments and ID fragments (<tt>#cube</tt> or <tt>#mytag</tt> e.g.) are triggered by the enduser (via toplevel URL or clicking <tt>href</tt>):</t>
<ol spacing="compact"> <ol spacing="compact">
<li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname)</li> <li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that ID (objectname)</li>
<li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that <tt>tag</tt> value</li> <li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) matching that <tt>tag</tt> value</li>
<li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their <tt>src</tt> or <tt>href</tt> value</li> <li>draw a wire from the enduser (preferabbly a bit below the camera, heartposition) to object(s) containing that in their <tt>src</tt> or <tt>href</tt> value</li>
</ol> </ol>
<t>The obvious approach is to consult the XRWG, which basically has all these things already collected/organized for you.</t> <t>The obvious approach for this, is to consult the XRWG (<eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>), which basically has all these things already collected/organized for you during scene-load.</t>
<t><strong>UX</strong></t>
<ol spacing="compact" start="4">
<li>do not update the wires when the enduser moves, leave them as is</li>
<li>offer a control near the back/forward button which allows the user to (turn off) control the correlation-intensity of the XRWG</li>
</ol>
</section> </section>
<section anchor="text-in-xr-tagging-linking-to-spatial-objects"><name>Text in XR (tagging,linking to spatial objects)</name> <section anchor="text-in-xr-tagging-linking-to-spatial-objects"><name>Text in XR (tagging,linking to spatial objects)</name>
<t>How does XR Fragments interlink text with objects?</t> <t>How does XR Fragments interlink text with objects?</t>
<blockquote><t>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong>), augmented by Bib(s)Tex.</t> <blockquote><t>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong> <eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>), augmented by Bib(s)Tex.</t>
</blockquote><t>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br /> </blockquote><t>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br />
Perhaps the following question is related: why is HTML adopted less in games outside the browser? Perhaps the following question is related: why is HTML adopted less in games outside the browser?
@ -651,7 +660,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
</blockquote><t>Hence:</t> </blockquote><t>Hence:</t>
<ol spacing="compact"> <ol spacing="compact">
<li>XR Fragments promotes (de)serializing a scene to the XRWG</li> <li>XR Fragments promotes (de)serializing a scene to the XRWG (<eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>)</li>
<li>XR Fragments primes the XRWG, by collecting words from the <tt>tag</tt> and name-property of 3D objects.</li> <li>XR Fragments primes the XRWG, by collecting words from the <tt>tag</tt> and name-property of 3D objects.</li>
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype &amp; Data URI)</li> <li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype &amp; Data URI)</li>
<li><eref target="https://github.com/coderofsalvation/hashtagbibs">Bib's</eref> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li> <li><eref target="https://github.com/coderofsalvation/hashtagbibs">Bib's</eref> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li>

File diff suppressed because one or more lines are too long