<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2234</anchor> の <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor></dfn> (増補 BNF)
は、非常によく用いられていた <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 822</anchor>
の ABNF を整理・拡張して独立な仕様としたものです。
RFC 2234 は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">提案標準</anchor>となっており、
新しい IETF の規格を中心によく利用されています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 仕様書:<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2234</anchor>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="urn:ietf:rfc:2234">urn:ietf:rfc:2234</anchor-external></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
改訂版の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4234</anchor> が発行されました。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2005-10-16 05:55:41 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4234</anchor> は更に改訂され、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 5234</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターネット標準</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">STD 68</anchor>)
となりました。(差異については <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 5234</anchor> の項を参照。)</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <cite xml:lang="en">RFC 7405 - Case-Sensitive String Support in ABNF</cite> (<time>2014-12-24 15:03:44 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7405">https://tools.ietf.org/html/rfc7405</anchor-external></li></ul></refs></section><section><h1>文字列リテラル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終端</anchor>である <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>について、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2234</anchor>/<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4234</anchor>/<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 5234</anchor>
は (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 822</anchor> から引き継いだ) <code>&quot;</code> で括る構文を規定しています。
この場合、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII大文字・小文字不区別</anchor>を表しています。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <code>&quot;yes&quot;</code> は、 <code>yes</code>, <code>YES</code>, <code>YeS</code> などを表します。</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引用符</anchor>内には、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII印字可能文字</anchor>のうち <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;</anchor></code>
以外のものを0文字以上含めることができます。</p><figure class="railroad"><ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;</anchor></code></li><li>*<ol><li>|<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0020</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0021</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+0023</anchor></code>...<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+007E</anchor></code></li></ol></li></ol></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;</anchor></code></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7405</anchor></dfn> はこの構文を拡張し、直前に <dfn><code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%i</anchor></code></dfn>
をつけて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII大文字・小文字不区別</anchor>を、 <dfn><code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%s</anchor></code></dfn>
をつけて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大文字・小文字区別</anchor>を表すこととしました <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。
なおこの <code>i</code> と <code>s</code> も<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII大文字・小文字不区別</anchor>です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</p><figure class="railroad"><ol><li>?<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%</anchor></code></li><li>|<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">s</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">S</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">i</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">I</anchor></code></li></ol></li></ol></li><li>引用符で括られた文字列</li></ol></figure></section><section><h1>他の仕様書の参照</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>で定義された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">生成規則</anchor>を参照する時に、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">自然言語</anchor>による説明を表す <code>&lt; ... &gt;</code> 構文を使うことがあります。</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <cite xml:lang="en">RFC 7838 - HTTP Alternative Services</cite>
(<time>2016-04-17 23:25:39 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7838">https://tools.ietf.org/html/rfc7838</anchor-external></figcaption><blockquote><p>OWS           = &lt;OWS, see <strong>[</strong>RFC7230<strong>]</strong>, Section 3.2.3&gt;</p><p>delta-seconds = &lt;delta-seconds; see <strong>[</strong>RFC7234<strong>]</strong>, Section 1.2.1&gt;</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 記述方法に特に規定はなく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7838</anchor> の例 (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal>)
のように同じ文書でも表記が揺れているものもあったりします。</p></section><section><h1>空文字列</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3986</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>たることを明示するために
<code class="ABNF example" xml:lang="en"><n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n>&lt;<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pchar</anchor>&gt;</code> のような表現を使っています。</p></section><section><h1>変種</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> RFC 2234 では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">二重引用符</anchor>で括った<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引用文字列</anchor>は大文字・
小文字を区別しないと定義していますが、その解釈を変えて、
大文字・小文字は区別するとしている仕様書もあります。</p><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3862</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CPIM</anchor>)</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 5147</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml" class="MIME" xml:lang="en">text/plain</code>の素片識別子</anchor>)</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">P3P</anchor> で使われている ABNF は RFC 2234 の ABNF の変種です。
詳しくは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">P3PのABNF</anchor> の項を参照してください。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3080</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;17</anchor-internal></src> と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3391</anchor> では <samp class="ABNF">0..2147483647</samp>
のように、整数の範囲指定が使われています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> ちなみに、 RFC 3391 は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> 式の ABNF も使っています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3981</anchor> など <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IRIS</anchor> RFC では<pre class="ABNF example">unreserved         = // as specified by RFC2396</pre>... のように他の規格で定義されていることを表す表現が
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(undocumented で)</weak> 使われています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3080</anchor> では<pre class="ABNF example">   mapping    = ;; each transport mapping may define additional frames</pre>... のような表記も使われています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;17</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 変種については <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor> の項も参照してください。</comment-p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite xml:lang="en">RFC 3080 - The Blocks Extensible Exchange Protocol Core</cite> (<time>2014-08-17 14:28:11 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc3080#section-2.2.1">http://tools.ietf.org/html/rfc3080#section-2.2.1</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体素片</anchor>の仕様書 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal></src> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor> のような方法で構文を記述していますが、
それが何であるのかは明記していません。ただ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3986</anchor> を参照しており、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor> との類似性を感じさせます。</p><blockquote><pre class="ABNF code">name = fragment - &quot;&amp;&quot; - &quot;=&quot;</pre></blockquote><p>... のような構文により使用できない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>を記述しているようです (が説明がありません)。
<code>-</code> の左辺は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>で、右辺が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>であることにも注意が必要です。
(右辺の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>が認められないのではなく、右辺の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>を含む文字列が認められないと解釈するのが自然でしょう。)</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <cite xml:lang="en-us">Media Fragments URI 1.0 (basic)</cite> (<time>2012-09-27 23:08:40 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/media-frags/#general-structure">http://www.w3.org/TR/media-frags/#general-structure</anchor-external></li></ul></refs></section><section><h1>意味的な変種</h1><section><h1>文字コード</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> RFC 2234 では ABNF によって定義されるものが
(<code class="charset"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">US-ASCII</anchor></code> を用いた) 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オクテット列</anchor>または<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ビット列</anchor>としています。
しかし、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化文字集合</anchor>とは独立に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>だけを定義したい場合や、
符号化文字集合が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> 以外である場合にも ABNF
を使いたいという要求があります。そのため、 RFC 2234
を参照しながらもこの辺の解釈を変えている仕様書も少なからずあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3986</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> 4<sup>th</sup>) は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> は符号化からは独立した文字列として定義されるとしています。
RFC 3986 における ABNF は、それによって定義されるオクテット列 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(の集合)</weak> に ASCII で対応する文字列 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(の集合)</weak>
であるとしています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 同様に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3987</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IRI</anchor>) は ABNF
の終端を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCS</anchor> としています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3676</anchor> (<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor>; <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">format</anchor>=<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">flowed</anchor></code>)
は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> 引数によって実際の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オクテット列</anchor>は変わってくることを指摘しています
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(が不完全です)</weak>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML5</anchor> は「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字集合</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor>」としつつ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor> を利用しています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><cite xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US-x-hixie">HTML 5</cite> (<time xmlns="http://www.w3.org/1999/xhtml">2009-08-01 09:07:43 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-apps/current-work/#inline-documentation-for-external-scripts">http://www.whatwg.org/specs/web-apps/current-work/#inline-documentation-for-external-scripts</anchor-external></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> この他、元の仕様が厳密に意味的に RFC 2234 に従って
US-ASCII のオクテット列として定義していても、
それを引用している仕様がそうでなかったりすることもあります。
例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3066</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語札</anchor>の構文は RFC 2234 の ABNF
で記述されていますが、言語札を採用している仕様がすべて
US-ASCII のオクテット列による表現を使っているわけではありません。
ほとんどの場合、そのような違いは読めばわかるからか明確に規定されていることはありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4646</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語札</anchor>) は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4234</anchor> を参照していますが、
終端は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オクテット</anchor>ではなく、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>だとしています。</p></section><section><h1>空白の省略</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> 古くからの慣習で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LWSP</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FWS</anchor> など)
の挿入を省略しているものもあります。そのような仕様の中には、
どこに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>が挿入されるのかを明記していないものも少なくありません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 6690</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を構文に明記していません。</comment-p></section></section><section><h1>詐称</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2234のABNF</anchor> であるとしながらも実際には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XMLのEBNF</anchor>
を採用していることがあります。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XMLのEBNF</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LEIRIのABNF</anchor> の項をご覧ください。</p></section><section><h1>歴史</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> <cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2234</anchor>: Augmented BNF for Syntax Specifications: ABNF</cite>, <time>2021-08-17T11:47:02.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/rfc/rfc2234">https://www.rfc-editor.org/rfc/rfc2234</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite>, <time>2021-08-17T11:46:24.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata/rfc2234">https://www.rfc-editor.org/errata/rfc2234</anchor-external></li></ul><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite>, <time>2021-08-17T11:45:09.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata/rfc4234">https://www.rfc-editor.org/errata/rfc4234</anchor-external></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <cite>Diff: rfc4234.txt - rfc5234.txt</cite> (<code>2008-09-12 22:50:54 +09:00</code> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/tools/rfcdiff/rfcdiff.pyht?url1=http%3A%2F%2Fwww.ietf.org%2Frfc%2Frfc4234.txt&amp;url2=http%3A%2F%2Fwww.ietf.org%2Frfc%2Frfc5234.txt">http://tools.ietf.org/tools/rfcdiff/rfcdiff.pyht?url1=http%3A%2F%2Fwww.ietf.org%2Frfc%2Frfc4234.txt&amp;url2=http%3A%2F%2Fwww.ietf.org%2Frfc%2Frfc5234.txt</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;38</anchor-internal> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4234</anchor> からの変更点は、編集上の変更の他は、
<code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LWSP</anchor></code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2822</anchor> では使われておらず、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>上の問題が生じる虞があるので使うなという注意書きが加わったくらいのようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <dfn>RFC 5234</dfn> で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ABNF</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターネット標準</anchor>
(<dfn>STD 68</dfn>) になりました。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> RFC 2234 ABNF を使う場合で、終端として文字列表記
(引用文字列) を使う時は、大文字・小文字の区別の有無を
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(区別ありであれ、なしであれ)</weak> 明記しておいた方が安全です。</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <cite xml:lang="en">RFC 6455 - The WebSocket Protocol</cite>
(<time>2015-03-11 20:42:50 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc6455#section-5.2">http://tools.ietf.org/html/rfc6455#section-5.2</anchor-external></figcaption><blockquote><p>the ABNF in this section is</p><p>operating on groups of bits.  The length of each group of bits is</p><p>indicated in a comment.  When encoded on the wire, the most</p><p>significant bit is the leftmost in the ABNF</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <cite xml:lang="en">RFC 6455 - The WebSocket Protocol</cite>
(<time>2015-03-11 20:42:50 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc6455#section-5.2">http://tools.ietf.org/html/rfc6455#section-5.2</anchor-external></figcaption><blockquote><p>The base framing protocol is formally defined by the following ABNF</p><p><strong>[</strong>RFC5234<strong>]</strong>.  It is important to note that the representation of this</p><p>data is binary, not ASCII characters.  As such, a field with a length</p><p>of 1 bit that takes values %x0 / %x1 is represented as a single bit</p><p>whose value is 0 or 1, not a full byte (octet) that stands for the</p><p>characters &quot;0&quot; or &quot;1&quot; in the ASCII encoding.  A field with a length</p><p>of 4 bits with values between %x0-F again is represented by 4 bits,</p><p>again NOT by an ASCII character or full byte (octet) with these</p><p>values.  <strong>[</strong>RFC5234<strong>]</strong> does not specify a character encoding: &quot;Rules</p><p>resolve into a string of terminal values, sometimes called</p><p>characters.  In ABNF, a character is merely a non-negative integer.</p><p>In certain contexts, a specific mapping (encoding) of values into a</p><p>character set (such as ASCII) will be specified.&quot;  Here, the</p><p>specified encoding is a binary encoding where each terminal value is</p><p>encoded in the specified number of bits, which varies for each field.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> <cite xml:lang="en">RFC 7950 - The YANG 1.1 Data Modeling Language</cite>
(<time>2016-09-15 03:32:37 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7950#page-206">https://tools.ietf.org/html/rfc7950#page-206</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <cite xml:lang="en">RFC 3651 - Handle System Namespace and Service Definition</cite>
(<time>2016-11-06 19:13:47 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc3651">https://tools.ietf.org/html/rfc3651</anchor-external></figcaption><blockquote><p>&lt;Handle&gt;          = &lt;NamingAuthority&gt; &quot;/&quot; &lt;LocalName&gt;</p><p>&lt;NamingAuthority&gt; = *(&lt;NamingAuthority&gt;  &quot;.&quot;) &lt;NAsegment&gt;</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <cite xml:lang="en">draft-seantek-unicode-in-abnf-03 - Unicode in ABNF</cite>
(<time>2017-05-09 16:44:43 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/draft-seantek-unicode-in-abnf-03">https://tools.ietf.org/html/draft-seantek-unicode-in-abnf-03</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <cite xml:lang="en">RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH</cite>
(<time>2017-10-01 13:49:21 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc5323#section-5.15.1">https://tools.ietf.org/html/rfc5323#section-5.15.1</anchor-external></figcaption><blockquote><p>(Note that the ABNF above is defined in terms of Unicode code points</p><p>(<strong>[</strong>UNICODE5<strong>]</strong>); when a query is transmitted as an XML document over</p><p>WebDAV, these characters are typically encoded in UTF-8 or UTF-16.)</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <cite xml:lang="en">Editorial: use %s ABNF notation</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2018-12-12 20:25:58 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/commit/e69e9c2b73b1aac124de47e8f32ee8979dfdb77a">https://github.com/whatwg/fetch/commit/e69e9c2b73b1aac124de47e8f32ee8979dfdb77a</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <cite xml:lang="en">Use ABNF &quot;%s&quot; notation for case-sensitive values · Issue #845 · whatwg/fetch</cite>
(<time>2019-05-31 14:48:43 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/issues/845">https://github.com/whatwg/fetch/issues/845</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <cite xml:lang="en">Use &quot;%s&quot; notation for case-sensitive strings in ABNF (#133) by reschke · Pull Request #184 · httpwg/http-core</cite>
(<time>2019-05-31 14:48:59 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/httpwg/http-core/pull/184">https://github.com/httpwg/http-core/pull/184</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <cite xml:lang="en">Editorial: use %s ABNF notation by annevk · Pull Request #850 · whatwg/fetch</cite>
(<time>2019-05-31 14:49:13 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/fetch/pull/850">https://github.com/whatwg/fetch/pull/850</anchor-external></p></section></body></html>