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>
 | 
			
		||||
</blockquote>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
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>
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:1"></span></p>
 | 
			
		||||
 | 
			
		||||
<p>XR Fragments utilizes URLs:</p>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<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).
 | 
			
		||||
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:3"></span></p>
 | 
			
		||||
 | 
			
		||||
<p>See appendix below in case certain terms are not clear.</p>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:5"></span></p>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:8"></span></p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
<p><strong>XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments</strong></p>
 | 
			
		||||
</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>
 | 
			
		||||
</blockquote>
 | 
			
		||||
 | 
			
		||||
<h1 id="list-of-uri-fragments">List of URI Fragments</h1>
 | 
			
		||||
<h2 id="list-of-uri-fragments">List of URI Fragments</h2>
 | 
			
		||||
 | 
			
		||||
<table>
 | 
			
		||||
<thead>
 | 
			
		||||
| 
						 | 
				
			
			@ -508,7 +603,7 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
 | 
			
		|||
</tbody>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -536,6 +631,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
 | 
			
		|||
 | 
			
		||||
<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>| 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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:10"></span></p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
<p>these allow for XR Movies with a controllable timeline using <code>href</code> URI’s with Media Fragments</p>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:13"></span></p>
 | 
			
		||||
 | 
			
		||||
<blockquote>
 | 
			
		||||
<p>Example URL:  <code>://foo/world.gltf#room1&t=10&cam</code></p>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:14"></span></p>
 | 
			
		||||
 | 
			
		||||
<p>navigation, portals & mutations</p>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<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.
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
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>
 | 
			
		||||
</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.).
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:21"></span></p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li>Leon van Kammen (@lvk@mastodon.online)</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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:22"></span></p>
 | 
			
		||||
 | 
			
		||||
<p>This document has no IANA actions.</p>
 | 
			
		||||
 | 
			
		||||
<h1 id="acknowledgments">Acknowledgments</h1>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:23"></span></p>
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
<li><a href="https://nlnet.nl">NLNET</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>
 | 
			
		||||
 | 
			
		||||
<p><span class="index" id="idxref:24"></span></p>
 | 
			
		||||
 | 
			
		||||
<table>
 | 
			
		||||
<thead>
 | 
			
		||||
<tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -1342,6 +1469,149 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
 | 
			
		|||
</tr>
 | 
			
		||||
</tbody>
 | 
			
		||||
</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>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,57 @@ These heuristics, enable features that are both meaningful and consistent across
 | 
			
		|||
 | 
			
		||||
{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)
 | 
			
		||||
 | 
			
		||||
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>
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +176,7 @@ It solves:
 | 
			
		|||
> 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 )
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
 | 
			
		||||
`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. 
 | 
			
		||||
| 
						 | 
				
			
			@ -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()`).
 | 
			
		||||
 | 
			
		||||
# Conventions and Definitions
 | 
			
		||||
(!Conventions and Definitions)
 | 
			
		||||
 | 
			
		||||
See appendix below in case certain terms are not clear.
 | 
			
		||||
 | 
			
		||||
## XR Fragment URL Grammar 
 | 
			
		||||
(! XR Fragment URL Grammar )
 | 
			
		||||
 | 
			
		||||
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).
 | 
			
		||||
 | 
			
		||||
# Spatial Referencing 3D 
 | 
			
		||||
(!Spatial Referencing 3D )
 | 
			
		||||
 | 
			
		||||
3D files contain an hierarchy of objects.<br>
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
# Level0: Files 
 | 
			
		||||
(!Level0: Files )
 | 
			
		||||
(!Level0: Files)
 | 
			
		||||
 | 
			
		||||
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.).
 | 
			
		||||
| 
						 | 
				
			
			@ -325,6 +382,7 @@ The sidecar will define (or **override** already existing) extras, which can be
 | 
			
		|||
