spec simplify + overhaul

This commit is contained in:
Leon van Kammen 2025-09-19 19:53:30 +02:00
parent 7f42e7f5aa
commit ec07443201
5 changed files with 764 additions and 224 deletions

View file

@ -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&rsquo;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 &lsquo;extras&rsquo; 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 (&lsquo;extras&rsquo;) in a 3D object (of a 3D file), hint the viewer that the user &ldquo;can interact&rdquo; 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&rsquo;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&amp;t=10&amp;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 &amp; 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 &lsquo;webring index&rsquo;-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&rsquo;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 &lsquo;entity&rsquo;-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&rsquo;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>

View file

@ -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 |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------|

View file

@ -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 formats 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]

View file

@ -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&amp;t=10&amp;cam</tt></t>
<iref item="Top-level URL processing"/><blockquote><t>Example URL: <tt>://foo/world.gltf#room1&amp;t=10&amp;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 &amp; mutations</t>
<iref item="Example: Navigating content href portals"/><t>navigation, portals &amp; 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 />
&lt;Br&gt;</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 &amp; 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>

View file

@ -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
}