updated docs
This commit is contained in:
parent
e34d1a0f53
commit
5ea4529ffc
12 changed files with 3299 additions and 325 deletions
2
dist/xrfragment.aframe.all.js
vendored
2
dist/xrfragment.aframe.all.js
vendored
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
2
dist/xrfragment.aframe.js
vendored
2
dist/xrfragment.aframe.js
vendored
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
2680
dist/xrfragment.module.js
vendored
2680
dist/xrfragment.module.js
vendored
File diff suppressed because it is too large
Load diff
2
dist/xrfragment.three.js
vendored
2
dist/xrfragment.three.js
vendored
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
2
dist/xrfragment.three.module.js
vendored
2
dist/xrfragment.three.module.js
vendored
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
<li>Interlinking text & spatial objects by collapsing space into a Word Graph (XRWG) to show <a href="#visible-links">visible links</a></li>
|
<li>Interlinking text & 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 ‘tryceratops’ 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>‘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’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>
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
» 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)
|
||||||
» 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 ◻ 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 ◻
|
||||||
◻ which embeds remote & local 3D objects ◻ 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
|
||||||
|
|
||||||
» 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)
|
||||||
» 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)
|
||||||
» 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)
|
||||||
|
|
||||||
» 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)
|
||||||
» 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)
|
||||||
» 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).
|
||||||
|
|
||||||
» 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) » 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) » 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ä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ä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") |
|
||||||
+-----------------+---------------------------------------------+
|
+-----------------+---------------------------------------------+
|
||||||
| ◻ | 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]
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
<li>Interlinking text & spatial objects by collapsing space into a Word Graph (XRWG) to show <eref target="#visible-links">visible links</eref></li>
|
<li>Interlinking text & 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 <-- 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 <-- an IPFS URI (=URL and has URN) │
|
│ + ipfs://cfe0987ec9r9098ecr/cats.fbx#someview <-- an IPFS URI (=URL and has URN) │
|
||||||
│ │
|
│ │
|
||||||
│ ec09f7e9cf8e7f09c8e7f98e79c09ef89e000efece8f7ecfe9fe <-- 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 ─> ?other.glb ─> #view ───> 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 <─────────────────────<─────────────+ │
|
│ XRWG <─────────────────────<─────────────+ │
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
│ └─ objects ──────────────>─────────────+ │
|
│ └─ 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 = "#" / "&"
|
gen-delims = "#" / "&"
|
||||||
sub-delims = "," / "="
|
sub-delims = "," / "="
|
||||||
|
]]>
|
||||||
</artwork>
|
</artwork>
|
||||||
<blockquote><t>Example: <tt>://foo.com/my3d.gltf#pos=1,0,0&prio=-5&t=0,100</tt></t>
|
<blockquote><t>Example: <tt>://foo.com/my3d.gltf#pos=1,0,0&prio=-5&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&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&u:col2=0,1,0</tt> (red-green shader plasma starts playing from time-offset 0)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<artwork> +──────────────────────────────────────────────────────────+
|
<artwork><
|
│ ├ 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&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&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}&{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)
|
||||||
│ │
|
│ │
|
||||||
│ │
|
│ │
|
||||||
+──────────────────────────────────────────────────────────+
|
+──────────────────────────────────────────────────────────+
|
||||||
|
|
||||||
> 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&t=100,200 │
|
│ │ └ href: #pos=1,0,1&t=100,200 │
|
||||||
│ │ │
|
│ │ │
|
||||||
│ └── ◻ buttonB │
|
│ └── ◻ buttonB │
|
||||||
│ └ href: other.fbx │ <── 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 & 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 & 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><John> Hey what about this: https://my.com/station.gltf#pos=0,0,1&rot=90,2,0&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
|
||||||
<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?
|
||||||
<John> 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:
|
||||||
<John> https://my.com/station.gltf#.draft&pos=0,0,1&rot=90,2,0&t=500,1000
|
<John> https://my.com/station.gltf#.draft&pos=0,0,1&rot=90,2,0&t=500,1000
|
||||||
<Sarah> how about we link the draft to the upcoming YELLO-event?
|
<Sarah> how about we link the draft to the upcoming YELLO-event?
|
||||||
<John> ok I'm adding #draft@YELLO
|
<John> ok I'm adding #draft@YELLO
|
||||||
<Sarah> 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
|
||||||
<John> thanks, added.
|
<John> thanks, added.
|
||||||
<Sarah> 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:
|
||||||
<Sarah> https://thecommunity.org/forum/foo/mytrainstory.txt
|
<Sarah> https://thecommunity.org/forum/foo/mytrainstory.txt
|
||||||
<John> interesting, I'm importing mytrainstory.txt into station.gltf
|
<John> interesting, I'm importing mytrainstory.txt into station.gltf
|
||||||
<John> 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 & 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 & bibtex):</t>
|
||||||
|
|
||||||
<artwork>xrtext = {
|
<artwork><![CDATA[xrtext = {
|
||||||
|
|
||||||
expandBibs: (text) => {
|
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) => {
|
text.replace( bibs.regex , (m,k,v) => {
|
||||||
tok = m.substr(1).split("@")
|
tok = m.substr(1).split("@")
|
||||||
match = tok.shift()
|
match = tok.shift()
|
||||||
if( tok.length ) tok.map( (t) => 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) => {
|
decode: (str) => {
|
||||||
// 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=''
|
||||||
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 < lines.length && !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) => {
|
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 => {
|
.map( kv => {
|
||||||
if( !(kv = kv.trim()) || kv == "}" ) return
|
if( !(kv = kv.trim()) || kv == "}" ) return
|
||||||
v[ kv.match(/\s?(\S+)\s?=/)[1] ] = kv.substr( kv.indexOf("{")+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) => {
|
encode: (text,tags) => {
|
||||||
let str = text+"\n"
|
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 & bibtex
|
var {tags,text} = xrtext.decode(str) // demultiplex text & bibtex
|
||||||
tags.find( (t) => 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 & 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 <--------- 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&-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&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 />
|
||||||
|
|
||||||
|
|
|
||||||
14
index.html
14
index.html
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue