Internet-Draft                                                Ryan Moats
draft-ietf-urn-syntax-00.txt                                        AT&T
Expires in six months                                       October 1996

                               URN Syntax
                 Filename: draft-ietf-urn-syntax-00.txt

Status of This Memo

      This document is an Internet-Draft.  Internet-Drafts are working
      documents of the Internet Engineering Task Force (IETF), its
      areas, and its working groups.  Note that other groups may also
      distribute working documents as Internet-Drafts.

      Internet-Drafts are draft documents valid for a maximum of six
      months and may be updated, replaced, or obsoleted by other
      documents at any time.  It is inappropriate to use Internet-
      Drafts as reference material or to cite them other than as ``work
      in progress.''

      To learn the current status of any Internet-Draft, please check
      the ``1id-abstracts.txt'' listing contained in the Internet-
      Drafts Shadow Directories on (Africa),
      (Europe), (Pacific Rim), (US East
      Coast), or (US West Coast).


   Uniform Resource Names (URNs) are intended to serve as persistent
   resource identifiers. This document presents the syntax for URNs.
   Support for existing legacy namespaces is discussed. URN transmission
   encoding requirements are presented.  Finally, there is a discussion
   of URN equivalence and how to determine it.

1. Syntax

   All URNs have the following syntax:

                    <URN> ::= ["urn:"] <NID> ":" <NSS>

   <NID> is the Namespace Identifier, and <NSS> is the Namespace
   Specific String.  The leading "urn:" sequence is currently optional,
   as no closure on its definite presence or absence has been reached.
   The Namespace ID is used to determine the _syntactic_ interpretation
   of the Namespace Specific String (as discussed in [1]).

   RFC 1737 [2] suggests additional requirements on URN encoding, which
   all have implications as far as limiting syntax.  On the other hand,
   the requirement to support existing legacy naming systems has the
   effect of broadening syntax.  Thus, we discuss the acceptable syntax
   for both the Namespace Identifier and the Namespace Specific String

1.1 Namespace Identifier Syntax

   The following is the syntax for the Namespace Identifier. To (a) be
   consistent with all potential resolution schemes and (b) not put any
   undue constraints on any potential resolution scheme, the syntax for
   the Namespace Identifier is:

   <NID>         ::= <letter> [ <let-hyp> ]

   <let-hyp>     ::= <letter> | "-"

   <letter>      ::= any one of the 52 alphabetic characters A through Z
                     in upper case and a through z in lower case

   This is slightly more restrictive that what is stated in RFC 1738 [4]
   (which allows the period "."). Further, the Namespace Identifier is
   case insensitive, so that "ISBN" and "isbn" refer to the same

   To avoid confusion with the optional "urn:" identifier, the NID "urn"
   is reserved and may not be used.

1.2 Namespace Specific String Syntax

   Depending on the rules governing a namespace, valid identifiers in a
   namespace might contain characters that are reserved characters in
   URI syntax or non-printable ASCII characters.  To accommodate the
   largest set of valid identifiers, the NSS portion of a URN shall use
   UTF-8 representation of ISO 10646 as its character set.  Namespaces
   that do not currently use ISO 10646/UTF-8 are encouraged to migrate
   to it.

   Clients MUST be capable of %encoding the UTF-8 formatted NSS.
   %encoding, (as discussed in [3]) uses a percent sign "%" immediately
   followed by two hexadecimal digits (0-9, A-F) giving the binary code
   for that octet. The rules for %encoding presented in [3] apply with
   the following exceptions:

      1. [3] states that occurrence of the '/' character in URIs must
      denote hierarchy, so that partial forms of a URI are possible.
      This restriction is unenforceable, and relative URLs do not have a
      scheme prefix, so we allow URNs to contain unescaped occurrences
      of the '/' character that do not denote hierarchy.

      2. As an optimization when the transport between systems is known
      to be 8-bit-clean, clients MAY omit the %encoding on 8-bit
      characters but MUST still %encode the reserved characters below.

   For historic reasons, the characters "#" (%23), "?" (%3F), "%" (%25),
   "*" (%2A), "!" (%21), "<" (%3C), ">" (%3E), and '"' (%22), are
   reserved and must be %encoded.  Thus client implementers should
   accept URNs from users in an unencoded form but must encode them
   before sending them to a resolver.

   URN resolvers MUST be capable of accepting URNs that have been
   %encoded for either 8-bit clean or 7-bit transports.  %encoding is
   removed first, then UTF-8 decoding is performed.  URN resolvers MUST
   return identical results from ANY legally encoded form of the URN.

   It should be noted that certain characters in the Namespace Specific
   String syntax may have special meaning in certain namespaces.
   Therefore, the process of registering a namespace identifier shall
   include publication of a definition of which characters have a
   special meaning and how to encode these characters if used in a
   literal sense.

