2. Syntaxe URN (URN Syntax)
Comme indiqué ci-dessus, la syntaxe des URN dans cette spécification permet beaucoup plus de fonctionnalités que ce n'était le cas dans les spécifications antérieures, plus récemment [RFC2141]. Elle est également harmonisée avec la syntaxe URI générale [RFC3986] (qui, il faut le noter, a été achevée après les spécifications URN antérieures).
Cependant, cette spécification n'étend pas la syntaxe URN pour permettre l'utilisation directe de caractères en dehors de la plage ASCII [RFC20]. Cette restriction implique que de tels caractères doivent être encodés en pourcentage comme décrit dans la section 2.1 de la spécification URI [RFC3986].
La syntaxe de base d'un URN est définie en utilisant la forme de Backus-Naur augmentée (Augmented Backus-Naur Form, ABNF) comme spécifié dans [RFC5234]. Les règles non définies ici (spécifiquement : alphanum, fragment et pchar) sont définies dans le cadre de la syntaxe URI [RFC3986] et utilisées ici pour souligner la relation syntaxique avec les termes utilisés là-bas. Les définitions de certains des termes utilisés ci-dessous ne sont pas exhaustives ; des restrictions supplémentaires sont imposées par le texte qui peut être trouvé dans les sections de ce document spécifiques à ces termes (en particulier r-component dans la section 2.3.1 et q-component dans la section 2.3.2).
namestring = assigned-name
[ rq-components ]
[ "#" f-component ]
assigned-name = "urn" ":" NID ":" NSS
NID = (alphanum) 0*30(ldh) (alphanum)
ldh = alphanum / "-"
NSS = pchar *(pchar / "/")
rq-components = [ "?+" r-component ]
[ "?=" q-component ]
r-component = pchar *( pchar / "/" / "?" )
q-component = pchar *( pchar / "/" / "?" )
f-component = fragment
Le caractère point d'interrogation "?" peut être utilisé sans encodage en pourcentage à l'intérieur des r-components, q-components et f-components. En dehors de ces composants, un "?" qui n'est pas immédiatement suivi de "=" ou "+" n'est pas défini pour les URN et DEVRAIT être traité comme une erreur de syntaxe par les analyseurs spécifiques aux URN et autres processeurs.
Les sections suivantes fournissent des informations supplémentaires sur les éléments syntaxiques des URN.