```
 | 
			
		||||
 | 
			
		||||
# Level1: URI
 | 
			
		||||
(!Level1: URI)
 | 
			
		||||
 | 
			
		||||
> **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.
 | 
			
		||||
 
 | 
			
		||||
# List of URI Fragments
 | 
			
		||||
## List of URI Fragments
 | 
			
		||||
 | 
			
		||||
| 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|
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List of **explicit* metadata 
 | 
			
		||||
## List of **explicit* metadata 
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
# Level3: Media Fragments 
 | 
			
		||||
(!Level3: 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)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
# 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)
 | 
			
		||||
 | 
			
		||||
> 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)
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
# 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:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
# 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 )
 | 
			
		||||
 | 
			
		||||
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:
 | 
			
		||||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
# 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>
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
## 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.).
 | 
			
		||||
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)
 | 
			
		||||
 | 
			
		||||
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>
 | 
			
		||||
n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.
 | 
			
		||||
 | 
			
		||||
# FAQ 
 | 
			
		||||
(!FAQ )
 | 
			
		||||
 | 
			
		||||
**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)
 | 
			
		||||
| 
						 | 
				
			
			@ -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).
 | 
			
		||||
 | 
			
		||||
# authors
 | 
			
		||||
(!authors)
 | 
			
		||||
 | 
			
		||||
* Leon van Kammen (@lvk@mastodon.online)
 | 
			
		||||
* Jens Finkhäuser (@jens@social.finkhaeuser.de)
 | 
			
		||||
 | 
			
		||||
# IANA Considerations
 | 
			
		||||
(!IANA Considerations)
 | 
			
		||||
 | 
			
		||||
This document has no IANA actions.
 | 
			
		||||
 | 
			
		||||
# Acknowledgments
 | 
			
		||||
(!Acknowledgments)
 | 
			
		||||
 | 
			
		||||
* [NLNET](https://nlnet.nl)
 | 
			
		||||
* [Future of Text](https://futureoftext.org)
 | 
			
		||||
| 
						 | 
				
			
			@ -880,6 +954,7 @@ This document has no IANA actions.
 | 
			
		|||
* Mark Anderson
 | 
			
		||||
 | 
			
		||||
# Appendix: Definitions 
 | 
			
		||||
(!Appendix: Definitions )
 | 
			
		||||
 | 
			
		||||
|definition            | explanation                                                                                                                          |
 | 
			
		||||
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------|
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,26 +86,26 @@ Copyright Notice
 | 
			
		|||
 | 
			
		||||
Table of Contents
 | 
			
		||||
 | 
			
		||||
   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
 | 
			
		||||
   2.  What is XR Fragments  . . . . . . . . . . . . . . . . . . . .   4
 | 
			
		||||
   3.  HFL (Hypermediatic Feedback Loop) for XR Browsers . . . . . .   4
 | 
			
		||||
   4.  Conventions and Definitions . . . . . . . . . . . . . . . . .   6
 | 
			
		||||
     4.1.  XR Fragment URL Grammar . . . . . . . . . . . . . . . . .   6
 | 
			
		||||
   5.  Spatial Referencing 3D  . . . . . . . . . . . . . . . . . . .   6
 | 
			
		||||
   6.  Level0: Files . . . . . . . . . . . . . . . . . . . . . . . .   7
 | 
			
		||||
     6.1.  via href metadata . . . . . . . . . . . . . . . . . . . .   7
 | 
			
		||||
     6.2.  via chained extension . . . . . . . . . . . . . . . . . .   8
 | 
			
		||||
     6.3.  via subdocuments/xattr  . . . . . . . . . . . . . . . . .   8
 | 
			
		||||
     6.4.  JSON sidecar-file . . . . . . . . . . . . . . . . . . . .   9
 | 
			
		||||
   7.  Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . .   9
 | 
			
		||||
   8.  List of URI Fragments . . . . . . . . . . . . . . . . . . . .  11
 | 
			
		||||
   9.  List of *_explicit_ metadata  . . . . . . . . . . . . . . . .  12
 | 
			
		||||
   10. Level2: href links  . . . . . . . . . . . . . . . . . . . . .  12
 | 
			
		||||
     10.1.  Interaction behaviour  . . . . . . . . . . . . . . . . .  12
 | 
			
		||||
     10.2.  XR Viewer implementation . . . . . . . . . . . . . . . .  12
 | 
			
		||||
   11. Level3: Media Fragments . . . . . . . . . . . . . . . . . . .  13
 | 
			
		||||
     11.1.  Animation(s) timeline  . . . . . . . . . . . . . . . . .  13
 | 
			
		||||
     11.2.  Specify playback loopmode  . . . . . . . . . . . . . . .  13
 | 
			
		||||
   1.  Quick reference . . . . . . . . . . . . . . . . . . . . . . .   3
 | 
			
		||||
   2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
 | 
			
		||||
   3.  What is XR Fragments  . . . . . . . . . . . . . . . . . . . .   5
 | 
			
		||||
   4.  HFL (Hypermediatic Feedback Loop) for XR Browsers . . . . . .   5
 | 
			
		||||
   5.  Conventions and Definitions . . . . . . . . . . . . . . . . .   8
 | 
			
		||||
     5.1.  XR Fragment URL Grammar . . . . . . . . . . . . . . . . .   8
 | 
			
		||||
   6.  Spatial Referencing 3D  . . . . . . . . . . . . . . . . . . .   8
 | 
			
		||||
   7.  Level0: Files . . . . . . . . . . . . . . . . . . . . . . . .   9
 | 
			
		||||
     7.1.  via href metadata . . . . . . . . . . . . . . . . . . . .   9
 | 
			
		||||
     7.2.  via chained extension . . . . . . . . . . . . . . . . . .  10
 | 
			
		||||
     7.3.  via subdocuments/xattr  . . . . . . . . . . . . . . . . .  10
 | 
			
		||||
     7.4.  JSON sidecar-file . . . . . . . . . . . . . . . . . . . .  11
 | 
			
		||||
   8.  Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . .  11
 | 
			
		||||
     8.1.  List of URI Fragments . . . . . . . . . . . . . . . . . .  13
 | 
			
		||||
     8.2.  List of *_explicit_ metadata  . . . . . . . . . . . . . .  14
 | 
			
		||||
   9.  Level2: href links  . . . . . . . . . . . . . . . . . . . . .  14
 | 
			
		||||
     9.1.  Interaction behaviour . . . . . . . . . . . . . . . . . .  14
 | 
			
		||||
     9.2.  XR Viewer implementation  . . . . . . . . . . . . . . . .  14
 | 
			
		||||
   10. Level3: Media Fragments . . . . . . . . . . . . . . . . . . .  15
 | 
			
		||||
     10.1.  Animation(s) timeline  . . . . . . . . . . . . . . . . .  15
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,32 +114,93 @@ van Kammen                Expires 23 March 2026                 [Page 2]
 | 
			
		|||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
     11.3.  Controlling embedded content . . . . . . . . . . . . . .  14
 | 
			
		||||
   12. Level4: prefix operators  . . . . . . . . . . . . . . . . . .  14
 | 
			
		||||
     12.1.  Object teleports (!) . . . . . . . . . . . . . . . . . .  14
 | 
			
		||||
     12.2.  Object multipliers (*) . . . . . . . . . . . . . . . . .  16
 | 
			
		||||
     12.3.  De/selectors (+ and -) . . . . . . . . . . . . . . . . .  16
 | 
			
		||||
     12.4.  Sharing object or file (#|)  . . . . . . . . . . . . . .  16
 | 
			
		||||
     12.5.  xrf:// URI scheme  . . . . . . . . . . . . . . . . . . .  17
 | 
			
		||||
   13. Top-level URL processing  . . . . . . . . . . . . . . . . . .  17
 | 
			
		||||
     13.1.  UX . . . . . . . . . . . . . . . . . . . . . . . . . . .  17
 | 
			
		||||
   14. Example: Navigating content href portals  . . . . . . . . . .  18
 | 
			
		||||
     14.1.  Walking surfaces . . . . . . . . . . . . . . . . . . . .  19
 | 
			
		||||
   15. Virtual world rings . . . . . . . . . . . . . . . . . . . . .  19
 | 
			
		||||
   16. Level5: URI Templates (RFC6570) . . . . . . . . . . . . . . .  20
 | 
			
		||||
   17. Additional scene metadata . . . . . . . . . . . . . . . . . .  20
 | 
			
		||||
   18. Accessibility interface . . . . . . . . . . . . . . . . . . .  21
 | 
			
		||||
     18.1.  Two-button navigation  . . . . . . . . . . . . . . . . .  22
 | 
			
		||||
     18.2.  Overlap with fileformat-specific extensions  . . . . . .  22
 | 
			
		||||
     18.3.  Vendor Prefixes  . . . . . . . . . . . . . . . . . . . .  23
 | 
			
		||||
   19. Security Considerations . . . . . . . . . . . . . . . . . . .  26
 | 
			
		||||
   20. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  26
 | 
			
		||||
   21. authors . . . . . . . . . . . . . . . . . . . . . . . . . . .  26
 | 
			
		||||
   22. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  27
 | 
			
		||||
   23. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  27
 | 
			
		||||
   24. Appendix: Definitions . . . . . . . . . . . . . . . . . . . .  27
 | 
			
		||||
     10.2.  Specify playback loopmode  . . . . . . . . . . . . . . .  15
 | 
			
		||||
     10.3.  Controlling embedded content . . . . . . . . . . . . . .  16
 | 
			
		||||
   11. Level4: prefix operators  . . . . . . . . . . . . . . . . . .  16
 | 
			
		||||
     11.1.  Object teleports (!) . . . . . . . . . . . . . . . . . .  16
 | 
			
		||||
     11.2.  Object multipliers (*) . . . . . . . . . . . . . . . . .  18
 | 
			
		||||
     11.3.  De/selectors (+ and -) . . . . . . . . . . . . . . . . .  18
 | 
			
		||||
     11.4.  Sharing object or file (#|)  . . . . . . . . . . . . . .  18
 | 
			
		||||
     11.5.  xrf:// URI scheme  . . . . . . . . . . . . . . . . . . .  19
 | 
			
		||||
   12. Level5: URI Templates (RFC6570) . . . . . . . . . . . . . . .  19
 | 
			
		||||
   13. Top-level URL processing  . . . . . . . . . . . . . . . . . .  19
 | 
			
		||||
     13.1.  UX . . . . . . . . . . . . . . . . . . . . . . . . . . .  20
 | 
			
		||||
   14. Example: Navigating content href portals  . . . . . . . . . .  20
 | 
			
		||||
     14.1.  Walking surfaces . . . . . . . . . . . . . . . . . . . .  21
 | 
			
		||||
   15. Example: Virtual world rings  . . . . . . . . . . . . . . . .  21
 | 
			
		||||
   16. Additional scene metadata . . . . . . . . . . . . . . . . . .  22
 | 
			
		||||
   17. Accessibility interface . . . . . . . . . . . . . . . . . . .  23
 | 
			
		||||
     17.1.  Two-button navigation  . . . . . . . . . . . . . . . . .  24
 | 
			
		||||
     17.2.  Overlap with fileformat-specific extensions  . . . . . .  25
 | 
			
		||||
   18. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . . . .  25
 | 
			
		||||
   19. Security Considerations . . . . . . . . . . . . . . . . . . .  28
 | 
			
		||||
   20. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  28
 | 
			
		||||
   21. authors . . . . . . . . . . . . . . . . . . . . . . . . . . .  28
 | 
			
		||||
   22. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  29
 | 
			
		||||
   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
 | 
			
		||||
   introducing new dataformats?
 | 
			
		||||
| 
						 | 
				
			
			@ -155,21 +216,22 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
 | 
			
		||||
   It solves:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
van Kammen                Expires 23 March 2026                 [Page 4]
 | 
			
		||||
 | 
			
		||||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   1.  addressibility and hypermediatic
 | 
			
		||||
       (https://github.com/coderofsalvation/hypermediatic) navigation of
 | 
			
		||||
       3D scenes/objects: URI Fragments (https://en.wikipedia.org/wiki/
 | 
			
		||||
       URI_fragment) using src/href spatial metadata
 | 
			
		||||
   2.  Interlinking text & spatial objects by collapsing space into a
 | 
			
		||||
       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
 | 
			
		||||
       jumps to a chapter) for navigating XR documents
 | 
			
		||||
   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
 | 
			
		||||
   |  lowlevel (technical) as much as possible
 | 
			
		||||
 | 
			
		||||
2.  What is XR Fragments
 | 
			
		||||
3.  What is XR Fragments
 | 
			
		||||
 | 
			
		||||
   XR Fragments utilizes URLs:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +255,9 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   4.  externally: progressively enhance a 3D (file) into an experience
 | 
			
		||||
       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
 | 
			
		||||
   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
 | 
			
		||||
   webbrowsers:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
van Kammen                Expires 23 March 2026                 [Page 5]
 | 
			
		||||
 | 
			
		||||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   *  hypermediatic (https://github.com/coderofsalvation/hypermediatic)
 | 
			
		||||
      loading/clicking 3D assets (gltf/fbx e.g.) natively (with or
 | 
			
		||||
      without using HTML).
 | 
			
		||||
| 
						 | 
				
			
			@ -218,14 +290,6 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
      to trigger walk-animation for object person)
 | 
			
		||||
   *  potentially collapsing the 3D scene to an wordgraph (for essential
 | 
			
		||||
      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
 | 
			
		||||
      (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
 | 
			
		||||
   top of HTML/Javascript.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
van Kammen                Expires 23 March 2026                 [Page 6]
 | 
			
		||||
 | 
			
		||||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   +=========+======================+=====================================+
 | 
			
		||||
   |principle|3D URL                |HTML 2D URL                          |
 | 
			
		||||
   +=========+======================+=====================================+
 | 
			
		||||
| 
						 | 
				
			
			@ -273,26 +377,28 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
 | 
			
		||||
                                  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
 | 
			
		||||
   |  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()).
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
4.1.  XR Fragment URL Grammar
 | 
			
		||||
5.1.  XR Fragment URL Grammar
 | 
			
		||||
 | 
			
		||||
   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
 | 
			
		||||
   Fragments entrypoint-experience/client was used).
 | 
			
		||||
 | 
			
		||||
5.  Spatial Referencing 3D
 | 
			
		||||
6.  Spatial Referencing 3D
 | 
			
		||||
 | 
			
		||||
   3D files contain an hierarchy of objects.
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -369,14 +481,14 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  embedded object.  Basically an embedded link becoming an outbound
 | 
			
		||||
   |  link by activating it.
 | 
			
		||||
 | 
			
		||||
6.  Level0: Files
 | 
			
		||||
7.  Level0: Files
 | 
			
		||||
 | 
			
		||||
   These are *optional* auto-loaded side-car files to enable hasslefree
 | 
			
		||||
   XR Movies (#XR%20Movies).
 | 
			
		||||
   they can accomodate developers or applications who (for whatever
 | 
			
		||||
   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.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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -398,7 +510,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   *  The viewer should poll for the above mentioned sidecar-file
 | 
			
		||||
      extensions (and present accordingly)
 | 
			
		||||
 | 
			
		||||
6.2.  via chained extension
 | 
			
		||||
7.2.  via chained extension
 | 
			
		||||
 | 
			
		||||
   scene.xrf.glb  <--- '.xrf.' sidecar file heuristic detected!
 | 
			
		||||
   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
 | 
			
		||||
      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
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
6.4.  JSON sidecar-file
 | 
			
		||||
7.4.  JSON sidecar-file
 | 
			
		||||
 | 
			
		||||
   For developers, sidecar-file can allow for defining *explicit* XR
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
7.  Level1: URI
 | 
			
		||||
8.  Level1: URI
 | 
			
		||||
 | 
			
		||||
   |  *XR Fragments allows deeplinking of 3D objects by mapping
 | 
			
		||||
   |  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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -588,7 +700,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  Hypermediatic FeedbackLoop (HFL) between external and internal 4D
 | 
			
		||||
   |  navigation.
 | 
			
		||||
 | 
			
		||||
8.  List of URI Fragments
 | 
			
		||||
8.1.  List of URI Fragments
 | 
			
		||||
 | 
			
		||||
   +=======================+======================================+===========+=============+
 | 
			
		||||
   |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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                  Table 3
 | 
			
		||||
 | 
			
		||||
9.  List of *_explicit_ metadata
 | 
			
		||||
8.2.  List of *_explicit_ metadata
 | 
			
		||||
 | 
			
		||||
   These are the possible 'extras' for 3D nodes and sidecar-files
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -634,7 +746,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
 | 
			
		||||
                                  Table 4
 | 
			
		||||
 | 
			
		||||
10.  Level2: href links
 | 
			
		||||
9.  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 :
 | 
			
		||||
| 
						 | 
				
			
			@ -646,7 +758,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   ://somefile.gltf#foo
 | 
			
		||||
   |
 | 
			
		||||
 | 
			
		||||
10.1.  Interaction behaviour
 | 
			
		||||
9.1.  Interaction behaviour
 | 
			
		||||
 | 
			
		||||
   When clicking an ''href''-value, the user(camera) is teleport to the
 | 
			
		||||
   referenced object.
 | 
			
		||||
| 
						 | 
				
			
			@ -654,7 +766,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   The imported/teleported destination can be another object in the same
 | 
			
		||||
   scene-file, or a different file.
 | 
			
		||||
 | 
			
		||||
10.2.  XR Viewer implementation
 | 
			
		||||
9.2.  XR Viewer implementation
 | 
			
		||||
 | 
			
		||||
   | *spec* | *action* | *feature* | |-|-|-| | level0+1 | hover 3D file
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -685,7 +797,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  #roomC navigation, which benefit back/forward browser-buttons),
 | 
			
		||||
   |  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
 | 
			
		||||
   |  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
 | 
			
		||||
         experience
 | 
			
		||||
 | 
			
		||||
11.1.  Animation(s) timeline
 | 
			
		||||
10.1.  Animation(s) timeline
 | 
			
		||||
 | 
			
		||||
   controls the animation(s) of the scene (or src resource which
 | 
			
		||||
   contains a timeline)
 | 
			
		||||
| 
						 | 
				
			
			@ -716,7 +828,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
 | 
			
		||||
   |  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/
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -734,7 +846,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   animation/video/audio loop | | <b>#-loop</b> | string | disables
 | 
			
		||||
   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
 | 
			
		||||
   video-player:
 | 
			
		||||
| 
						 | 
				
			
			@ -753,7 +865,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
    └── ◻ playbutton_external
 | 
			
		||||
           └ 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
 | 
			
		||||
   *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 share an object
 | 
			
		||||
 | 
			
		||||
12.1.  Object teleports (!)
 | 
			
		||||
11.1.  Object teleports (!)
 | 
			
		||||
 | 
			
		||||
   Prefixing an object with an exclamation-symbol, will teleport a
 | 
			
		||||
   (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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -855,7 +967,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  *NOTE*: combining instance-operators allows dynamic construction
 | 
			
		||||
   |  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 usercamera's location, and make it grabbable.
 | 
			
		||||
| 
						 | 
				
			
			@ -865,7 +977,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  infinitely *clones* the referenced object (instead of
 | 
			
		||||
   |  repositioning the object).
 | 
			
		||||
 | 
			
		||||
12.3.  De/selectors (+ and -)
 | 
			
		||||
11.3.  De/selectors (+ and -)
 | 
			
		||||
 | 
			
		||||
   *  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
 | 
			
		||||
   |  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 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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -901,7 +1013,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   |  *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
 | 
			
		||||
   |  only
 | 
			
		||||
 | 
			
		||||
12.5.  xrf:// URI scheme
 | 
			
		||||
11.5.  xrf:// URI scheme
 | 
			
		||||
 | 
			
		||||
   Prefixing the xrf: to href (#href)-values *will prevent* level2
 | 
			
		||||
   (#📜%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
 | 
			
		||||
   |  (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
 | 
			
		||||
 | 
			
		||||
   |  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:
 | 
			
		||||
       //github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
 | 
			
		||||
       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)
 | 
			
		||||
       position
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -946,14 +1075,6 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
 | 
			
		||||
   1.  the current (toplevel) <b>URL</b> (an URLbar etc)
 | 
			
		||||
   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
 | 
			
		||||
       another scene/file (and coordinate e.g. in case the URL contains
 | 
			
		||||
       XR Fragments).
 | 
			
		||||
| 
						 | 
				
			
			@ -993,6 +1114,14 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
       (https://github.com/coderofsalvation/xrfragment/blob/dev/example/
 | 
			
		||||
       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''
 | 
			
		||||
       always refers to the previous position (see [here (https://github
 | 
			
		||||
       .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
 | 
			
		||||
       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
 | 
			
		||||
       ancestors, so that ancestors can also conain an href), however
 | 
			
		||||
       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
 | 
			
		||||
   |  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,
 | 
			
		||||
   attached to 3D button-objects:
 | 
			
		||||
| 
						 | 
				
			
			@ -1050,6 +1171,13 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   *  href: schoolB.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.
 | 
			
		||||
   Now consider adding a 'webring index'-button to each file, with this
 | 
			
		||||
   href-value:
 | 
			
		||||
| 
						 | 
				
			
			@ -1059,20 +1187,7 @@ Internet-Draft                XR Fragments                September 2025
 | 
			
		|||
   This would allow displaying the (remote 3D file) webring menu with
 | 
			
		||||
   various href-buttons inside, all centrally curated by the workgroup.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
16.  Additional scene metadata
 | 
			
		||||
 | 
			
		||||
   XR Fragments does not aim to redefine the metadata-space or
 | 
			
		||||
   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-
 | 
			
		||||
   |  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 20]
 | 
			
		||||
van Kammen                Expires 23 March 2026                [Page 22]
 | 
			
		||||
 | 
			
		||||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   Individual nodes can be enriched with such metadata, but most
 | 
			
		||||
   importantly the scene node:
 | 
			
		||||
 | 
			
		||||
       +================================+=========================+
 | 
			
		||||
       | 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
 | 
			
		||||
   |  src eye/mouse-over.
 | 
			
		||||
 | 
			
		||||
18.  Accessibility interface
 | 
			
		||||
17.  Accessibility interface
 | 
			
		||||
 | 
			
		||||
   The addressibility of XR Fragments allows for unique 3D-to-text
 | 
			
		||||
   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)
 | 
			
		||||
   2.   Accessibility-mode must contain a text-input for the user to
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   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
 | 
			
		||||
        for browser-backbutton)
 | 
			
		||||
   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
 | 
			
		||||
        value https://.../...
 | 
			
		||||
 | 
			
		||||
18.1.  Two-button navigation
 | 
			
		||||
17.1.  Two-button navigation
 | 
			
		||||
 | 
			
		||||
   For specific user-profiles, gyroscope/mouse/keyboard/audio/visuals
 | 
			
		||||
   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
 | 
			
		||||
       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
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
van Kammen                Expires 23 March 2026                [Page 22]
 | 
			
		||||
 | 
			
		||||
Internet-Draft                XR Fragments                September 2025
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   1.*Extensions Take Precedence*: Since glTF-specific extensions are
 | 
			
		||||
   designed with the format’s specific needs and optimizations in mind,
 | 
			
		||||
   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
 | 
			
		||||
   |  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-
 | 
			
		||||
   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 23]
 | 
			
		||||
van Kammen                Expires 23 March 2026                [Page 25]
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<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 />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +129,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
 | 
			
		|||
</blockquote></section>
 | 
			
		||||
 | 
			
		||||
<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">
 | 
			
		||||
<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 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).
 | 
			
		||||
This allows for many extra interactions via URLs, which otherwise needs a scripting language.
 | 
			
		||||
These are called  <strong>hashbus</strong>-only events/</t>
 | 
			
		||||
| 
						 | 
				
			
			@ -148,10 +228,10 @@ These are called  <strong>hashbus</strong>-only events/</t>
 | 
			
		|||
</blockquote></section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<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
 | 
			
		||||
gen-delims  = "#" / "&"
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +268,7 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
 | 
			
		|||
</section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +302,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
 | 
			
		|||
</blockquote></section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -319,7 +399,7 @@ The sidecar will define (or <strong>override</strong> already existing) extras,
 | 
			
		|||
</section>
 | 
			
		||||
 | 
			
		||||
<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 />
 | 
			
		||||
 | 
			
		||||
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>
 | 
			
		||||
<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>
 | 
			
		||||
<table>
 | 
			
		||||
<thead>
 | 
			
		||||
| 
						 | 
				
			
			@ -429,9 +508,10 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
 | 
			
		|||
</tr>
 | 
			
		||||
</tbody>
 | 
			
		||||
</table></section>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
<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 |
 | 
			
		||||
|<tt>href</tt>| string (uri or predefined view) | <tt>#pyramid</tt><br />
 | 
			
		||||
<tt>#lastvisit</tt><br />
 | 
			
		||||
| 
						 | 
				
			
			@ -459,7 +539,7 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
 | 
			
		|||
</section>
 | 
			
		||||
 | 
			
		||||
<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.
 | 
			
		||||
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 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">
 | 
			
		||||
<li>#!</li>
 | 
			
		||||
| 
						 | 
				
			
			@ -637,8 +717,15 @@ Clicking the href-value below will:</t>
 | 
			
		|||
</blockquote></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>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<ol spacing="compact">
 | 
			
		||||
| 
						 | 
				
			
			@ -659,7 +746,7 @@ Clicking the href-value below will:</t>
 | 
			
		|||
</section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<thead>
 | 
			
		||||
<tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -718,8 +805,8 @@ Clicking the href-value below will:</t>
 | 
			
		|||
</blockquote></section>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
<section anchor="virtual-world-rings"><name>Virtual world rings</name>
 | 
			
		||||
<t>Consider 3D scenes linking to eachother using these <tt>href</tt> values, attached to 3D button-objects:</t>
 | 
			
		||||
<section anchor="example-virtual-world-rings"><name>Example: Virtual world rings</name>
 | 
			
		||||
<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">
 | 
			
		||||
<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>
 | 
			
		||||
</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>
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
<ul spacing="compact">
 | 
			
		||||
| 
						 | 
				
			
			@ -823,7 +904,7 @@ Instead, it encourages browsers to scan nodes for the following custom propertie
 | 
			
		|||
</blockquote></section>
 | 
			
		||||
 | 
			
		||||
<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 />
 | 
			
		||||
<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>
 | 
			
		||||
<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>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<t>Vendor Prefixes allows embedding 3D engines/framework-specific features a 3D file via metadata:</t>
 | 
			
		||||
<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>
 | 
			
		||||
<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>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
<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 />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -964,7 +1045,7 @@ n fact, it is much safer than relying on a scripting language (javascript) which
 | 
			
		|||
</section>
 | 
			
		||||
 | 
			
		||||
<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>
 | 
			
		||||
<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 anchor="authors"><name>authors</name>
 | 
			
		||||
 | 
			
		||||
<iref item="authors"/>
 | 
			
		||||
<ul spacing="compact">
 | 
			
		||||
<li>Leon van Kammen (@lvk@mastodon.online)</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 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 anchor="acknowledgments"><name>Acknowledgments</name>
 | 
			
		||||
 | 
			
		||||
<iref item="Acknowledgments"/>
 | 
			
		||||
<ul spacing="compact">
 | 
			
		||||
<li><eref target="https://nlnet.nl">NLNET</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 anchor="appendix-definitions"><name>Appendix: Definitions</name>
 | 
			
		||||
<table>
 | 
			
		||||
<iref item="Appendix: Definitions"/><table>
 | 
			
		||||
<thead>
 | 
			
		||||
<tr>
 | 
			
		||||
<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