Date de publication du RFC : Août 2010
Auteur(s) du RFC : P. Faltstrom (Cisco)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF idnabis
Première rédaction de cet article le 22 août 2010
Dans l'ensemble des RFC sur la version 2 des IDN (appelée IDNAbis ou IDNA2008), ce document normalise les propriétés Unicode utilisées pour calculer la catégorie à laquelle appartient un caractère donné, catégorie qui déterminera s'il est autorisé dans un nom de domaine en Unicode. (Il a depuis été partiellement mis à jour par le RFC 8753.)
Le concept de catégorie est défini dans la section 1 (avertissement : le vocabulaire de IDNAbis est très flou et on trouve « catégorie » ou « propriété » pour ce concept, des termes d'autant plus malheureux qu'ils existent aussi dans Unicode avec un sens différent ; j'ai donc plutôt utilisé « statut »). Ce RFC 5892 contient les tables complètes de tous les caractères Unicode et de leur catégorie. Mais ces tables ne sont présentes qu'à titre d'information : IDNAbis est en effet indépendant de la version d'Unicode utilisée et la vraie norme est l'algorithme utilisé pour créer les tables, algorithme qu'il faut faire tourner pour chaque version d'Unicode, pour trouver la table effective.
IDNAbis repose sur un principe
d'exclusion par défaut. Tout caractère est interdit, sauf s'il est
autorisé (cf. RFC 4690). Cette autorisation dépend de ses propriétés Unicode,
propriétés qui font partie de la norme Unicode. Par exemple, le U+00E9
(petit e accent aigu) est dans la catégorie Unicode
Ll
(lettres minuscules, presque toutes autorisées).
Le fait d'être dans la bonne catégorie des tables ne suffit pas : dans certains cas, IDNAbis met des contraintes aux combinaisons de caractères.
Quelles sont les catégories (ou statuts) possibles ?
PROTOCOL VALID
dit
PVALID
, les caractères acceptés.CONTEXTUAL RULE REQUIRED
, pour des
caractères acceptés sous condition, par exemple sur leur position dans
le composant du nom de domaine. Il est abrégé en
CONTEXTJ
(caractères qui contrôlent l'attachement
de deux mots comme le U+200D
, Zero-width
joiner) ou CONTEXTO
(les
autres).DISALLOWED
, les caractères
interdits.UNASSIGNED
, les points de code pas encore
affectés dans la norme Unicode, interdits aujourd'hui mais qui, selon leurs propriétés,
pourraient devenir autorisés dans le futur.Le classement d'un caractère dans une de ces catégories dépend de l'algorithme décrit plus loin. Une liste d'exceptions maintenue manuellement (section 2.6) permet d'ajuster le résultat, une autre liste manuelle permet de maintenir la stabilité (d'empêcher un caractère de changer de catégorie).
La section 2 décrit les catégories utilisées pour classer les caractères (à ne pas confondre avec
les catégories IDNA, comme PVALID
, décrites plus
haut) et les propriétés utilisées (elles ne sont pas mutuellement exclusives) :
U+0371
) est dans cette catégorie (sa définition
dans la base Unicode étant 0371;GREEK SMALL LETTER
HETA;Ll;0;L;;;;;N;;;0370;;0370
).White_Space
).U+1D100
(𝄀) à
U+1D1FF
.PVALID
à
DISALLOWED
ou le contraire. Ils seront alors mis dans cette catégorie
pour conserver leur ancien statut.Bien, on a dix catégories. Comment les utilise t-on pour déterminer si un caractère est acceptable ou pas ? C'est l'objet de la section 3, qui indique cet algorithme en pseudo-code. Je n'en donne qu'une partie ici :
SI le caractère est dans les Exceptions, sa propriété IDNA est donnée par la table Exceptions ... SINON SI le caractère est dans LDH, alors il est PVALID ... SINON SI le caractère est dans les Blocs Ignorables alors il est DISALLOWED ... SINON SI le caractère est dans les Lettres & Chiffres, alors il est PVALID SINON SI (cas par défaut) il est DISALLOWED
La section 4 insiste sur le fait que la liste des caractères faisant foi est celle calculée par l'algorithme ci-dessus. La liste fournie dans ce RFC 5892, en annexe B, n'est là que pour information (en effet, chaque nouvelle version d'Unicode modifiera les tables).
On a vu que le sort d'un caractère dont le statut est
CONTEXT
nécessite de regarder une table. Celle-ci
est définie dans la section 5.2 et sa syntaxe figure dans l'annexe
A. Elle est hébergée à l'IANA.
Enfin, même si elle n'a pas de caractère normatif (cf. RFC 8753), la plus grande partie du RFC est formée par l'annexe B, qui donne l'état actuel des tables de caractères avec leur statut.
Comme indiqué plus haut, les tables figurant dans le RFC ne sont
pas normatives, seul l'algorithme l'est. En pratique, les tables ont
été produites par un programme écrit par l'auteur du RFC qui ne le
distribue pas (malgré plusieurs demandes). J'ai refait une mise en
œuvre incomplète (manque de temps) de
l'algorithme qu'on peut récupérer en create-idnabis-tables.py
.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)