3. URN-Equivalence
3.1. Procédure
Pour diverses raisons, telles que la mise en cache, il est souvent souhaitable de déterminer si deux URN sont "les mêmes". Cela se fait de la manière la plus générale (c'est-à-dire indépendamment du schéma) en testant l'équivalence (voir la section 6.1 de [RFC3986]).
La spécification URI générique [RFC3986] est très souple en matière de comparaisons d'égalité, l'accent étant mis sur la possibilité d'admettre des faux négatifs et d'éviter les faux positifs. Si les comparaisons sont effectuées d'une manière indépendante du schéma, c'est-à-dire comme de simples comparaisons d'URI, de nombreux URN que la présente spécification considère comme égaux seraient rejetés. La discussion ci-dessous s'applique lorsque les URI concernés sont connus comme étant des URN et utilise donc les termes "URN-equivalent" et "URN-equivalence" pour désigner l'équivalence telle que spécifiée dans le présent document.
Deux URN sont URN-equivalent si leurs portions assigned-name sont égales octet par octet après application de la normalisation de casse (comme spécifié à la section 6.2.2.1 de [RFC3986]) aux constructions suivantes :
-
le schéma d'URI "urn", par conversion en minuscules
-
le NID, par conversion en minuscules
-
tout caractère encodé en pourcentage dans le NSS (c'est-à-dire tous les triplets de caractères qui correspondent à la production <pct-encoding> figurant à la section 2.1 de la spécification URI de base [RFC3986]), par conversion en majuscules des chiffres A-F.
Les caractères encodés en pourcentage ne doivent pas être décodés, c'est-à-dire que la normalisation de l'encodage en pourcentage (comme spécifié à la section 6.2.2.2 de [RFC3986]) ne doit pas être appliquée dans le cadre du processus de comparaison (MUST NOT).
Si un r-component, un q-component ou un f-component (ou toute combinaison de ceux-ci) est inclus dans un URN, il doit être ignoré aux fins de la détermination de l'URN-equivalence (MUST).
Les définitions d'espace de noms URN peuvent inclure des règles supplémentaires d'URN-equivalence, telles que l'insensibilité à la casse du NSS (ou de parties de celui-ci) (MAY). De telles règles doivent toujours avoir pour effet d'éliminer certains des faux négatifs obtenus par la procédure ci-dessus et ne doivent pas aboutir à traiter deux URN comme n'étant pas "les mêmes" si la procédure décrite ici indique qu'ils sont URN-equivalent (MUST NOT). Pour des considérations connexes concernant l'enregistrement des NID, voir ci-dessous.
3.2. Exemples
Cette section présente une variété d'URN (utilisant le NID "example" défini dans [RFC6963]) qui mettent en évidence les règles d'URN-equivalence.
Premièrement, parce que le schéma et le NID sont insensibles à la casse, les trois URN suivants sont URN-equivalent entre eux :
-
urn:example:a123,z456
-
URN:example:a123,z456
-
urn:EXAMPLE:a123,z456
Deuxièmement, parce que le r-component, le q-component et le f-component ne sont pas pris en compte aux fins du test d'URN-equivalence, les trois URN suivants sont URN-equivalent aux trois premiers exemples ci-dessus :
-
urn:example:a123,z456?+abc
-
urn:example:a123,z456?=xyz
-
urn:example:a123,z456#789
Troisièmement, parce que le caractère "/" (et tout ce qui le suit) dans le NSS est pris en compte aux fins de l'URN-equivalence, les URN suivants ne sont pas URN-equivalent entre eux ni aux six URN précédents :
-
urn:example:a123,z456/foo
-
urn:example:a123,z456/bar
-
urn:example:a123,z456/baz
Quatrièmement, en raison de l'encodage en pourcentage, les URN suivants ne sont URN-equivalent qu'entre eux et non à aucun de ceux ci-dessus (notez que, bien que %2C soit la transformation encodée en pourcentage de "," dans les exemples précédents, de telles séquences ne sont pas décodées aux fins du test d'URN-equivalence) :
-
urn:example:a123%2Cz456
-
URN:EXAMPLE:a123%2cz456
Cinquièmement, parce que les caractères du NSS autres que les séquences encodées en pourcentage sont traités de manière sensible à la casse (sauf indication contraire pour l'espace de noms URN concerné), les URN suivants ne sont pas URN-equivalent aux trois premiers URN :
-
urn:example:A123,z456
-
urn:example:a123,Z456
Sixièmement, lors d'un examen visuel rapide d'un URN présenté dans une interface destinée à l'humain, l'URN suivant peut sembler identique aux trois premiers URN (parce que U+0430 CYRILLIC SMALL LETTER A peut être confondu avec U+0061 LATIN SMALL LETTER A), mais il n'est pas URN-equivalent aux trois premiers URN :
- urn:example:%D0%B0123,z456