* [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]] 版))