Passa al contenuto principale

2. Sintassi URN (URN Syntax)

Come discusso sopra, la sintassi per gli URN in questa specifica consente significativamente più funzionalità rispetto a quanto era il caso nelle specifiche precedenti, più recentemente [RFC2141]. È anche armonizzata con la sintassi URI generale [RFC3986] (che, va notato, è stata completata dopo le specifiche URN precedenti).

Tuttavia, questa specifica non estende la sintassi URN per consentire l'uso diretto di caratteri al di fuori dell'intervallo ASCII [RFC20]. Tale restrizione implica che tali caratteri devono essere codificati in percentuale come descritto nella Sezione 2.1 della specifica URI [RFC3986].

La sintassi di base per un URN è definita utilizzando la forma di Backus-Naur aumentata (Augmented Backus-Naur Form, ABNF) come specificato in [RFC5234]. Le regole non definite qui (specificamente: alphanum, fragment e pchar) sono definite come parte della sintassi URI [RFC3986] e utilizzate qui per evidenziare la relazione sintattica con i termini utilizzati lì. Le definizioni di alcuni dei termini utilizzati di seguito non sono complete; restrizioni aggiuntive sono imposte dal testo in prosa che può essere trovato nelle sezioni di questo documento specifiche per quei termini (in particolare r-component nella Sezione 2.3.1 e q-component nella Sezione 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

Il carattere punto interrogativo "?" può essere utilizzato senza codifica percentuale all'interno di r-components, q-components e f-components. Oltre che all'interno di questi componenti, un "?" che non è immediatamente seguito da "=" o "+" non è definito per gli URN e DOVREBBE essere trattato come un errore di sintassi da parser specifici per URN e altri processori.

Le sezioni seguenti forniscono informazioni aggiuntive sugli elementi sintattici degli URN.