updated docs

This commit is contained in:
Leon van Kammen 2024-02-29 14:07:20 +00:00
parent e34d1a0f53
commit 5ea4529ffc
12 changed files with 3299 additions and 325 deletions

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Thu Feb 29 01:34:17 PM UTC 2024 * v0.5.1 generated at Thu Feb 29 01:43:17 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Thu Feb 29 01:34:17 PM UTC 2024 * v0.5.1 generated at Thu Feb 29 01:43:17 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Thu Feb 29 01:34:17 PM UTC 2024 * v0.5.1 generated at Thu Feb 29 01:43:17 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Thu Feb 29 01:34:17 PM UTC 2024 * v0.5.1 generated at Thu Feb 29 01:43:17 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -104,6 +104,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
<li>Interlinking text &amp; spatial objects by collapsing space into a Word Graph (XRWG) to show <a href="#visible-links">visible links</a></li> <li>Interlinking text &amp; spatial objects by collapsing space into a Word Graph (XRWG) to show <a href="#visible-links">visible links</a></li>
<li>unlocking spatial potential of the (originally 2D) hashtag (which jumps to a chapter) for navigating XR documents</li> <li>unlocking spatial potential of the (originally 2D) hashtag (which jumps to a chapter) for navigating XR documents</li>
<li>refraining from introducing scripting-engines for mundane tasks (and preventing its inevitable security-headaches)</li> <li>refraining from introducing scripting-engines for mundane tasks (and preventing its inevitable security-headaches)</li>
<li>the gap between text an 3d objects: object-names directly map to hashtags (=fragments), which allows 3D to text transcription.</li>
</ol> </ol>
<blockquote> <blockquote>
@ -174,6 +175,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
<p>?-linked and #-linked navigation are JUST one possible way to implement XR Fragments: the essential goal is to allow a Hypermediatic FeedbackLoop (HFL) between external and internal 4D navigation.</p> <p>?-linked and #-linked navigation are JUST one possible way to implement XR Fragments: the essential goal is to allow a Hypermediatic FeedbackLoop (HFL) between external and internal 4D navigation.</p>
</blockquote> </blockquote>
<p>Traditional webbrowsers can become 4D document-ready by:</p>
<h1 id="hypermediatic-feedbackloop-for-xr-browsers">Hypermediatic FeedbackLoop for XR browsers</h1> <h1 id="hypermediatic-feedbackloop-for-xr-browsers">Hypermediatic FeedbackLoop for XR browsers</h1>
<p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<code>xrf://#....</code>) or <strong>navigate</strong> (<code>xrf://#pos=...</code>)<br> <p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<code>xrf://#....</code>) or <strong>navigate</strong> (<code>xrf://#pos=...</code>)<br>
@ -1534,6 +1537,93 @@ The following demonstrates a simple video player:</p>
</code></pre> </code></pre>
<h1 id="additional-scene-metadata">Additional scene metadata</h1>
<p>XR Fragments does not aim to redefine the metadata-space by introducing its own cataloging-metadata fields.
Instead, it encourages browsers to scan nodes for the following custom properties:</p>
<ul>
<li><a href="https://spdx.dev/">SPDX</a> license information</li>
<li><a href="https://www.w3.org/WAI/standards-guidelines/aria/">ARIA</a> attributes (<code>aria-*: .....</code>)</li>
<li><a href="https://ogp.me">Open Graph</a> attributes (<code>og:*: .....</code>)</li>
<li><a href="https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/">Dublin-Core</a> attributes(<code>dc:*: .....</code>)</li>
<li><a href="https://bibtex.eu/fields">BibTex</a> when known bibtex-keys exist with values enclosed in <code>{</code> and <code>},</code></li>
</ul>
<p><strong>ARIA</strong> (<code>aria-description</code>) is the most important to support, as it promotes accessibility and allows scene transcripts. Please start <code>aria-description</code> with a verb to aid transcripts.</p>
<blockquote>
<p>Example: object &lsquo;tryceratops&rsquo; with <code>aria-description: is a huge dinosaurus standing on a #mountain</code> generates transcript <code>#tryceratops is a huge dinosaurus standing on a #mountain</code>, where the hashtags are clickable XR Fragments (activating the visible-links in the XR browser).</p>
</blockquote>
<p>Individual nodes can be enriched with such metadata, but most importantly the scene node:</p>
<table>
<thead>
<tr>
<th>metadata key</th>
<th>example value</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>aria-description</code>, <code>og:description</code>, <code>dc:description</code></td>
<td><code>An immersive experience about Triceratops</code> (*)</td>
</tr>
<tr>
<td><code>SPDX</code></td>
<td><code>CC0-1.0</code></td>
</tr>
<tr>
<td><code>dc:creator</code></td>
<td><code>John Doe</code></td>
</tr>
<tr>
<td><code>dc:title</code>, <code>og:title</code></td>
<td>&lsquo;Triceratops` (*)</td>
</tr>
<tr>
<td><code>og:site_name</code></td>
<td><code>https://xrfragment.org</code></td>
</tr>
<tr>
<td><code>dc.publisher</code></td>
<td><code>NLNET</code></td>
</tr>
<tr>
<td><code>dc.date</code></td>
<td><code>2024-01-01</code></td>
</tr>
<tr>
<td><code>dc.identifier</code></td>
<td><code>XRFRAGMENT-001</code></td>
</tr>
<tr>
<td><code>journal</code> (bibTeX)</td>
<td><code>{Future Of Text Vol 3},</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p>* = these are interchangable (only one needs to be defined)</p>
</blockquote>
<p>There&rsquo;s no silver bullet when it comes to metadata, so one should support where the metadata is/goes.</p>
<blockquote>
<p>These attributes can be scanned and presented during an <code>href</code> or <code>src</code> eye/mouse-over.</p>
</blockquote>
<h1 id="security-considerations">Security Considerations</h1> <h1 id="security-considerations">Security Considerations</h1>
<p>The only dynamic parts are <a href="https://www.w3.org/TR/media-frags/">W3C Media Fragments</a> and <a href="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</a>.<br> <p>The only dynamic parts are <a href="https://www.w3.org/TR/media-frags/">W3C Media Fragments</a> and <a href="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</a>.<br>

View file

@ -1049,9 +1049,10 @@ Instead, it encourages browsers to scan nodes for the following custom propertie
* [Open Graph](https://ogp.me) attributes (`og:*: .....`) * [Open Graph](https://ogp.me) attributes (`og:*: .....`)
* [Dublin-Core](https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/) attributes(`dc:*: .....`) * [Dublin-Core](https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/) attributes(`dc:*: .....`)
* [BibTex](https://bibtex.eu/fields) when known bibtex-keys exist with values enclosed in `{` and `},` * [BibTex](https://bibtex.eu/fields) when known bibtex-keys exist with values enclosed in `{` and `},`
* [JSON-LD](https://json-ld.org/) when key matches `@type` JSON-value
> ARIA (`aria-description`) is the most important to support (as it promotes accessibility) **ARIA** (`aria-description`) is the most important to support, as it promotes accessibility and allows scene transcripts. Please start `aria-description` with a verb to aid transcripts.
> Example: object 'tryceratops' with `aria-description: is a huge dinosaurus standing on a #mountain` generates transcript `#tryceratops is a huge dinosaurus standing on a #mountain`, where the hashtags are clickable XR Fragments (activating the visible-links in the XR browser).
Individual nodes can be enriched with such metadata, but most importantly the scene node: Individual nodes can be enriched with such metadata, but most importantly the scene node:
@ -1066,12 +1067,12 @@ Individual nodes can be enriched with such metadata, but most importantly the sc
| `dc.date` | `2024-01-01` | | `dc.date` | `2024-01-01` |
| `dc.identifier` | `XRFRAGMENT-001` | | `dc.identifier` | `XRFRAGMENT-001` |
| `journal` (bibTeX) | `{Future Of Text Vol 3},` | | `journal` (bibTeX) | `{Future Of Text Vol 3},` |
| `Person` (JSON-LD) | `{"@type":"Person",................}` |
> \* = these are interchangable (only one needs to be defined) > \* = these are interchangable (only one needs to be defined)
There's no silver bullet when it comes to metadata, so one should support where the metadata is/goes. There's no silver bullet when it comes to metadata, so one should support where the metadata is/goes.
For future formats it's absolutely fine to follow the same heuristics as used with JSON-LD (key matches `@type` value) or bibtex (value matches field-delimiter).
> These attributes can be scanned and presented during an `href` or `src` eye/mouse-over.
# Security Considerations # Security Considerations

View file

