<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="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>特徴述語</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">feature predicate</rt></rubyb></dfn>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴集合</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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">RFC 2295 - Transparent Content Negotiation in HTTP</cite> (<time>2014-08-31 19:36:42 +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/rfc2295#section-6.3">http://tools.ietf.org/html/rfc2295#section-6.3</anchor-external></li></ul></refs></section><section><h1>意味</h1><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:">特徴述語</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>です <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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</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> <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 class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!</anchor></code>
を置いたものか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor>と値を <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code> または <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!=</anchor></code>
で結んだものか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor>と範囲を <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code> で結んだものです。 <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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><figure class="railroad"><ol><li>|<ol><li>=<ol><li>?<ol><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!</anchor></code></li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor></li></ol></li><li>=<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor></li><li>|<ol><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!=</anchor></code></li></ol></li><li>値</li></ol></li><li>=<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor></li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li><li>範囲</li></ol></li></ol></li></ol></figure><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> 範囲は、数値2つを <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code> で連結し、四角括弧で括ったものです。
ただし数値は省略できます。 <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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><figure class="railroad"><ol><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><em xmlns="http://www.w3.org/1999/xhtml">[</em></anchor></code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li>?<ol><li>数値</li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li>?<ol><li>数値</li></ol></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><em xmlns="http://www.w3.org/1999/xhtml">]</em></anchor></code></li></ol></figure><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> 数値の構文は明記されていません。例示は<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>列となっています。</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:">空白</anchor>が明示されていませんが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor>や値や数値の前後に
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor> を挿入できるものと推測されます。数値の前後に<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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></section><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">変種説明</anchor>の <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">features</anchor></code> <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="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:">利用者エージェント</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:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p><figure class="steps"><ol><li><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:">特徴タグ</anchor>のみなら、その特徴が存在するかどうかを返します。</li><li><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴タグ</anchor>に <dfn><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!</anchor></code></dfn> が付されているなら、
その特徴が存在しないかどうかを返します。</li><li><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:">特徴タグ</anchor>と <dfn><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></dfn> と値が示されているなら、
特徴がその値で存在するかどうかを返します。</li><li><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:">特徴タグ</anchor>と <dfn><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">!=</anchor></code></dfn> と値が示されているなら、
特徴がその値で存在しないかどうかを返します。</li><li><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:">特徴タグ</anchor>と範囲が示されているなら、
特徴が最低1つは数値として存在し、その最大値が範囲に含まれているかどうかを返します。
最初の数値が指定されていないなら 0、最後の数値が指定されていないなら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">∞</anchor>とします。</li></ol></figure><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="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 範囲の最初の数値が最後の数値よりも大きな場合にどう解釈するのかは不明です。
また境界値を含むのかは不明です。</comment-p></section><section><h1>歴史</h1><figure class="quote"><figcaption><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> RFC 2295 (HTTP 透過内容折衝) 6.3 Feature predicates</p></figcaption><blockquote><p>Feature predicates are predicates on the contents of feature sets.
They appear in the features attribute of a variant description.</p></blockquote><p><dfn>特徴述語</dfn>は、<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 class="conneg"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">feature</anchor></code>
属性に出現します。</p><blockquote><pre>      fpred = [ &quot;!&quot; ] ftag
            | ftag ( &quot;=&quot; | &quot;!=&quot; ) tag-value
            | ftag &quot;=&quot; &quot;[&quot; numeric-range &quot;]&quot;

      numeric-range = [ number ] &quot;-&quot; [ number ]</pre></blockquote><blockquote><p>Feature predicates are used in features attributes (section 6.4),
which are used in variant descriptions (section 5).  Variant
descriptions can be transmitted in Alternates headers (section 8.3).</p></blockquote><blockquote><p>Examples of feature predicates are<pre>      blebber, !blebber, paper=a4, colordepth=5, blex!=54,
      dpi=[300-599], colordepth=[24-]</pre></p></blockquote><blockquote><p>Using the feature set of the current request, a user agent SHOULD
compute the truth value of the different feature predicates as follows.</p></blockquote><blockquote><dl><dt>ftag</dt><dd>true if the feature is present, false otherwise</dd><dt>!ftag</dt><dd>true if the feature is absent, false otherwise</dd><dt>ftag=V</dt><dd>true if the feature is present with the value V,
false otherwise,</dd><dt>ftag!=V</dt><dd>true if the feature is not present with the value V,
false otherwise,</dd><dt>ftag=[N-M]</dt><dd>true if the feature is present with at least one
numeric value, while the highest value with which it
is present in the range N-M, false otherwise.  If N
is missing, the lower bound is 0.  If M is missing,
the upper bound is infinity.</dd></dl></blockquote><blockquote><p>As an example, with the feature set<pre>       { ( &quot;blex&quot;       , { } ),
         ( &quot;colordepth&quot; , { &quot;5&quot; } ),
         ( &quot;UA-media&quot;   , { &quot;stationary&quot; } ),
         ( &quot;paper&quot;      , { &quot;A4&quot;, &quot;A3&quot; } ) ,
         ( &quot;x-version&quot;  , { &quot;104&quot;, &quot;200&quot; } )
       }</pre><p>the following predicates are true:<pre>   blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth, UA-
   media=stationary, UA-media!=screen, paper=A4, paper =!A0,
   colordepth=[ 4 - 6 ], x-version=[100-300], x-version=[200-300]</pre><p>and the following predicates are false:<pre>      !blex, blebber, colordepth=6, colordepth=foo, !colordepth,
      screenwidth, screenwidth=640, screenwidth!=640, x-version=99, UA-
      media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta</pre></p></p></p></blockquote></figure></section></body></html>