Overview

VRML2.0 (ISO/IEC 14772-1:1997) requires that browsers either
support or ignore URNs in "url" MFString fields. Conforming browsers are
required to ignore URNs if they don't understand what to do with them, and to
skip on to the first URL in the field in this case.

URNs are ideal for naming elements of a library independent of their actual
location. In fact, this is exactly what URNs were originally designed for,
making them ideal for use with the Universal Media Element Library.

URN resolution (how a browser "resolves", or translates, a URN into a file)
is the key issue addressed in this UMEL recommended practice proposal. While the
Internet Engineering Task Force (IETF) has spent many years attempting to define
how URNs should be resolved, an issue which remains outstanding, the lack of a
standard solution for URN resolution does not preclude the use of URNs for our purposes. Since "url"
fields in VRML are multi-value, unlike those in HTML (which are single-value),
and will only resolve to a previously installed library, our use of URNs is not
contingent on the network-wide resolution method currently being sought by the
IETF.

This document specifies a resolution mechanism to be used when a browser
encounters a URN in a multi-value url field.

Conforming browsers will follow this method to determine if a local
copy of the file exists, or will find out where to get it. If the file
isn't accessible, the browser will skip ahead to the next entry in the
url field.

Non-conforming browsers will follow the VRML2.0 requirements and skip over
the URN directly to the first URL.

URN Syntax

URNs used to reference an element in the UMEL will look
like this:

urn:vrml:umel:texture/wood/oak001.gif

Where:

urn:

Is the defined prefix for all URNs.

vrml:

Specifies that this is the VRML Consortium's namespace (i.e. a place
where the VRML Consortium defines the rules on name
allocation).

umel:

Is a string assigned by the VRML Consortium that specifies who is
assigning names. In this case, it specifies that the names are being
assigned by the Universal Medial Element Library working group. The the
VRML Consortium could, for example, also allocate "lw" to Living Worlds
defined names (for example Prototypes) or "pharmaceutical" to a working
group assigning names to Pharmaceutically related media elements.

texture/wood/oak001.gif

Is an example string assigned by the UMEL working group that is used
to reference a specific media element, which is a texture in this
case (note: the exact format of this string is still to be
determined by that group).

The naming authority
may also be any domain name registered to the supplier of a library,
meaning, for example, that a URN could be of the form
urn:vrml:sgi.com:toollibrary/0001.jpg where sgi.com has allocated the name
"toollibrary/0001.jpg"

URN Resolution

When a browser tries to resolve a URN, it will
attempt to determine where a library is installed, looking for the file
there. In order to do this, the browser must first find configuration
information (stored in a platform dependent location, as described in the
Platform Specific Bindings section below) for an initial sub-string match. For
example, with the URN above the browser is typically looking for a place that
all or parts of the library "urn:vrml:umel:" is installed.

When the browser determines the location of the library, it will replace the
initial sub-string of the URN with the location of the library, and find the
file relative to that location. For instance, if the browser determines that the
library "urn:vrml:umel:" is installed at "C:\vrml-libraries\umel\" then it will
look for the file above at "C:\vrml-libraries\umel\texture\wood\oak001.gif". If
it finds the library is at "http://vrml.org/libs/umel", it will then
retrieve the file from "http://vrml.org/libs/umel/texture/wood/oak001.gif".

Note that on some platforms the character "/" in the URN will need to be
replaced with the appropriate directory hierarchy separator character, for
example "\" in DOS.

If the file is not found at the location specified, the browser will
then move to the next string in the url field. The next string in the
url field will typically be the location (URL) of the file,
although it might also be another URN.

Platform Specific Bindings

The following section defines binding
information for the most common personal computing platforms.

Windows 95 and Windows NT

Windows 95 / NT configuration information is
kept in the registry. Registry entries live under the following key:

HKEY_LOCAL_MACHINE\VRML\PROTOCOLS\urn

where the key's
name is derived from the URN, and the value gives the URL of the installed
location of a specific library. This is a semi-colon separated list of
alternative locations.

Continuing the example above, the key
HKEY_LOCAL_MACHINE\VRML\PROTOCOLS\urn\vrml\umel would have a value
"file:///C|/vrml-libraries/umel".

If the library might optionally be found on a CD, then it might also have a
value of "file:C|/vrml-libraries/umel;D:"

Unix

In Unix there must exist a file at /etc/urn which contains one line
per entry, such as:

Macintosh

A file, identical to that for the Unix bindings above, is
placed in the System/Preferences folder.

Note: The Preferences folder itself may need to be creating under
System 6.x and earlier if it doesn't already exist since these versions of the
Macintosh OS don't inherently support the notion of "Preferences" as System 7.x
and greater does.

Versioning

This proposed media element
referencing system inherently handles versioning, and so no additional mechanism
is necessary to accommodate different versions of libraries and/or individual
library elements. While a detailed discussion of library content versioning
isn't appropriate for this proposal (this proposal deals specifically with the
issue of referencing library elements using URNs, not content issues such as
versioning), a brief explanation of how UMEL handles versioning for entire
libraries (the "Textures" library, for example) as well as the individual
elements in those libraries (such as a texture element named "redbrick.gif")
follows:

UMEL versioning is an additive process. New and/or updated
content is assigned a unique name and added alongside existing content. Existing
UMEL content is never replaced with new or updated material; it is only added to
over time. This approach applies to entire libraries as well as individual
elements.

Specifically, UMEL versioning is handled on an
element-by-element basis by the introduction of new files (images, audio clips
and 3D objects) into the core set of libraries ("Textures", "Sounds" and
"Objects"). Similarly UMEL accommodates versioning on a library-by-library basis
by the introduction of entirely new libraries to the core system ("Textures2.0",
"Sounds2.0" and "Objects2.0", for example, which will reside alongside the core
libraries).

When a update to an existing library element is added to UMEL,
it is given a unique file name to distinguish it from earlier versions of the
element ("redbrick2.gif", for instance, would represent a new version of the
"redbrick.gif" texture). Likewise, when a new version of the entire UMEL
"Textures" library is introduced, it will be giving a unique name such as
"Textures2.0" to distinguish it from the original "Textures" library.

This simple, elegant approach to versioning allows authors to
specify precisely the media element they desire by name, without concern for
changes or updates to UMEL. Since each new version of a library or element is
assigned a unique name, authors can be certain that the elements they reference
will never be replaced with an updated version. If they wish to take advantage
of an updated library or element version, they do so by updating their VRML
world's URN references accordingly.

Note: A directory named "version" (urn:vrml:umel:version) is reserved for
future use should the need to track version numbers arise (inside this directory
files related to library version numbers can be stored if needed).

Related Resources

The following
URN-related information sources may be of use when evaluating this proposal.

"Resolution of Uniform Resource Identifiers using the Domain Name
System" RFC 2168

Summary

URNs are an ideal mechanism for
referencing VRML Universal Media Element Library (VRML-UMEL) elements such as
textures, sounds and objects. Using URNs in VRML-UMEL does not require the IETF
to define a standard resolution method. By following the recommended practice
set forth in this document, VRML tool vendors, browser developers and content
authors may use URNs to reference UMEL elements today.