@ -3,7 +3,7 @@
Jens & Leon Internet Engineering Task Force L.R. van Kammen Jens & Leon Internet Engineering Task Force L.R. van Kammen
Internet-Draft 26 February 2024 Internet-Draft 29 February 2024
Intended status: Informational Intended status: Informational
@ -43,7 +43,7 @@ Status of This Memo
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 29 August 2024. This Internet-Draft will expire on 1 September 2024.
Copyright Notice Copyright Notice
@ -53,7 +53,7 @@ Copyright Notice
van Kammen Expires 29 August 2024 [Page 1] van Kammen Expires 1 September 2024 [Page 1]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -72,49 +72,50 @@ Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Core principle . . . . . . . . . . . . . . . . . . . . . . . 3 2. Core principle . . . . . . . . . . . . . . . . . . . . . . . 3
3. Hypermediatic FeedbackLoop for XR browsers . . . . . . . . . 5 3. Hypermediatic FeedbackLoop for XR browsers . . . . . . . . . 5
4. Conventions and Definitions . . . . . . . . . . . . . . . . . 7 4. Conventions and Definitions . . . . . . . . . . . . . . . . . 8
4.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 7 4.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 8
5. List of URI Fragments . . . . . . . . . . . . . . . . . . . . 8 5. List of URI Fragments . . . . . . . . . . . . . . . . . . . . 8
5.1. List of metadata for 3D nodes . . . . . . . . . . . . . . 8 5.1. List of metadata for 3D nodes . . . . . . . . . . . . . . 9
5.2. Fragment-to-metadata mapping . . . . . . . . . . . . . . 9 5.2. Fragment-to-metadata mapping . . . . . . . . . . . . . . 10
5.3. media fragments and datatypes . . . . . . . . . . . . . . 10 5.3. media fragments and datatypes . . . . . . . . . . . . . . 11
6. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 13 6. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 14
7. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 14 7. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 15
8. Top-level URL processing . . . . . . . . . . . . . . . . . . 15 8. Top-level URL processing . . . . . . . . . . . . . . . . . . 16
9. Embedding XR content using src . . . . . . . . . . . . . . . 15 9. Embedding XR content using src . . . . . . . . . . . . . . . 16
10. Navigating content href portals . . . . . . . . . . . . . . . 18 10. Navigating content href portals . . . . . . . . . . . . . . . 19
10.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 19 10.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 20
10.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 19 10.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 20
10.3. Scaling instanced content . . . . . . . . . . . . . . . 20 10.3. Scaling instanced content . . . . . . . . . . . . . . . 21
11. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 20 11. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 21
12. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 20 12. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 21
13. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 20 13. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 21
14. XR audio/video integration . . . . . . . . . . . . . . . . . 21 14. XR audio/video integration . . . . . . . . . . . . . . . . . 22
15. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 21 15. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 22
15.1. including/excluding . . . . . . . . . . . . . . . . . . 22 15.1. including/excluding . . . . . . . . . . . . . . . . . . 23
15.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 23 15.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 24
16. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 23 16. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 24
17. Text in XR (tagging,linking to spatial objects) . . . . . . . 24 17. Text in XR (tagging,linking to spatial objects) . . . . . . . 25
17.1. Default Data URI mimetype . . . . . . . . . . . . . . . 28 17.1. Default Data URI mimetype . . . . . . . . . . . . . . . 29
17.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 29 17.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 30
17.3. XR Text example parser . . . . . . . . . . . . . . . . . 30 17.3. XR Text example parser . . . . . . . . . . . . . . . . . 31
18. Transclusion (broken link) resolution . . . . . . . . . . . . 32 18. Transclusion (broken link) resolution . . . . . . . . . . . . 33
19. Topic-based index-less Webrings . . . . . . . . . . . . . . . 33 19. Topic-based index-less Webrings . . . . . . . . . . . . . . . 34
20. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 34 20. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 35
21. Security Considerations . . . . . . . . . . . . . . . . . . . 34 21. Additional scene metadata . . . . . . . . . . . . . . . . . . 35
22. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 22. Security Considerations . . . . . . . . . . . . . . . . . . . 37
23. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 23. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
24. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 24. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
25. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 35 25. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38
van Kammen Expires 29 August 2024 [Page 2] van Kammen Expires 1 September 2024 [Page 2]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
26. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 36 26. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 38
27. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 38
1. Introduction 1. Introduction
@ -142,6 +143,8 @@ Internet-Draft XR Fragments February 2024
jumps to a chapter) for navigating XR documents jumps to a chapter) for navigating XR documents
4. refraining from introducing scripting-engines for mundane tasks 4. refraining from introducing scripting-engines for mundane tasks
(and preventing its inevitable security-headaches) (and preventing its inevitable security-headaches)
5. the gap between text an 3d objects: object-names directly map to
hashtags (=fragments), which allows 3D to text transcription.
| NOTE: The chapters in this document are ordered from highlevel to | NOTE: The chapters in this document are ordered from highlevel to
| lowlevel (technical) as much as possible | lowlevel (technical) as much as possible
@ -162,10 +165,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 1 September 2024 [Page 3]
van Kammen Expires 29 August 2024 [Page 3]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -221,7 +221,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 4] van Kammen Expires 1 September 2024 [Page 4]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -252,6 +252,8 @@ Internet-Draft XR Fragments February 2024
| Hypermediatic FeedbackLoop (HFL) between external and internal 4D | Hypermediatic FeedbackLoop (HFL) between external and internal 4D
| navigation. | navigation.
Traditional webbrowsers can become 4D document-ready by:
3. Hypermediatic FeedbackLoop for XR browsers 3. Hypermediatic FeedbackLoop for XR browsers
href metadata traditionally implies *click* AND *navigate*, however href metadata traditionally implies *click* AND *navigate*, however
@ -272,16 +274,16 @@ Internet-Draft XR Fragments February 2024
* hypermediatic (https://github.com/coderofsalvation/hypermediatic) * hypermediatic (https://github.com/coderofsalvation/hypermediatic)
loading/clicking 3D assets (gltf/fbx e.g.) natively (with or loading/clicking 3D assets (gltf/fbx e.g.) natively (with or
without using HTML). without using HTML).
* allowing 3D assets/nodes to publish XR Fragments to themselves/
eachother using the xrf:// hashbus
van Kammen Expires 29 August 2024 [Page 5] van Kammen Expires 1 September 2024 [Page 5]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
* allowing 3D assets/nodes to publish XR Fragments to themselves/
eachother using the xrf:// hashbus
* collapsing the 3D scene to an wordgraph (for essential navigation * collapsing the 3D scene to an wordgraph (for essential navigation
purposes) controllable thru a hash(tag)bus purposes) controllable thru a hash(tag)bus
* completely bypassing the security-trap of loading external scripts * completely bypassing the security-trap of loading external scripts
@ -292,6 +294,50 @@ Internet-Draft XR Fragments February 2024
agnostic, though pseudo-XR Fragment browsers *can* be implemented on agnostic, though pseudo-XR Fragment browsers *can* be implemented on
top of HTML/Javascript. top of HTML/Javascript.
van Kammen Expires 1 September 2024 [Page 6]
Internet-Draft XR Fragments February 2024
+=========+======================+=====================================+ +=========+======================+=====================================+
|principle|XR 4D URL |HTML 2D URL | |principle|XR 4D URL |HTML 2D URL |
+=========+======================+=====================================+ +=========+======================+=====================================+
@ -331,19 +377,23 @@ Internet-Draft XR Fragments February 2024
Table 1 Table 1
van Kammen Expires 29 August 2024 [Page 6]
Internet-Draft XR Fragments February 2024
| An important aspect of HFL is that URI Fragments can be triggered | An important aspect of HFL is that URI Fragments can be triggered
| without updating the top-level URI (default href-behaviour) thru | without updating the top-level URI (default href-behaviour) thru
| their own 'bus' (xrf://#.....). This decoupling between | their own 'bus' (xrf://#.....). This decoupling between
| navigation and interaction prevents non-standard things like | navigation and interaction prevents non-standard things like
| (href:javascript:dosomething()). | (href:javascript:dosomething()).
van Kammen Expires 1 September 2024 [Page 7]
Internet-Draft XR Fragments February 2024
4. Conventions and Definitions 4. Conventions and Definitions
See appendix below in case certain terms are not clear. See appendix below in case certain terms are not clear.
@ -380,20 +430,6 @@ Internet-Draft XR Fragments February 2024
https://me.com can load the latter (and still indicates which XR https://me.com can load the latter (and still indicates which XR
Fragments entrypoint-experience/client was used). Fragments entrypoint-experience/client was used).
van Kammen Expires 29 August 2024 [Page 7]
Internet-Draft XR Fragments February 2024
5. List of URI Fragments 5. List of URI Fragments
+=======================+======================================+============+============+ +=======================+======================================+============+============+
@ -406,6 +442,14 @@ Internet-Draft XR Fragments February 2024
| | | |0.5,0,0, | | | | |0.5,0,0, |
+-----------------------+--------------------------------------+------------+------------+ +-----------------------+--------------------------------------+------------+------------+
|#rot |vector3 |#rot=0,90,0 |rotates | |#rot |vector3 |#rot=0,90,0 |rotates |
van Kammen Expires 1 September 2024 [Page 8]
Internet-Draft XR Fragments February 2024
| | | |camera to | | | | |camera to |
| | | |xyz-coord | | | | |xyz-coord |
| | | |0.5,0,0 | | | | |0.5,0,0 |
@ -442,14 +486,6 @@ Internet-Draft XR Fragments February 2024
| src | string | "src": | XR embed / | custom | | src | string | "src": | XR embed / | custom |
| | | "#cube" | teleport | property in 3D | | | | "#cube" | teleport | property in 3D |
| | | | | fileformats | | | | | | fileformats |
van Kammen Expires 29 August 2024 [Page 8]
Internet-Draft XR Fragments February 2024
+------+--------+------------+-------------------+----------------+ +------+--------+------------+-------------------+----------------+
| tag | string | "tag": | tag object (for | custom | | tag | string | "tag": | tag object (for | custom |
| | | "cubes | filter-use / XRWG | property in 3D | | | | "cubes | filter-use / XRWG | property in 3D |
@ -462,6 +498,14 @@ Internet-Draft XR Fragments February 2024
Table 4 Table 4
van Kammen Expires 1 September 2024 [Page 9]
Internet-Draft XR Fragments February 2024
| Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, | Supported popular compatible 3D fileformats: .gltf, .obj, .fbx,
| .usdz, .json (THREE.js), .dae and so on. | .usdz, .json (THREE.js), .dae and so on.
@ -498,14 +542,6 @@ Internet-Draft XR Fragments February 2024
| | | | |cam01 as active camera | | | | | |cam01 as active camera |
+----------------+--------------------------------------+-------------+---------------------+-----------------------+ +----------------+--------------------------------------+-------------+---------------------+-----------------------+
|*MATERIALUPDATE*|#<tag_or_objectname>[*]=<materialname>|string=string|#car=metallic |sets material of car to| |*MATERIALUPDATE*|#<tag_or_objectname>[*]=<materialname>|string=string|#car=metallic |sets material of car to|
van Kammen Expires 29 August 2024 [Page 9]
Internet-Draft XR Fragments February 2024
| | | | |material with name | | | | | |material with name |
| | | | |metallic (*=including | | | | | |metallic (*=including |
| | | | |children) | | | | | |children) |
@ -518,6 +554,14 @@ Internet-Draft XR Fragments February 2024
|*VARIABLE |#<variable>=<metadata-key> |string=string|#foo=bar |sets URI Template | |*VARIABLE |#<variable>=<metadata-key> |string=string|#foo=bar |sets URI Template |
|UPDATE* | | | |(https://www.rfc- | |UPDATE* | | | |(https://www.rfc- |
| | | | |editor.org/rfc/rfc6570)| | | | | |editor.org/rfc/rfc6570)|
van Kammen Expires 1 September 2024 [Page 10]
Internet-Draft XR Fragments February 2024
| | | | |variable foo to the | | | | | |variable foo to the |
| | | | |value #t=0 from | | | | | |value #t=0 from |
| | | | |*existing* object | | | | | |*existing* object |
@ -550,18 +594,6 @@ Internet-Draft XR Fragments February 2024
| the 3D scene(file) *but also* media defined in src-metadata like | the 3D scene(file) *but also* media defined in src-metadata like
| audio/video-files (mp3/mp4 e.g.) | audio/video-files (mp3/mp4 e.g.)
van Kammen Expires 29 August 2024 [Page 10]
Internet-Draft XR Fragments February 2024
+==========+======================+===============+================+ +==========+======================+===============+================+
| type | syntax | example | info | | type | syntax | example | info |
+==========+======================+===============+================+ +==========+======================+===============+================+
@ -578,6 +610,14 @@ Internet-Draft XR Fragments February 2024
+----------+----------------------+---------------+----------------+ +----------+----------------------+---------------+----------------+
| temporal | t=x,y | 0,2 | play from 0 | | temporal | t=x,y | 0,2 | play from 0 |
| W3C | | | seconds till 2 | | W3C | | | seconds till 2 |
van Kammen Expires 1 September 2024 [Page 11]
Internet-Draft XR Fragments February 2024
| media | | | seconds (and | | media | | | seconds (and |
| fragment | | | stop) | | fragment | | | stop) |
+----------+----------------------+---------------+----------------+ +----------+----------------------+---------------+----------------+
@ -610,14 +650,6 @@ Internet-Draft XR Fragments February 2024
| | | | the current uv | | | | | the current uv |
| | | | coordinates | | | | | coordinates |
+----------+----------------------+---------------+----------------+ +----------+----------------------+---------------+----------------+
van Kammen Expires 29 August 2024 [Page 11]
Internet-Draft XR Fragments February 2024
| | | 0.2,1,0.1,0.1 | scroll (lerp) | | | | 0.2,1,0.1,0.1 | scroll (lerp) |
| | | | to uv | | | | | to uv |
| | | | coordinate | | | | | coordinate |
@ -634,6 +666,14 @@ Internet-Draft XR Fragments February 2024
| | | +0.5,+0.5 | scroll | | | | +0.5,+0.5 | scroll |
| | | | instantly by | | | | | instantly by |
| | | | adding 0.5 to | | | | | adding 0.5 to |
van Kammen Expires 1 September 2024 [Page 12]
Internet-Draft XR Fragments February 2024
| | | | the current uv | | | | | the current uv |
| | | | coordinates | | | | | coordinates |
+----------+----------------------+---------------+----------------+ +----------+----------------------+---------------+----------------+
@ -669,7 +709,23 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 12]
van Kammen Expires 1 September 2024 [Page 13]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -725,7 +781,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 13] van Kammen Expires 1 September 2024 [Page 14]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -759,10 +815,10 @@ Internet-Draft XR Fragments February 2024
Table 7 Table 7
&#187; example implementation » example implementation
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/pos.js) three/xrf/pos.js)
&#187; discussion (https://github.com/coderofsalvation/xrfragment/ » discussion (https://github.com/coderofsalvation/xrfragment/
issues/5) issues/5)
1. the Y-coordinate of pos identifies the floorposition. This means 1. the Y-coordinate of pos identifies the floorposition. This means
@ -777,11 +833,11 @@ Internet-Draft XR Fragments February 2024
coordinate, pos=0,0,0 will be assumed coordinate, pos=0,0,0 will be assumed
Here's an ascii representation of a 3D scene-graph which contains 3D Here's an ascii representation of a 3D scene-graph which contains 3D
objects &#9723; and their metadata: objects and their metadata:
van Kammen Expires 29 August 2024 [Page 14] van Kammen Expires 1 September 2024 [Page 15]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -837,7 +893,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 15] van Kammen Expires 1 September 2024 [Page 16]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -859,9 +915,8 @@ Internet-Draft XR Fragments February 2024
Table 8 Table 8
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 which embeds remote & local 3D objects ◻ with/out using filters:
filters:
+────────────────────────────────────────────────────────+ +─────────────────────────+ +────────────────────────────────────────────────────────+ +─────────────────────────+
│ │ │ │ │ │ │ │
@ -893,7 +948,8 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 16]
van Kammen Expires 1 September 2024 [Page 17]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -949,7 +1005,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 17] van Kammen Expires 1 September 2024 [Page 18]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -957,13 +1013,13 @@ Internet-Draft XR Fragments February 2024
* image/jpg * image/jpg
* text/plain;charset=utf-8 * text/plain;charset=utf-8
&#187; example implementation » example implementation
(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 » example 3D asset
(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/ » discussion (https://github.com/coderofsalvation/xrfragment/
issues/4) issues/4)
10. Navigating content href portals 10. Navigating content href portals
@ -1005,7 +1061,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 18] van Kammen Expires 1 September 2024 [Page 19]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1026,13 +1082,13 @@ Internet-Draft XR Fragments February 2024
forward action until a pos=... primitive is found (the inbetween forward action until a pos=... primitive is found (the inbetween
interaction URI's are only for UX research purposes) interaction URI's are only for UX research purposes)
&#187; example implementation » 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)
&#187; example 3D asset » example 3D asset
(https://github.com/coderofsalvation/xrfragment/blob/main/example/ (https://github.com/coderofsalvation/xrfragment/blob/main/example/
assets/href.gltf#L192) assets/href.gltf#L192)
&#187; discussion (https://github.com/coderofsalvation/xrfragment/ » discussion (https://github.com/coderofsalvation/xrfragment/
issues/1) issues/1)
10.1. Walking surfaces 10.1. Walking surfaces
@ -1061,7 +1117,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 19] van Kammen Expires 1 September 2024 [Page 20]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1117,7 +1173,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 20] van Kammen Expires 1 September 2024 [Page 21]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1173,7 +1229,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 21] van Kammen Expires 1 September 2024 [Page 22]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1229,7 +1285,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 22] van Kammen Expires 1 September 2024 [Page 23]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1244,11 +1300,11 @@ Internet-Draft XR Fragments February 2024
| colorbuffer (to allow children being still visible while their | colorbuffer (to allow children being still visible while their
| parents are invisible). | parents are invisible).
&#187; example implementation » example implementation
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/q.js) &#187; example 3D asset three/xrf/q.js) » example 3D asset
(https://github.com/coderofsalvation/xrfragment/blob/main/example/ (https://github.com/coderofsalvation/xrfragment/blob/main/example/
assets/filter.gltf#L192) &#187; discussion assets/filter.gltf#L192) » discussion
(https://github.com/coderofsalvation/xrfragment/issues/3) (https://github.com/coderofsalvation/xrfragment/issues/3)
15.2. Filter Parser 15.2. Filter Parser
@ -1285,7 +1341,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 23] van Kammen Expires 1 September 2024 [Page 24]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1341,7 +1397,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 24] van Kammen Expires 1 September 2024 [Page 25]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1397,7 +1453,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 25] van Kammen Expires 1 September 2024 [Page 26]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1453,7 +1509,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 26] van Kammen Expires 1 September 2024 [Page 27]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1509,7 +1565,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 27] van Kammen Expires 1 September 2024 [Page 28]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1565,7 +1621,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 28] van Kammen Expires 1 September 2024 [Page 29]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1621,7 +1677,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 29] van Kammen Expires 1 September 2024 [Page 30]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1677,7 +1733,7 @@ xrtext = {
van Kammen Expires 29 August 2024 [Page 30] van Kammen Expires 1 September 2024 [Page 31]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1733,7 +1789,7 @@ console.log( xrtext.encode(text,tags) ) // multiplex text & bibtex back to
van Kammen Expires 29 August 2024 [Page 31] van Kammen Expires 1 September 2024 [Page 32]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1789,7 +1845,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 32] van Kammen Expires 1 September 2024 [Page 33]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1845,7 +1901,7 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 29 August 2024 [Page 33] van Kammen Expires 1 September 2024 [Page 34]
Internet-Draft XR Fragments February 2024 Internet-Draft XR Fragments February 2024
@ -1874,7 +1930,95 @@ Internet-Draft XR Fragments February 2024
│ │ │ │
+─────────────────────────────────────────────+ +─────────────────────────────────────────────+
21. Security Considerations 21. Additional scene metadata
XR Fragments does not aim to redefine the metadata-space by
introducing its own cataloging-metadata fields. Instead, it
encourages browsers to scan nodes for the following custom
properties:
* SPDX (https://spdx.dev/) license information
* ARIA (https://www.w3.org/WAI/standards-guidelines/aria/)
attributes (aria-*: .....)
* Open Graph (https://ogp.me) attributes (og:*: .....)
* Dublin-Core (https://www.dublincore.org/specifications/dublin-
core/application-profile-guidelines/) attributes(dc:*: .....)
* BibTex (https://bibtex.eu/fields) when known bibtex-keys exist
with values enclosed in { and },
*ARIA* (aria-description) is the most important to support, as it
promotes accessibility and allows scene transcripts. Please start
aria-description with a verb to aid transcripts.
van Kammen Expires 1 September 2024 [Page 35]
Internet-Draft XR Fragments February 2024
| Example: object 'tryceratops' with aria-description: is a huge
| dinosaurus standing on a #mountain generates transcript
| #tryceratops is a huge dinosaurus standing on a #mountain, where
| the hashtags are clickable XR Fragments (activating the visible-
| links in the XR browser).
Individual nodes can be enriched with such metadata, but most
importantly the scene node:
+================================+=========================+
| metadata key | example value |
+================================+=========================+
| aria-description, | An immersive experience |
| og:description, dc:description | about Triceratops (*) |
+--------------------------------+-------------------------+
| SPDX | CC0-1.0 |
+--------------------------------+-------------------------+
| dc:creator | John Doe |
+--------------------------------+-------------------------+
| dc:title, og:title | 'Triceratops` (*) |
+--------------------------------+-------------------------+
| og:site_name | https://xrfragment.org |
+--------------------------------+-------------------------+
| dc.publisher | NLNET |
+--------------------------------+-------------------------+
| dc.date | 2024-01-01 |
+--------------------------------+-------------------------+
| dc.identifier | XRFRAGMENT-001 |
+--------------------------------+-------------------------+
| journal (bibTeX) | {Future Of Text Vol 3}, |
+--------------------------------+-------------------------+
Table 13
| * = these are interchangable (only one needs to be defined)
There's no silver bullet when it comes to metadata, so one should
support where the metadata is/goes.
| These attributes can be scanned and presented during an href or
| src eye/mouse-over.
van Kammen Expires 1 September 2024 [Page 36]
Internet-Draft XR Fragments February 2024
22. Security Considerations
The only dynamic parts are W3C Media Fragments The only dynamic parts are W3C Media Fragments
(https://www.w3.org/TR/media-frags/) and URI Templates (RFC6570) (https://www.w3.org/TR/media-frags/) and URI Templates (RFC6570)
@ -1884,7 +2028,7 @@ Internet-Draft XR Fragments February 2024
In fact, it is much safer than relying on a scripting language In fact, it is much safer than relying on a scripting language
(javascript) which can change URN too. (javascript) which can change URN too.
22. FAQ 23. 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
HATEOS HATEOS
@ -1898,14 +2042,6 @@ Internet-Draft XR Fragments February 2024
scope as it unhyperifies hypermedia, and this is up to XR hypermedia scope as it unhyperifies hypermedia, and this is up to XR hypermedia
browser-extensions. browser-extensions.
Historically scripting/Javascript seems to been able to turn webpages Historically scripting/Javascript seems to been able to turn webpages
van Kammen Expires 29 August 2024 [Page 34]
Internet-Draft XR Fragments February 2024
from hypermedia documents into its opposite (hyperscripted from hypermedia documents into its opposite (hyperscripted
nonhypermedia documents). nonhypermedia documents).
In order to prevent this backward-movement (hypermedia tends to In order to prevent this backward-movement (hypermedia tends to
@ -1925,16 +2061,24 @@ Internet-Draft XR Fragments February 2024
place, to 'extend' experiences, in contrast to code/javascript inside place, to 'extend' experiences, in contrast to code/javascript inside
hypermedia documents (this turned out as a hypermedia antipattern). hypermedia documents (this turned out as a hypermedia antipattern).
23. authors 24. authors
* Leon van Kammen (@lvk@mastodon.online) * Leon van Kammen (@lvk@mastodon.online)
* Jens Finkh&#228;user (@jens@social.finkhaeuser.de) * Jens Finkhäuser (@jens@social.finkhaeuser.de)
24. IANA Considerations
van Kammen Expires 1 September 2024 [Page 37]
Internet-Draft XR Fragments February 2024
25. IANA Considerations
This document has no IANA actions. This document has no IANA actions.
25. Acknowledgments 26. Acknowledgments
* NLNET (https://nlnet.nl) * NLNET (https://nlnet.nl)
* Future of Text (https://futureoftext.org) * Future of Text (https://futureoftext.org)
@ -1942,27 +2086,14 @@ Internet-Draft XR Fragments February 2024
* Michiel Leenaars * Michiel Leenaars
* Gerben van der Broeke * Gerben van der Broeke
* Mauve * Mauve
* Jens Finkh&#228;user * Jens Finkhäuser
* Marc Belmont * Marc Belmont
* Tim Gerritsen * Tim Gerritsen
* Frode Hegland * Frode Hegland
* Brandel Zackernuk * Brandel Zackernuk
* Mark Anderson * Mark Anderson
27. Appendix: Definitions
van Kammen Expires 29 August 2024 [Page 35]
Internet-Draft XR Fragments February 2024
26. Appendix: Definitions
+=================+=============================================+ +=================+=============================================+
| definition | explanation | | definition | explanation |
@ -1991,6 +2122,14 @@ Internet-Draft XR Fragments February 2024
| | Object(nodes), relevant to machines and a | | | Object(nodes), relevant to machines and a |
| | human minority (academics/developers) | | | human minority (academics/developers) |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
van Kammen Expires 1 September 2024 [Page 38]
Internet-Draft XR Fragments February 2024
| XR fragment | URI Fragment with spatial hints like | | XR fragment | URI Fragment with spatial hints like |
| | #pos=0,0,0&t=1,100 e.g. | | | #pos=0,0,0&t=1,100 e.g. |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
@ -2010,14 +2149,6 @@ Internet-Draft XR Fragments February 2024
| placeholder | a 3D object which with src-metadata (which | | placeholder | a 3D object which with src-metadata (which |
| object | will be replaced by the src-data.) | | object | will be replaced by the src-data.) |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
van Kammen Expires 29 August 2024 [Page 36]
Internet-Draft XR Fragments February 2024
| src | (HTML-piggybacked) metadata of a 3D object | | src | (HTML-piggybacked) metadata of a 3D object |
| | which instances content | | | which instances content |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
@ -2047,7 +2178,15 @@ Internet-Draft XR Fragments February 2024
| extrospective | outward sensemaking ("I'm fairly sure John | | extrospective | outward sensemaking ("I'm fairly sure John |
| | is a person who lives in oklahoma") | | | is a person who lives in oklahoma") |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
| &#9723; | ascii representation of an 3D object/mesh |
van Kammen Expires 1 September 2024 [Page 39]
Internet-Draft XR Fragments February 2024
| ◻ | ascii representation of an 3D object/mesh |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
| (un)obtrusive | obtrusive: wrapping human text/thought in | | (un)obtrusive | obtrusive: wrapping human text/thought in |
| | XML/HTML/JSON obfuscates human text into a | | | XML/HTML/JSON obfuscates human text into a |
@ -2067,14 +2206,7 @@ Internet-Draft XR Fragments February 2024
| | XML | | | XML |
+-----------------+---------------------------------------------+ +-----------------+---------------------------------------------+
Table 14
van Kammen Expires 29 August 2024 [Page 37]
Internet-Draft XR Fragments February 2024
Table 13
@ -2105,24 +2237,4 @@ Internet-Draft XR Fragments February 2024
van Kammen Expires 1 September 2024 [Page 40]
van Kammen Expires 29 August 2024 [Page 38]

View file

@ -38,6 +38,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
<li>Interlinking text &amp; spatial objects by collapsing space into a Word Graph (XRWG) to show <eref target="#visible-links">visible links</eref></li> <li>Interlinking text &amp; spatial objects by collapsing space into a Word Graph (XRWG) to show <eref target="#visible-links">visible links</eref></li>
<li>unlocking spatial potential of the (originally 2D) hashtag (which jumps to a chapter) for navigating XR documents</li> <li>unlocking spatial potential of the (originally 2D) hashtag (which jumps to a chapter) for navigating XR documents</li>
<li>refraining from introducing scripting-engines for mundane tasks (and preventing its inevitable security-headaches)</li> <li>refraining from introducing scripting-engines for mundane tasks (and preventing its inevitable security-headaches)</li>
<li>the gap between text an 3d objects: object-names directly map to hashtags (=fragments), which allows 3D to text transcription.</li>
</ol> </ol>
<blockquote><t>NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible</t> <blockquote><t>NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible</t>
</blockquote></section> </blockquote></section>
@ -49,18 +50,18 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
Instead of forcing authors to combine 3D/2D objects programmatically (publishing thru a game-editor e.g.), XR Fragments <strong>integrates all</strong> which allows a universal viewing experience.<br /> Instead of forcing authors to combine 3D/2D objects programmatically (publishing thru a game-editor e.g.), XR Fragments <strong>integrates all</strong> which allows a universal viewing experience.<br />
</t> </t>
<artwork> +───────────────────────────────────────────────────────────────────────────────────────────────+ <artwork><![CDATA[ +───────────────────────────────────────────────────────────────────────────────────────────────+
│ │ │ │
│ U R N │ │ U R N │
│ U R L | │ │ U R L | │
│ | |-----------------+--------| │ │ | |-----------------+--------| │
│ +--------------------------------------------------| │ │ +--------------------------------------------------| │
│ | │ │ | │
│ + https://foo.com/some/foo/scene.glb#someview &lt;-- http URI (=URL and has URN) │ │ + https://foo.com/some/foo/scene.glb#someview <-- http URI (=URL and has URN)
│ | │ │ | │
│ + ipfs://cfe0987ec9r9098ecr/cats.fbx#someview &lt;-- an IPFS URI (=URL and has URN) │ │ + ipfs://cfe0987ec9r9098ecr/cats.fbx#someview <-- an IPFS URI (=URL and has URN)
│ │ │ │
│ ec09f7e9cf8e7f09c8e7f98e79c09ef89e000efece8f7ecfe9fe &lt;-- an interpeer URI │ │ ec09f7e9cf8e7f09c8e7f98e79c09ef89e000efece8f7ecfe9fe <-- an interpeer URI
│ │ │ │
│ │ │ │
│ |------------------------+-------------------------| │ │ |------------------------+-------------------------| │
@ -69,19 +70,20 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
│ │ │ │
+───────────────────────────────────────────────────────────────────────────────────────────────+ +───────────────────────────────────────────────────────────────────────────────────────────────+
]]>
</artwork> </artwork>
<t>Fact: our typical browser URL's are just <strong>a possible implementation</strong> of URI's (for untapped humancentric potential of URI's <eref target="https://interpeer.io">see interpeer.io</eref>)</t> <t>Fact: our typical browser URL's are just <strong>a possible implementation</strong> of URI's (for untapped humancentric potential of URI's <eref target="https://interpeer.io">see interpeer.io</eref>)</t>
<blockquote><t>XR Fragments does not look at XR (or the web) thru the lens of HTML or URLs.<br /> <blockquote><t>XR Fragments does not look at XR (or the web) thru the lens of HTML or URLs.<br />
But approaches things from a higherlevel feedbackloop/hypermedia browser-perspective.</t> But approaches things from a higherlevel feedbackloop/hypermedia browser-perspective.</t>
</blockquote><t>Below you can see how this translates back into good-old URLs:</t> </blockquote><t>Below you can see how this translates back into good-old URLs:</t>
<artwork> +───────────────────────────────────────────────────────────────────────────────────────────────+ <artwork><![CDATA[ +───────────────────────────────────────────────────────────────────────────────────────────────+
│ │ │ │
│ the soul of any URL: ://macro /meso ?micro #nano │ │ the soul of any URL: ://macro /meso ?micro #nano │
│ │ │ │
│ 2D URL: ://library.com /document ?search #chapter │ │ 2D URL: ://library.com /document ?search #chapter │
│ xrf:// │ │ xrf:// │
│ 4D URL: ://park.com /4Dscene.fbx ─&gt; ?other.glb ─&gt; #view ───&gt; hashbus │ │ 4D URL: ://park.com /4Dscene.fbx ─> ?other.glb ─> #view ───> hashbus │
│ │ #filter │ │ │ │ #filter │ │
│ │ #tag │ │ │ │ #tag │ │
│ │ (hypermediatic) #material │ │ │ │ (hypermediatic) #material │ │
@ -89,16 +91,18 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec
│ │ ( loop ) #texture │ │ │ │ ( loop ) #texture │ │
│ │ #variable │ │ │ │ #variable │ │
│ │ │ │ │ │ │ │
│ XRWG &lt;─────────────────────&lt;─────────────+ │ │ XRWG <─────────────────────<─────────────+ │
│ │ │ │ │ │ │ │
│ └─ objects ──────────────&gt;─────────────+ │ │ └─ objects ──────────────>─────────────+ │
│ │ │ │
│ │ │ │
+───────────────────────────────────────────────────────────────────────────────────────────────+ +───────────────────────────────────────────────────────────────────────────────────────────────+
]]>
</artwork> </artwork>
<blockquote><t>?-linked and #-linked navigation are JUST one possible way to implement XR Fragments: the essential goal is to allow a Hypermediatic FeedbackLoop (HFL) between external and internal 4D navigation.</t> <blockquote><t>?-linked and #-linked navigation are JUST one possible way to implement XR Fragments: the essential goal is to allow a Hypermediatic FeedbackLoop (HFL) between external and internal 4D navigation.</t>
</blockquote></section> </blockquote><t>Traditional webbrowsers can become 4D document-ready by:</t>
</section>
<section anchor="hypermediatic-feedbackloop-for-xr-browsers"><name>Hypermediatic FeedbackLoop for XR browsers</name> <section anchor="hypermediatic-feedbackloop-for-xr-browsers"><name>Hypermediatic FeedbackLoop for XR browsers</name>
<t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<tt>xrf://#....</tt>) or <strong>navigate</strong> (<tt>xrf://#pos=...</tt>)<br /> <t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<tt>xrf://#....</tt>) or <strong>navigate</strong> (<tt>xrf://#pos=...</tt>)<br />
@ -192,9 +196,10 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec
<section anchor="xr-fragment-url-grammar"><name>XR Fragment URL Grammar</name> <section anchor="xr-fragment-url-grammar"><name>XR Fragment URL Grammar</name>
<t>For typical HTTP-like browsers/applications:</t> <t>For typical HTTP-like browsers/applications:</t>
<artwork>reserved = gen-delims / sub-delims <artwork><![CDATA[reserved = gen-delims / sub-delims
gen-delims = &quot;#&quot; / &quot;&amp;&quot; gen-delims = "#" / "&"
sub-delims = &quot;,&quot; / &quot;=&quot; sub-delims = "," / "="
]]>
</artwork> </artwork>
<blockquote><t>Example: <tt>://foo.com/my3d.gltf#pos=1,0,0&amp;prio=-5&amp;t=0,100</tt></t> <blockquote><t>Example: <tt>://foo.com/my3d.gltf#pos=1,0,0&amp;prio=-5&amp;t=0,100</tt></t>
</blockquote><table> </blockquote><table>
@ -502,11 +507,11 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
<li><tt>https://shaders.org/plasma.glsl#t=0&amp;u:col2=0,1,0</tt> (red-green shader plasma starts playing from time-offset 0)</li> <li><tt>https://shaders.org/plasma.glsl#t=0&amp;u:col2=0,1,0</tt> (red-green shader plasma starts playing from time-offset 0)</li>
</ul> </ul>
<artwork> +──────────────────────────────────────────────────────────+ <artwork><![CDATA[ +──────────────────────────────────────────────────────────+
│ │ │ │
│ index.gltf#playall │ │ index.gltf#playall │
│ │ │ │ │ │
│ ├ # : #t=0&amp;shared=play │ apply default XR Fragment on load (`t` plays global 3D animation timeline) │ ├ # : #t=0&shared=play │ apply default XR Fragment on load (`t` plays global 3D animation timeline)
│ ├ play : #t=l:0,2 │ variable for [URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570) │ ├ play : #t=l:0,2 │ variable for [URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570)
│ │ │ │ │ │
│ ├── ◻ plane (with material) │ │ ├── ◻ plane (with material) │
@ -516,18 +521,19 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
│ │ └ src: foo.jpg#uv=0,0,0,+0.1 │ infinite texturescroll `v` of uv·coordinates with 0.1/fps │ │ └ src: foo.jpg#uv=0,0,0,+0.1 │ infinite texturescroll `v` of uv·coordinates with 0.1/fps
│ │ │ │ │ │
│ ├── ◻ media │ │ ├── ◻ media │
│ │ └ src: cat.mp4#t=l:2,10&amp;uv=0.5,0.5 │ loop cat.mp4 (or mp3/wav/jpg) between 2 and 10 seconds (uv's shifted with 0.5,0.5) │ │ └ src: cat.mp4#t=l:2,10&uv=0.5,0.5 │ loop cat.mp4 (or mp3/wav/jpg) between 2 and 10 seconds (uv's shifted with 0.5,0.5)
│ │ │ │ │ │
│ └── ◻ wall │ │ └── ◻ wall │
│ ├ href: #color=blue │ updates uniform values (IFS shader e.g.) │ ├ href: #color=blue │ updates uniform values (IFS shader e.g.)
│ ├ blue: t=0&amp;u:col=0,0,1 │ variable for [Level1 URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570) │ ├ blue: t=0&u:col=0,0,1 │ variable for [Level1 URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570)
│ └ src: ://a.com/art.glsl#{color}&amp;{shared} │ .fs/.vs/.glsl/.wgsl etc shader [Level1 URI Template (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570) │ └ src: ://a.com/art.glsl#{color}&{shared} │ .fs/.vs/.glsl/.wgsl etc shader [Level1 URI Template (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570)
│ │ │ │
│ │ │ │
+──────────────────────────────────────────────────────────+ +──────────────────────────────────────────────────────────+
&gt; NOTE: URI Template variables are immutable and respect scope: in other words, the end-user cannot modify `blue` by entering an URL like `#blue=.....` in the browser URL, and `blue` is not accessible by the plane/media-object (however `{play}` would work). > NOTE: URI Template variables are immutable and respect scope: in other words, the end-user cannot modify `blue` by entering an URL like `#blue=.....` in the browser URL, and `blue` is not accessible by the plane/media-object (however `{play}` would work).
]]>
</artwork> </artwork>
</section> </section>
</section> </section>
@ -535,7 +541,7 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
<section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name> <section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name>
<t>XR Fragments assume the following objectname-to-URIFragment mapping:</t> <t>XR Fragments assume the following objectname-to-URIFragment mapping:</t>
<artwork> <artwork><![CDATA[
my.io/scene.fbx my.io/scene.fbx
+─────────────────────────────+ +─────────────────────────────+
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor) │ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
@ -551,6 +557,7 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
│ +─────────────────────────+ │ │ +─────────────────────────+ │
+─────────────────────────────+ +─────────────────────────────+
]]>
</artwork> </artwork>
<blockquote><t>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</t> <blockquote><t>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</t>
</blockquote><t>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br /> </blockquote><t>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br />
@ -601,18 +608,19 @@ For example, to render a portal with a preview-version of the scene, create an 3
</ol> </ol>
<t>Here's an ascii representation of a 3D scene-graph which contains 3D objects <tt></tt> and their metadata:</t> <t>Here's an ascii representation of a 3D scene-graph which contains 3D objects <tt></tt> and their metadata:</t>
<artwork> +────────────────────────────────────────────────────────+ <artwork><![CDATA[ +────────────────────────────────────────────────────────+
│ │ │ │
│ index.gltf │ │ index.gltf │
│ │ │ │ │ │
│ ├── ◻ buttonA │ │ ├── ◻ buttonA │
│ │ └ href: #pos=1,0,1&amp;t=100,200 │ │ │ └ href: #pos=1,0,1&t=100,200 │
│ │ │ │ │ │
│ └── ◻ buttonB │ │ └── ◻ buttonB │
│ └ href: other.fbx │ &lt;── file─agnostic (can be .gltf .obj etc) │ └ href: other.fbx │ <── file─agnostic (can be .gltf .obj etc)
│ │ │ │
+────────────────────────────────────────────────────────+ +────────────────────────────────────────────────────────+
]]>
</artwork> </artwork>
<t>An XR Fragment-compatible browser viewing this scene, allows the end-user to interact with the <tt>buttonA</tt> and <tt>buttonB</tt>.<br /> <t>An XR Fragment-compatible browser viewing this scene, allows the end-user to interact with the <tt>buttonA</tt> and <tt>buttonB</tt>.<br />
@ -660,7 +668,7 @@ It instances content (in objects) in the current scene/asset.</t>
</tbody> </tbody>
</table><t>Here's an ascii representation of a 3D scene-graph with 3D objects <tt></tt> which embeds remote &amp; local 3D objects <tt></tt> with/out using filters:</t> </table><t>Here's an ascii representation of a 3D scene-graph with 3D objects <tt></tt> which embeds remote &amp; local 3D objects <tt></tt> with/out using filters:</t>
<artwork> +────────────────────────────────────────────────────────+ +─────────────────────────+ <artwork><![CDATA[ +────────────────────────────────────────────────────────+ +─────────────────────────+
│ │ │ │ │ │ │ │
│ index.gltf │ │ ocean.com/aquarium.fbx │ │ index.gltf │ │ ocean.com/aquarium.fbx │
│ │ │ │ ├ room │ │ │ │ │ ├ room │
@ -677,6 +685,7 @@ It instances content (in objects) in the current scene/asset.</t>
│ └ src: #canvas │ │ └ src: #canvas │
│ │ │ │
+────────────────────────────────────────────────────────+ +────────────────────────────────────────────────────────+
]]>
</artwork> </artwork>
<t>An XR Fragment-compatible browser viewing this scene, lazy-loads and projects <tt>painting.png</tt> onto the (plane) object called <tt>canvas</tt> (which is copy-instanced in the bed and livingroom).<br /> <t>An XR Fragment-compatible browser viewing this scene, lazy-loads and projects <tt>painting.png</tt> onto the (plane) object called <tt>canvas</tt> (which is copy-instanced in the bed and livingroom).<br />
@ -997,7 +1006,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
</ol> </ol>
<t>Example:</t> <t>Example:</t>
<artwork> http://y.io/z.fbx | Derived XRWG (expressed as BibTex) <artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
----------------------------------------------------------------------------+-------------------------------------- ----------------------------------------------------------------------------+--------------------------------------
| @house{castle, | @house{castle,
+-[src: data:.....]----------------------+ +-[3D mesh]-+ | url = {https://y.io/z.fbx#castle} +-[src: data:.....]----------------------+ +-[3D mesh]-+ | url = {https://y.io/z.fbx#castle}
@ -1015,11 +1024,12 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
| /|\ | | | /|\ | |
| / \ | | | / \ | |
+--------+ | +--------+ |
]]>
</artwork> </artwork>
<blockquote><t>the <tt>#john@baroque</tt>-bib associates both text <tt>John</tt> and objectname <tt>john</tt>, with tag <tt>baroque</tt></t> <blockquote><t>the <tt>#john@baroque</tt>-bib associates both text <tt>John</tt> and objectname <tt>john</tt>, with tag <tt>baroque</tt></t>
</blockquote><t>Another example:</t> </blockquote><t>Another example:</t>
<artwork> http://y.io/z.fbx | Derived XRWG (expressed as BibTex) <artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
----------------------------------------------------------------------------+-------------------------------------- ----------------------------------------------------------------------------+--------------------------------------
| |
+-[src: data:.....]----------------------+ +-[3D mesh]-+ | @house{castle, +-[src: data:.....]----------------------+ +-[3D mesh]-+ | @house{castle,
@ -1037,6 +1047,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
| #baroque@todo@house | | /|\ | | | #baroque@todo@house | | /|\ | |
| ... | | / \ | | | ... | | / \ | |
+----------------------------------------+ +--------+ | +----------------------------------------+ +--------+ |
]]>
</artwork> </artwork>
<blockquote><t>both <tt>#john@baroque</tt>-bib and BibTex <tt>@baroque{john}</tt> result in the same XRWG, however on top of that 2 tages (<tt>house</tt> and <tt>todo</tt>) are now associated with text/objectname/tag 'baroque'.</t> <blockquote><t>both <tt>#john@baroque</tt>-bib and BibTex <tt>@baroque{john}</tt> result in the same XRWG, however on top of that 2 tages (<tt>house</tt> and <tt>todo</tt>) are now associated with text/objectname/tag 'baroque'.</t>
</blockquote><t>As seen above, the XRWG can expand <eref target="https://github.com/coderofsalvation/hashtagbibs">bibs</eref> (and the whole scene) to BibTeX.<br /> </blockquote><t>As seen above, the XRWG can expand <eref target="https://github.com/coderofsalvation/hashtagbibs">bibs</eref> (and the whole scene) to BibTeX.<br />
@ -1090,21 +1101,22 @@ Some pointers for good UX (but not necessary to be XR Fragment compatible):</t>
<blockquote><t>The simplicity of appending metadata (and leveling the metadata-playfield between humans and machines) is also demonstrated by <eref target="https://visual-meta.info">visual-meta</eref> in greater detail.</t> <blockquote><t>The simplicity of appending metadata (and leveling the metadata-playfield between humans and machines) is also demonstrated by <eref target="https://visual-meta.info">visual-meta</eref> in greater detail.</t>
</blockquote><t>Fictional chat:</t> </blockquote><t>Fictional chat:</t>
<artwork>&lt;John&gt; Hey what about this: https://my.com/station.gltf#pos=0,0,1&amp;rot=90,2,0&amp;t=500,1000 <artwork><![CDATA[<John> Hey what about this: https://my.com/station.gltf#pos=0,0,1&rot=90,2,0&t=500,1000
&lt;Sarah&gt; I'm checking it right now <Sarah> I'm checking it right now
&lt;Sarah&gt; I don't see everything..where's our text from yesterday? <Sarah> I don't see everything..where's our text from yesterday?
&lt;John&gt; Ah wait, that's tagged with tag 'draft' (and hidden)..hold on, try this: <John> Ah wait, that's tagged with tag 'draft' (and hidden)..hold on, try this:
&lt;John&gt; https://my.com/station.gltf#.draft&amp;pos=0,0,1&amp;rot=90,2,0&amp;t=500,1000 <John> https://my.com/station.gltf#.draft&pos=0,0,1&rot=90,2,0&t=500,1000
&lt;Sarah&gt; how about we link the draft to the upcoming YELLO-event? <Sarah> how about we link the draft to the upcoming YELLO-event?
&lt;John&gt; ok I'm adding #draft@YELLO <John> ok I'm adding #draft@YELLO
&lt;Sarah&gt; Yesterday I also came up with other usefull assocations between other texts in the scene: <Sarah> Yesterday I also came up with other usefull assocations between other texts in the scene:
#event#YELLO #event#YELLO
#2025@YELLO #2025@YELLO
&lt;John&gt; thanks, added. <John> thanks, added.
&lt;Sarah&gt; Btw. I stumbled upon this spatial book which references station.gltf in some chapters: <Sarah> Btw. I stumbled upon this spatial book which references station.gltf in some chapters:
&lt;Sarah&gt; https://thecommunity.org/forum/foo/mytrainstory.txt <Sarah> https://thecommunity.org/forum/foo/mytrainstory.txt
&lt;John&gt; interesting, I'm importing mytrainstory.txt into station.gltf <John> interesting, I'm importing mytrainstory.txt into station.gltf
&lt;John&gt; ah yes, chapter three points to trainterminal_2A in the scene, cool <John> ah yes, chapter three points to trainterminal_2A in the scene, cool
]]>
</artwork> </artwork>
<section anchor="default-data-uri-mimetype"><name>Default Data URI mimetype</name> <section anchor="default-data-uri-mimetype"><name>Default Data URI mimetype</name>
@ -1140,7 +1152,7 @@ to connect text further with its environment ( setup links between textual/spati
<section anchor="url-and-data-uri"><name>URL and Data URI</name> <section anchor="url-and-data-uri"><name>URL and Data URI</name>
<artwork> +--------------------------------------------------------------+ +------------------------+ <artwork><![CDATA[ +--------------------------------------------------------------+ +------------------------+
| | | author.com/article.txt | | | | author.com/article.txt |
| index.gltf | +------------------------+ | index.gltf | +------------------------+
| │ | | | | │ | | |
@ -1152,6 +1164,7 @@ to connect text further with its environment ( setup links between textual/spati
| | +------------------------+ | | +------------------------+
| | | |
+--------------------------------------------------------------+ +--------------------------------------------------------------+
]]>
</artwork> </artwork>
<t>The enduser will only see <tt>welcome human</tt> and <tt>Hello friends</tt> rendered verbatim (see mimetype). <t>The enduser will only see <tt>welcome human</tt> and <tt>Hello friends</tt> rendered verbatim (see mimetype).
The beauty is that text in Data URI automatically promotes rich copy-paste (retaining metadata). The beauty is that text in Data URI automatically promotes rich copy-paste (retaining metadata).
@ -1163,14 +1176,14 @@ The XR Fragment-compatible browser can let the enduser access visual-meta(data)-
<section anchor="xr-text-example-parser"><name>XR Text example parser</name> <section anchor="xr-text-example-parser"><name>XR Text example parser</name>
<t>To prime the XRWG with text from plain text <tt>src</tt>-values, here's an example XR Text (de)multiplexer in javascript (which supports inline bibs &amp; bibtex):</t> <t>To prime the XRWG with text from plain text <tt>src</tt>-values, here's an example XR Text (de)multiplexer in javascript (which supports inline bibs &amp; bibtex):</t>
<artwork>xrtext = { <artwork><![CDATA[xrtext = {
expandBibs: (text) =&gt; { expandBibs: (text) => {
let bibs = { regex: /(#[a-zA-Z0-9_+@\-]+(#)?)/g, tags: {}} let bibs = { regex: /(#[a-zA-Z0-9_+@\-]+(#)?)/g, tags: {}}
text.replace( bibs.regex , (m,k,v) =&gt; { text.replace( bibs.regex , (m,k,v) => {
tok = m.substr(1).split(&quot;@&quot;) tok = m.substr(1).split("@")
match = tok.shift() match = tok.shift()
if( tok.length ) tok.map( (t) =&gt; bibs.tags[t] = `@${t}{${match},\n}` ) if( tok.length ) tok.map( (t) => bibs.tags[t] = `@${t}{${match},\n}` )
else if( match.substr(-1) == '#' ) else if( match.substr(-1) == '#' )
bibs.tags[match] = `@{${match.replace(/#/,'')}}` bibs.tags[match] = `@{${match.replace(/#/,'')}}`
else bibs.tags[match] = `@${match}{${match},\n}` else bibs.tags[match] = `@${match}{${match},\n}`
@ -1178,16 +1191,16 @@ The XR Fragment-compatible browser can let the enduser access visual-meta(data)-
return text.replace( bibs.regex, '') + Object.values(bibs.tags).join('\n') return text.replace( bibs.regex, '') + Object.values(bibs.tags).join('\n')
}, },
decode: (str) =&gt; { decode: (str) => {
// bibtex: ↓@ ↓&lt;tag|tag{phrase,|{ruler}&gt; ↓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=''
let lines = xrtext.expandBibs(str).replace(/\r?\n/g,'\n').split(/\n/) let lines = xrtext.expandBibs(str).replace(/\r?\n/g,'\n').split(/\n/)
for( let i = 0; i &lt; lines.length &amp;&amp; !String(lines[i]).match( /^@/ ); i++ ) for( let i = 0; i < lines.length && !String(lines[i]).match( /^@/ ); i++ )
text += lines[i]+'\n' text += lines[i]+'\n'
bibtex = lines.join('\n').substr( text.length ) bibtex = lines.join('\n').substr( text.length )
bibtex.split( pat[0] ).map( (t) =&gt; { bibtex.split( pat[0] ).map( (t) => {
try{ try{
let v = {} let v = {}
if( !(t = t.trim()) ) return if( !(t = t.trim()) ) return
@ -1196,9 +1209,9 @@ The XR Fragment-compatible browser can let the enduser access visual-meta(data)-
if( tag.match( /}$/ ) ) return tags.push({k: tag.replace(/}$/,''), v: {}}) if( tag.match( /}$/ ) ) return tags.push({k: tag.replace(/}$/,''), v: {}})
t = t.substr( tag.length ) t = t.substr( tag.length )
t.split( pat[2] ) t.split( pat[2] )
.map( kv =&gt; { .map( kv => {
if( !(kv = kv.trim()) || kv == &quot;}&quot; ) return if( !(kv = kv.trim()) || kv == "}" ) return
v[ kv.match(/\s?(\S+)\s?=/)[1] ] = kv.substr( kv.indexOf(&quot;{&quot;)+1 ) v[ kv.match(/\s?(\S+)\s?=/)[1] ] = kv.substr( kv.indexOf("{")+1 )
}) })
tags.push( { k:tag, v } ) tags.push( { k:tag, v } )
}catch(e){ console.error(e) } }catch(e){ console.error(e) }
@ -1206,8 +1219,8 @@ The XR Fragment-compatible browser can let the enduser access visual-meta(data)-
return {text, tags} return {text, tags}
}, },
encode: (text,tags) =&gt; { encode: (text,tags) => {
let str = text+&quot;\n&quot; let str = text+"\n"
for( let i in tags ){ for( let i in tags ){
let item = tags[i] let item = tags[i]
if( item.ruler ){ if( item.ruler ){
@ -1221,11 +1234,12 @@ The XR Fragment-compatible browser can let the enduser access visual-meta(data)-
return str return str
} }
} }
]]>
</artwork> </artwork>
<t>The above functions (de)multiplexe text/metadata, expands bibs, (de)serialize bibtex and vice versa</t> <t>The above functions (de)multiplexe text/metadata, expands bibs, (de)serialize bibtex and vice versa</t>
<blockquote><t>above can be used as a startingpoint for LLVM's to translate/steelman to a more formal form/language.</t> <blockquote><t>above can be used as a startingpoint for LLVM's to translate/steelman to a more formal form/language.</t>
</blockquote> </blockquote>
<artwork>str = ` <artwork><![CDATA[str = `
hello world hello world
here are some hashtagbibs followed by bibtex: here are some hashtagbibs followed by bibtex:
@ -1238,14 +1252,15 @@ here are some hashtagbibs followed by bibtex:
asdf = {23423} asdf = {23423}
}` }`
var {tags,text} = xrtext.decode(str) // demultiplex text &amp; bibtex var {tags,text} = xrtext.decode(str) // demultiplex text & bibtex
tags.find( (t) =&gt; t.k == 'flap{' ).v.asdf = 1 // edit tag tags.find( (t) => t.k == 'flap{' ).v.asdf = 1 // edit tag
tags.push({ k:'bar{', v:{abc:123} }) // add tag tags.push({ k:'bar{', v:{abc:123} }) // add tag
console.log( xrtext.encode(text,tags) ) // multiplex text &amp; bibtex back together console.log( xrtext.encode(text,tags) ) // multiplex text & bibtex back together
]]>
</artwork> </artwork>
<t>This expands to the following (hidden by default) BibTex appendix:</t> <t>This expands to the following (hidden by default) BibTex appendix:</t>
<artwork>hello world <artwork><![CDATA[hello world
here are some hashtagbibs followed by bibtex: here are some hashtagbibs followed by bibtex:
@{some-section} @{some-section}
@ -1260,6 +1275,7 @@ here are some hashtagbibs followed by bibtex:
@bar{ @bar{
abc = {123} abc = {123}
} }
]]>
</artwork> </artwork>
<blockquote><t>when an XR browser updates the human text, a quick scan for nonmatching tags (<tt>@book{nonmatchingbook</tt> e.g.) should be performed and prompt the enduser for deleting them.</t> <blockquote><t>when an XR browser updates the human text, a quick scan for nonmatching tags (<tt>@book{nonmatchingbook</tt> e.g.) should be performed and prompt the enduser for deleting them.</t>
</blockquote></section> </blockquote></section>
@ -1276,7 +1292,7 @@ here are some hashtagbibs followed by bibtex:
<blockquote><t>due to the popularity, maturity and extensiveness of HTTP codes for client/server communication, non-HTTP protocols easily map to HTTP codes (ipfs ERR_NOT_FOUND maps to 404 e.g.)</t> <blockquote><t>due to the popularity, maturity and extensiveness of HTTP codes for client/server communication, non-HTTP protocols easily map to HTTP codes (ipfs ERR_NOT_FOUND maps to 404 e.g.)</t>
</blockquote><t>For example:</t> </blockquote><t>For example:</t>
<artwork> +────────────────────────────────────────────────────────+ <artwork><![CDATA[ +────────────────────────────────────────────────────────+
│ │ │ │
│ index.gltf │ │ index.gltf │
│ │ │ │ │ │
@ -1288,13 +1304,14 @@ here are some hashtagbibs followed by bibtex:
│ │ └ href@400: #clienterrortext │ │ │ └ href@400: #clienterrortext │
│ │ └ ◻ offlinetext │ │ │ └ ◻ offlinetext │
│ │ │ │ │ │
│ └── ◻ embeddedObject &lt;--------- the meshdata inside embeddedObject will (not) │ └── ◻ embeddedObject <--------- the meshdata inside embeddedObject will (not)
│ └ src: https://foo.io/bar.gltf │ be flushed when the request (does not) succeed. │ └ src: https://foo.io/bar.gltf │ be flushed when the request (does not) succeed.
│ └ src@404: http://foo.io/bar.gltf │ So worstcase the 3D data (of the time of publishing index.gltf) │ └ src@404: http://foo.io/bar.gltf │ So worstcase the 3D data (of the time of publishing index.gltf)
│ └ src@400: https://archive.org/l2kj43.gltf │ will be displayed. │ └ src@400: https://archive.org/l2kj43.gltf │ will be displayed.
│ │ │ │
+────────────────────────────────────────────────────────+ +────────────────────────────────────────────────────────+
]]>
</artwork> </artwork>
</section> </section>
@ -1326,7 +1343,7 @@ To filter out non-related objects one could take it a step further using filters
The following demonstrates a simple video player:</t> The following demonstrates a simple video player:</t>
<artwork> <artwork><![CDATA[
+─────────────────────────────────────────────+ +─────────────────────────────────────────────+
│ │ │ │
│ foo.usdz │ │ foo.usdz │
@ -1334,21 +1351,95 @@ The following demonstrates a simple video player:</t>
│ │ │ │ │ │
│ ├── ◻ stopbutton │ │ ├── ◻ stopbutton │
│ │ ├ #: #-stopbutton │ │ │ ├ #: #-stopbutton │
│ │ └ href: #player=stop&amp;-stopbutton │ (stop and hide stop-button) │ │ └ href: #player=stop&-stopbutton │ (stop and hide stop-button)
│ │ │ │ │ │
│ └── ◻ plane │ │ └── ◻ plane │
│ ├ play: #t=l:0,10 │ │ ├ play: #t=l:0,10 │
│ ├ stop: #t=0,0 │ │ ├ stop: #t=0,0 │
│ ├ href: #player=play&amp;stopbutton │ (play and show stop-button) │ ├ href: #player=play&stopbutton │ (play and show stop-button)
│ └ src: cat.mp4#{player} │ │ └ src: cat.mp4#{player} │
│ │ │ │
│ │ │ │
+─────────────────────────────────────────────+ +─────────────────────────────────────────────+
]]>
</artwork> </artwork>
</section> </section>
<section anchor="additional-scene-metadata"><name>Additional scene metadata</name>
<t>XR Fragments does not aim to redefine the metadata-space by introducing its own cataloging-metadata fields.
Instead, it encourages browsers to scan nodes for the following custom properties:</t>
<ul spacing="compact">
<li><eref target="https://spdx.dev/">SPDX</eref> license information</li>
<li><eref target="https://www.w3.org/WAI/standards-guidelines/aria/">ARIA</eref> attributes (<tt>aria-*: .....</tt>)</li>
<li><eref target="https://ogp.me">Open Graph</eref> attributes (<tt>og:*: .....</tt>)</li>
<li><eref target="https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/">Dublin-Core</eref> attributes(<tt>dc:*: .....</tt>)</li>
<li><eref target="https://bibtex.eu/fields">BibTex</eref> when known bibtex-keys exist with values enclosed in <tt>{</tt> and <tt>},</tt></li>
</ul>
<t><strong>ARIA</strong> (<tt>aria-description</tt>) is the most important to support, as it promotes accessibility and allows scene transcripts. Please start <tt>aria-description</tt> with a verb to aid transcripts.</t>
<blockquote><t>Example: object 'tryceratops' with <tt>aria-description: is a huge dinosaurus standing on a #mountain</tt> generates transcript <tt>#tryceratops is a huge dinosaurus standing on a #mountain</tt>, where the hashtags are clickable XR Fragments (activating the visible-links in the XR browser).</t>
</blockquote><t>Individual nodes can be enriched with such metadata, but most importantly the scene node:</t>
<table>
<thead>
<tr>
<th>metadata key</th>
<th>example value</th>
</tr>
</thead>
<tbody>
<tr>
<td><tt>aria-description</tt>, <tt>og:description</tt>, <tt>dc:description</tt></td>
<td><tt>An immersive experience about Triceratops</tt> (*)</td>
</tr>
<tr>
<td><tt>SPDX</tt></td>
<td><tt>CC0-1.0</tt></td>
</tr>
<tr>
<td><tt>dc:creator</tt></td>
<td><tt>John Doe</tt></td>
</tr>
<tr>
<td><tt>dc:title</tt>, <tt>og:title</tt></td>
<td>'Triceratops` (*)</td>
</tr>
<tr>
<td><tt>og:site_name</tt></td>
<td><tt>https://xrfragment.org</tt></td>
</tr>
<tr>
<td><tt>dc.publisher</tt></td>
<td><tt>NLNET</tt></td>
</tr>
<tr>
<td><tt>dc.date</tt></td>
<td><tt>2024-01-01</tt></td>
</tr>
<tr>
<td><tt>dc.identifier</tt></td>
<td><tt>XRFRAGMENT-001</tt></td>
</tr>
<tr>
<td><tt>journal</tt> (bibTeX)</td>
<td><tt>{Future Of Text Vol 3},</tt></td>
</tr>
</tbody>
</table><blockquote><t>* = these are interchangable (only one needs to be defined)</t>
</blockquote><t>There's no silver bullet when it comes to metadata, so one should support where the metadata is/goes.</t>
<blockquote><t>These attributes can be scanned and presented during an <tt>href</tt> or <tt>src</tt> eye/mouse-over.</t>
</blockquote></section>
<section anchor="security-considerations"><name>Security Considerations</name> <section anchor="security-considerations"><name>Security Considerations</name>
<t>The only dynamic parts are <eref target="https://www.w3.org/TR/media-frags/">W3C Media Fragments</eref> and <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref>.<br /> <t>The only dynamic parts are <eref target="https://www.w3.org/TR/media-frags/">W3C Media Fragments</eref> and <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref>.<br />

File diff suppressed because one or more lines are too long