# Utid

UTID (Universally Traceable Identifier) is a unique identifier for a physical or virtual thing, consisting of an id, a catalog and a dns.
It is a character-based identifier, where dns is a domain name of organization who named the thing, catalog is used by the organization to classify the thing, and id is unique in the scope of dns and catalog. Examples are 125.product~db$com1.test, ~db$com1.test, 125.product~$com1.test, and ~$com1.test.

## Features

* It contains dns name so as to completely avoid naming conflicts.
* It can be traced by its dns name.
* It has an internal forwarding mechanism by matching the UTID suffix.
* It is traceable by the dns in the Internet and UTID suffix match in the Intranet.

## Syntax

The UTID Syntax is as follows:
If one component (catalog) is empty, the delimiter ('~') before the component SHOULD NOT be omitted.
The maximum length of a UTID is 96 bytes including all delimiters in the UTID although the sum of the maximum length of each components is larger than 96. The dns component must be a real DNS name registered in a domain name registration agent and must not be an IP address or "localhost" that is a loopback name of local machine. That is to say, there must be at least one dot '.' in the dns component and the part after the last dot must be a top-level domain.

### DNS component

The Domain Name System (DNS) defines the maximum length of a DNS is 255. However, to simplify implementations, the maximum length of a DNS used in UTID is limited to 64, which is longer than nearly all DNS actually used in real world.
In the DNS definition, characters used in DNS may be lower case or upper case without any significance attached to the case. However, to simplify implementations, the characters used in dns component in UTID MUST be lower case.
The Internationalizing Domain Names in Applications (IDNA) system allows user applications, such as web browsers, map Unicode strings into the valid DNS character set using Punycode, which is called internationalized domain names. However, to simplify implementations, internationalized domain names are not allowed in UTIDs.

### Catalog component

The catalog component consists of lowercase letters, decimal digits, hyphen, and period only. A hyphen and a period should not be in the beginning and ending position of the catalog component.

### Id component

Like catalog component, the id component consists of lowercase letters, decimal digits, hyphen, and period. A hyphen and a period should not be in the beginning and ending position of the catalog component.
However, for the best compatibility, the id component may consists of graphic characters, which include all graphic characters defined in ISO/IEC 646 and all graphic characters defined in Unicode except white space. The Unicode character SHOULD be encoded in UTF-8 character set. The id component is case sensitive, while the catalog and dns components support lower case only.
It is recommended that id component use lowercase letters, decimal digits, hyphen, and period only. The graphic characters are used only for compatibility to existing code system purpose.
Space ('%x20') or any character less than %x20 is neither supported by id component nor supported by the catalog and dns components in UTIDs.

## Nested UTID

A nested UTID is defined as the id component of a UTID is another UTID. Therefore, the id component of a nested UTID MUST contain dns component and follow the UTID syntax. On the contrary, a UTID in which id component contains dns component is not necessary to be a nested UTID. Whether a UTID is a nested UTID is determined both by the syntax and the usage context of the UTID.

## Reserved catalog

Some catalogs are reserved for future use. These catalogs include 'u', 'v', 'w', 'x', 'y', and 'z', and all catalogs that end with '.u', '.v', '.w', '.x', '.y', and '.z'.

## Usage

The UTID is design for Identifier Tracing Protocol (Idtp), see Idtp for more information.