spec simplify + overhaul
This commit is contained in:
parent
7f42e7f5aa
commit
ec07443201
5 changed files with 764 additions and 224 deletions
|
|
@ -93,8 +93,88 @@ These heuristics, enable features that are both meaningful and consistent across
|
||||||
<p>Almost every idea in this document is demonstrated at <a href="https://xrfragment.org">https://xrfragment.org</a></p>
|
<p>Almost every idea in this document is demonstrated at <a href="https://xrfragment.org">https://xrfragment.org</a></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<section data-matter="main">
|
<section data-matter="main">
|
||||||
|
<h1 id="quick-reference">Quick reference</h1>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#abstract">Abstract</a></li>
|
||||||
|
<li><a href="#index">Index</a></li>
|
||||||
|
<li><a href="#introduction">Introduction</a></li>
|
||||||
|
<li><a href="#what-is-xr-fragments">What is XR Fragments</a></li>
|
||||||
|
<li><a href="#hfl-hypermediatic-feedback-loop-for-xr-browsers">HFL (Hypermediatic Feedback Loop) for XR Browsers</a></li>
|
||||||
|
<li><a href="#conventions-and-definitions">Conventions and Definitions</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#xr-fragment-url-grammar">XR Fragment URL Grammar</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#spatial-referencing-3d">Spatial Referencing 3D</a></li>
|
||||||
|
<li><a href="#level0-files">Level0: Files</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#via-href-metadata">via href metadata</a></li>
|
||||||
|
<li><a href="#via-chained-extension">via chained extension</a></li>
|
||||||
|
<li><a href="#via-subdocuments-xattr">via subdocuments/xattr</a></li>
|
||||||
|
<li><a href="#json-sidecar-file">JSON sidecar-file</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#level1-uri">Level1: URI</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#list-of-uri-fragments">List of URI Fragments</a></li>
|
||||||
|
<li><a href="#list-of-explicit-metadata">List of explicit metadata</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#level2-href-links">Level2: href links</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#interaction-behaviour">Interaction behaviour</a></li>
|
||||||
|
<li><a href="#xr-viewer-implementation">XR Viewer implementation</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#level3-media-fragments">Level3: Media Fragments</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#animation-s-timeline">Animation(s) timeline</a></li>
|
||||||
|
<li><a href="#specify-playback-loopmode">Specify playback loopmode</a></li>
|
||||||
|
<li><a href="#controlling-embedded-content">Controlling embedded content</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#level4-prefix-operators">Level4: prefix operators</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#object-teleports">Object teleports</a></li>
|
||||||
|
<li><a href="#object-multipliers">Object multipliers</a></li>
|
||||||
|
<li><a href="#de-selectors-and">De/selectors (+ and -)</a></li>
|
||||||
|
<li><a href="#sharing-object-or-file">Sharing object or file (#|)</a></li>
|
||||||
|
<li><a href="#xrf-uri-scheme">xrf:// URI scheme</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#level5-uri-templates-rfc6570">Level5: URI Templates (RFC6570)</a></li>
|
||||||
|
<li><a href="#top-level-url-processing">Top-level URL processing</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#ux">UX</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#example-navigating-content-href-portals">Example: Navigating content href portals</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#walking-surfaces">Walking surfaces</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#example-virtual-world-rings">Example: Virtual world rings</a></li>
|
||||||
|
<li><a href="#additional-scene-metadata">Additional scene metadata</a></li>
|
||||||
|
<li><a href="#accessibility-interface">Accessibility interface</a>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><a href="#two-button-navigation">Two-button navigation</a></li>
|
||||||
|
<li><a href="#overlap-with-fileformat-specific-extensions">Overlap with fileformat-specific extensions</a></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><a href="#vendor-prefixes">Vendor Prefixes</a></li>
|
||||||
|
<li><a href="#security-considerations">Security Considerations</a></li>
|
||||||
|
<li><a href="#faq">FAQ</a></li>
|
||||||
|
<li><a href="#authors">Authors</a></li>
|
||||||
|
<li><a href="#iana-considerations">IANA Considerations</a></li>
|
||||||
|
<li><a href="#acknowledgments">Acknowledgments</a></li>
|
||||||
|
<li><a href="#appendix-definitions">Appendix: Definitions</a></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
<h1 id="introduction">Introduction</h1>
|
<h1 id="introduction">Introduction</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:0"></span></p>
|
||||||
|
|
||||||
<p>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br>
|
<p>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br>
|
||||||
Historically, there’s many attempts to create the ultimate 3D fileformat.<br>
|
Historically, there’s many attempts to create the ultimate 3D fileformat.<br>
|
||||||
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br>
|
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br>
|
||||||
|
|
@ -118,6 +198,8 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
|
|
||||||
<h1 id="what-is-xr-fragments">What is XR Fragments</h1>
|
<h1 id="what-is-xr-fragments">What is XR Fragments</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:1"></span></p>
|
||||||
|
|
||||||
<p>XR Fragments utilizes URLs:</p>
|
<p>XR Fragments utilizes URLs:</p>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
|
@ -129,6 +211,8 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
|
|
||||||
<h1 id="hfl-hypermediatic-feedback-loop-for-xr-browsers">HFL (Hypermediatic Feedback Loop) for XR Browsers</h1>
|
<h1 id="hfl-hypermediatic-feedback-loop-for-xr-browsers">HFL (Hypermediatic Feedback Loop) for XR Browsers</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:2"></span> for XR Browsers)</p>
|
||||||
|
|
||||||
<p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<code>xrf://....</code>) via the <code>xrf://</code> scheme, which does not change the top-level URL-adress (of the browser).
|
<p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<code>xrf://....</code>) via the <code>xrf://</code> scheme, which does not change the top-level URL-adress (of the browser).
|
||||||
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
||||||
These are called <strong>hashbus</strong>-only events/</p>
|
These are called <strong>hashbus</strong>-only events/</p>
|
||||||
|
|
@ -226,10 +310,14 @@ These are called <strong>hashbus</strong>-only events/</p>
|
||||||
|
|
||||||
<h1 id="conventions-and-definitions">Conventions and Definitions</h1>
|
<h1 id="conventions-and-definitions">Conventions and Definitions</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:3"></span></p>
|
||||||
|
|
||||||
<p>See appendix below in case certain terms are not clear.</p>
|
<p>See appendix below in case certain terms are not clear.</p>
|
||||||
|
|
||||||
<h2 id="xr-fragment-url-grammar">XR Fragment URL Grammar</h2>
|
<h2 id="xr-fragment-url-grammar">XR Fragment URL Grammar</h2>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:4"></span></p>
|
||||||
|
|
||||||
<p>For typical HTTP-like browsers/applications:</p>
|
<p>For typical HTTP-like browsers/applications:</p>
|
||||||
|
|
||||||
<pre><code>reserved = gen-delims / sub-delims
|
<pre><code>reserved = gen-delims / sub-delims
|
||||||
|
|
@ -272,6 +360,8 @@ That way, if the link gets shared, the XR Fragments implementation at <code>http
|
||||||
|
|
||||||
<h1 id="spatial-referencing-3d">Spatial Referencing 3D</h1>
|
<h1 id="spatial-referencing-3d">Spatial Referencing 3D</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:5"></span></p>
|
||||||
|
|
||||||
<p>3D files contain an hierarchy of objects.<br>
|
<p>3D files contain an hierarchy of objects.<br>
|
||||||
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:</p>
|
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:</p>
|
||||||
|
|
||||||
|
|
@ -310,6 +400,9 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
||||||
|
|
||||||
<h1 id="level0-files">Level0: Files</h1>
|
<h1 id="level0-files">Level0: Files</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:6"></span>
|
||||||
|
<span class="index" id="idxref:7"></span></p>
|
||||||
|
|
||||||
<p>These are <strong>optional</strong> auto-loaded <a href="">side-car files</a> to enable hasslefree <a href="#XR%20Movies">XR Movies</a>.<br>
|
<p>These are <strong>optional</strong> auto-loaded <a href="">side-car files</a> to enable hasslefree <a href="#XR%20Movies">XR Movies</a>.<br>
|
||||||
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a <code>.glb</code> e.g.).</p>
|
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a <code>.glb</code> e.g.).</p>
|
||||||
|
|
||||||
|
|
@ -415,6 +508,8 @@ The sidecar will define (or <strong>override</strong> already existing) extras,
|
||||||
|
|
||||||
<h1 id="level1-uri">Level1: URI</h1>
|
<h1 id="level1-uri">Level1: URI</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:8"></span></p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p><strong>XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments</strong></p>
|
<p><strong>XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments</strong></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
@ -479,7 +574,7 @@ 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>
|
||||||
|
|
||||||
<h1 id="list-of-uri-fragments">List of URI Fragments</h1>
|
<h2 id="list-of-uri-fragments">List of URI Fragments</h2>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
|
@ -508,7 +603,7 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h1 id="list-of-explicit-metadata">List of *<em>explicit</em> metadata</h1>
|
<h2 id="list-of-explicit-metadata">List of *<em>explicit</em> metadata</h2>
|
||||||
|
|
||||||
<p>These are the possible ‘extras’ for 3D nodes and sidecar-files</p>
|
<p>These are the possible ‘extras’ for 3D nodes and sidecar-files</p>
|
||||||
|
|
||||||
|
|
@ -536,6 +631,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
|
||||||
|
|
||||||
<h1 id="level2-href-links">Level2: href links</h1>
|
<h1 id="level2-href-links">Level2: href links</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:9"></span></p>
|
||||||
|
|
||||||
<p>Explicit href metadata (‘extras’) in a 3D object (of a 3D file), hint the viewer that the user “can interact” with that object :</p>
|
<p>Explicit href metadata (‘extras’) in a 3D object (of a 3D file), hint the viewer that the user “can interact” with that object :</p>
|
||||||
|
|
||||||
<p>| fragment | type | example value |
|
<p>| fragment | type | example value |
|
||||||
|
|
@ -565,6 +662,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
|
||||||
|
|
||||||
<h1 id="level3-media-fragments">Level3: Media Fragments</h1>
|
<h1 id="level3-media-fragments">Level3: Media Fragments</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:10"></span></p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>these allow for XR Movies with a controllable timeline using <code>href</code> URI’s with Media Fragments</p>
|
<p>these allow for XR Movies with a controllable timeline using <code>href</code> URI’s with Media Fragments</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
@ -628,6 +727,8 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files <stro
|
||||||
|
|
||||||
<h1 id="level4-prefix-operators">Level4: prefix operators</h1>
|
<h1 id="level4-prefix-operators">Level4: prefix operators</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:11"></span></p>
|
||||||
|
|
||||||
<p>Prefixing objectnames with the following simple operators allow for <strong>extremely powerful</strong> XR interactions:</p>
|
<p>Prefixing objectnames with the following simple operators allow for <strong>extremely powerful</strong> XR interactions:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -787,8 +888,17 @@ Clicking the href-value below will:</p>
|
||||||
<p><strong>compliance with RFC 3986</strong>: unimplemented/unknown URI schemes (<code>xrf:...</code> e.g.) will not update the top-level URL</p>
|
<p><strong>compliance with RFC 3986</strong>: unimplemented/unknown URI schemes (<code>xrf:...</code> e.g.) will not update the top-level URL</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
|
<h1 id="level5-uri-templates-rfc6570">Level5: URI Templates (RFC6570)</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:12"></span>)</p>
|
||||||
|
|
||||||
|
<p>XR Fragments adopts Level1 URI <strong>Fragment</strong> expansion to provide safe interactivity.<br>
|
||||||
|
This is non-normative, and the draft spec is available on request.</p>
|
||||||
|
|
||||||
<h1 id="top-level-url-processing">Top-level URL processing</h1>
|
<h1 id="top-level-url-processing">Top-level URL processing</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:13"></span></p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>Example URL: <code>://foo/world.gltf#room1&t=10&cam</code></p>
|
<p>Example URL: <code>://foo/world.gltf#room1&t=10&cam</code></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
@ -813,6 +923,8 @@ Clicking the href-value below will:</p>
|
||||||
|
|
||||||
<h1 id="example-navigating-content-href-portals">Example: Navigating content href portals</h1>
|
<h1 id="example-navigating-content-href-portals">Example: Navigating content href portals</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:14"></span></p>
|
||||||
|
|
||||||
<p>navigation, portals & mutations</p>
|
<p>navigation, portals & mutations</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
@ -873,7 +985,9 @@ Clicking the href-value below will:</p>
|
||||||
<p>optionally the viewer can offer thumbstick, mouse or joystick teleport-tools for non-roomscale VR/AR setups.</p>
|
<p>optionally the viewer can offer thumbstick, mouse or joystick teleport-tools for non-roomscale VR/AR setups.</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
<h1 id="virtual-world-rings">Virtual world rings</h1>
|
<h1 id="example-virtual-world-rings">Example: Virtual world rings</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:15"></span></p>
|
||||||
|
|
||||||
<p>Consider 3D scenes linking to eachother using these <code>href</code> values, attached to 3D button-objects:</p>
|
<p>Consider 3D scenes linking to eachother using these <code>href</code> values, attached to 3D button-objects:</p>
|
||||||
|
|
||||||
|
|
@ -892,13 +1006,10 @@ Now consider adding a ‘webring index’-button to each file, with this
|
||||||
|
|
||||||
<p>This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.</p>
|
<p>This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.</p>
|
||||||
|
|
||||||
<h1 id="level5-uri-templates-rfc6570">Level5: URI Templates (RFC6570)</h1>
|
|
||||||
|
|
||||||
<p>XR Fragments adopts Level1 URI <strong>Fragment</strong> expansion to provide safe interactivity.<br>
|
|
||||||
This is non-normative, and the draft spec is available on request.</p>
|
|
||||||
|
|
||||||
<h1 id="additional-scene-metadata">Additional scene metadata</h1>
|
<h1 id="additional-scene-metadata">Additional scene metadata</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:16"></span></p>
|
||||||
|
|
||||||
<p>XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
<p>XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
||||||
Instead, it encourages browsers to scan nodes for the following custom properties:</p>
|
Instead, it encourages browsers to scan nodes for the following custom properties:</p>
|
||||||
|
|
||||||
|
|
@ -997,6 +1108,8 @@ Instead, it encourages browsers to scan nodes for the following custom propertie
|
||||||
|
|
||||||
<h1 id="accessibility-interface">Accessibility interface</h1>
|
<h1 id="accessibility-interface">Accessibility interface</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:17"></span></p>
|
||||||
|
|
||||||
<p>The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br>
|
<p>The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br>
|
||||||
Spec:<br><Br></p>
|
Spec:<br><Br></p>
|
||||||
|
|
||||||
|
|
@ -1057,7 +1170,9 @@ If a glTF implementation does not support a particular extension, the (XRF) extr
|
||||||
<p><strong>Example 2</strong> If an Extensions uses XR Fragments in URI’s (<code>href: #otherroom</code> or <code>href: xrf://-walls</code> in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.</p>
|
<p><strong>Example 2</strong> If an Extensions uses XR Fragments in URI’s (<code>href: #otherroom</code> or <code>href: xrf://-walls</code> in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
<h2 id="vendor-prefixes">Vendor Prefixes</h2>
|
<h1 id="vendor-prefixes">Vendor Prefixes</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:18"></span></p>
|
||||||
|
|
||||||
<p>Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific <a href="https://en.wikipedia.org/wiki/CSS#Vendor_prefixes">CSS-prefixes</a> (<code>-moz-opacity: 0.2</code> e.g.).
|
<p>Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific <a href="https://en.wikipedia.org/wiki/CSS#Vendor_prefixes">CSS-prefixes</a> (<code>-moz-opacity: 0.2</code> e.g.).
|
||||||
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.</p>
|
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.</p>
|
||||||
|
|
@ -1145,12 +1260,16 @@ The lowest common denominator between 3D engines is the ‘entity’-par
|
||||||
|
|
||||||
<h1 id="security-considerations">Security Considerations</h1>
|
<h1 id="security-considerations">Security Considerations</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:19"></span></p>
|
||||||
|
|
||||||
<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>
|
||||||
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br>
|
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br>
|
||||||
n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.</p>
|
n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.</p>
|
||||||
|
|
||||||
<h1 id="faq">FAQ</h1>
|
<h1 id="faq">FAQ</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:20"></span></p>
|
||||||
|
|
||||||
<p><strong>Q:</strong> Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br>
|
<p><strong>Q:</strong> Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br>
|
||||||
<strong>A:</strong> Because it’s out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru <code>src</code> values)</p>
|
<strong>A:</strong> Because it’s out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru <code>src</code> values)</p>
|
||||||
|
|
||||||
|
|
@ -1164,6 +1283,8 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
|
|
||||||
<h1 id="authors">authors</h1>
|
<h1 id="authors">authors</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:21"></span></p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Leon van Kammen (@lvk@mastodon.online)</li>
|
<li>Leon van Kammen (@lvk@mastodon.online)</li>
|
||||||
<li>Jens Finkhäuser (@jens@social.finkhaeuser.de)</li>
|
<li>Jens Finkhäuser (@jens@social.finkhaeuser.de)</li>
|
||||||
|
|
@ -1171,10 +1292,14 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
|
|
||||||
<h1 id="iana-considerations">IANA Considerations</h1>
|
<h1 id="iana-considerations">IANA Considerations</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:22"></span></p>
|
||||||
|
|
||||||
<p>This document has no IANA actions.</p>
|
<p>This document has no IANA actions.</p>
|
||||||
|
|
||||||
<h1 id="acknowledgments">Acknowledgments</h1>
|
<h1 id="acknowledgments">Acknowledgments</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:23"></span></p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://nlnet.nl">NLNET</a></li>
|
<li><a href="https://nlnet.nl">NLNET</a></li>
|
||||||
<li><a href="https://futureoftext.org">Future of Text</a></li>
|
<li><a href="https://futureoftext.org">Future of Text</a></li>
|
||||||
|
|
@ -1192,6 +1317,8 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
|
|
||||||
<h1 id="appendix-definitions">Appendix: Definitions</h1>
|
<h1 id="appendix-definitions">Appendix: Definitions</h1>
|
||||||
|
|
||||||
|
<p><span class="index" id="idxref:24"></span></p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
@ -1342,6 +1469,149 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<h1 id="index-section">Index</h1>
|
||||||
|
<div class="index">
|
||||||
|
<dl>
|
||||||
|
<dt>A</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Accessibility interface <a class="index-return" href="#idxref:17"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Acknowledgments <a class="index-return" href="#idxref:23"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Additional scene metadata <a class="index-return" href="#idxref:16"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Appendix: Definitions <a class="index-return" href="#idxref:24"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>C</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Conventions and Definitions <a class="index-return" href="#idxref:3"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>E</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Example: Navigating content href portals <a class="index-return" href="#idxref:14"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Example: Virtual world rings <a class="index-return" href="#idxref:15"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>F</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
FAQ <a class="index-return" href="#idxref:20"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>H</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
HFL (Hypermediatic Feedback Loop <a class="index-return" href="#idxref:2"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>I</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
IANA Considerations <a class="index-return" href="#idxref:22"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Introduction <a class="index-return" href="#idxref:0"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>L</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Level0: Files <a class="index-return" href="#idxref:6"><sup>[go]</sup></a> <a class="index-return" href="#idxref:7"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Level1: URI <a class="index-return" href="#idxref:8"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Level2: href links <a class="index-return" href="#idxref:9"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Level3: Media Fragments <a class="index-return" href="#idxref:10"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Level4: prefix operators <a class="index-return" href="#idxref:11"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Level5: URI Templates (RFC6570 <a class="index-return" href="#idxref:12"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>S</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Security Considerations <a class="index-return" href="#idxref:19"><sup>[go]</sup></a></li>
|
||||||
|
<li>
|
||||||
|
Spatial Referencing 3D <a class="index-return" href="#idxref:5"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>T</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Top-level URL processing <a class="index-return" href="#idxref:13"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>V</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Vendor Prefixes <a class="index-return" href="#idxref:18"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>W</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
What is XR Fragments <a class="index-return" href="#idxref:1"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>X</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
XR Fragment URL Grammar <a class="index-return" href="#idxref:4"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>a</dt>
|
||||||
|
<dd>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
authors <a class="index-return" href="#idxref:21"><sup>[go]</sup></a></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,57 @@ These heuristics, enable features that are both meaningful and consistent across
|
||||||
|
|
||||||
{mainmatter}
|
{mainmatter}
|
||||||
|
|
||||||
|
# Quick reference
|
||||||
|
|
||||||
|
1. [Abstract](#abstract)
|
||||||
|
1. [Index](#index)
|
||||||
|
1. [Introduction](#introduction)
|
||||||
|
1. [What is XR Fragments](#what-is-xr-fragments)
|
||||||
|
1. [HFL (Hypermediatic Feedback Loop) for XR Browsers](#hfl-hypermediatic-feedback-loop-for-xr-browsers)
|
||||||
|
1. [Conventions and Definitions](#conventions-and-definitions)
|
||||||
|
1. [XR Fragment URL Grammar](#xr-fragment-url-grammar)
|
||||||
|
1. [Spatial Referencing 3D](#spatial-referencing-3d)
|
||||||
|
1. [Level0: Files](#level0-files)
|
||||||
|
1. [via href metadata](#via-href-metadata)
|
||||||
|
1. [via chained extension](#via-chained-extension)
|
||||||
|
1. [via subdocuments/xattr](#via-subdocuments-xattr)
|
||||||
|
1. [JSON sidecar-file](#json-sidecar-file)
|
||||||
|
1. [Level1: URI](#level1-uri)
|
||||||
|
1. [List of URI Fragments](#list-of-uri-fragments)
|
||||||
|
1. [List of explicit metadata](#list-of-explicit-metadata)
|
||||||
|
1. [Level2: href links](#level2-href-links)
|
||||||
|
1. [Interaction behaviour](#interaction-behaviour)
|
||||||
|
1. [XR Viewer implementation](#xr-viewer-implementation)
|
||||||
|
1. [Level3: Media Fragments](#level3-media-fragments)
|
||||||
|
1. [Animation(s) timeline](#animation-s-timeline)
|
||||||
|
1. [Specify playback loopmode](#specify-playback-loopmode)
|
||||||
|
1. [Controlling embedded content](#controlling-embedded-content)
|
||||||
|
1. [Level4: prefix operators](#level4-prefix-operators)
|
||||||
|
1. [Object teleports](#object-teleports)
|
||||||
|
1. [Object multipliers](#object-multipliers)
|
||||||
|
1. [De/selectors (+ and -)](#de-selectors-and)
|
||||||
|
1. [Sharing object or file (#|)](#sharing-object-or-file)
|
||||||
|
1. [xrf:// URI scheme](#xrf-uri-scheme)
|
||||||
|
1. [Level5: URI Templates (RFC6570)](#level5-uri-templates-rfc6570)
|
||||||
|
1. [Top-level URL processing](#top-level-url-processing)
|
||||||
|
1. [UX](#ux)
|
||||||
|
1. [Example: Navigating content href portals](#example-navigating-content-href-portals)
|
||||||
|
1. [Walking surfaces](#walking-surfaces)
|
||||||
|
1. [Example: Virtual world rings](#example-virtual-world-rings)
|
||||||
|
1. [Additional scene metadata](#additional-scene-metadata)
|
||||||
|
1. [Accessibility interface](#accessibility-interface)
|
||||||
|
1. [Two-button navigation](#two-button-navigation)
|
||||||
|
1. [Overlap with fileformat-specific extensions](#overlap-with-fileformat-specific-extensions)
|
||||||
|
1. [Vendor Prefixes](#vendor-prefixes)
|
||||||
|
1. [Security Considerations](#security-considerations)
|
||||||
|
1. [FAQ](#faq)
|
||||||
|
1. [Authors](#authors)
|
||||||
|
1. [IANA Considerations](#iana-considerations)
|
||||||
|
1. [Acknowledgments](#acknowledgments)
|
||||||
|
1. [Appendix: Definitions](#appendix-definitions)
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
(!Introduction)
|
||||||
|
|
||||||
How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br>
|
How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br>
|
||||||
Historically, there's many attempts to create the ultimate 3D fileformat.<br>
|
Historically, there's many attempts to create the ultimate 3D fileformat.<br>
|
||||||
|
|
@ -126,6 +176,7 @@ It solves:
|
||||||
> NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible
|
> NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible
|
||||||
|
|
||||||
# What is XR Fragments
|
# What is XR Fragments
|
||||||
|
(!What is XR Fragments )
|
||||||
|
|
||||||
XR Fragments utilizes URLs:
|
XR Fragments utilizes URLs:
|
||||||
|
|
||||||
|
|
@ -136,6 +187,7 @@ XR Fragments utilizes URLs:
|
||||||
|
|
||||||
|
|
||||||
# HFL (Hypermediatic Feedback Loop) for XR Browsers
|
# HFL (Hypermediatic Feedback Loop) for XR Browsers
|
||||||
|
(!HFL (Hypermediatic Feedback Loop) for XR Browsers)
|
||||||
|
|
||||||
`href` metadata traditionally implies **click** AND **navigate**, however XR Fragments adds stateless **click** (`xrf://....`) via the `xrf://` scheme, which does not change the top-level URL-adress (of the browser).
|
`href` metadata traditionally implies **click** AND **navigate**, however XR Fragments adds stateless **click** (`xrf://....`) via the `xrf://` scheme, which does not change the top-level URL-adress (of the browser).
|
||||||
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
||||||
|
|
@ -169,10 +221,12 @@ XR Fragments itself are [hypermediatic](https://github.com/coderofsalvation/hype
|
||||||
> An important aspect of HFL is that URI Fragments can be triggered without updating the top-level URI (default href-behaviour) thru their own 'bus' (`xrf://#.....`). This decoupling between navigation and interaction prevents non-standard things like (`href`:`javascript:dosomething()`).
|
> An important aspect of HFL is that URI Fragments can be triggered without updating the top-level URI (default href-behaviour) thru their own 'bus' (`xrf://#.....`). This decoupling between navigation and interaction prevents non-standard things like (`href`:`javascript:dosomething()`).
|
||||||
|
|
||||||
# Conventions and Definitions
|
# Conventions and Definitions
|
||||||
|
(!Conventions and Definitions)
|
||||||
|
|
||||||
See appendix below in case certain terms are not clear.
|
See appendix below in case certain terms are not clear.
|
||||||
|
|
||||||
## XR Fragment URL Grammar
|
## XR Fragment URL Grammar
|
||||||
|
(! XR Fragment URL Grammar )
|
||||||
|
|
||||||
For typical HTTP-like browsers/applications:
|
For typical HTTP-like browsers/applications:
|
||||||
|
|
||||||
|
|
@ -196,6 +250,7 @@ In other words, the URL updates to: `https://me.com?https://me.com/other.glb` wh
|
||||||
That way, if the link gets shared, the XR Fragments implementation at `https://me.com` can load the latter (and still indicates which XR Fragments entrypoint-experience/client was used).
|
That way, if the link gets shared, the XR Fragments implementation at `https://me.com` can load the latter (and still indicates which XR Fragments entrypoint-experience/client was used).
|
||||||
|
|
||||||
# Spatial Referencing 3D
|
# Spatial Referencing 3D
|
||||||
|
(!Spatial Referencing 3D )
|
||||||
|
|
||||||
3D files contain an hierarchy of objects.<br>
|
3D files contain an hierarchy of objects.<br>
|
||||||
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:
|
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:
|
||||||
|
|
@ -229,6 +284,8 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
||||||
> It also allows **sourceportation**, which basically means the enduser can teleport to the original XR Document of an `src` embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.
|
> It also allows **sourceportation**, which basically means the enduser can teleport to the original XR Document of an `src` embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.
|
||||||
|
|
||||||
# Level0: Files
|
# Level0: Files
|
||||||
|
(!Level0: Files )
|
||||||
|
(!Level0: Files)
|
||||||
|
|
||||||
These are **optional** auto-loaded [side-car files]() to enable hasslefree [XR Movies](#XR%20Movies).<br>
|
These are **optional** auto-loaded [side-car files]() to enable hasslefree [XR Movies](#XR%20Movies).<br>
|
||||||
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a `.glb` e.g.).
|
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a `.glb` e.g.).
|
||||||
|
|
@ -325,6 +382,7 @@ The sidecar will define (or **override** already existing) extras, which can be
|
||||||
```
|
```
|
||||||
|
|
||||||
# Level1: URI
|
# Level1: URI
|
||||||
|
(!Level1: URI)
|
||||||
|
|
||||||
> **XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments**
|
> **XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments**
|
||||||
|
|
||||||
|
|
@ -386,7 +444,7 @@ Below you can see how this translates back into good-old URLs:
|
||||||
|
|
||||||
> ?-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.
|
> ?-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.
|
||||||
|
|
||||||
# List of URI Fragments
|
## List of URI Fragments
|
||||||
|
|
||||||
| fragment | type | example | info |
|
| fragment | type | example | info |
|
||||||
|-------------------|------------|--------------------|----------------------------------------------------------------------|
|
|-------------------|------------|--------------------|----------------------------------------------------------------------|
|
||||||
|
|
@ -394,7 +452,7 @@ Below you can see how this translates back into good-old URLs:
|
||||||
| [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds|
|
| [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds|
|
||||||
|
|
||||||
|
|
||||||
# List of **explicit* metadata
|
## List of **explicit* metadata
|
||||||
|
|
||||||
These are the possible 'extras' for 3D nodes and sidecar-files
|
These are the possible 'extras' for 3D nodes and sidecar-files
|
||||||
|
|
||||||
|
|
@ -404,6 +462,7 @@ These are the possible 'extras' for 3D nodes and sidecar-files
|
||||||
|
|
||||||
|
|
||||||
# Level2: href links
|
# Level2: href links
|
||||||
|
(!Level2: href links)
|
||||||
|
|
||||||
Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object :
|
Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object :
|
||||||
|
|
||||||
|
|
@ -431,6 +490,7 @@ The imported/teleported destination can be another object in the same scene-file
|
||||||
> NOTE: hashbus links (`xrf://#foo&bar`) don't change the toplevel URL, which makes it ideal for interactions (in contrast to typical `#roomC` navigation, which benefit back/forward browser-buttons), see <a href="#hashbus">hashbus</a> for more info.
|
> NOTE: hashbus links (`xrf://#foo&bar`) don't change the toplevel URL, which makes it ideal for interactions (in contrast to typical `#roomC` navigation, which benefit back/forward browser-buttons), see <a href="#hashbus">hashbus</a> for more info.
|
||||||
|
|
||||||
# Level3: Media Fragments
|
# Level3: Media Fragments
|
||||||
|
(!Level3: Media Fragments )
|
||||||
|
|
||||||
> these allow for XR Movies with a controllable timeline using `href` URI's with Media Fragments
|
> these allow for XR Movies with a controllable timeline using `href` URI's with Media Fragments
|
||||||
|
|
||||||
|
|
@ -488,6 +548,7 @@ use [[URI Templates]] to control embedded media, for example a simple video-play
|
||||||
```
|
```
|
||||||
|
|
||||||
# Level4: prefix operators
|
# Level4: prefix operators
|
||||||
|
(!Level4: prefix operators)
|
||||||
|
|
||||||
Prefixing objectnames with the following simple operators allow for **extremely powerful** XR interactions:
|
Prefixing objectnames with the following simple operators allow for **extremely powerful** XR interactions:
|
||||||
|
|
||||||
|
|
@ -603,7 +664,15 @@ The `xrf:` scheme will just do 2 & 3 (so the URL-values will not leak into the t
|
||||||
|
|
||||||
> **compliance with RFC 3986**: unimplemented/unknown URI schemes (`xrf:...` e.g.) will not update the top-level URL
|
> **compliance with RFC 3986**: unimplemented/unknown URI schemes (`xrf:...` e.g.) will not update the top-level URL
|
||||||
|
|
||||||
|
# Level5: URI Templates (RFC6570)
|
||||||
|
(!Level5: URI Templates (RFC6570))
|
||||||
|
|
||||||
|
XR Fragments adopts Level1 URI **Fragment** expansion to provide safe interactivity.<br>
|
||||||
|
This is non-normative, and the draft spec is available on request.
|
||||||
|
|
||||||
|
|
||||||
# Top-level URL processing
|
# Top-level URL processing
|
||||||
|
(!Top-level URL processing)
|
||||||
|
|
||||||
> Example URL: `://foo/world.gltf#room1&t=10&cam`
|
> Example URL: `://foo/world.gltf#room1&t=10&cam`
|
||||||
|
|
||||||
|
|
@ -623,6 +692,7 @@ End-users should always have read/write access to:
|
||||||
|
|
||||||
|
|
||||||
# Example: Navigating content href portals
|
# Example: Navigating content href portals
|
||||||
|
(!Example: Navigating content href portals)
|
||||||
|
|
||||||
navigation, portals & mutations
|
navigation, portals & mutations
|
||||||
|
|
||||||
|
|
@ -662,7 +732,8 @@ XR Fragment-compatible viewers can infer this data based scanning the scene for:
|
||||||
|
|
||||||
> optionally the viewer can offer thumbstick, mouse or joystick teleport-tools for non-roomscale VR/AR setups.
|
> optionally the viewer can offer thumbstick, mouse or joystick teleport-tools for non-roomscale VR/AR setups.
|
||||||
|
|
||||||
# Virtual world rings
|
# Example: Virtual world rings
|
||||||
|
(!Example: Virtual world rings )
|
||||||
|
|
||||||
Consider 3D scenes linking to eachother using these `href` values, attached to 3D button-objects:
|
Consider 3D scenes linking to eachother using these `href` values, attached to 3D button-objects:
|
||||||
|
|
||||||
|
|
@ -678,12 +749,8 @@ Now consider adding a 'webring index'-button to each file, with this href-value:
|
||||||
|
|
||||||
This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.
|
This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.
|
||||||
|
|
||||||
# Level5: URI Templates (RFC6570)
|
|
||||||
|
|
||||||
XR Fragments adopts Level1 URI **Fragment** expansion to provide safe interactivity.<br>
|
|
||||||
This is non-normative, and the draft spec is available on request.
|
|
||||||
|
|
||||||
# Additional scene metadata
|
# Additional scene metadata
|
||||||
|
(!Additional scene metadata )
|
||||||
|
|
||||||
XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
||||||
Instead, it encourages browsers to scan nodes for the following custom properties:
|
Instead, it encourages browsers to scan nodes for the following custom properties:
|
||||||
|
|
@ -727,6 +794,7 @@ There's no silver bullet when it comes to metadata, so XR Fragment-implementatio
|
||||||
> These attributes can be scanned and presented during an `href` or `src` eye/mouse-over.
|
> These attributes can be scanned and presented during an `href` or `src` eye/mouse-over.
|
||||||
|
|
||||||
# Accessibility interface
|
# Accessibility interface
|
||||||
|
(!Accessibility interface)
|
||||||
|
|
||||||
The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br>
|
The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br>
|
||||||
Spec:<br><Br>
|
Spec:<br><Br>
|
||||||
|
|
@ -778,7 +846,8 @@ If a glTF implementation does not support a particular extension, the (XRF) extr
|
||||||
|
|
||||||
> **Example 2** If an Extensions uses XR Fragments in URI's (`href: #otherroom` or `href: xrf://-walls` in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.
|
> **Example 2** If an Extensions uses XR Fragments in URI's (`href: #otherroom` or `href: xrf://-walls` in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.
|
||||||
|
|
||||||
## Vendor Prefixes
|
# Vendor Prefixes
|
||||||
|
(!Vendor Prefixes )
|
||||||
|
|
||||||
Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific [CSS-prefixes](https://en.wikipedia.org/wiki/CSS#Vendor_prefixes) (`-moz-opacity: 0.2` e.g.).
|
Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific [CSS-prefixes](https://en.wikipedia.org/wiki/CSS#Vendor_prefixes) (`-moz-opacity: 0.2` e.g.).
|
||||||
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.
|
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.
|
||||||
|
|
@ -837,12 +906,14 @@ String-templatevalues are evaluated as per [URI Templates (RFC6570)](https://www
|
||||||
|
|
||||||
|
|
||||||
# Security Considerations
|
# Security Considerations
|
||||||
|
(!Security Considerations)
|
||||||
|
|
||||||
The only dynamic parts are [W3C Media Fragments](https://www.w3.org/TR/media-frags/) and [URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570).<br>
|
The only dynamic parts are [W3C Media Fragments](https://www.w3.org/TR/media-frags/) and [URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570).<br>
|
||||||
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br>
|
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br>
|
||||||
n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.
|
n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.
|
||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
|
(!FAQ )
|
||||||
|
|
||||||
**Q:** Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br>
|
**Q:** Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br>
|
||||||
**A:** Because it's out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru `src` values)
|
**A:** Because it's out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru `src` values)
|
||||||
|
|
@ -856,15 +927,18 @@ Doing advanced scripting & networkrequests under the hood are obviously interest
|
||||||
Non-HTML Hypermedia browsers should make browser extensions the right place, to 'extend' experiences, in contrast to code/javascript inside hypermedia documents (this turned out as a hypermedia antipattern).
|
Non-HTML Hypermedia browsers should make browser extensions the right place, to 'extend' experiences, in contrast to code/javascript inside hypermedia documents (this turned out as a hypermedia antipattern).
|
||||||
|
|
||||||
# authors
|
# authors
|
||||||
|
(!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)
|
||||||
|
|
||||||
# IANA Considerations
|
# IANA Considerations
|
||||||
|
(!IANA Considerations)
|
||||||
|
|
||||||
This document has no IANA actions.
|
This document has no IANA actions.
|
||||||
|
|
||||||
# Acknowledgments
|
# Acknowledgments
|
||||||
|
(!Acknowledgments)
|
||||||
|
|
||||||
* [NLNET](https://nlnet.nl)
|
* [NLNET](https://nlnet.nl)
|
||||||
* [Future of Text](https://futureoftext.org)
|
* [Future of Text](https://futureoftext.org)
|
||||||
|
|
@ -880,6 +954,7 @@ This document has no IANA actions.
|
||||||
* Mark Anderson
|
* Mark Anderson
|
||||||
|
|
||||||
# Appendix: Definitions
|
# Appendix: Definitions
|
||||||
|
(!Appendix: Definitions )
|
||||||
|
|
||||||
|definition | explanation |
|
|definition | explanation |
|
||||||
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------|
|
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
|
|
||||||
|
|
@ -86,26 +86,26 @@ Copyright Notice
|
||||||
|
|
||||||
Table of Contents
|
Table of Contents
|
||||||
|
|
||||||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
|
1. Quick reference . . . . . . . . . . . . . . . . . . . . . . . 3
|
||||||
2. What is XR Fragments . . . . . . . . . . . . . . . . . . . . 4
|
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||||||
3. HFL (Hypermediatic Feedback Loop) for XR Browsers . . . . . . 4
|
3. What is XR Fragments . . . . . . . . . . . . . . . . . . . . 5
|
||||||
4. Conventions and Definitions . . . . . . . . . . . . . . . . . 6
|
4. HFL (Hypermediatic Feedback Loop) for XR Browsers . . . . . . 5
|
||||||
4.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 6
|
5. Conventions and Definitions . . . . . . . . . . . . . . . . . 8
|
||||||
5. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 6
|
5.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 8
|
||||||
6. Level0: Files . . . . . . . . . . . . . . . . . . . . . . . . 7
|
6. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 8
|
||||||
6.1. via href metadata . . . . . . . . . . . . . . . . . . . . 7
|
7. Level0: Files . . . . . . . . . . . . . . . . . . . . . . . . 9
|
||||||
6.2. via chained extension . . . . . . . . . . . . . . . . . . 8
|
7.1. via href metadata . . . . . . . . . . . . . . . . . . . . 9
|
||||||
6.3. via subdocuments/xattr . . . . . . . . . . . . . . . . . 8
|
7.2. via chained extension . . . . . . . . . . . . . . . . . . 10
|
||||||
6.4. JSON sidecar-file . . . . . . . . . . . . . . . . . . . . 9
|
7.3. via subdocuments/xattr . . . . . . . . . . . . . . . . . 10
|
||||||
7. Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . . 9
|
7.4. JSON sidecar-file . . . . . . . . . . . . . . . . . . . . 11
|
||||||
8. List of URI Fragments . . . . . . . . . . . . . . . . . . . . 11
|
8. Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||||||
9. List of *_explicit_ metadata . . . . . . . . . . . . . . . . 12
|
8.1. List of URI Fragments . . . . . . . . . . . . . . . . . . 13
|
||||||
10. Level2: href links . . . . . . . . . . . . . . . . . . . . . 12
|
8.2. List of *_explicit_ metadata . . . . . . . . . . . . . . 14
|
||||||
10.1. Interaction behaviour . . . . . . . . . . . . . . . . . 12
|
9. Level2: href links . . . . . . . . . . . . . . . . . . . . . 14
|
||||||
10.2. XR Viewer implementation . . . . . . . . . . . . . . . . 12
|
9.1. Interaction behaviour . . . . . . . . . . . . . . . . . . 14
|
||||||
11. Level3: Media Fragments . . . . . . . . . . . . . . . . . . . 13
|
9.2. XR Viewer implementation . . . . . . . . . . . . . . . . 14
|
||||||
11.1. Animation(s) timeline . . . . . . . . . . . . . . . . . 13
|
10. Level3: Media Fragments . . . . . . . . . . . . . . . . . . . 15
|
||||||
11.2. Specify playback loopmode . . . . . . . . . . . . . . . 13
|
10.1. Animation(s) timeline . . . . . . . . . . . . . . . . . 15
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -114,32 +114,93 @@ van Kammen Expires 23 March 2026 [Page 2]
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
11.3. Controlling embedded content . . . . . . . . . . . . . . 14
|
10.2. Specify playback loopmode . . . . . . . . . . . . . . . 15
|
||||||
12. Level4: prefix operators . . . . . . . . . . . . . . . . . . 14
|
10.3. Controlling embedded content . . . . . . . . . . . . . . 16
|
||||||
12.1. Object teleports (!) . . . . . . . . . . . . . . . . . . 14
|
11. Level4: prefix operators . . . . . . . . . . . . . . . . . . 16
|
||||||
12.2. Object multipliers (*) . . . . . . . . . . . . . . . . . 16
|
11.1. Object teleports (!) . . . . . . . . . . . . . . . . . . 16
|
||||||
12.3. De/selectors (+ and -) . . . . . . . . . . . . . . . . . 16
|
11.2. Object multipliers (*) . . . . . . . . . . . . . . . . . 18
|
||||||
12.4. Sharing object or file (#|) . . . . . . . . . . . . . . 16
|
11.3. De/selectors (+ and -) . . . . . . . . . . . . . . . . . 18
|
||||||
12.5. xrf:// URI scheme . . . . . . . . . . . . . . . . . . . 17
|
11.4. Sharing object or file (#|) . . . . . . . . . . . . . . 18
|
||||||
13. Top-level URL processing . . . . . . . . . . . . . . . . . . 17
|
11.5. xrf:// URI scheme . . . . . . . . . . . . . . . . . . . 19
|
||||||
13.1. UX . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
|
12. Level5: URI Templates (RFC6570) . . . . . . . . . . . . . . . 19
|
||||||
14. Example: Navigating content href portals . . . . . . . . . . 18
|
13. Top-level URL processing . . . . . . . . . . . . . . . . . . 19
|
||||||
14.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 19
|
13.1. UX . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
|
||||||
15. Virtual world rings . . . . . . . . . . . . . . . . . . . . . 19
|
14. Example: Navigating content href portals . . . . . . . . . . 20
|
||||||
16. Level5: URI Templates (RFC6570) . . . . . . . . . . . . . . . 20
|
14.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21
|
||||||
17. Additional scene metadata . . . . . . . . . . . . . . . . . . 20
|
15. Example: Virtual world rings . . . . . . . . . . . . . . . . 21
|
||||||
18. Accessibility interface . . . . . . . . . . . . . . . . . . . 21
|
16. Additional scene metadata . . . . . . . . . . . . . . . . . . 22
|
||||||
18.1. Two-button navigation . . . . . . . . . . . . . . . . . 22
|
17. Accessibility interface . . . . . . . . . . . . . . . . . . . 23
|
||||||
18.2. Overlap with fileformat-specific extensions . . . . . . 22
|
17.1. Two-button navigation . . . . . . . . . . . . . . . . . 24
|
||||||
18.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 23
|
17.2. Overlap with fileformat-specific extensions . . . . . . 25
|
||||||
19. Security Considerations . . . . . . . . . . . . . . . . . . . 26
|
18. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . . . . 25
|
||||||
20. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
|
19. Security Considerations . . . . . . . . . . . . . . . . . . . 28
|
||||||
21. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
|
20. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
|
||||||
22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
|
21. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
|
||||||
23. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 27
|
22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29
|
||||||
24. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 27
|
23. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29
|
||||||
|
24. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 29
|
||||||
|
|
||||||
1. Introduction
|
1. Quick reference
|
||||||
|
|
||||||
|
1. Abstract (#abstract)
|
||||||
|
2. Index (#index)
|
||||||
|
3. Introduction (#introduction)
|
||||||
|
4. What is XR Fragments (#what-is-xr-fragments)
|
||||||
|
5. HFL (Hypermediatic Feedback Loop) for XR Browsers (#hfl-
|
||||||
|
hypermediatic-feedback-loop-for-xr-browsers)
|
||||||
|
6. Conventions and Definitions (#conventions-and-definitions)
|
||||||
|
1. XR Fragment URL Grammar (#xr-fragment-url-grammar)
|
||||||
|
7. Spatial Referencing 3D (#spatial-referencing-3d)
|
||||||
|
8. Level0: Files (#level0-files)
|
||||||
|
1. via href metadata (#via-href-metadata)
|
||||||
|
2. via chained extension (#via-chained-extension)
|
||||||
|
3. via subdocuments/xattr (#via-subdocuments-xattr)
|
||||||
|
4. JSON sidecar-file (#json-sidecar-file)
|
||||||
|
9. Level1: URI (#level1-uri)
|
||||||
|
1. List of URI Fragments (#list-of-uri-fragments)
|
||||||
|
2. List of explicit metadata (#list-of-explicit-metadata)
|
||||||
|
10. Level2: href links (#level2-href-links)
|
||||||
|
1. Interaction behaviour (#interaction-behaviour)
|
||||||
|
2. XR Viewer implementation (#xr-viewer-implementation)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 3]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
11. Level3: Media Fragments (#level3-media-fragments)
|
||||||
|
1. Animation(s) timeline (#animation-s-timeline)
|
||||||
|
2. Specify playback loopmode (#specify-playback-loopmode)
|
||||||
|
3. Controlling embedded content (#controlling-embedded-content)
|
||||||
|
12. Level4: prefix operators (#level4-prefix-operators)
|
||||||
|
1. Object teleports (#object-teleports)
|
||||||
|
2. Object multipliers (#object-multipliers)
|
||||||
|
3. De/selectors (+ and -) (#de-selectors-and)
|
||||||
|
4. Sharing object or file (#|) (#sharing-object-or-file)
|
||||||
|
5. xrf:// URI scheme (#xrf-uri-scheme)
|
||||||
|
13. Level5: URI Templates (RFC6570) (#level5-uri-templates-rfc6570)
|
||||||
|
14. Top-level URL processing (#top-level-url-processing)
|
||||||
|
1. UX (#ux)
|
||||||
|
15. Example: Navigating content href portals (#example-navigating-
|
||||||
|
content-href-portals)
|
||||||
|
1. Walking surfaces (#walking-surfaces)
|
||||||
|
16. Example: Virtual world rings (#example-virtual-world-rings)
|
||||||
|
17. Additional scene metadata (#additional-scene-metadata)
|
||||||
|
18. Accessibility interface (#accessibility-interface)
|
||||||
|
1. Two-button navigation (#two-button-navigation)
|
||||||
|
2. Overlap with fileformat-specific extensions (#overlap-with-
|
||||||
|
fileformat-specific-extensions)
|
||||||
|
19. Vendor Prefixes (#vendor-prefixes)
|
||||||
|
20. Security Considerations (#security-considerations)
|
||||||
|
21. FAQ (#faq)
|
||||||
|
22. Authors (#authors)
|
||||||
|
23. IANA Considerations (#iana-considerations)
|
||||||
|
24. Acknowledgments (#acknowledgments)
|
||||||
|
25. Appendix: Definitions (#appendix-definitions)
|
||||||
|
|
||||||
|
2. Introduction
|
||||||
|
|
||||||
How can we add more control to existing text and 3D scenes, without
|
How can we add more control to existing text and 3D scenes, without
|
||||||
introducing new dataformats?
|
introducing new dataformats?
|
||||||
|
|
@ -155,21 +216,22 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
It solves:
|
It solves:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 4]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
1. addressibility and hypermediatic
|
1. addressibility and hypermediatic
|
||||||
(https://github.com/coderofsalvation/hypermediatic) navigation of
|
(https://github.com/coderofsalvation/hypermediatic) navigation of
|
||||||
3D scenes/objects: URI Fragments (https://en.wikipedia.org/wiki/
|
3D scenes/objects: URI Fragments (https://en.wikipedia.org/wiki/
|
||||||
URI_fragment) using src/href spatial metadata
|
URI_fragment) using src/href spatial metadata
|
||||||
2. Interlinking text & spatial objects by collapsing space into a
|
2. Interlinking text & spatial objects by collapsing space into a
|
||||||
Word Graph (XRWG) to show visible links (#visible-links)
|
Word Graph (XRWG) to show visible links (#visible-links)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 3]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
3. unlocking spatial potential of the (originally 2D) hashtag (which
|
3. unlocking spatial potential of the (originally 2D) hashtag (which
|
||||||
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
|
||||||
|
|
@ -180,7 +242,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| 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
|
||||||
|
|
||||||
2. What is XR Fragments
|
3. What is XR Fragments
|
||||||
|
|
||||||
XR Fragments utilizes URLs:
|
XR Fragments utilizes URLs:
|
||||||
|
|
||||||
|
|
@ -193,7 +255,9 @@ Internet-Draft XR Fragments September 2025
|
||||||
4. externally: progressively enhance a 3D (file) into an experience
|
4. externally: progressively enhance a 3D (file) into an experience
|
||||||
via sidecarfiles (https://en.wikipedia.org/wiki/Sidecar_file)
|
via sidecarfiles (https://en.wikipedia.org/wiki/Sidecar_file)
|
||||||
|
|
||||||
3. HFL (Hypermediatic Feedback Loop) for XR Browsers
|
4. HFL (Hypermediatic Feedback Loop) for XR Browsers
|
||||||
|
|
||||||
|
for XR Browsers)
|
||||||
|
|
||||||
href metadata traditionally implies *click* AND *navigate*, however
|
href metadata traditionally implies *click* AND *navigate*, however
|
||||||
XR Fragments adds stateless *click* (xrf://....) via the xrf://
|
XR Fragments adds stateless *click* (xrf://....) via the xrf://
|
||||||
|
|
@ -210,6 +274,14 @@ Internet-Draft XR Fragments September 2025
|
||||||
This opens up the following benefits for traditional & future
|
This opens up the following benefits for traditional & future
|
||||||
webbrowsers:
|
webbrowsers:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 5]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
* 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).
|
||||||
|
|
@ -218,14 +290,6 @@ Internet-Draft XR Fragments September 2025
|
||||||
to trigger walk-animation for object person)
|
to trigger walk-animation for object person)
|
||||||
* potentially collapsing the 3D scene to an wordgraph (for essential
|
* potentially collapsing the 3D scene to an wordgraph (for essential
|
||||||
navigation purposes) controllable thru a hash(tag)bus
|
navigation purposes) controllable thru a hash(tag)bus
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 4]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
* completely bypassing the security-trap of loading external scripts
|
* completely bypassing the security-trap of loading external scripts
|
||||||
(by loading 3D model-files, not HTML-javascriptable resources)
|
(by loading 3D model-files, not HTML-javascriptable resources)
|
||||||
|
|
||||||
|
|
@ -234,6 +298,46 @@ Internet-Draft XR Fragments September 2025
|
||||||
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 23 March 2026 [Page 6]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
+=========+======================+=====================================+
|
+=========+======================+=====================================+
|
||||||
|principle|3D URL |HTML 2D URL |
|
|principle|3D URL |HTML 2D URL |
|
||||||
+=========+======================+=====================================+
|
+=========+======================+=====================================+
|
||||||
|
|
@ -273,26 +377,28 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
Table 1
|
Table 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 5]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
| 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()).
|
||||||
|
|
||||||
4. Conventions and Definitions
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 7]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
5. Conventions and Definitions
|
||||||
|
|
||||||
See appendix below in case certain terms are not clear.
|
See appendix below in case certain terms are not clear.
|
||||||
|
|
||||||
4.1. XR Fragment URL Grammar
|
5.1. XR Fragment URL Grammar
|
||||||
|
|
||||||
For typical HTTP-like browsers/applications:
|
For typical HTTP-like browsers/applications:
|
||||||
|
|
||||||
|
|
@ -324,7 +430,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
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).
|
||||||
|
|
||||||
5. Spatial Referencing 3D
|
6. Spatial Referencing 3D
|
||||||
|
|
||||||
3D files contain an hierarchy of objects.
|
3D files contain an hierarchy of objects.
|
||||||
XR Fragments assumes the following objectname-to-URI-Fragment
|
XR Fragments assumes the following objectname-to-URI-Fragment
|
||||||
|
|
@ -333,7 +439,13 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 6]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 8]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -369,14 +481,14 @@ Internet-Draft XR Fragments September 2025
|
||||||
| embedded object. Basically an embedded link becoming an outbound
|
| embedded object. Basically an embedded link becoming an outbound
|
||||||
| link by activating it.
|
| link by activating it.
|
||||||
|
|
||||||
6. Level0: Files
|
7. Level0: Files
|
||||||
|
|
||||||
These are *optional* auto-loaded side-car files to enable hasslefree
|
These are *optional* auto-loaded side-car files to enable hasslefree
|
||||||
XR Movies (#XR%20Movies).
|
XR Movies (#XR%20Movies).
|
||||||
they can accomodate developers or applications who (for whatever
|
they can accomodate developers or applications who (for whatever
|
||||||
reason) must not modify the 3D scene-file (a .glb e.g.).
|
reason) must not modify the 3D scene-file (a .glb e.g.).
|
||||||
|
|
||||||
6.1. via href metadata
|
7.1. via href metadata
|
||||||
|
|
||||||
scene.glb <--- 'href' extra [heuristic] detected inside!
|
scene.glb <--- 'href' extra [heuristic] detected inside!
|
||||||
scene.png (preview thumbnail)
|
scene.png (preview thumbnail)
|
||||||
|
|
@ -389,7 +501,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 7]
|
van Kammen Expires 23 March 2026 [Page 9]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -398,7 +510,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
* The viewer should poll for the above mentioned sidecar-file
|
* The viewer should poll for the above mentioned sidecar-file
|
||||||
extensions (and present accordingly)
|
extensions (and present accordingly)
|
||||||
|
|
||||||
6.2. via chained extension
|
7.2. via chained extension
|
||||||
|
|
||||||
scene.xrf.glb <--- '.xrf.' sidecar file heuristic detected!
|
scene.xrf.glb <--- '.xrf.' sidecar file heuristic detected!
|
||||||
scene.xrf.png (preview thumbnail)
|
scene.xrf.png (preview thumbnail)
|
||||||
|
|
@ -414,7 +526,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
* the chained-extension heuristic .xrf. should be present in the
|
* the chained-extension heuristic .xrf. should be present in the
|
||||||
filename (scene.xrf.glb e.g.)
|
filename (scene.xrf.glb e.g.)
|
||||||
|
|
||||||
6.3. via subdocuments/xattr
|
7.3. via subdocuments/xattr
|
||||||
|
|
||||||
More secure protocols (Nextgraph e.g.) don't allow for simply polling
|
More secure protocols (Nextgraph e.g.) don't allow for simply polling
|
||||||
files. In such case, subdocuments or extended attributes should be
|
files. In such case, subdocuments or extended attributes should be
|
||||||
|
|
@ -445,12 +557,12 @@ myspreadsheet.ods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 8]
|
van Kammen Expires 23 March 2026 [Page 10]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
6.4. JSON sidecar-file
|
7.4. JSON sidecar-file
|
||||||
|
|
||||||
For developers, sidecar-file can allow for defining *explicit* XR
|
For developers, sidecar-file can allow for defining *explicit* XR
|
||||||
Fragments links (>level1), outside of the 3D file.
|
Fragments links (>level1), outside of the 3D file.
|
||||||
|
|
@ -485,7 +597,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
// now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene
|
// now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene
|
||||||
|
|
||||||
7. Level1: URI
|
8. Level1: URI
|
||||||
|
|
||||||
| *XR Fragments allows deeplinking of 3D objects by mapping
|
| *XR Fragments allows deeplinking of 3D objects by mapping
|
||||||
| objectnames to URI fragments*
|
| objectnames to URI fragments*
|
||||||
|
|
@ -501,7 +613,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 9]
|
van Kammen Expires 23 March 2026 [Page 11]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -557,7 +669,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 10]
|
van Kammen Expires 23 March 2026 [Page 12]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -588,7 +700,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| Hypermediatic FeedbackLoop (HFL) between external and internal 4D
|
| Hypermediatic FeedbackLoop (HFL) between external and internal 4D
|
||||||
| navigation.
|
| navigation.
|
||||||
|
|
||||||
8. List of URI Fragments
|
8.1. List of URI Fragments
|
||||||
|
|
||||||
+=======================+======================================+===========+=============+
|
+=======================+======================================+===========+=============+
|
||||||
|fragment |type |example |info |
|
|fragment |type |example |info |
|
||||||
|
|
@ -613,14 +725,14 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 11]
|
van Kammen Expires 23 March 2026 [Page 13]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
Table 3
|
Table 3
|
||||||
|
|
||||||
9. List of *_explicit_ metadata
|
8.2. List of *_explicit_ metadata
|
||||||
|
|
||||||
These are the possible 'extras' for 3D nodes and sidecar-files
|
These are the possible 'extras' for 3D nodes and sidecar-files
|
||||||
|
|
||||||
|
|
@ -634,7 +746,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
Table 4
|
Table 4
|
||||||
|
|
||||||
10. Level2: href links
|
9. Level2: href links
|
||||||
|
|
||||||
Explicit href metadata ('extras') in a 3D object (of a 3D file), hint
|
Explicit href metadata ('extras') in a 3D object (of a 3D file), hint
|
||||||
the viewer that the user ''can interact'' with that object :
|
the viewer that the user ''can interact'' with that object :
|
||||||
|
|
@ -646,7 +758,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
://somefile.gltf#foo
|
://somefile.gltf#foo
|
||||||
|
|
|
|
||||||
|
|
||||||
10.1. Interaction behaviour
|
9.1. Interaction behaviour
|
||||||
|
|
||||||
When clicking an ''href''-value, the user(camera) is teleport to the
|
When clicking an ''href''-value, the user(camera) is teleport to the
|
||||||
referenced object.
|
referenced object.
|
||||||
|
|
@ -654,7 +766,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
The imported/teleported destination can be another object in the same
|
The imported/teleported destination can be another object in the same
|
||||||
scene-file, or a different file.
|
scene-file, or a different file.
|
||||||
|
|
||||||
10.2. XR Viewer implementation
|
9.2. XR Viewer implementation
|
||||||
|
|
||||||
| *spec* | *action* | *feature* | |-|-|-| | level0+1 | hover 3D file
|
| *spec* | *action* | *feature* | |-|-|-| | level0+1 | hover 3D file
|
||||||
href (#via-href-metadata) | show the preview PNG thumbnail (if any).
|
href (#via-href-metadata) | show the preview PNG thumbnail (if any).
|
||||||
|
|
@ -669,7 +781,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 12]
|
van Kammen Expires 23 March 2026 [Page 14]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -685,7 +797,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| #roomC navigation, which benefit back/forward browser-buttons),
|
| #roomC navigation, which benefit back/forward browser-buttons),
|
||||||
| see <a href="#hashbus">hashbus</a> for more info.
|
| see <a href="#hashbus">hashbus</a> for more info.
|
||||||
|
|
||||||
11. Level3: Media Fragments
|
10. Level3: Media Fragments
|
||||||
|
|
||||||
| these allow for XR Movies with a controllable timeline using href
|
| these allow for XR Movies with a controllable timeline using href
|
||||||
| URI's with Media Fragments
|
| URI's with Media Fragments
|
||||||
|
|
@ -701,7 +813,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
- href: xrf:news.glb?clone#t=0 to instance and play another
|
- href: xrf:news.glb?clone#t=0 to instance and play another
|
||||||
experience
|
experience
|
||||||
|
|
||||||
11.1. Animation(s) timeline
|
10.1. Animation(s) timeline
|
||||||
|
|
||||||
controls the animation(s) of the scene (or src resource which
|
controls the animation(s) of the scene (or src resource which
|
||||||
contains a timeline)
|
contains a timeline)
|
||||||
|
|
@ -716,7 +828,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
| Use [[#s 🌱]] to control playback speed
|
| Use [[#s 🌱]] to control playback speed
|
||||||
|
|
||||||
11.2. Specify playback loopmode
|
10.2. Specify playback loopmode
|
||||||
|
|
||||||
This compensates a missing element from Media Fragments to enable/
|
This compensates a missing element from Media Fragments to enable/
|
||||||
disable temporal looping. .
|
disable temporal looping. .
|
||||||
|
|
@ -725,7 +837,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 13]
|
van Kammen Expires 23 March 2026 [Page 15]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -734,7 +846,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
animation/video/audio loop | | <b>#-loop</b> | string | disables
|
animation/video/audio loop | | <b>#-loop</b> | string | disables
|
||||||
animation/video/audio loop |
|
animation/video/audio loop |
|
||||||
|
|
||||||
11.3. Controlling embedded content
|
10.3. Controlling embedded content
|
||||||
|
|
||||||
use [[URI Templates]] to control embedded media, for example a simple
|
use [[URI Templates]] to control embedded media, for example a simple
|
||||||
video-player:
|
video-player:
|
||||||
|
|
@ -753,7 +865,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
└── ◻ playbutton_external
|
└── ◻ playbutton_external
|
||||||
└ href: https://my.org/animation.glb#!&t=3,10 <-- import & play external anim
|
└ href: https://my.org/animation.glb#!&t=3,10 <-- import & play external anim
|
||||||
|
|
||||||
12. Level4: prefix operators
|
11. Level4: prefix operators
|
||||||
|
|
||||||
Prefixing objectnames with the following simple operators allow for
|
Prefixing objectnames with the following simple operators allow for
|
||||||
*extremely powerful* XR interactions:
|
*extremely powerful* XR interactions:
|
||||||
|
|
@ -768,7 +880,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| to teleport a menu, #*block to clone a grabbable block, #|object
|
| to teleport a menu, #*block to clone a grabbable block, #|object
|
||||||
| to share an object
|
| to share an object
|
||||||
|
|
||||||
12.1. Object teleports (!)
|
11.1. Object teleports (!)
|
||||||
|
|
||||||
Prefixing an object with an exclamation-symbol, will teleport a
|
Prefixing an object with an exclamation-symbol, will teleport a
|
||||||
(local or remote) referenced object from/to its original/usercamera
|
(local or remote) referenced object from/to its original/usercamera
|
||||||
|
|
@ -781,7 +893,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 14]
|
van Kammen Expires 23 March 2026 [Page 16]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -837,7 +949,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 15]
|
van Kammen Expires 23 March 2026 [Page 17]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -855,7 +967,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| *NOTE*: combining instance-operators allows dynamic construction
|
| *NOTE*: combining instance-operators allows dynamic construction
|
||||||
| of 3D scenes (#london&!welcomeMenu&!fadeBox e.g.)
|
| of 3D scenes (#london&!welcomeMenu&!fadeBox e.g.)
|
||||||
|
|
||||||
12.2. Object multipliers (*)
|
11.2. Object multipliers (*)
|
||||||
|
|
||||||
The star-prefix will clone a (local or remote) referenced object to
|
The star-prefix will clone a (local or remote) referenced object to
|
||||||
the usercamera's location, and make it grabbable.
|
the usercamera's location, and make it grabbable.
|
||||||
|
|
@ -865,7 +977,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| infinitely *clones* the referenced object (instead of
|
| infinitely *clones* the referenced object (instead of
|
||||||
| repositioning the object).
|
| repositioning the object).
|
||||||
|
|
||||||
12.3. De/selectors (+ and -)
|
11.3. De/selectors (+ and -)
|
||||||
|
|
||||||
* href: #-welcome (or #+welcome)
|
* href: #-welcome (or #+welcome)
|
||||||
|
|
||||||
|
|
@ -878,7 +990,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| *NOTE:* the latter shows that (de)selectors can also be with
|
| *NOTE:* the latter shows that (de)selectors can also be with
|
||||||
| regular href (#href)-values
|
| regular href (#href)-values
|
||||||
|
|
||||||
12.4. Sharing object or file (#|)
|
11.4. Sharing object or file (#|)
|
||||||
|
|
||||||
The pipe-symbol (|) sends a (targeted) object to the OS. Clicking
|
The pipe-symbol (|) sends a (targeted) object to the OS. Clicking
|
||||||
the href-value below will:
|
the href-value below will:
|
||||||
|
|
@ -893,7 +1005,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 16]
|
van Kammen Expires 23 March 2026 [Page 18]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -901,7 +1013,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
|
| *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
|
||||||
| only
|
| only
|
||||||
|
|
||||||
12.5. xrf:// URI scheme
|
11.5. xrf:// URI scheme
|
||||||
|
|
||||||
Prefixing the xrf: to href (#href)-values *will prevent* level2
|
Prefixing the xrf: to href (#href)-values *will prevent* level2
|
||||||
(#📜%20level2:%20explicit%20links) href (#href)-values from changing
|
(#📜%20level2:%20explicit%20links) href (#href)-values from changing
|
||||||
|
|
@ -924,6 +1036,14 @@ Internet-Draft XR Fragments September 2025
|
||||||
| *compliance with RFC 3986*: unimplemented/unknown URI schemes
|
| *compliance with RFC 3986*: unimplemented/unknown URI schemes
|
||||||
| (xrf:... e.g.) will not update the top-level URL
|
| (xrf:... e.g.) will not update the top-level URL
|
||||||
|
|
||||||
|
12. Level5: URI Templates (RFC6570)
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
XR Fragments adopts Level1 URI *Fragment* expansion to provide safe
|
||||||
|
interactivity.
|
||||||
|
This is non-normative, and the draft spec is available on request.
|
||||||
|
|
||||||
13. Top-level URL processing
|
13. Top-level URL processing
|
||||||
|
|
||||||
| Example URL: ://foo/world.gltf#room1&t=10&cam
|
| Example URL: ://foo/world.gltf#room1&t=10&cam
|
||||||
|
|
@ -937,6 +1057,15 @@ Internet-Draft XR Fragments September 2025
|
||||||
0,0,0 as camera coordinate (XR: add user-height) (example (https:
|
0,0,0 as camera coordinate (XR: add user-height) (example (https:
|
||||||
//github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
|
//github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
|
||||||
three/navigator.js#L31]]))
|
three/navigator.js#L31]]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 19]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
3. IF a camera-object exists with name cam assume that user(camera)
|
3. IF a camera-object exists with name cam assume that user(camera)
|
||||||
position
|
position
|
||||||
|
|
||||||
|
|
@ -946,14 +1075,6 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
1. the current (toplevel) <b>URL</b> (an URLbar etc)
|
1. the current (toplevel) <b>URL</b> (an URLbar etc)
|
||||||
2. URL-history (a <b>back/forward</b> button e.g.)
|
2. URL-history (a <b>back/forward</b> button e.g.)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 17]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
3. Clicking/Touching an href navigates (and updates the URL) to
|
3. Clicking/Touching an href navigates (and updates the URL) to
|
||||||
another scene/file (and coordinate e.g. in case the URL contains
|
another scene/file (and coordinate e.g. in case the URL contains
|
||||||
XR Fragments).
|
XR Fragments).
|
||||||
|
|
@ -993,6 +1114,14 @@ Internet-Draft XR Fragments September 2025
|
||||||
(https://github.com/coderofsalvation/xrfragment/blob/dev/example/
|
(https://github.com/coderofsalvation/xrfragment/blob/dev/example/
|
||||||
aframe/sandbox/index.html#L26-L29) for an example wearable)
|
aframe/sandbox/index.html#L26-L29) for an example wearable)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 20]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
6. make sure that the ''back-button'' of the ''browser-history''
|
6. make sure that the ''back-button'' of the ''browser-history''
|
||||||
always refers to the previous position (see [here (https://github
|
always refers to the previous position (see [here (https://github
|
||||||
.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/
|
.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/
|
||||||
|
|
@ -1002,14 +1131,6 @@ Internet-Draft XR Fragments September 2025
|
||||||
using camera-portal collision (the back-button could cause a
|
using camera-portal collision (the back-button could cause a
|
||||||
teleport-loop if the previous position is too close)
|
teleport-loop if the previous position is too close)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 18]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
8. href-events should bubble upward the node-tree (from children to
|
8. href-events should bubble upward the node-tree (from children to
|
||||||
ancestors, so that ancestors can also conain an href), however
|
ancestors, so that ancestors can also conain an href), however
|
||||||
only 1 href can be executed at the same time.
|
only 1 href can be executed at the same time.
|
||||||
|
|
@ -1041,7 +1162,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| optionally the viewer can offer thumbstick, mouse or joystick
|
| optionally the viewer can offer thumbstick, mouse or joystick
|
||||||
| teleport-tools for non-roomscale VR/AR setups.
|
| teleport-tools for non-roomscale VR/AR setups.
|
||||||
|
|
||||||
15. Virtual world rings
|
15. Example: Virtual world rings
|
||||||
|
|
||||||
Consider 3D scenes linking to eachother using these href values,
|
Consider 3D scenes linking to eachother using these href values,
|
||||||
attached to 3D button-objects:
|
attached to 3D button-objects:
|
||||||
|
|
@ -1050,6 +1171,13 @@ Internet-Draft XR Fragments September 2025
|
||||||
* href: schoolB.edu/projects.gltf#math
|
* href: schoolB.edu/projects.gltf#math
|
||||||
* href: university.edu/projects.gltf#math
|
* href: university.edu/projects.gltf#math
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 21]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
This would teleport users to the math-projects of those universities.
|
This would teleport users to the math-projects of those universities.
|
||||||
Now consider adding a 'webring index'-button to each file, with this
|
Now consider adding a 'webring index'-button to each file, with this
|
||||||
href-value:
|
href-value:
|
||||||
|
|
@ -1059,20 +1187,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
This would allow displaying the (remote 3D file) webring menu with
|
This would allow displaying the (remote 3D file) webring menu with
|
||||||
various href-buttons inside, all centrally curated by the workgroup.
|
various href-buttons inside, all centrally curated by the workgroup.
|
||||||
|
|
||||||
|
16. Additional scene metadata
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 19]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
16. Level5: URI Templates (RFC6570)
|
|
||||||
|
|
||||||
XR Fragments adopts Level1 URI *Fragment* expansion to provide safe
|
|
||||||
interactivity.
|
|
||||||
This is non-normative, and the draft spec is available on request.
|
|
||||||
|
|
||||||
17. Additional scene metadata
|
|
||||||
|
|
||||||
XR Fragments does not aim to redefine the metadata-space or
|
XR Fragments does not aim to redefine the metadata-space or
|
||||||
accessibility-space by introducing its own cataloging-metadata
|
accessibility-space by introducing its own cataloging-metadata
|
||||||
|
|
@ -1111,17 +1226,17 @@ Internet-Draft XR Fragments September 2025
|
||||||
| the hashtags are clickable XR Fragments (activating the visible-
|
| the hashtags are clickable XR Fragments (activating the visible-
|
||||||
| links in the XR browser).
|
| links in the XR browser).
|
||||||
|
|
||||||
Individual nodes can be enriched with such metadata, but most
|
|
||||||
importantly the scene node:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 22]
|
||||||
van Kammen Expires 23 March 2026 [Page 20]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
Individual nodes can be enriched with such metadata, but most
|
||||||
|
importantly the scene node:
|
||||||
|
|
||||||
+================================+=========================+
|
+================================+=========================+
|
||||||
| metadata key | example value |
|
| metadata key | example value |
|
||||||
+================================+=========================+
|
+================================+=========================+
|
||||||
|
|
@ -1155,7 +1270,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| These attributes can be scanned and presented during an href or
|
| These attributes can be scanned and presented during an href or
|
||||||
| src eye/mouse-over.
|
| src eye/mouse-over.
|
||||||
|
|
||||||
18. Accessibility interface
|
17. Accessibility interface
|
||||||
|
|
||||||
The addressibility of XR Fragments allows for unique 3D-to-text
|
The addressibility of XR Fragments allows for unique 3D-to-text
|
||||||
transcripts, as well as an textual interface to navigate 3D content.
|
transcripts, as well as an textual interface to navigate 3D content.
|
||||||
|
|
@ -1166,18 +1281,19 @@ Internet-Draft XR Fragments September 2025
|
||||||
persists across application/webpage restarts)
|
persists across application/webpage restarts)
|
||||||
2. Accessibility-mode must contain a text-input for the user to
|
2. Accessibility-mode must contain a text-input for the user to
|
||||||
enter text
|
enter text
|
||||||
3. Accessibility-mode must contain a flexible textlog for the user
|
|
||||||
to read (via screenreader, screen, or TTS e.g.)
|
|
||||||
4. the textlog contains aria-descriptions, and its narration
|
|
||||||
(Screenreader e.g.) can be skipped (via 2-button navigation)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 21]
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 23]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
3. Accessibility-mode must contain a flexible textlog for the user
|
||||||
|
to read (via screenreader, screen, or TTS e.g.)
|
||||||
|
4. the textlog contains aria-descriptions, and its narration
|
||||||
|
(Screenreader e.g.) can be skipped (via 2-button navigation)
|
||||||
5. The back command should navigate back to the previous URL (alias
|
5. The back command should navigate back to the previous URL (alias
|
||||||
for browser-backbutton)
|
for browser-backbutton)
|
||||||
6. The forward command should navigate back to the next URL (alias
|
6. The forward command should navigate back to the next URL (alias
|
||||||
|
|
@ -1205,7 +1321,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
https://.../... in case a 3D node exist with name abc and href
|
https://.../... in case a 3D node exist with name abc and href
|
||||||
value https://.../...
|
value https://.../...
|
||||||
|
|
||||||
18.1. Two-button navigation
|
17.1. Two-button navigation
|
||||||
|
|
||||||
For specific user-profiles, gyroscope/mouse/keyboard/audio/visuals
|
For specific user-profiles, gyroscope/mouse/keyboard/audio/visuals
|
||||||
will not be available.
|
will not be available.
|
||||||
|
|
@ -1219,7 +1335,18 @@ Internet-Draft XR Fragments September 2025
|
||||||
3. the TTS reads the href-value (and/or aria-description if
|
3. the TTS reads the href-value (and/or aria-description if
|
||||||
available)
|
available)
|
||||||
|
|
||||||
18.2. Overlap with fileformat-specific extensions
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 24]
|
||||||
|
|
||||||
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
17.2. Overlap with fileformat-specific extensions
|
||||||
|
|
||||||
Some 3D scene-fileformats have support for extensions. What if the
|
Some 3D scene-fileformats have support for extensions. What if the
|
||||||
functionality of those overlap? For example, GLTF has the OMI_LINK
|
functionality of those overlap? For example, GLTF has the OMI_LINK
|
||||||
|
|
@ -1227,13 +1354,6 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
| Priority Order and Precedence, otherwise fallback applies
|
| Priority Order and Precedence, otherwise fallback applies
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 22]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
|
||||||
|
|
||||||
|
|
||||||
1.*Extensions Take Precedence*: Since glTF-specific extensions are
|
1.*Extensions Take Precedence*: Since glTF-specific extensions are
|
||||||
designed with the format’s specific needs and optimizations in mind,
|
designed with the format’s specific needs and optimizations in mind,
|
||||||
they should take precedence over extras metadata in cases where both
|
they should take precedence over extras metadata in cases where both
|
||||||
|
|
@ -1260,7 +1380,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
| them according to XR Fragment spec (teleport user). But only
|
| them according to XR Fragment spec (teleport user). But only
|
||||||
| once: ignore further overlapping metadata for that usecase.
|
| once: ignore further overlapping metadata for that usecase.
|
||||||
|
|
||||||
18.3. Vendor Prefixes
|
18. Vendor Prefixes
|
||||||
|
|
||||||
Vendor-specific metadata in a 3D scenefiles, are similar to vendor-
|
Vendor-specific metadata in a 3D scenefiles, are similar to vendor-
|
||||||
specific CSS-prefixes (https://en.wikipedia.org/wiki/
|
specific CSS-prefixes (https://en.wikipedia.org/wiki/
|
||||||
|
|
@ -1277,15 +1397,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
van Kammen Expires 23 March 2026 [Page 25]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 23]
|
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1341,7 +1453,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 24]
|
van Kammen Expires 23 March 2026 [Page 26]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1397,7 +1509,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 25]
|
van Kammen Expires 23 March 2026 [Page 27]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1453,7 +1565,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 26]
|
van Kammen Expires 23 March 2026 [Page 28]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1509,7 +1621,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 27]
|
van Kammen Expires 23 March 2026 [Page 29]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1565,7 +1677,7 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 28]
|
van Kammen Expires 23 March 2026 [Page 30]
|
||||||
|
|
||||||
Internet-Draft XR Fragments September 2025
|
Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
@ -1621,4 +1733,4 @@ Internet-Draft XR Fragments September 2025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 23 March 2026 [Page 29]
|
van Kammen Expires 23 March 2026 [Page 31]
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,87 @@ These heuristics, enable features that are both meaningful and consistent across
|
||||||
|
|
||||||
<middle>
|
<middle>
|
||||||
|
|
||||||
|
<section anchor="quick-reference"><name>Quick reference</name>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#abstract">Abstract</eref></li>
|
||||||
|
<li><eref target="#index">Index</eref></li>
|
||||||
|
<li><eref target="#introduction">Introduction</eref></li>
|
||||||
|
<li><eref target="#what-is-xr-fragments">What is XR Fragments</eref></li>
|
||||||
|
<li><eref target="#hfl-hypermediatic-feedback-loop-for-xr-browsers">HFL (Hypermediatic Feedback Loop) for XR Browsers</eref></li>
|
||||||
|
<li><t><eref target="#conventions-and-definitions">Conventions and Definitions</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#xr-fragment-url-grammar">XR Fragment URL Grammar</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><eref target="#spatial-referencing-3d">Spatial Referencing 3D</eref></li>
|
||||||
|
<li><t><eref target="#level0-files">Level0: Files</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#via-href-metadata">via href metadata</eref></li>
|
||||||
|
<li><eref target="#via-chained-extension">via chained extension</eref></li>
|
||||||
|
<li><eref target="#via-subdocuments-xattr">via subdocuments/xattr</eref></li>
|
||||||
|
<li><eref target="#json-sidecar-file">JSON sidecar-file</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><t><eref target="#level1-uri">Level1: URI</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#list-of-uri-fragments">List of URI Fragments</eref></li>
|
||||||
|
<li><eref target="#list-of-explicit-metadata">List of explicit metadata</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><t><eref target="#level2-href-links">Level2: href links</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#interaction-behaviour">Interaction behaviour</eref></li>
|
||||||
|
<li><eref target="#xr-viewer-implementation">XR Viewer implementation</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><t><eref target="#level3-media-fragments">Level3: Media Fragments</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#animation-s-timeline">Animation(s) timeline</eref></li>
|
||||||
|
<li><eref target="#specify-playback-loopmode">Specify playback loopmode</eref></li>
|
||||||
|
<li><eref target="#controlling-embedded-content">Controlling embedded content</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><t><eref target="#level4-prefix-operators">Level4: prefix operators</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#object-teleports">Object teleports</eref></li>
|
||||||
|
<li><eref target="#object-multipliers">Object multipliers</eref></li>
|
||||||
|
<li><eref target="#de-selectors-and">De/selectors (+ and -)</eref></li>
|
||||||
|
<li><eref target="#sharing-object-or-file">Sharing object or file (#|)</eref></li>
|
||||||
|
<li><eref target="#xrf-uri-scheme">xrf:// URI scheme</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><eref target="#level5-uri-templates-rfc6570">Level5: URI Templates (RFC6570)</eref></li>
|
||||||
|
<li><t><eref target="#top-level-url-processing">Top-level URL processing</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#ux">UX</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><t><eref target="#example-navigating-content-href-portals">Example: Navigating content href portals</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#walking-surfaces">Walking surfaces</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><eref target="#example-virtual-world-rings">Example: Virtual world rings</eref></li>
|
||||||
|
<li><eref target="#additional-scene-metadata">Additional scene metadata</eref></li>
|
||||||
|
<li><t><eref target="#accessibility-interface">Accessibility interface</eref></t>
|
||||||
|
|
||||||
|
<ol spacing="compact">
|
||||||
|
<li><eref target="#two-button-navigation">Two-button navigation</eref></li>
|
||||||
|
<li><eref target="#overlap-with-fileformat-specific-extensions">Overlap with fileformat-specific extensions</eref></li>
|
||||||
|
</ol></li>
|
||||||
|
<li><eref target="#vendor-prefixes">Vendor Prefixes</eref></li>
|
||||||
|
<li><eref target="#security-considerations">Security Considerations</eref></li>
|
||||||
|
<li><eref target="#faq">FAQ</eref></li>
|
||||||
|
<li><eref target="#authors">Authors</eref></li>
|
||||||
|
<li><eref target="#iana-considerations">IANA Considerations</eref></li>
|
||||||
|
<li><eref target="#acknowledgments">Acknowledgments</eref></li>
|
||||||
|
<li><eref target="#appendix-definitions">Appendix: Definitions</eref></li>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section anchor="introduction"><name>Introduction</name>
|
<section anchor="introduction"><name>Introduction</name>
|
||||||
<t>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br />
|
<iref item="Introduction"/><t>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br />
|
||||||
|
|
||||||
Historically, there's many attempts to create the ultimate 3D fileformat.<br />
|
Historically, there's many attempts to create the ultimate 3D fileformat.<br />
|
||||||
|
|
||||||
|
|
@ -50,7 +129,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
|
|
||||||
<section anchor="what-is-xr-fragments"><name>What is XR Fragments</name>
|
<section anchor="what-is-xr-fragments"><name>What is XR Fragments</name>
|
||||||
<t>XR Fragments utilizes URLs:</t>
|
<iref item="What is XR Fragments"/><t>XR Fragments utilizes URLs:</t>
|
||||||
|
|
||||||
<ol spacing="compact">
|
<ol spacing="compact">
|
||||||
<li>for 3D viewers/browser to manipulate the camera or objects (via URI fragments)</li>
|
<li>for 3D viewers/browser to manipulate the camera or objects (via URI fragments)</li>
|
||||||
|
|
@ -61,6 +140,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="hfl-hypermediatic-feedback-loop-for-xr-browsers"><name>HFL (Hypermediatic Feedback Loop) for XR Browsers</name>
|
<section anchor="hfl-hypermediatic-feedback-loop-for-xr-browsers"><name>HFL (Hypermediatic Feedback Loop) for XR Browsers</name>
|
||||||
|
<t><iref item="HFL (Hypermediatic Feedback Loop"/> for XR Browsers)</t>
|
||||||
<t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<tt>xrf://....</tt>) via the <tt>xrf://</tt> scheme, which does not change the top-level URL-adress (of the browser).
|
<t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<tt>xrf://....</tt>) via the <tt>xrf://</tt> scheme, which does not change the top-level URL-adress (of the browser).
|
||||||
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
|
||||||
These are called <strong>hashbus</strong>-only events/</t>
|
These are called <strong>hashbus</strong>-only events/</t>
|
||||||
|
|
@ -148,10 +228,10 @@ These are called <strong>hashbus</strong>-only events/</t>
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
|
|
||||||
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
|
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
|
||||||
<t>See appendix below in case certain terms are not clear.</t>
|
<iref item="Conventions and Definitions"/><t>See appendix below in case certain terms are not clear.</t>
|
||||||
|
|
||||||
<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>
|
<iref item="XR Fragment URL Grammar"/><t>For typical HTTP-like browsers/applications:</t>
|
||||||
|
|
||||||
<artwork><![CDATA[reserved = gen-delims / sub-delims
|
<artwork><![CDATA[reserved = gen-delims / sub-delims
|
||||||
gen-delims = "#" / "&"
|
gen-delims = "#" / "&"
|
||||||
|
|
@ -188,7 +268,7 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name>
|
<section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name>
|
||||||
<t>3D files contain an hierarchy of objects.<br />
|
<iref item="Spatial Referencing 3D"/><t>3D files contain an hierarchy of objects.<br />
|
||||||
|
|
||||||
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:</t>
|
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:</t>
|
||||||
|
|
||||||
|
|
@ -222,7 +302,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
|
|
||||||
<section anchor="level0-files"><name>Level0: Files</name>
|
<section anchor="level0-files"><name>Level0: Files</name>
|
||||||
<t>These are <strong>optional</strong> auto-loaded <eref target="">side-car files</eref> to enable hasslefree <eref target="#XR%20Movies">XR Movies</eref>.<br />
|
<iref item="Level0: Files"/><iref item="Level0: Files"/><t>These are <strong>optional</strong> auto-loaded <eref target="">side-car files</eref> to enable hasslefree <eref target="#XR%20Movies">XR Movies</eref>.<br />
|
||||||
|
|
||||||
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a <tt>.glb</tt> e.g.).</t>
|
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a <tt>.glb</tt> e.g.).</t>
|
||||||
|
|
||||||
|
|
@ -319,7 +399,7 @@ The sidecar will define (or <strong>override</strong> already existing) extras,
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="level1-uri"><name>Level1: URI</name>
|
<section anchor="level1-uri"><name>Level1: URI</name>
|
||||||
<blockquote><t><strong>XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments</strong></t>
|
<iref item="Level1: URI"/><blockquote><t><strong>XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments</strong></t>
|
||||||
</blockquote><t>XR Fragments tries to seek to connect the world of text (semantical web / RDF), and the world of pixels.<br />
|
</blockquote><t>XR Fragments tries to seek to connect the world of text (semantical web / RDF), and the world of pixels.<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 />
|
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 />
|
||||||
|
|
@ -376,8 +456,7 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
|
||||||
]]>
|
]]>
|
||||||
</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>
|
||||||
|
|
||||||
<section anchor="list-of-uri-fragments"><name>List of URI Fragments</name>
|
<section anchor="list-of-uri-fragments"><name>List of URI Fragments</name>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
|
@ -429,9 +508,10 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table></section>
|
</table></section>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section anchor="level2-href-links"><name>Level2: href links</name>
|
<section anchor="level2-href-links"><name>Level2: href links</name>
|
||||||
<t>Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object :</t>
|
<iref item="Level2: href links"/><t>Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object :</t>
|
||||||
<t>| fragment | type | example value |
|
<t>| fragment | type | example value |
|
||||||
|<tt>href</tt>| string (uri or predefined view) | <tt>#pyramid</tt><br />
|
|<tt>href</tt>| string (uri or predefined view) | <tt>#pyramid</tt><br />
|
||||||
<tt>#lastvisit</tt><br />
|
<tt>#lastvisit</tt><br />
|
||||||
|
|
@ -459,7 +539,7 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="level3-media-fragments"><name>Level3: Media Fragments</name>
|
<section anchor="level3-media-fragments"><name>Level3: Media Fragments</name>
|
||||||
<blockquote><t>these allow for XR Movies with a controllable timeline using <tt>href</tt> URI's with Media Fragments</t>
|
<iref item="Level3: Media Fragments"/><blockquote><t>these allow for XR Movies with a controllable timeline using <tt>href</tt> URI's with Media Fragments</t>
|
||||||
</blockquote><t>Just like with 2D media-files, W3C mediafragments (<tt>#t=1,2</tt>) can be used to control a timeline via the <eref target="##t">#t</eref> primitive.
|
</blockquote><t>Just like with 2D media-files, W3C mediafragments (<tt>#t=1,2</tt>) can be used to control a timeline via the <eref target="##t">#t</eref> primitive.
|
||||||
XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files <strong>controllable</strong> via Media Fragments like:</t>
|
XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files <strong>controllable</strong> via Media Fragments like:</t>
|
||||||
|
|
||||||
|
|
@ -514,7 +594,7 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files <stro
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="level4-prefix-operators"><name>Level4: prefix operators</name>
|
<section anchor="level4-prefix-operators"><name>Level4: prefix operators</name>
|
||||||
<t>Prefixing objectnames with the following simple operators allow for <strong>extremely powerful</strong> XR interactions:</t>
|
<iref item="Level4: prefix operators"/><t>Prefixing objectnames with the following simple operators allow for <strong>extremely powerful</strong> XR interactions:</t>
|
||||||
|
|
||||||
<ul spacing="compact">
|
<ul spacing="compact">
|
||||||
<li>#!</li>
|
<li>#!</li>
|
||||||
|
|
@ -637,8 +717,15 @@ Clicking the href-value below will:</t>
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section anchor="level5-uri-templates-rfc6570"><name>Level5: URI Templates (RFC6570)</name>
|
||||||
|
<t><iref item="Level5: URI Templates (RFC6570"/>)</t>
|
||||||
|
<t>XR Fragments adopts Level1 URI <strong>Fragment</strong> expansion to provide safe interactivity.<br />
|
||||||
|
|
||||||
|
This is non-normative, and the draft spec is available on request.</t>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section anchor="top-level-url-processing"><name>Top-level URL processing</name>
|
<section anchor="top-level-url-processing"><name>Top-level URL processing</name>
|
||||||
<blockquote><t>Example URL: <tt>://foo/world.gltf#room1&t=10&cam</tt></t>
|
<iref item="Top-level URL processing"/><blockquote><t>Example URL: <tt>://foo/world.gltf#room1&t=10&cam</tt></t>
|
||||||
</blockquote><t>The URL-processing-flow for hypermedia browsers goes like this:</t>
|
</blockquote><t>The URL-processing-flow for hypermedia browsers goes like this:</t>
|
||||||
|
|
||||||
<ol spacing="compact">
|
<ol spacing="compact">
|
||||||
|
|
@ -659,7 +746,7 @@ Clicking the href-value below will:</t>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="example-navigating-content-href-portals"><name>Example: Navigating content href portals</name>
|
<section anchor="example-navigating-content-href-portals"><name>Example: Navigating content href portals</name>
|
||||||
<t>navigation, portals & mutations</t>
|
<iref item="Example: Navigating content href portals"/><t>navigation, portals & mutations</t>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
@ -718,8 +805,8 @@ Clicking the href-value below will:</t>
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="virtual-world-rings"><name>Virtual world rings</name>
|
<section anchor="example-virtual-world-rings"><name>Example: Virtual world rings</name>
|
||||||
<t>Consider 3D scenes linking to eachother using these <tt>href</tt> values, attached to 3D button-objects:</t>
|
<iref item="Example: Virtual world rings"/><t>Consider 3D scenes linking to eachother using these <tt>href</tt> values, attached to 3D button-objects:</t>
|
||||||
|
|
||||||
<ul spacing="compact">
|
<ul spacing="compact">
|
||||||
<li><tt>href: schoolA.edu/projects.gltf#math</tt></li>
|
<li><tt>href: schoolA.edu/projects.gltf#math</tt></li>
|
||||||
|
|
@ -736,14 +823,8 @@ Now consider adding a 'webring index'-button to each file, with this href-value:
|
||||||
<t>This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.</t>
|
<t>This would allow displaying the (remote 3D file) webring menu with various href-buttons inside, all centrally curated by the workgroup.</t>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="level5-uri-templates-rfc6570"><name>Level5: URI Templates (RFC6570)</name>
|
|
||||||
<t>XR Fragments adopts Level1 URI <strong>Fragment</strong> expansion to provide safe interactivity.<br />
|
|
||||||
|
|
||||||
This is non-normative, and the draft spec is available on request.</t>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section anchor="additional-scene-metadata"><name>Additional scene metadata</name>
|
<section anchor="additional-scene-metadata"><name>Additional scene metadata</name>
|
||||||
<t>XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
<iref item="Additional scene metadata"/><t>XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields.
|
||||||
Instead, it encourages browsers to scan nodes for the following custom properties:</t>
|
Instead, it encourages browsers to scan nodes for the following custom properties:</t>
|
||||||
|
|
||||||
<ul spacing="compact">
|
<ul spacing="compact">
|
||||||
|
|
@ -823,7 +904,7 @@ Instead, it encourages browsers to scan nodes for the following custom propertie
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
|
|
||||||
<section anchor="accessibility-interface"><name>Accessibility interface</name>
|
<section anchor="accessibility-interface"><name>Accessibility interface</name>
|
||||||
<t>The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br />
|
<iref item="Accessibility interface"/><t>The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.<br />
|
||||||
|
|
||||||
Spec:<br />
|
Spec:<br />
|
||||||
<Br></t>
|
<Br></t>
|
||||||
|
|
@ -877,9 +958,10 @@ If a glTF implementation does not support a particular extension, the (XRF) extr
|
||||||
<blockquote><t><strong>Example 1</strong> In case of the OMI_LINK glTF extension (<tt>href: https://nlnet.nl</tt>) and an XR Fragment (<tt>href: #otherroom</tt> or <tt>href: otherplanet.glb</tt>), it is clear that <tt>https://nlnet.nl</tt> should open in a browsertab, whereas the XR Fragment links should teleport the user. If the OMI_LINK contains an XR Fragment (<tt>#room1</tt> e.g.) a teleport should be performed only (and other [overlapping] metadata should be ignored).</t>
|
<blockquote><t><strong>Example 1</strong> In case of the OMI_LINK glTF extension (<tt>href: https://nlnet.nl</tt>) and an XR Fragment (<tt>href: #otherroom</tt> or <tt>href: otherplanet.glb</tt>), it is clear that <tt>https://nlnet.nl</tt> should open in a browsertab, whereas the XR Fragment links should teleport the user. If the OMI_LINK contains an XR Fragment (<tt>#room1</tt> e.g.) a teleport should be performed only (and other [overlapping] metadata should be ignored).</t>
|
||||||
<t><strong>Example 2</strong> If an Extensions uses XR Fragments in URI's (<tt>href: #otherroom</tt> or <tt>href: xrf://-walls</tt> in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.</t>
|
<t><strong>Example 2</strong> If an Extensions uses XR Fragments in URI's (<tt>href: #otherroom</tt> or <tt>href: xrf://-walls</tt> in OMI_LINK e.g.), then perform them according to XR Fragment spec (teleport user). But only once: ignore further overlapping metadata for that usecase.</t>
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section anchor="vendor-prefixes"><name>Vendor Prefixes</name>
|
<section anchor="vendor-prefixes"><name>Vendor Prefixes</name>
|
||||||
<t>Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific <eref target="https://en.wikipedia.org/wiki/CSS#Vendor_prefixes">CSS-prefixes</eref> (<tt>-moz-opacity: 0.2</tt> e.g.).
|
<iref item="Vendor Prefixes"/><t>Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific <eref target="https://en.wikipedia.org/wiki/CSS#Vendor_prefixes">CSS-prefixes</eref> (<tt>-moz-opacity: 0.2</tt> e.g.).
|
||||||
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.</t>
|
This allows popular 3D engines/frameworks, to initialize specific features when loading a scene/object, in a progressive enhanced way.</t>
|
||||||
<t>Vendor Prefixes allows embedding 3D engines/framework-specific features a 3D file via metadata:</t>
|
<t>Vendor Prefixes allows embedding 3D engines/framework-specific features a 3D file via metadata:</t>
|
||||||
<table>
|
<table>
|
||||||
|
|
@ -953,10 +1035,9 @@ The lowest common denominator between 3D engines is the 'entity'-part of their e
|
||||||
<t>String-templatevalues are evaluated as per <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref> Level 1.</t>
|
<t>String-templatevalues are evaluated as per <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref> Level 1.</t>
|
||||||
<blockquote><t>This 'separating of mechanism from policy' (unix rule) does <strong>somewhat</strong> break portability of an XR experience, but still prevents (E-waste of) handcoded virtual worlds. It allows for (XR experience) metadata to survive in future 3D engines and scene-fileformats.</t>
|
<blockquote><t>This 'separating of mechanism from policy' (unix rule) does <strong>somewhat</strong> break portability of an XR experience, but still prevents (E-waste of) handcoded virtual worlds. It allows for (XR experience) metadata to survive in future 3D engines and scene-fileformats.</t>
|
||||||
</blockquote></section>
|
</blockquote></section>
|
||||||
</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 />
|
<iref item="Security Considerations"/><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 />
|
||||||
|
|
||||||
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br />
|
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.<br />
|
||||||
|
|
||||||
|
|
@ -964,7 +1045,7 @@ n fact, it is much safer than relying on a scripting language (javascript) which
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="faq"><name>FAQ</name>
|
<section anchor="faq"><name>FAQ</name>
|
||||||
<t><strong>Q:</strong> Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br />
|
<iref item="FAQ"/><t><strong>Q:</strong> Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS<br />
|
||||||
|
|
||||||
<strong>A:</strong> Because it's out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru <tt>src</tt> values)</t>
|
<strong>A:</strong> Because it's out of scope: XR Fragment specifies a read-only way to surf XR documents. These things belong in the application layer (for example, an XR Hypermedia browser can decide to support POST/PUT/DELETE requests for embedded HTML thru <tt>src</tt> values)</t>
|
||||||
<t><strong>Q:</strong> Why isn't there support for scripting, URI Template Fragments are so limited compared to WASM & javascript
|
<t><strong>Q:</strong> Why isn't there support for scripting, URI Template Fragments are so limited compared to WASM & javascript
|
||||||
|
|
@ -981,7 +1062,7 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="authors"><name>authors</name>
|
<section anchor="authors"><name>authors</name>
|
||||||
|
<iref item="authors"/>
|
||||||
<ul spacing="compact">
|
<ul spacing="compact">
|
||||||
<li>Leon van Kammen (@lvk@mastodon.online)</li>
|
<li>Leon van Kammen (@lvk@mastodon.online)</li>
|
||||||
<li>Jens Finkhäuser (@jens@social.finkhaeuser.de)</li>
|
<li>Jens Finkhäuser (@jens@social.finkhaeuser.de)</li>
|
||||||
|
|
@ -989,11 +1070,11 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="iana-considerations"><name>IANA Considerations</name>
|
<section anchor="iana-considerations"><name>IANA Considerations</name>
|
||||||
<t>This document has no IANA actions.</t>
|
<iref item="IANA Considerations"/><t>This document has no IANA actions.</t>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="acknowledgments"><name>Acknowledgments</name>
|
<section anchor="acknowledgments"><name>Acknowledgments</name>
|
||||||
|
<iref item="Acknowledgments"/>
|
||||||
<ul spacing="compact">
|
<ul spacing="compact">
|
||||||
<li><eref target="https://nlnet.nl">NLNET</eref></li>
|
<li><eref target="https://nlnet.nl">NLNET</eref></li>
|
||||||
<li><eref target="https://futureoftext.org">Future of Text</eref></li>
|
<li><eref target="https://futureoftext.org">Future of Text</eref></li>
|
||||||
|
|
@ -1011,7 +1092,7 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="appendix-definitions"><name>Appendix: Definitions</name>
|
<section anchor="appendix-definitions"><name>Appendix: Definitions</name>
|
||||||
<table>
|
<iref item="Appendix: Definitions"/><table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>definition</th>
|
<th>definition</th>
|
||||||
|
|
|
||||||
|
|
@ -20,4 +20,6 @@
|
||||||
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# to create [markdown] table of contents use LLM with this input: awk '/id="/ { print $0 }' RFC_XR_Fragments.html | grep -v idx
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue