* [CODE(HTMLe)@en[input]] [CODE(HTMLa)@en[type]] [CODE(HTML)@en[url]] (HTML) [4] [[HTML]] の [CODE(HTMLe)@en[[[input]]]] [[要素]]の [CODE(HTMLa)@en[[[type]]]] [[属性]]を [DFN@en[[CODE(HTML)[[[url]]]]]] とすると、 [[IRI]] を指定する[[フォーム制御子]]となります。 ;; [[URL]] という言葉を[[名前]]に使っていますが、 実際には任意の [[IRI]] を扱うことができます。 [5] 仕様書: - [[Web Forms 2.0]] -- [CSECTION@en[2.4. Extensions to the [CODE(HTMLe)@en[[[input]]]] element]] [[#comment]] ** 値の構文 [6] [[RFC 3987]] の [[IRI]] ([[生成規則]] [CODE(ABNF)@en[[[IRI]]]]) です。 従って、[[相対IRI参照]]は認められません。 [SRC@en[WF2 2.4]] [3] [[IDN]] を使用[['''して構いません''']]。 [[利用者エージェント]]は [[IDNA]] [[符号化]]せずに、 元々入力された通りの[[ドメイン名]]で[[提出]][['''するべきです''']]。 [SRC@en[WF2 2.4]] [9] [[利用者エージェント]]は、 [[利用者]]が[[相対IRI参照]]やその他の [[IRI]] としては不完全な値を入力することを認めても構いません。 しかし、 [CODE(DOMa)@en[[[isTypeMismatch]]]] の判定や[[フォーム提出]]に用いる値は[[絶対IRI]]でなければなりません。 [SRC@en[WF2 2.4]] [10] [[利用者エージェント]]は、 [CODE(ABNF)@en[[[IRI]]]] [[生成規則]]に[[一致]]する任意の[[文字列]]を受け付け[['''しなければなりません''']]。 [[文字]]の並びが[[論理順]]であることなどの [[IRI]] の仕様上の非構文的制約を[[利用者エージェント]]が検査する必要はありません。 [SRC@en[WF2 2.4]] [[#comment]] ** 互換性 [13] '''未対応利用者エージェントとの互換性''' [CODE(HTML)@en[[[month]]]] に対応していない[[利用者エージェント]]は、 [CODE(HTML)@en[[[text]]]] (単一行[[文章入力制御子]]) として扱います。従って、[[利用者]]は任意の文字列を入力することができます。 ですから、[[著者]]は、対応している[[利用者エージェント]]が一般的になるまでの間、 [[フォーム制御子]]の近くで記入方法を説明しておくのがよいでしょう。 [[フォーム処理エージェント]]は記入された値が適当か検査するべきです (これは[[安全性]]の観点からも重要です)。 [[#comment]] ** 歴史 [10] この [CODE(HTMLe)@en[[[input]]]] [CODE(HTMLa)@en[[[type]]]] は [[Web Forms 2.0]] で導入されました。 [19] 当初は [CODE(HTML)@en[[[uri]]]] という名前で提案されていましたが、 [[CSS]] の [CODE(CSS)@en[[[url]]()]] [[関数]]をはじめ、 [[Web]] では [[URL]] という名前が伝統的によく用いられてきたことから、 [[Web Forms 2.0]] でも [CODE(HTML)@en[[[url]]]] という名前に改称されました。 [20] [CODE(HTMLe)@en[[[input]]]] [CODE(HTMLa)@en[[[type]]]] [CODE(HTML)@en[[[url]]]] は [[Opera]] 9 がはじめて実装しました。 [[#comment]] ** 実装 [11] [[Opera 9]] が実装しています。 [[#comment]] ** メモ [[#comment]] * [CODE(HTTP)@en[Refresh:]] 欄 [CODE(HTTP)@en[url]] 引数 (HTTP) [2] 飛び先の [[URL]] を指定します。省略した場合は当該[[実体]]の [[URI]] と仮定します。つまり再読み込みとなります。 詳しくは [CODE(HTTP)@en[[[Refersh]]:]] 欄の項を参照。 * META 要素 URL 属性 (HTML) [1] [[WebTV]] のリファレンスにそれっぽく登場しますが、実在が強く疑われます。 説明を読むとどうも、 [[Refresh:]] を [[http-equiv]] で使った時の [[content]] 属性の値の内部にある [CODE(HTTP)[URL]] パラメーターのことを指しているように思われます。 [[HTML]] 2.0 に由来するなんて書いてありますが、 [[RFC1866]] にはそんなものありません。 [[#comment]] * [CODE(CSS)@en[url()]] 関数 (CSS) [14] [[CSS]] の[[関数]]の中で、 [CODE(CSS)@en[[[url]]]] だけは[[字句解析]]の段階で特別扱いされています。 [[関数名]]は、他の[[関数]]は [CODE@en[[[ident]]]] として定義されているので [CODE(char)[[[\]]]] による [[escape]] が可能ですが、 [CODE(CSS)@en[[[url]]]] では使えません。 ;; [15] >>14 を [[Opera]] 9 は正しく実装していますが、 [[Firefox]] 1.5 と [[WinIE]] 6 は [[escape]] されていてもおkです。 ;; [16] >>14-15 あ、でも、 [CODE@en[URI]] にならないかわりに、 [CODE@en[FUNCTION]], ... にはなるのか・・・。 [[字句]] [CODE@en[URI]] と [[CSS]] の構文定義にでてくる [CODE@en[]] の関係が実は明記されていないから、 [CODE@en[FUNCTION]], ... だけど [CODE@en[]] である、という解釈も可能? [Q@en[The format of a URI value is 'url(' followed by ...]] だからやっぱだめ? [17] '''Firefox 2.0's implementation''': = Let [VAR@en[u]] be an empty string. = Let [VAR@en[invalid]] be false. = Unless the string starts by an [CODE(CSS)@en[[[ident]]]] with value [CODE(CSS)@en[[[url]]]] (case-insensitive, [CODE(CSS)@en[[[escape]]]] is allowed, [CODE(CSS)@en[[[\]]]] followed by a [CODE(CSS)@en[[[newline]]]] is ignored), immediately followed by a [CODE(char)[[[(]]]], it is not a [CODE(CSS)@en[[[URI]]]]. Stop these steps. = ([DFN@en[WS]]) Skip any white space characters. = If the next two characters are [CODE(char)[[[/*]]]], == Skip any character until [CODE(char)[[[*/]]]] is found. == If the substring [CODE(char)[[[*/]]]] is found, === If the following characters are not a white space character or [CODE(CSS)@en[[[/*]]]], set [VAR@en[invalid]] as true. Don't consume these characters yet. === Go to the previous step in the overall steps (i.e. WS). == Otherwise, i.e. if the next character is [CODE(char)@en[[[EOF]]]], the [CODE(CSS)@en[[[URI]]]] is invalid. Stop the entire steps. = If the next character is [CODE(char)[[["]]]], == Appends any character until [CODE(char)[[["]]]] to [VAR@en[u]], with any [CODE(CSS)@en[[[escape]]]] decoded and any [CODE(CSS)@en[[[\]]]] followed by a [CODE(CSS)@en[[[newline]]]] ignored. == ([DFN@en[DWS]]) If the next character is a white space, set [VAR@en[u]] as that character (!). == If next few characters are white spaces, skip them. == If the next character is [CODE(CSS)@en[[[/*]]]], === Skip any character until [CODE(CSS)@en[[[*/]]]]. === If the next character is [CODE(char)@en[[[EOF]]]], the [CODE(CSS)@en[[[URI]]]] is inlvaid. Stop the entire steps. === Otherwise, go to the step named as DWS. == If the next character is [CODE(CSS)@en[[[)]]]], go to the step named as CP. == Otherwise, set [VAR@en[invalid]] as true. == Skip any character until [CODE(char)[[[)]]]] (including [CODE(char)[[[)]]]] following [CODE(char)[\]] but excluding [CODE(char)[[[)]]]] after [CODE(char)[[["]]]] or [CODE(char)[[[']]]] but before [CODE(char)[[["]]]] or [CODE(char)[[[']]]] matching it). == If the next character is [CODE(char)[[[EOF]]]], the [CODE(CSS)@en[[[URI]]]] is invalid. Stop the entire steps. == Otherwise, go to step named as CP. = If the next character is [CODE(char)[[[']]]], == Appends any character until [CODE(char)[[[']]]] to [VAR@en[u]], with any [CODE(CSS)@en[[[escape]]]] decoded and any [CODE(CSS)@en[[[\]]]] followed by a [CODE(CSS)@en[[[newline]]]] ignored. == Go to the step named as DWS. = ([DFN@en[CP]]) If the next character is [CODE(char)[[[)]]]], == If [VAR@en[invalid]] is true, then the [CODE(CSS)@en[[[URI]]]] is invalid. Stop the entire steps. == Otherwise, return a [CODE(CSS)@en[[[URI]]]] whose value is [VAR@en[u]]]]. = If the next character is [CODE(char)["]] or [CODE(char)[']], set [VAR@en[invalid]] as true. = If the next character is a white space, == Skip any white space characters. == If the next character is [CODE(CSS)@en[[[)]]]], go to the previous step in the overall steps (i.e. CP). == Otherwise, set [VAR@en[invalid]] as true. = If the next character is [CODE(char)[[[\]]]], -- decode a few character as [CODE(CSS)@en[[[escape]]]] and append it to [VAR@en[u]], or skip [CODE(CSS)@en[[[whitespace]]]] if it immediately follows the [CODE(char)[[[\]]]]. = If the next character is [CODE(char)@en[[[EOF]]]], the [CODE(CSS)@en[[[URI]]]] is invalid. Stop the steps. = Go to the step named as CP. [18] [[Opera]] 9.00 seems to parse [CODE(CSS)@en[[[URI]]]] as specified in [[CSS 2.1]]. ;; For example, results in a [CODE(CSS)@en[[[font-size]]]] property specified as [CODE(CSS)@en[12[[px]]]]. However, it post-process [CODE(CSS)@en[[[URI]]]] values as: - Drop any [CODE(URI)@en[[[#form:'':'']]#]]]] and following characters. - Drop any preceding and following white space characters. - Resolve a relative reference as an absolute URI. [21] [[WinIE 6]] の実装は複雑怪奇です。 - [CODE(CSS)@en[[[url]]]] という[[関数名]]は、 -- [[大文字]]・[[小文字]]を区別しません。 -- [CODE(CSS)@en[[[escape]]]] を使うことができます。 --- しかし、 [CODE(CSS)@en[[[escape]]]] の最後の[[空白]]が[[改行]]であってはいけません。 --- 最後の[[空白]]の代わり、または直後に[[零]]個以上の[[注釈]]を挿入できます。 ([[CSSの字句化]>>7] を参照。) - [[関数名]]と [CODE(CSS)@en[[[(]]]] の間に[[零]]個以上の[[注釈]]を挿入できます。 - [[括弧]]内では、 -- [Q[普通]]の[[文字列]]を使うことができます。 -- 評価した結果の[[文字列]]が[[空文字列]]なら、 [CODE(CSS)@en[[[URI]]]] ではなく、[[鍵語]] [CODE(CSS)@en[[[none]]]] として扱われます。 -- [Q[普通]]の[[文字列]]の前後に[[零]]個以上の[[空白]] ([[改行]]を含みます。) を挿入できます。 それらは無視されます。 -- 前後の[[空白]]の適当な位置に[[零]]個以上の[[注釈]]を挿入できます。 -- ただし、[Q[普通]]の[[文字列]]の直後の[[注釈]]のような[[文字列]]は、 [Q[普通]]の[[文字列]]の一部とみなされます。 -- [Q[普通]]の[[文字列]]の途中に適当に[[空白]]を挿入できます。 --- 最初''以外''の[Q[普通]]の[[文字列]]に [CODE(CSS)@en[[[;]]]] や [CODE(CSS)@en[[[!]]]] や [CODE(CSS)[[[{]]]] や [CODE(CSS)[[[}]]]] を挿入してはいけません。 ([CODE(CSS)@en[[[escape]]]] しても駄目です。) --- 最初''以外''の[Q[普通]]の[[文字列]]の直後の[[注釈]]のような[[文字列]]は、 [[注釈]]とみなされます。 -- [[注釈]]と [CODE(CSS)[[[\]]]] には複雑な規則があります: --- OK なもの: ---- ---- ---- ---- ---- ---- --- NG なもの: ---- ---- ---- -- 最初の[Q[普通]]の[[文字列]]では [CODE(CSS)@en[[[\]]]] は使えますが、 --- 直後が[[空白]]の時は、 [CODE(CSS)@en[[[\]]]] 自体も値の一部とみなされます。 --- 後の前後の[[空白]]の除去により、 [CODE(CSS example)@en[url(a\ )]] は [CODE[a\]] とみなされます。ちなみに [CODE(CSS example)@en[url(a\20)]] は [CODE[a]] とみなされます。 -- 最初''以外''の[Q[普通]]の[[文字列]]では [CODE(CSS)@en[[[\]]]] はほぼ使えますが、値の一部とみなされます。 --- 値の一部とみなされない場合もあります。例えば: - [[注釈]]を閉じる [CODE(CSS)@en[[[*/]]]] がなければ、 入力の最後まで[[注釈]]の一部とみなされます。 - [[関数]]を閉じる [CODE(CSS)@en[[[)]]]] がなければ、 入力の最後まで[[関数]]の一部とみなされます。 - [CODE(char)[[["]]]] や [CODE(char)[[[']]]] や [CODE(char)[[[(]]]] や [CODE(char)[[[)]]]] を含む場合: 複雑です。 [22] [CITE@en[Re: '''['''css3-namespace''']''' url() syntax]] ([[fantasai]] 著, [CODE[2006-10-01 08:54:25 +09:00]] 版) ([[名無しさん]]) [23] [CITE@en['''['''css3-namespace''']''' url() syntax]] ([[Anne van Kesteren]] 著, [TIME[2008-02-07 07:13:26 +09:00]] 版) ([[名無しさん]]) [[#comment]] * メモ [24] [CITE@en[HTML5 Revision Tracker]] ([TIME[2010-04-27 22:19:38 +09:00]] 版) [25] [CITE[IRC logs: freenode / #whatwg / 20100502]] ([TIME[2010-05-30 23:27:52 +09:00]] 版) [26] [CITE[Basic Data Types and Interfaces – SVG 1.1 (Second Edition)]] ( ([TIME[2011-08-10 12:35:27 +09:00]] 版))