<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><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="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</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-5.5">http://tools.ietf.org/html/rfc2295#section-5.5</anchor-external></li><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> <strong><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.4">http://tools.ietf.org/html/rfc2295#section-6.4</anchor-external></strong></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> <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>は、
<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>の全体の品質にどう影響するかを指定するものです <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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 属性値は、 <code class="ABNF">feature-list</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="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal></src>。</p><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> <code class="ABNF" xml:lang="en">feature-list</code> は、1つ<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>) です <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>要素</li><li>*<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li>要素</li></ol></li></ol></figure><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>1つか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴述語</anchor>1つ<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>) を四角括弧で括ったもののいずれかです。
更にその後に <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>付きの<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> の順に続けることもできます。 <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><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴述語</anchor></li><li>|<ol><li>=<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:">特徴述語</anchor></li><li>*<ol><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OWS</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴述語</anchor></li></ol></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></li></ol></li></ol></li><li>?<ol><li><code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">;</anchor></code></li><li>?<ol><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:">小数</anchor></li></ol></li><li>?<ol><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:">小数</anchor></li></ol></li></ol></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:">生成規則</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> から<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><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> <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">+</anchor></code> と小数が指定された場合、
<code>true-improvement</code> が指定された小数値となります。
指定されなかった場合は <code>true-improvement</code> が 1 となります。 <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><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> <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code> と小数が指定された場合、
<code>false-degradation</code> が指定された小数値となります。
指定されなかった場合は、 <code>true-improvement</code> が指定されたら 1、
指定されなかったら 0 が <code>false-degradation</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><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="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:">OWS</anchor> を挿入できるのかは不明です。仕様書上の例では構文上明示された箇所以外で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を使っていません。</comment-p></section><section><h1>処理</h1><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> <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>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">q値</anchor>を計算する際には、
指定された各要素の値を乗じたものと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>はする<SHOULD xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき</SHOULD>ですし、
<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><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="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> この計算結果は <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</n> を超えることもあります <src><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>。</comment-p><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:">特徴述語</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>の場合 (複数指定されている場合には最低1つが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>の場合)
には <code>true-improvement</code>、それ以外の場合には <code>false-degradation</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></section><section><h1>歴史</h1><figure class="quote"><figcaption><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:">RFC 2295</anchor> (HTTP 透過内容折衝) 5.5 Features</figcaption><blockquote><p>The features attribute specifies how the presence or absence of
particular feature tags in the user agent affects the overall quality
of the variant.  This attribute is covered in section 6.4.</p></blockquote><section><h1>RFC 2295 (HTTP 透過内容折衝) 6.4 Features attribute</h1><blockquote><p>The features attribute, for which section 5.1 defines the syntax</p></blockquote><ul><li><code class="ABNF"> &quot;{&quot; &quot;features&quot; feature-list &quot;}&quot; </code></li></ul><blockquote><p>is used in a variant description to specify how the presence or
absence of particular feature tags in the user agent affects the
overall quality of the variant.</p></blockquote><blockquote><ul><li><code class="ABNF">feature-list = 1%feature-list-element</code></li><li><pre>       feature-list-element = ( <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fpred</anchor> | <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fpred-bag</anchor> )
                              [ &quot;;&quot; [ &quot;+&quot; true-improvement  ]
                                    [ &quot;-&quot; false-degradation ]
                              ]</pre></li><li><code class="ABNF"> fpred-bag = &quot;[&quot; 1%fpred &quot;]&quot; </code></li><li><code class="ABNF">true-improvement   =  <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">short-float</anchor></code></li><li><code class="ABNF">false-degradation  =  short-float</code></li></ul></blockquote><blockquote><p>Features attributes are used in variant descriptions (section 5).
Variant descriptions can be transmitted in Alternates headers (section 8.3).</p></blockquote><blockquote><p>Examples are:<ul><li><samp class="conneg"> {features !textonly [blebber !wolx] colordepth=3;+0.7} </samp></li><li><samp class="conneg"> {features !blink;-0.5 background;+1.5 [blebber !wolx];+1.4-0.8} </samp></li></ul></p></blockquote><blockquote><p>The default value for the true-improvement is 1.  The default value
for the false-degradation is 0, or 1 if a true-improvement value is given.</p></blockquote><blockquote><p>A user agent SHOULD, and a remote variant selection algorithm MUST
compute the quality degradation factor associated with the features
attribute by multiplying all quality degradation factors of the
elements of the feature-list.  Note that the result can be a factor greater than 1.</p></blockquote><p><code class="ABNF">feature-list</code> の要素の品質減衰因子すべてを掛け合わせることによる
<code class="conneg">features</code> 属性に関連付けられた品質減衰因子の計算を利用者エージェントは行う<strong>べきです</strong>し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">遠隔変種選択算法</anchor>は計算しなければ<strong>なりません</strong>。</p><blockquote><p>A feature list element yields its true-improvement factor if the
corresponding feature predicate is true, or if at least one element
of the corresponding fpred-bag is true. The element yields its
false-degradation factor otherwise.</p></blockquote><p>特徴目録要素は、対応する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">特徴述語</anchor>が真であるか、
対応する <code class="ABNF">fpred-bag</code> の少なくても1つが真である場合には
<code class="ABNF">true-improvement</code> 因子を与えます。
それ以外の時には要素は <code class="ABNF">false-degradation</code>
因子を与えます。</p></section></figure></section><section><h1>メモ</h1></section></body></html>