2. URN 構文 (URN Syntax)
上述のように、この仕様における URN の構文は、最近では [RFC2141] である以前の仕様の場合よりも大幅に多くの機能を可能にします。また、一般的な URI 構文 [RFC3986](注意すべきことに、これは以前の URN 仕様の後に完成しました)とも調和しています。
ただし、この仕様は、ASCII 範囲 [RFC20] 外の文字の直接使用を許可するように URN 構文を拡張しません。この制限は、そのような文字は URI 仕様 [RFC3986] のセクション 2.1 に記載されているようにパーセントエンコードする必要があることを意味します。
URN の基本構文は、[RFC5234] で指定されている拡張バッカス・ナウア記法 (Augmented Backus-Naur Form, ABNF) を使用して定義されます。ここで定義されていない規則(具体的には:alphanum、fragment、および pchar)は、URI 構文 [RFC3986] の一部として定義され、ここではそこで使用される用語との構文的関係を指摘するために使用されます。以下で使用される用語のいくつかの定義は包括的ではありません。これらの用語に固有のこの文書のセクションにある本文によって追加の制限が課されます(特にセクション 2.3.1 の r-component とセクション 2.3.2 の q-component)。
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
疑問符文字 "?" は、r-component、q-component、および f-component 内でパーセントエンコードなしで使用できます。これらのコンポーネント内以外では、"=" または "+" が直後に続かない "?" は URN に対して定義されておらず、URN 固有のパーサーおよび他のプロセッサによって構文エラーとして扱われるべきです (SHOULD)。
以下のセクションでは、URN の構文要素に関する追加情報を提供します。