3. Modello di registrazione dello spazio dei nomi (Namespace Registration Template)
ID dello spazio dei nomi (Namespace ID): UUID
Informazioni di registrazione (Registration Information):
- Data di registrazione: 2003-10-01
Registrante dichiarato dello spazio dei nomi (Declared registrant of the namespace):
- JTC 1/SC6 (ASN.1 Rapporteur Group)
Dichiarazione della struttura sintattica (Declaration of syntactic structure):
Un UUID è un identificatore unico sia nello spazio che nel tempo, rispetto allo spazio di tutti gli UUID. Poiché un UUID ha una dimensione fissa e contiene un campo temporale, è possibile che i valori si ripetano (intorno all'anno 3400 d.C., a seconda dell'algoritmo specifico utilizzato). Un UUID può essere utilizzato per molteplici scopi, dal tagging di oggetti con una durata estremamente breve all'identificazione affidabile di oggetti molto persistenti attraverso una rete.
La rappresentazione interna di un UUID è una sequenza specifica di bit in memoria, come descritto nella Sezione 4. Per rappresentare accuratamente un UUID come URN, è necessario convertire la sequenza di bit in una rappresentazione di stringa.
Ogni campo è trattato come un intero e il suo valore è stampato come una stringa di cifre esadecimali riempita di zeri con la cifra più significativa per prima. I valori esadecimali da "a" a "f" sono emessi come caratteri minuscoli e non sono sensibili al maiuscolo/minuscolo in input.
La definizione formale della rappresentazione di stringa UUID è fornita dal seguente ABNF [7]:
UUID = time-low "-" time-mid "-"
time-high-and-version "-"
clock-seq-and-reserved
clock-seq-low "-" node
time-low = 4hexOctet
time-mid = 2hexOctet
time-high-and-version = 2hexOctet
clock-seq-and-reserved = hexOctet
clock-seq-low = hexOctet
node = 6hexOctet
hexOctet = hexDigit hexDigit
hexDigit =
"0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
"a" / "b" / "c" / "d" / "e" / "f" /
"A" / "B" / "C" / "D" / "E" / "F"
Di seguito è riportato un esempio della rappresentazione di stringa di un UUID come URN:
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
Documentazione accessoria pertinente (Relevant ancillary documentation):
- [1][2]
Considerazioni sull'unicità dell'identificatore (Identifier uniqueness considerations):
Questo documento specifica tre algoritmi per generare UUID: il primo sfrutta i valori univoci degli indirizzi MAC 802 per garantire l'unicità, il secondo utilizza generatori di numeri pseudo-casuali e il terzo utilizza hashing crittografico e stringhe di testo fornite dall'applicazione. Di conseguenza, gli UUID generati secondo i meccanismi qui descritti saranno unici da tutti gli altri UUID che sono stati o saranno assegnati.
Considerazioni sulla persistenza dell'identificatore (Identifier persistence considerations):
Gli UUID sono intrinsecamente molto difficili da risolvere in senso globale. Questo, unito al fatto che gli UUID sono temporalmente unici all'interno del loro contesto spaziale, garantisce che gli UUID rimarranno il più persistenti possibile.
Processo di assegnazione dell'identificatore (Process of identifier assignment):
La generazione di un UUID non richiede che venga contattata un'autorità di registrazione. Un algoritmo richiede un valore unico nello spazio per ciascun generatore. Questo valore è tipicamente un indirizzo MAC IEEE 802, solitamente già disponibile sugli host connessi alla rete. L'indirizzo può essere assegnato da un blocco di indirizzi ottenuto dall'autorità di registrazione IEEE. Se tale indirizzo non è disponibile, o se problemi di privacy rendono indesiderabile il suo utilizzo, la Sezione 4.5 specifica due alternative. Un altro approccio consiste nell'utilizzare UUID versione 3 o versione 4 come definito di seguito.
Processo di risoluzione dell'identificatore (Process for identifier resolution):
Poiché gli UUID non sono risolvibili globalmente, questo non è applicabile.
Regole per l'equivalenza lessicale (Rules for Lexical Equivalence):
Considerare ciascun campo dell'UUID come un intero senza segno come mostrato nella tabella nella sezione 4.1.2. Quindi, per confrontare una coppia di UUID, confrontare aritmeticamente i campi corrispondenti di ciascun UUID in ordine di significatività e secondo il loro tipo di dati. Due UUID sono uguali se e solo se tutti i campi corrispondenti sono uguali.
Come nota di implementazione, il confronto di uguaglianza può essere eseguito su molti sistemi eseguendo l'appropriata canonicalizzazione dell'ordine dei byte e quindi trattando i due UUID come interi senza segno a 128 bit.
Gli UUID, come definiti in questo documento, possono anche essere ordinati lessicograficamente. Per una coppia di UUID, il primo segue il secondo se il campo più significativo in cui gli UUID differiscono è maggiore per il primo UUID. Il secondo precede il primo se il campo più significativo in cui gli UUID differiscono è maggiore per il secondo UUID.
Conformità con la sintassi URN (Conformance with URN Syntax):
La rappresentazione di stringa di un UUID è completamente compatibile con la sintassi URN. Quando si converte da una rappresentazione in memoria orientata ai bit di un UUID in un URN, è necessario prestare attenzione a rispettare rigorosamente i problemi di ordine dei byte menzionati nella sezione sulla rappresentazione di stringa.
Meccanismo di validazione (Validation mechanism):
A parte la determinazione se la porzione timestamp dell'UUID è nel futuro e quindi non ancora assegnabile, non esiste alcun meccanismo per determinare se un UUID è "valido".
Ambito (Scope):
Gli UUID sono di ambito globale.