| ">" | "[" | "]" | "^" | "`" | "{" | "|" | "}" | "~"
| octets 127-255 (7F-FF hex)
In addition, octet 0 (0 hex) should NEVER be used, in either
unencoded or %-encoded form.
An URN ends when an octet/character from the excluded character set
() is encountered. The character from the excluded
character set is NOT part of the URN.
3. Support of existing legacy naming systems and new naming systems
Any namespace (existing or newly-devised) that is proposed as an
URN-namespace and fulfills the criteria of URN-namespaces MUST be
expressed in this syntax. If names in these namespaces contain
characters other than those defined for the URN character set, they
MUST be translated into canonical form as discussed in section 2.2.
RFC 2141 URN Syntax May 1997
4. URN presentation and transport
The URN syntax defines the canonical format for URNs and all URN
transport and interchanges MUST take place in this format. Further,
all URN-aware applications MUST offer the option of displaying URNs
in this canonical form to allow for direct transcription (for example
by cut and paste techniques). Such applications MAY support display
of URNs in a more human-friendly form and may use a character set
that includes characters that aren't permitted in URN syntax as
defined in this RFC (that is, they may replace %-notation by
characters in some extended character set in display to humans).
5. Lexical Equivalence in URNs
For various purposes such as caching, it's often desirable to
determine if two URNs are the same without resolving them. The
general purpose means of doing so is by testing for "lexical
equivalence" as defined below.
Two URNs are lexically equivalent if they are octet-by-octet equal
after the following preprocessing:
1. normalize the case of the leading "urn:" token
2. normalize the case of the NID
3. normalizing the case of any %-escaping
Note that %-escaping MUST NOT be removed.
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 say that
two URNs are not equivalent if the procedure above says they are
equivalent.
6. Examples of lexical equivalence
The following URN comparisons highlight the lexical equivalence
definitions:
1- URN:foo:a123,456
2- urn:foo:a123,456
3- urn:FOO:a123,456
4- urn:foo:A123,456
5- urn:foo:a123%2C456
6- URN:FOO:a123%2c456
RFC 2141 URN Syntax May 1997
URNs 1, 2, and 3 are all lexically equivalent. URN 4 is not
lexically equivalent any of the other URNs of the above set. URNs 5
and 6 are only lexically equivalent to each other.
7. Functional Equivalence in URNs
Functional equivalence is determined by practice within a given
namespace and managed by resolvers for that namespeace. Thus, it is
beyond the scope of this document. Namespace registration must
include guidance on how to determine functional equivalence for that
namespace, i.e. when two URNs are the identical within a namespace.
8. Security considerations
=3= |