2. Support of existing legacy naming systems

   To allow for support existing legacy naming systems (as required by
   [2]), the Namespace Specific String shall be considered an "opaque
   string" in the sense of structure except as mentioned in Section 1.

   In addition, URN servers should be prepared to accept URNs that do
   not use ISO 10646/UTF-8 for those namespaces that currently use a
   different encoding.  Note that this is not a general requirement on
   all resolvers, only resolvers that handle a namespace that is known
   not to use ISO 10646/UTF-8.

3. URN encoding for transmission

   Because the NSS of a URN is considered a series of octets of data,
   encoding URNs for transport is the responsibility of the transport
   mechanism and is not discussed here.  Any mechanism that can handle
   arbitrary 8-bit data will successfully transport a URN.

4. Equivalence in URNs

URNs are considered equivalent if they return the same result.  For
various purposes, such as caching, a test is necessary to determine
equivalence without actually resolving the URNs and fetching/comparing
the underlying resources.  "Lexical equivalence" is a stricter condition
that the equivalence described above (functional equivalence).

4.1 Lexical Equivalence

   Lexical equivalence may be determined by comparing two URNs without
   making any network accesses. Two URNs are lexically equivalent if
   they are octet-by-octet equal after the following preprocessing

           1. remove any %encoding that might be present
           2. drop any preceding "urn:" token
           3. normalize the case of the NID

   Some namespaces may define additional lexical equivalences, such as
   case-insensitivity of the NSS (or parts thereof).  Additional lexical
   equivalences MUST be documented as part of namespace registration,
   MUST always have the effect of eliminating some of the false
   negatives obtained by the procedure above, and MUST NEVER says that
   two URNs are not equivalent if the procedure above says they are

4.2 Functional Equivalence

   Resolvers determine functional equivalence based on specific rules
   for the namespace.  Therefore, namespace registration must include
   documentation on how to determine functional equivalence for that

4.3 Examples

   The following URN comparisons highlight the difference between these
   types of equivalence:

     urn:isbn:1-23485-8-29, isbn:1-23485-8-29 are lexically equiv.
     urn:isbn:1-23485-8-29, ISBN:1-23485-8-29 are lexically equiv.
     urn:isbn:1-23485-8-29, isbn:123485829 are not lexically equiv.
        but may be functionally equivalent.

5. Security considerations

   Because of the number of potential namespaces, it must be restated
   that certain of the characters in the Namespace Specific String may
   have special meaning to certain namespace resolvers.  The process of
   registering a namespace identifier shall therefore include
   publication of a definition of which characters have a special
   meaning and how to encode these characters if used in a literal

6. Acknowledgments

   Thanks to various members of the URN working group and <<your name
   here!!>> for comments on earlier drafts of this document.  This
   document is partially supported by the National Science Foundation.

7. References

   Request For Comments (RFC) and Internet Draft documents are available
   from <URL:> and numerous mirror sites.
         L. L. Daigle, P. Faltstrom, R. Iannella.  "A Framework for the
         Assignment and Resolution of Uniform Resource Names", Internet
         Draft (work in progress).  June 1996.

         K. Sollins, L. Masinter.  "Functional Requirements for Uniform
         Resource Names", RFC 1737.  December 1994.

         T. Berners-Lee. "Universal Resource Identifiers in WWW", RFC
         1630. June 1994.

         T. Berners-Lee, L. Masinter, M. McCahill. "Uniform Resource
         Locators (URL)", RFC 1738.  December 1994.

8. Author's address

   Ryan Moats
   15621 Drexel Circle
   Omaha, NE 68135-2358

   Phone:  +1 402 894-9456

                This Internet Draft expires April 1, 1997.