diff --git a/doc/RFC_XR_Fragments.html b/doc/RFC_XR_Fragments.html index b3c61e6..6920d4f 100644 --- a/doc/RFC_XR_Fragments.html +++ b/doc/RFC_XR_Fragments.html @@ -93,8 +93,88 @@ These heuristics, enable features that are both meaningful and consistent across

Almost every idea in this document is demonstrated at https://xrfragment.org

+

Quick reference

+ +
    +
  1. Abstract
  2. +
  3. Index
  4. +
  5. Introduction
  6. +
  7. What is XR Fragments
  8. +
  9. HFL (Hypermediatic Feedback Loop) for XR Browsers
  10. +
  11. Conventions and Definitions + +
      +
    1. XR Fragment URL Grammar
    2. +
  12. +
  13. Spatial Referencing 3D
  14. +
  15. Level0: Files + +
      +
    1. via href metadata
    2. +
    3. via chained extension
    4. +
    5. via subdocuments/xattr
    6. +
    7. JSON sidecar-file
    8. +
  16. +
  17. Level1: URI + +
      +
    1. List of URI Fragments
    2. +
    3. List of explicit metadata
    4. +
  18. +
  19. Level2: href links + +
      +
    1. Interaction behaviour
    2. +
    3. XR Viewer implementation
    4. +
  20. +
  21. Level3: Media Fragments + +
      +
    1. Animation(s) timeline
    2. +
    3. Specify playback loopmode
    4. +
    5. Controlling embedded content
    6. +
  22. +
  23. Level4: prefix operators + +
      +
    1. Object teleports
    2. +
    3. Object multipliers
    4. +
    5. De/selectors (+ and -)
    6. +
    7. Sharing object or file (#|)
    8. +
    9. xrf:// URI scheme
    10. +
  24. +
  25. Level5: URI Templates (RFC6570)
  26. +
  27. Top-level URL processing + +
      +
    1. UX
    2. +
  28. +
  29. Example: Navigating content href portals + +
      +
    1. Walking surfaces
    2. +
  30. +
  31. Example: Virtual world rings
  32. +
  33. Additional scene metadata
  34. +
  35. Accessibility interface + +
      +
    1. Two-button navigation
    2. +
    3. Overlap with fileformat-specific extensions
    4. +
  36. +
  37. Vendor Prefixes
  38. +
  39. Security Considerations
  40. +
  41. FAQ
  42. +
  43. Authors
  44. +
  45. IANA Considerations
  46. +
  47. Acknowledgments
  48. +
  49. Appendix: Definitions
  50. +
+

Introduction

+

+

How can we add more control to existing text and 3D scenes, without introducing new dataformats?
Historically, there’s many attempts to create the ultimate 3D fileformat.
The lowest common denominator is: designers describing/tagging/naming things using plain text.
@@ -118,6 +198,8 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:

What is XR Fragments

+

+

XR Fragments utilizes URLs:

    @@ -129,6 +211,8 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:

    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:// 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 hashbus-only events/

    @@ -226,10 +310,14 @@ These are called hashbus-only events/

    Conventions and Definitions

    +

    +

    See appendix below in case certain terms are not clear.

    XR Fragment URL Grammar

    +

    +

    For typical HTTP-like browsers/applications:

    reserved    = gen-delims / sub-delims
    @@ -272,6 +360,8 @@ That way, if the link gets shared, the XR Fragments implementation at http
     
     

    Spatial Referencing 3D

    +

    +

    3D files contain an hierarchy of objects.
    XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:

    @@ -310,6 +400,9 @@ For example, to render a portal with a preview-version of the scene, create an 3

    Level0: Files

    +

    +

    +

    These are optional auto-loaded side-car files to enable hasslefree XR Movies.
    they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a .glb e.g.).

    @@ -415,6 +508,8 @@ The sidecar will define (or override already existing) extras,

    Level1: URI

    +

    +

    XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments

    @@ -479,7 +574,7 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing

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

    @@ -508,7 +603,7 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
    -

    List of *explicit metadata

    +

    List of *explicit metadata

    These are the possible ‘extras’ for 3D nodes and sidecar-files

    @@ -536,6 +631,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing

    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 :

    | fragment | type | example value | @@ -565,6 +662,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing

    Level3: Media Fragments

    +

    +

    these allow for XR Movies with a controllable timeline using href URI’s with Media Fragments

    @@ -628,6 +727,8 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files Level4: prefix operators +

    +

    Prefixing objectnames with the following simple operators allow for extremely powerful XR interactions:

      @@ -787,8 +888,17 @@ Clicking the href-value below will:

      compliance with RFC 3986: unimplemented/unknown URI schemes (xrf:... e.g.) will not update the top-level URL

      +

      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.

      +

      Top-level URL processing

      +

      +

      Example URL: ://foo/world.gltf#room1&t=10&cam

      @@ -813,6 +923,8 @@ Clicking the href-value below will:

      Example: Navigating content href portals

      +

      +

      navigation, portals & mutations

      @@ -873,7 +985,9 @@ Clicking the href-value below will:

      optionally the viewer can offer thumbstick, mouse or joystick teleport-tools for non-roomscale VR/AR setups.

      -

      Virtual world rings

      +

      Example: Virtual world rings

      + +

      Consider 3D scenes linking to eachother using these href values, attached to 3D button-objects:

      @@ -892,13 +1006,10 @@ Now consider adding a ‘webring index’-button to each file, with this

      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.
      -This is non-normative, and the draft spec is available on request.

      -

      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:

      @@ -997,6 +1108,8 @@ Instead, it encourages browsers to scan nodes for the following custom propertie

      Accessibility interface

      +

      +

      The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.
      Spec:

      @@ -1057,7 +1170,9 @@ 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-specific metadata in a 3D scenefiles, are similar to vendor-specific CSS-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.

      @@ -1145,12 +1260,16 @@ The lowest common denominator between 3D engines is the ‘entity’-par

      Security Considerations

      +

      +

      The only dynamic parts are W3C Media Fragments and URI Templates (RFC6570).
      The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.
      n fact, it is much safer than relying on a scripting language (javascript) which can change URN too.

      FAQ

      +

      +

      Q: Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS
      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)

      @@ -1164,6 +1283,8 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to

      authors

      +

      +
      • Leon van Kammen (@lvk@mastodon.online)
      • Jens Finkhäuser (@jens@social.finkhaeuser.de)
      • @@ -1171,10 +1292,14 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to

        IANA Considerations

        +

        +

        This document has no IANA actions.

        Acknowledgments

        +

        +
        • NLNET
        • Future of Text
        • @@ -1192,6 +1317,8 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to

          Appendix: Definitions

          +

          +
      @@ -1342,6 +1469,149 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
      +

      Index

      +
      +
      +
      A
      +
      +
        +
      • +Accessibility interface [go]
      • +
      • +Acknowledgments [go]
      • +
      • +Additional scene metadata [go]
      • +
      • +Appendix: Definitions [go]
      • +
      +
      +
      +
      +
      C
      +
      +
        +
      • +Conventions and Definitions [go]
      • +
      +
      +
      +
      +
      E
      +
      +
        +
      • +Example: Navigating content href portals [go]
      • +
      • +Example: Virtual world rings [go]
      • +
      +
      +
      +
      +
      F
      +
      + +
      +
      +
      +
      H
      +
      +
        +
      • +HFL (Hypermediatic Feedback Loop [go]
      • +
      +
      +
      +
      +
      I
      +
      +
        +
      • +IANA Considerations [go]
      • +
      • +Introduction [go]
      • +
      +
      +
      +
      +
      L
      +
      +
        +
      • +Level0: Files [go] [go]
      • +
      • +Level1: URI [go]
      • +
      • +Level2: href links [go]
      • +
      • +Level3: Media Fragments [go]
      • +
      • +Level4: prefix operators [go]
      • +
      • +Level5: URI Templates (RFC6570 [go]
      • +
      +
      +
      +
      +
      S
      +
      +
        +
      • +Security Considerations [go]
      • +
      • +Spatial Referencing 3D [go]
      • +
      +
      +
      +
      +
      T
      +
      +
        +
      • +Top-level URL processing [go]
      • +
      +
      +
      +
      +
      V
      +
      +
        +
      • +Vendor Prefixes [go]
      • +
      +
      +
      +
      +
      W
      +
      +
        +
      • +What is XR Fragments [go]
      • +
      +
      +
      +
      +
      X
      +
      +
        +
      • +XR Fragment URL Grammar [go]
      • +
      +
      +
      +
      +
      a
      +
      + +
      +
      + +
diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index abee146..a4ec26d 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -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?
Historically, there's many attempts to create the ultimate 3D fileformat.
@@ -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.
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).
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 hashbus 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.
+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.
-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.
Spec:

@@ -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).
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.
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
**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 | |----------------------|--------------------------------------------------------------------------------------------------------------------------------------| diff --git a/doc/RFC_XR_Fragments.txt b/doc/RFC_XR_Fragments.txt index 638cb7b..7e84673 100644 --- a/doc/RFC_XR_Fragments.txt +++ b/doc/RFC_XR_Fragments.txt @@ -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 hashbus 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 | | #-loop | 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) URL (an URLbar etc) 2. URL-history (a back/forward 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] diff --git a/doc/RFC_XR_Fragments.xml b/doc/RFC_XR_Fragments.xml index 9492de8..91755f6 100644 --- a/doc/RFC_XR_Fragments.xml +++ b/doc/RFC_XR_Fragments.xml @@ -28,8 +28,87 @@ These heuristics, enable features that are both meaningful and consistent across +
Quick reference + +
    +
  1. Abstract
  2. +
  3. Index
  4. +
  5. Introduction
  6. +
  7. What is XR Fragments
  8. +
  9. HFL (Hypermediatic Feedback Loop) for XR Browsers
  10. +
  11. Conventions and Definitions + +
      +
    1. XR Fragment URL Grammar
    2. +
  12. +
  13. Spatial Referencing 3D
  14. +
  15. Level0: Files + +
      +
    1. via href metadata
    2. +
    3. via chained extension
    4. +
    5. via subdocuments/xattr
    6. +
    7. JSON sidecar-file
    8. +
  16. +
  17. Level1: URI + +
      +
    1. List of URI Fragments
    2. +
    3. List of explicit metadata
    4. +
  18. +
  19. Level2: href links + +
      +
    1. Interaction behaviour
    2. +
    3. XR Viewer implementation
    4. +
  20. +
  21. Level3: Media Fragments + +
      +
    1. Animation(s) timeline
    2. +
    3. Specify playback loopmode
    4. +
    5. Controlling embedded content
    6. +
  22. +
  23. Level4: prefix operators + +
      +
    1. Object teleports
    2. +
    3. Object multipliers
    4. +
    5. De/selectors (+ and -)
    6. +
    7. Sharing object or file (#|)
    8. +
    9. xrf:// URI scheme
    10. +
  24. +
  25. Level5: URI Templates (RFC6570)
  26. +
  27. Top-level URL processing + +
      +
    1. UX
    2. +
  28. +
  29. Example: Navigating content href portals + +
      +
    1. Walking surfaces
    2. +
  30. +
  31. Example: Virtual world rings
  32. +
  33. Additional scene metadata
  34. +
  35. Accessibility interface + +
      +
    1. Two-button navigation
    2. +
    3. Overlap with fileformat-specific extensions
    4. +
  36. +
  37. Vendor Prefixes
  38. +
  39. Security Considerations
  40. +
  41. FAQ
  42. +
  43. Authors
  44. +
  45. IANA Considerations
  46. +
  47. Acknowledgments
  48. +
  49. Appendix: Definitions
  50. +
+
+
Introduction -How can we add more control to existing text and 3D scenes, without introducing new dataformats?
+How can we add more control to existing text and 3D scenes, without introducing new dataformats?
Historically, there's many attempts to create the ultimate 3D fileformat.
@@ -50,7 +129,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
What is XR Fragments -XR Fragments utilizes URLs: +XR Fragments utilizes URLs:
  1. for 3D viewers/browser to manipulate the camera or objects (via URI fragments)
  2. @@ -61,6 +140,7 @@ XR Fragments exploits the fact that all 3D models already contain such metadata:
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:// 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 hashbus-only events/ @@ -148,10 +228,10 @@ These are called hashbus-only events/
Conventions and Definitions -See appendix below in case certain terms are not clear. +See appendix below in case certain terms are not clear.
XR Fragment URL Grammar -For typical HTTP-like browsers/applications: +For typical HTTP-like browsers/applications: https:
Spatial Referencing 3D -3D files contain an hierarchy of objects.
+3D files contain an hierarchy of objects.
XR Fragments assumes the following objectname-to-URI-Fragment mapping, in order to deeplink 3D objects:
@@ -222,7 +302,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
Level0: Files -These are optional auto-loaded side-car files to enable hasslefree XR Movies.
+These are optional auto-loaded side-car files to enable hasslefree XR Movies.
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a .glb e.g.).
@@ -319,7 +399,7 @@ The sidecar will define (or override already existing) extras,
Level1: URI -
XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments +
XR Fragments allows deeplinking of 3D objects by mapping objectnames to URI fragments
XR Fragments tries to seek to connect the world of text (semantical web / RDF), and the world of pixels.
Instead of forcing authors to combine 3D/2D objects programmatically (publishing thru a game-editor e.g.), XR Fragments integrates all which allows a universal viewing experience.
@@ -376,8 +456,7 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp ]]>
?-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 @@ -429,9 +508,10 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
+
Level2: href links -Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object : +Explicit href metadata ('extras') in a 3D object (of a 3D file), hint the viewer that the user ''can interact'' with that object : | fragment | type | example value | |href| string (uri or predefined view) | #pyramid
#lastvisit
@@ -459,7 +539,7 @@ But approaches things from a higherlevel local-first 3D hypermedia browser-persp
Level3: Media Fragments -
these allow for XR Movies with a controllable timeline using href URI's with Media Fragments +
these allow for XR Movies with a controllable timeline using href URI's with Media Fragments
Just like with 2D media-files, W3C mediafragments (#t=1,2) can be used to control a timeline via the #t primitive. XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files controllable via Media Fragments like: @@ -514,7 +594,7 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files
Level4: prefix operators -Prefixing objectnames with the following simple operators allow for extremely powerful XR interactions: +Prefixing objectnames with the following simple operators allow for extremely powerful XR interactions:
  • #!
  • @@ -637,8 +717,15 @@ Clicking the href-value below will:
+
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.
+
+
Top-level URL processing -
Example URL: ://foo/world.gltf#room1&t=10&cam +
Example URL: ://foo/world.gltf#room1&t=10&cam
The URL-processing-flow for hypermedia browsers goes like this:
    @@ -659,7 +746,7 @@ Clicking the href-value below will:
Example: Navigating content href portals -navigation, portals & mutations +navigation, portals & mutations @@ -718,8 +805,8 @@ Clicking the href-value below will: -
Virtual world rings -Consider 3D scenes linking to eachother using these href values, attached to 3D button-objects: +
Example: Virtual world rings +Consider 3D scenes linking to eachother using these href values, attached to 3D button-objects:
  • href: schoolA.edu/projects.gltf#math
  • @@ -736,14 +823,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.
- -This is non-normative, and the draft spec is available on request.
-
-
Additional scene metadata -XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields. +XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata fields. Instead, it encourages browsers to scan nodes for the following custom properties:
    @@ -823,7 +904,7 @@ Instead, it encourages browsers to scan nodes for the following custom propertie
Accessibility interface -The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.
+The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content.
Spec:
<Br>
@@ -877,9 +958,10 @@ If a glTF implementation does not support a particular extension, the (XRF) extr
Example 1 In case of the OMI_LINK glTF extension (href: https://nlnet.nl) and an XR Fragment (href: #otherroom or href: otherplanet.glb), it is clear that https://nlnet.nl should open in a browsertab, whereas the XR Fragment links should teleport the user. If the OMI_LINK contains an XR Fragment (#room1 e.g.) a teleport should be performed only (and other [overlapping] metadata should be ignored). 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-specific metadata in a 3D scenefiles, are similar to vendor-specific CSS-prefixes (-moz-opacity: 0.2 e.g.). +Vendor-specific metadata in a 3D scenefiles, are similar to vendor-specific CSS-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. Vendor Prefixes allows embedding 3D engines/framework-specific features a 3D file via metadata:
@@ -953,10 +1035,9 @@ The lowest common denominator between 3D engines is the 'entity'-part of their e String-templatevalues are evaluated as per URI Templates (RFC6570) Level 1.
This 'separating of mechanism from policy' (unix rule) does somewhat 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.
-
Security Considerations -The only dynamic parts are W3C Media Fragments and URI Templates (RFC6570).
+The only dynamic parts are W3C Media Fragments and URI Templates (RFC6570).
The use of URI Templates is limited to pre-defined variables and Level0 fragments-expansion only, which makes it quite safe.
@@ -964,7 +1045,7 @@ n fact, it is much safer than relying on a scripting language (javascript) which
FAQ -Q: Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS
+Q: Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS
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)
Q: 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
authors - +
  • Leon van Kammen (@lvk@mastodon.online)
  • Jens Finkhäuser (@jens@social.finkhaeuser.de)
  • @@ -989,11 +1070,11 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
IANA Considerations -This document has no IANA actions. +This document has no IANA actions.
Acknowledgments - +
  • NLNET
  • Future of Text
  • @@ -1011,7 +1092,7 @@ Non-HTML Hypermedia browsers should make browser extensions the right place, to
Appendix: Definitions -
+
diff --git a/doc/shell.nix b/doc/shell.nix index 16611f7..98dd498 100644 --- a/doc/shell.nix +++ b/doc/shell.nix @@ -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 }
definition