[2] [[HTML]] の [DFN[[CODE(HTMLe)[[[isindex]]]]]] [[要素]]は、元々はその[[文書]] (によって代表される[[資源]]) が検索可能であることを表していました。現在では検索フォームに展開されるようになっていますが、 [[廃止]]されており、[[利用者エージェント]]は実装しなければなりませんが、[[著者]]は使ってはなりません。 * 代替 [5] この[[要素]]は [[HTML4]] で[[非推奨]]とされた後、 [[HTML5]] により[[廃止]]されました。 [105] 代わりに、 [CODE(HTMLe)[[[form]]]] 要素と [CODE(HTMLe)[[[input]]]] [[要素]]を使って同じようなことが実現できます。 * 仕様書 [REFS[ - [108] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) - [109] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) - [110] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) ]REFS] * 属性 [4] ,[CODE(HTMLa)[[[action]]]] ,[CODE(SGML)[%[[URI]]]] , ,提出先 , ,[CODE(HTMLa)[[[class]]]] , ,(なし) ,[[級]] ,[HTML 4] %[[coreattrs]] ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML 4] %[[i18n]] ,[CODE(HTMLa)[[[href]]]] ,[CODE(SGML)[%[[URI]]]] , ,提出先 ,[CODE(HTMLa)[[[id]]]] ,[CODE(SGML)[[[ID]]]] ,(なし) ,[[固有識別子]] ,[HTML 4] %coreattrs ,[CODE(HTMLa)[[[lang]]]] ,[CODE(SGML)[%[[LanguageCode]]]] ,(継承) ,[[自然言語]] ,[HTML 4] %i18n ,[CODE(HTMLa)[[[xml]]:[[lang]]]] ,[CODE(SGML)[%[[LanguageCode]]]] ,(継承) ,[[自然言語]] ,W3C 勧告 ,[XHTML 1] ,[CODE(HTMLa)[[[prompt]]]] ,[CODE(SGML)[%[[Text]]]] , , ,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[style]]]] ,[CODE(SGML)[%[[StyleSheet]]]] ,(なし) ,スタイル指定 ,[HTML 4] %coreattrs ,[CODE(HTMLa)[[[title]]]] ,[CODE(SGML)[%[[Text]]]] ,(なし) ,注釈的題 ,[HTML 4] %coreattrs ,[CODE(HTMLa)@en[[[type]]]],[CODE(HTML)@en[[[khtml_isindex]]]],(なし),,非標準,[[WebKit]] * 構文解析 [106] [CODE(HTMLe)@en[[[isindex]]]] [[要素]]は歴史的にいろいろな形で実装されてきましたが、 現在の [[HTML Standard]] では [CODE(HTMLe)@en[[[form]]]] [[要素]]とその[[子孫]]という形に[[構文解析器]]の時点で展開される 「マクロ」として定義されています。各 [[Webブラウザー]]の現行世代の構文解析器 (いわゆる [[HTML5構文解析器]]) もすべてそのように実装しています。 ;; [107] 従って [CODE(DOMm)@en[[[createElement]]]] や [[XML]] で [CODE(HTMLe)@en[[[isindex]]]] [[要素]]を作っても、 [CODE(HTMLe)@en[[[isindex]]]] としての機能は持ちません。 * [CODE(HTMLe)@en[input]] 要素の [CODE(HTMLa)@en[name]] 「[CODE(HTML)@en[isindex]]」 [111] [CODE(HTMLe)@en[[[isindex]]]] [[要素]]が展開された[[要素]]のひとつは [CODE(HTMLe)@en[[[input]]]] [[要素]]で、 [CODE(HTMLa)@en[[[name]]]] [[属性]]が [DFN[[CODE(HTML)@en[[[isindex]]]]]] となります。 これは[[フォーム提出]]の際に特別に扱われます (>>109)。それによって旧来の [CODE(HTMLe)@en[[[isindex]]]] [[要素]]の動作がエミュレートされています。 * 歴史 [6] 本来この要素は索引があって検索可能なことを表すだけで、 検索フォームは UA の機能に過ぎなかった [WEAK[(本文領域には表示せず、メニューから検索機能を呼出せるだけの]] UA もあった)]] のに、 いつの間にか文章の適当なところに配置できる簡易フォーム機能となってしまいました。 フォーム提出先 URI まで指定できるようになっています [WEAK[(HTML 4 にはその機能は入りませんでしたが)]]。 HTML 4 に至っては、 > This element creates a single-line text input control. [SRC[HTML 4 17.8]] などと定義しています。 [7] しかも、 [CODE(HTMLe)[[[head]]]] 要素が創設された時にそちらに収納されるはずのものであったにもかかわらず、 いつの間にか本文のどこにあっても良いことになっています。 ここまでして高機能化するほど使い道があるものではありませんし、 [CODE(HTMLe)[[[form]]]] が使いづらいというわけでもないのですが、 どうしてこうも拡張されてしまったのでしょうと思わずにはいられません。 [20] [CITE[Notes on informal HTML-IG meeting 25 July 94]] ([TIME[1994-08-24 02:08:51 +09:00]] 版) > ISINDEX should not be allowed in the body of messages. (This has always been a bug encouraged by Mosaic's handling of if, but it should be done with a small form, and it is messy to allow it in two roles.) [REFS[ - [3] [[HTML 2.0]]: [[RFC 1866]] 5.2.3. Keyword Index: ISINDEX - [[HTML 4]] -- [CITE[17.8 The [CODE(HTMLe)[ISINDEX]] element]] -- [[移行用DTD]] - [[XHTML 1.0]] -- [CSECTION[C.6. Isindex]] ]REFS] [10] HTML 4 DTD の[[注釈]] (参考) には [Q[single line prompt]] とあります。 [9] [CODE(HTMLe)[isindex]] の意味がよく規定されているのは[[基底URI]] が [[HTTP]] である場合のみです。また、入力する文字列は [[Latin-1]] に制限されます。 [SRC[HTML 4 17.8]] [1] [[WebTV]] では「属性なし」で、次のような例が載っています。 [PRE(HTML)[ ]PRE] [WEAK[(出典: [CODE(HTMLe)[isindex]] )]] こんなのは [[SGML]] ではないと思うんですがねぇ。 ** 文脈 [12] [CODE(HTMLe)[isindex]] 要素型は元々の意味からすると [CODE(HTMLe)[[[head]]]] 内でのみ認められるべきでしたし、 何個あっても意味が変わらないので高々1個だけ認められるべきでした。 しかし、 [CODE(HTMLe)[isindex]] 要素の場所に入力欄を設けるという実装が行われるようになり、 [[文書]]のあらゆる場所に何個でも置けるように[Q[拡張]]されてしまいました。 [13] [[HTML 4]] ではこの要素型を [CODE(SGML)[%[[block]]]] に分類しています。従って、 [CODE(HTMLe)[[[body]]]] 内の[[行内要素]]しか認められない場所''以外''ほとんどどこにでも書けます。 また、 [[DTD]] 内の[[引数実体]] [CODE(SGML)[%head.content]] で高々1回記述できると規定しています。つまり、 [CODE(HTMLe)[[[head]]]] の子供としてどこにでも1回だけ指定できます。 [11] [[XHTML 1.0]] 互換性指針は、 [CODE(HTMLe)[[[head]]]] 内に複数の [CODE(HTMLe)[isindex]] を入れるのは互換性のため好ましくないとしています [SRC[XHTML 1.0 C.6]]。 [[XHTML 1.0]] の [[DTD]] をよく見ると [CODE(HTMLe)[isindex]] が [CODE(XML)[%block;]] に含まれるのはそのままですが、 [CODE(HTMLe)[head]] については [CODE(XML)[%[[head.misc]];]] に移動していることがわかります。 [[XML]] の[[内容模型]]の記述能力の限界により、 簡単のため定義の仕方が変わったようです。 これにより、 [CODE(HTMLe)[isindex]] は [CODE(HTMLe)[head]] 内であっても任意の回数使用できるようになりました。 互換性指針が言っているのはこの変更のことのようです。 [19] >>11 この変更について[[Bjoern Hoehrmann]]が問い質していますが、 [[Steven Pemberton]]は >>11 のような説明をしています。 それに対して[[Bjoern Hoehrmann]]は、[[DTD]]の変更は他にもあるのにどうしてこれだけ取り上げるのだとたずねていますが、 返答はありません。 ;; [CITE[HTML Working Group Voyager Issue Tracking System - XHTML-1.0-SE/8836]] ** HTML5 以前の実装 [14] [[Firefox]] 1.5では、[CODE(HTMLe)@en[[[isindex]]]][[タグ]]およびその中の[[属性指定]]がそのまま[[DOM]]上の[[要素節点]]および[[属性節点]]として反映されます。表示上は [PRE(HTML example code)[
[VAR@en[prompt text]]
]PRE] のようになります ([[XBL]]では''ない''ようです)。 [VAR@en[prompt text]]は[CODE(HTMLa)@en[[[prompt]]]][[属性値]]か、 なければ[[利用者界面]]と同じ[[言語]]の文章になります。 日本語の場合 > これは検索可能なインデックスです。検索キーワードを入力してください: になります。 [CODE(HTMLe)@en[[[isindex]]]]に[[CSS]]を適用することは可能ですが、 [CODE(HTMLe)@en[[[hr]]]]''のようなもの''や[CODE(HTMLe)@en[[[input]]]]''のようなもの''には適用できないみたいです。 ([[名無しさん]]) [15] [CODE(DOMa)@en[[[innerHTML]]]]には[CODE(HTMLe)@en[[[isindex]]]]の[[開始タグ]] (とあれば、[[属性指定]]) だけが現れます。 ([[名無しさん]]) [16] [[Opera]] 8.5および[[Opera]] 9 TP1では、[CODE(HTMLe)@en[[[isindex]]]][[開始タグ]]は[[DOM]][[木]]において[CODE(HTMLe)@en[[[isindex]]]][[要素節点]]になり、その[[子供]]として - [CODE(HTMLe)@en[[[hr]]]][[要素節点]] - [[テキスト節点]]: [CODE(HTMLa)@en[[[prompt]]]][[属性値]]か、 なければ[[利用者界面]]の[[言語]]の文章 ([[英語]]では[Q@en[This is a searchable index]]) - [CODE(HTMLe)@en[[[br]]]][[要素節点]] - [CODE(HTMLe)@en[[[input]]]][[要素節点]] -- [CODE(HTMLa)@en[[[type]]]][[属性節点]]: [CODE(HTML)@en[[[text]]]] -- [CODE(HTMLa)@en[[[size]]]][[属性節点]]: [CODE(HTML)@en[20]] - [CODE(HTMLe)@en[[[hr]]]][[要素節点]] が作られます。 [CODE(HTMLe)@en[[[isindex]]]]には[[CSS]]が適用され、 その[[子供]]も通常の方法で[[CSS]]によって[[レンダリング]]されるようです。 [CODE(DOMa)@en[[[innerHTML]]]]には[CODE(HTMLe)@en[[[isindex]]]]の[[開始タグ]] (とあれば、[[属性指定]]) の''後''に、[[内容]]を[[直列化]]したものが現れます。 ([[終了タグ]]は現れ''ません''。) ([[名無しさん]]) [17] [[WinIE 6]]では、[CODE(HTMLe)@en[[[isindex]]]][[開始タグ]]は[[DOM]][[グラフ]]において[CODE(HTMLe)@en[[[form]]]][[要素節点]]と、 その[[子供]]の[[節点]]列: - [CODE(HTMLe)@en[[[hr]]]][[要素節点]] - [[テキスト節点]]: [CODE(HTMLa)@en[[[prompt]]]][[属性値]]か、 なければ[[利用者界面]]の[[言語]]の文章。 [[日本語]]の場合[Q[この索引は検索が可能です。検索するキーワードを入力してください。]]。 - [CODE(HTMLe)@en[[[input]]]][[要素節点]] -- [CODE(HTMLa)@en[[[name]]]][[属性節点]]: [CODE(HTML)@en[[[isindex]]]] - [CODE(HTMLe)@en[[[hr]]]][[要素節点]] となります。[[属性]]は、 - [CODE(HTMLa)@en[[[action]]]][[属性]]があれば、 [[DOM]]では[CODE(HTMLe)@en[[[form]]]][[要素]]に[[指定]]されます。 - [CODE(HTMLa)@en[[[name]]]][[属性]]や[CODE(HTMLa)@en[[[type]]]][[属性]]があっても、[[DOM]]には現れません。 - [CODE(HTMLa)@en[[[prompt]]]][[属性]]は[[テキスト節点]]として現れ、[[属性]]としては[[DOM]]に現れません。 - その他の[[属性]]は[CODE(HTMLe)@en[[[input]]]][[要素節点]]に付されます。 それが[CODE(HTMLe)@en[[[input]]]][[要素]]で有効な[[属性]]であるなら、その効果が現れます。 [[CSS]]による[[レンダリング]]指定は[[DOM]]上の[[要素]]構造に対して適用され、 [CODE(HTMLe)@en[[[isindex]]]][[要素]]への指定は適用されません。 [CODE(DOMa)@en[[[innerHTML]]]]は[[DOM]]上の構造を[[直列化]]したものとなります。 [96] [CODE(DOMm)@en[[[createElement]]]] で作った [CODE(HTMLe)@en[[[isindex]]]] [[要素]]を [[HTML文書]]に挿入した場合、 - [[Firefox]] 3.5 では [CODE(HTMLe)@en[[[isindex]]]] [[要素]]として機能します - [[Chrome]] では [CODE(HTMLe)@en[<[[input]] [[type]]=[[text]]>]] のように[[レンダリング]]されます (動きは未検証) - [[Opera]], [[WinIE]] では何も[[レンダリング]]されません どの[[ブラウザ]]でも [[DOM]] 上は [CODE(HTMLe)@en[[[isindex]]]] [[要素]]のままです。 ;; [TIME[2010-07-24T05:41:57.600Z]] ;; ;; [97] 普通に [CODE(HTMLe)@en[<[[isindex]]>]] [[開始タグ]]を [[HTML文書]]に書くと [[Firefox]] 以外は複数の [[HTML]] [[要素]]に展開した状態で [[DOM]] に現れますから、この結果は頷けます。 [98] [[XHTML]] に [CODE(HTMLe)@en[[[isindex]]]] [[要素]]が含まれる場合、 - [[Firefox]]、[[Opera]] では [CODE(HTMLe)@en[[[isindex]]]] [[要素]]として機能します -- [[Firefox]] では[[子供]]があっても無視されます -- [[Opera]] では[[子供]]があると通常の [CODE(HTMLe)@en[[[isindex]]]] の内容の後に[[レンダリング]]されます - [[Chrome]] では [CODE(HTMLe)@en[<[[input]] [[type]]=[[text]]>]] のように[[レンダリング]]されます (動きは未検証) -- [[子供]]があっても無視されます [[DOM]] 上は - [[Firefox]]、[[Chrome]] では [CODE(HTMLe)@en[[[isindex]]]] [[要素]]のままです - [[Opera]] では [[HTML]] の時のように[[子要素]]が勝手に作られます -- 既に[[子供]]などがあるなら、その[[兄]]として挿入されます という感じです。 ;; [TIME[2010-07-24T05:53:38.200Z]] ;; ;; [99] >>98 [[Opera]] で挿入される[[要素]]は [PRE(HTML example code)[
This is a searchable index

]PRE] のように[[属性]]がちょっとおかしいです。 ** [CODE(HTMLe)@en[isindex]] 要素 [CODE(HTMLa)@en[type]] 属性 [92] [[WebKit]] は、 [CODE(HTMLe)@en[[[isindex]]]] [[開始タグ]]が [[HTML文書]]中に現れると、 代わりに [CODE(HTMLe)@en[[[div]]]] [[要素]]などを [[DOM]] に挿入しますが、その一部として、入力欄の部分には [CODE(HTMLe)@en[[[isindex]]]] [[要素]]が挿入され、その [CODE(HTMLa)@en[[[type]]]] [[属性]]は [CODE(HTML)@en[[[khtml_isindex]]]] となります。 ;; [[DOM]] 上の [CODE(HTMLe)@en[[[isindex]]]] [[要素]]は [CODE(HTMLe)@en[[[input]]]] [CODE(HTMLa)@en[[[type]]]] [CODE(HTML)@en[[[text]]]] のように[[レンダリング]]されます。 少なくてもレンダリングに関しては、 [CODE(HTMLa)@en[[[type]]]] [[属性]]の影響はないみたいです。 ;; なお、 [CODE(HTMLe)@en[[[isindex]]]] [[開始タグ]]中の[[属性]]は [[DOM]] の [CODE(HTMLe)@en[[[isindex]]]] [[要素]]に設定されるのですが、 [CODE(HTMLa)@en[[[type]]]] [[属性]]は [CODE(HTML)@en[[[khtml_isindex]]]] に常になります。 ** HTML5 [93] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-09-29 23:46:06 +09:00]] 版) [94] [CITE[Manual pages]] ([TIME[2010-02-14 12:24:02 +09:00]] 版) [95] [CITE[IRC logs: freenode / #whatwg / 20100311]] ([TIME[2010-03-13 21:41:39 +09:00]] 版) [100] [CITE@en[HTML5 Revision Tracker]] ([TIME[2010-08-03 08:06:31 +09:00]] 版) [103] [CITE[Intent to remove . - Google グループ]] ( ([TIME[2013-12-04 19:42:05 +09:00]] 版)) [104] >>103 より > Google index files say is used 0.000011% of pages as of December 2, 2013. * 実装 [112] [[Blink]] では >>113 の500行目付近で[[構文解析]]が実装されています。 [CODE(HTMLa)@en[[[prompt]]]] の値は [CODE[SearchableIndexIntroduction]] を参照しています。その実際の値は >>114 の各[[ロケール]]の [[XML]] ファイルに [CODE["8141602879876242471"]] という値で含まれています。 [REFS[ - [113] [CITE[Source/core/html/parser/HTMLTreeBuilder.cpp - chromium/blink - Git at Google]] ([TIME[2014-01-02 16:02:11 +09:00]] 版) -- git clone https://chromium.googlesource.com/chromium/blink - [114] [CITE@en['''['''chrome''']''' Index of /trunk/src/webkit/glue/resources]] ([TIME[2014-01-02 16:06:16 +09:00]] 版) / [CITE[webkit/glue/resources - chromium/chromium - Git at Google]] ([TIME[2014-01-02 16:41:28 +09:00]] 版) -- git clone http://git.chromium.org/git/chromium.git ]REFS] [115] [[Gecko]] では >>116 や >>117 の [CODE[IsIndexPromptWithSpace]] が [CODE(HTMLa)@en[[[prompt]]]] の値です。各[[ロケール]]のファイルが各[[ロケール]]のリポジトリの >>117 と同じディレクトリに入っています。 [REFS[ - [116] [CITE[gecko-dev/dom/locales/en-US/chrome/layout/HtmlForm.properties at master · mozilla/gecko-dev]] ([TIME[2014-01-02 16:09:12 +09:00]] 版) - [117] [CITE@en-US[ja: dom/chrome/layout/HtmlForm.properties]] ([TIME[2014-01-02 16:07:40 +09:00]] 版) ]REFS] [118] [[HTML Standard]] は [CODE(HTMLe)@en[[[isindex]]]] の前後どちらにも文字列を挿入することを認めていますが、 [[Blink]] も [[Gecko]] も前にしか挿入しないようです。 (各[[ロケール]]のデータがそうなっているだけでなく、 [[構文解析器]]に後ろ側に文字列を挿入するコードがありません。 [TIME[2014-01-02T16:12:07.900Z]] * 例 [8] メッセージつきの例 [SRC[HTML 4 17.8]] [PRE(HTML)[ ]PRE] [CODE(HTMLe)[[[input]]]] を使って書き換えた例 [SRC[HTML 4 17.8、改]] [PRE(HTML)[

]PRE] 但し、フォームと索引では[[提出]]方法が異なるので、 この2つの例は交換可能ではありません。 [18] [[WAIS]]で検索する例: [PRE(HTML obsolete example code)[ ]PRE] ;; 出典: [CITE[Lynx Users Guide v2.7.1]] * 関連 [101] [[CGI]] には [CODE(HTMLe)@en[[[isindex]]]] [[要素]]からの問い合わせのための[[スクリプト命令行]]という機能がありました。 ;; [102] [CODE(HTMLe)@en[[[isindex]]]] [[要素]]が使われなくなり、そちらも使われなくなっています。