/
667.txt
88 lines (65 loc) · 4.76 KB
/
667.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[8] [DFN[[RUBYB[[[構文解析エラー]]]@en[parse error]]]]は、
[[HTML構文解析器]]や[[XML構文解析器]]によって検出された処理対象である[[文書]]の構文的[[誤り]]です。
* 仕様書
[REFS[
- [14] [CITE@en[URL Standard]] ([TIME[2016-02-15 18:33:32 +09:00]] 版) <https://url.spec.whatwg.org/#syntax-violation>
]REFS]
* HTML における構文解析誤り
[9] [[構文解析エラー]]の条件と、その後の処理は、[[仕様書]]によって規定されています。
実装はエラーの有無に関わらず、仕様通りの動作をしなければなりません。
[10] [[構文解析エラー]]を検出したら、[[構文解析器]]はそこで処理を停止して[[利用者]]に報告しても構いませんし、そのまま継続しても構いません。
[[Webブラウザー]]をはじめ一般的な実装は、そのまま処理を継続します。
;; [11] [[Web]] 上には[[構文解析エラー]]を含む[[文書]]が数多く存在しています。
処理を停止するような実装は用途によっては有用かもしれませんが、[[Web互換]]ではありません。
[4] 仕様書上は[[字句]]と[[構文解析エラー]]の順序や[[構文解析エラー]]同士の順序が決まっていますが、
実装がその通りにすることは要求していません。
[EG[
[6] [[字句化器]]は[[出力]]を[[字句]]または[[構文解析エラー]]の列として実装することもできますし、
[[字句]]の列と[[構文解析エラー]]の列それぞれとすることもできます。
後者の実装方法なら[[字句]]と[[構文解析エラー]]に前後関係はありません。
]EG]
[EG[
[5] 例えば[[入力ストリーム]]レベルの[[構文解析エラー]]と[[字句化器]]の[[構文解析エラー]]と[[木構築器]]の[[構文解析エラー]]の相互の順序は実装方法によって前後するかもしれません。
]EG]
;; [7] [[構文解析エラー]]は[[スクリプト]]からアクセス可能ではありませんから、
どのように実装しても[[相互運用性]]には影響しません。
[2]
[CODE[<table><b>abc</b></table>]]
や
[CODE(HTMLe)@en[[[colgroup]]]] の [CODE(HTMLa)@en[[[innerHTML]]]]
における
[CODE(HTML)@en[abc]]
や
[CODE(HTML)@en[<frameset></frameset>abc]]
のような場合に [CODE[abc]] を[[文字字句]]3つとして扱うか、
いくつかの[[文字]]の連続を1つの[[字句]]として扱うかで、[[構文解析エラー]]の数が変わることがあります。
(仕様書では1文字を1つの[[字句]]としていますが、
実在する[[構文解析器]]は複数の[[字句]]をまとめて扱うのが普通です。)
;; [3] [[構文解析エラー]]を報告する場合、その個数は実装に委ねられていますから、
どちらの[[構文解析器]]も仕様に適合します。
* URL における構文違反
[15] [DFN[[RUBYB[妥当性検証誤り]@en[validation error]]]]
(旧[DFN[[RUBYB[構文違反]@en[syntax violation]]]]) は、
[[入力]]と[[構文]]要件との[[致命的]]ではない不一致を表します [SRC[>>14]]。
[16] [[利用者エージェント]]、とりわけ[[適合性検査器]]は、
これを何らかの形で報告する[RUBYB[べき]@en[encourage]]です [SRC[>>14]]。
[17] [[URL Standard]] においては[[構文違反]]は[[構文解析器]]の停止とは明確に区別されています
[SRC[>>14]]。
停止するよう明記されている場合を除き、[[構文違反]]だからといって処理を停止してはなりません。
* 歴史
[1] [CITE[Re: ''''''[''''''whatwg'''''']'''''' Byte-wise tokenization algorithm]] ([[Philip Taylor <excors+whatwg@...>]] 著, [TIME[2008-12-21 17:18:32 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.devel/224>
[12] [CITE@en[878364 – Report HTML parsing errors in the console]]
( ([TIME[2014-08-14 02:11:00 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=878364>
[13] [CITE[IRC logs: freenode / #whatwg / 20140813]]
( ([TIME[2014-08-14 02:12:44 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140813#l-249>
[18] [CITE@en[Rename parse error to syntax violation. Remove XXX on halting on firs… · whatwg/url@3651453]]
([TIME[2015-08-16 11:58:44 +09:00]] 版)
<https://github.com/whatwg/url/commit/3651453f90900110cf0698eeb5eb1084a63b4208>
[19] [CITE@en[Attempt to explain valid input better]]
([[annevk]]著, [TIME[2017-02-10 17:10:23 +09:00]])
<https://github.com/whatwg/url/commit/50cb9ab9d8f70cc2bc72e91976bfaea0ad0fd330>
[20] [CITE@en[Attempt to explain valid input better]]
([[annevk]]著, [TIME[2017-02-10 17:10:23 +09:00]])
<https://github.com/whatwg/url/commit/50cb9ab9d8f70cc2bc72e91976bfaea0ad0fd330>