Passa al contenuto principale

3. URN-Equivalence

3.1. Procedura​

Per vari scopi, come la memorizzazione nella cache, è spesso desiderabile determinare se due URN sono "lo stesso". Ciò si fa, nel modo più generale (cioè indipendentemente dallo schema), verificando l'equivalenza (vedere la Sezione 6.1 della [RFC3986]).

La specifica generica degli URI [RFC3986] è molto flessibile riguardo ai confronti di uguaglianza, ponendo l'accento sul consentire i falsi negativi ed evitare i falsi positivi. Se i confronti vengono effettuati in modo indipendente dallo schema, cioè solo come confronti di URI, molti URN che questa specifica considera uguali verrebbero rifiutati. La discussione che segue si applica quando gli URI coinvolti sono noti per essere URN e quindi usa i termini "URN-equivalent" e "URN-equivalence" per riferirsi all'equivalenza come specificata in questo documento.

Due URN sono URN-equivalent se le loro porzioni assigned-name sono uguali ottetto per ottetto dopo aver applicato la normalizzazione delle maiuscole/minuscole (come specificato nella Sezione 6.2.2.1 della [RFC3986]) ai seguenti costrutti:

  1. lo schema URI "urn", mediante conversione in minuscolo

  2. il NID, mediante conversione in minuscolo

  3. qualsiasi carattere codificato in percentuale nell'NSS (cioè tutte le terne di caratteri che corrispondono alla produzione <pct-encoding> che si trova nella Sezione 2.1 della specifica di base degli URI [RFC3986]), mediante conversione in maiuscolo per le cifre A-F.

I caratteri codificati in percentuale NON DEVONO (MUST NOT) essere decodificati, cioè la normalizzazione della codifica percentuale (come specificato nella Sezione 6.2.2.2 della [RFC3986]) NON DEVE (MUST NOT) essere applicata come parte del processo di confronto.

Se un r-component, q-component o f-component (o qualsiasi loro combinazione) è incluso in un URN, esso DEVE (MUST) essere ignorato ai fini della determinazione dell'URN-equivalence.

Le definizioni dei namespace URN POSSONO (MAY) includere regole aggiuntive per l'URN-equivalence, come l'insensibilità alle maiuscole/minuscole dell'NSS (o di sue parti). Tali regole DEVONO (MUST) sempre avere l'effetto di eliminare alcuni dei falsi negativi ottenuti con la procedura di cui sopra e NON DEVONO (MUST NOT) comportare il trattamento di due URN come non "lo stesso" se la procedura qui descritta dice che sono URN-equivalent. Per considerazioni correlate riguardo alla registrazione dei NID, vedere di seguito.

3.2. Esempi​

Questa sezione mostra una varietà di URN (usando il NID "example" definito nella [RFC6963]) che evidenziano le regole di URN-equivalence.

In primo luogo, poiché lo schema e il NID non distinguono tra maiuscole e minuscole, i tre URN seguenti sono URN-equivalent tra loro:

  • urn:example:a123,z456

  • URN:example:a123,z456

  • urn:EXAMPLE:a123,z456

In secondo luogo, poiché r-component, q-component e f-component non sono presi in considerazione ai fini della verifica dell'URN-equivalence, i tre URN seguenti sono URN-equivalent ai primi tre esempi sopra:

  • urn:example:a123,z456?+abc

  • urn:example:a123,z456?=xyz

  • urn:example:a123,z456#789

In terzo luogo, poiché il carattere "/" (e tutto ciò che lo segue) nell'NSS è preso in considerazione ai fini dell'URN-equivalence, gli URN seguenti non sono URN-equivalent tra loro né ai sei URN precedenti:

  • urn:example:a123,z456/foo

  • urn:example:a123,z456/bar

  • urn:example:a123,z456/baz

In quarto luogo, a causa della codifica percentuale, gli URN seguenti sono URN-equivalent solo tra loro e non a nessuno di quelli sopra (si noti che, sebbene %2C sia la trasformazione codificata in percentuale di "," degli esempi precedenti, tali sequenze non vengono decodificate ai fini della verifica dell'URN-equivalence):

  • urn:example:a123%2Cz456

  • URN:EXAMPLE:a123%2cz456

In quinto luogo, poiché i caratteri nell'NSS diversi dalle sequenze codificate in percentuale sono trattati in modo sensibile alle maiuscole/minuscole (salvo diversa indicazione per il namespace URN in questione), gli URN seguenti non sono URN-equivalent ai primi tre URN:

  • urn:example:A123,z456

  • urn:example:a123,Z456

In sesto luogo, a un esame visivo casuale di un URN presentato in un'interfaccia orientata all'utente, l'URN seguente potrebbe apparire uguale ai primi tre URN (poiché U+0430 CYRILLIC SMALL LETTER A può essere confuso con U+0061 LATIN SMALL LETTER A), ma non è URN-equivalent ai primi tre URN:

  • urn:example:%D0%B0123,z456