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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
|
<!--#set var="revision" value="\$Id: errors.html,v 1.13 2001-09-19 08:52:09 link Exp $" -->
<!--#set var="date" value="\$Date: 2001-09-19 08:52:09 $" -->
<!--#include virtual="/header.html" -->
<p>
These error explanations were originally written by Scott Bigham,
they are used here with his permission.
</p>
<dl>
<dt><a id="undef-id" name="dup-id">"ID "FOO" already defined"</a></dt>
<dd>
<p>
You have defined the id/name "FOO" more then once. You will also get
a message telling you where it was first defined. Be aware that this
message may be the result of an ambiguity in the specification.
While user-agents must treat values of the id attribute
as case-sensitive, they must still be case-insensitive unique in the
document. See
<a href="http://www.w3.org/TR/html4/struct/links.html#h-12.2.1">Section
12.2.1 Syntax of anchor names</a> in the HTML 4.01 Reccomendation
for further information.
</p>
</dd>
<dt><a id="unterm-comment-1" name="unterm-comment-1">"entity end not allowed in comment"</a></dt>
<dd>
<p>
Unterminated comment. The position indicator points to the very end of
the file, where the problem was detected; to find the beginning of the
comment, try searching for the last occurrence of
`<code><!--</code>' in the document.
</p>
</dd>
<dt><a id="unterm-comment-2" name="unterm-comment-2">"name start character invalid: only s and comment allowed in comment declaration"</a></dt>
<dd>
<p>
Unterminated comments again. This time, you have a case like:
</p>
<pre>
<!-- This is the first unterminated comment >
<!-- This is the second one >
</pre>
<p>
The validator (correctly) interprets the `<code>--</code>' in the
second comment as terminating the first comment, and then interprets
the text of the second comment as text between comments, which is not
allowed.
</p>
</dd>
<dt><a id="bad-comment" name="bad-comment">"unknown declaration type `FOO'"</a></dt>
<dd>
<p>
Most likely an invalid comment of the form <code><!invalid
comment></code>; the validator is (correctly) attempting to
interpret it as an <a href="sgml.html#sgml">SGML</a> markup
declaration.
</p>
</dd>
<dt><a id="attr-quoted" name="attr-quoted">"an attribute value must be a literal unless it contains only name characters"</a></dt>
<dd>
<p>
You have an attribute whose value needs to be in quotes. If an
attribute value contains any character other than letters, digits,
hyphens and periods, it must be enclosed in double quotes (single
quotes would also be okay from an <a href="sgml.html#sgml">SGML</a>
standpoint, but some browsers don't recognize them).
</p>
</dd>
<dt><a id="attr-char" name="attr-char">"character `X' not allowed in attribute specification list"</a></dt>
<dd>
<p>
The validator has found a character inside an HTML tag that isn't
allowed there. This usually means you didn't put an attribute value in
quotes when necessary. It also probably means that the character in
question is not allowed in the value of the attribute at all, or you
would have received the <a href="#attr-quoted">previous error</a>
instead. See <a href="#bad-attr-char">below</a> for more information.
</p>
<p>
You can also get in trouble by forgetting the closing quote on an
attribute. For instance:
</p>
<pre>
<IMG SRC="http://foo.com/fred.gif>
<IMG SRC="http://foo.com/joe.gif>
</pre>
<p>
The validator will (correctly) interpret this as a SRC value of
<code>"http://foo.com/fred.gif> <IMG SRC="</code>, and then
choke on the following `:'. In this case, the position indicator in
the error message may be several lines below the line with the missing
quote.
</p>
</dd>
<dt><a id="name-length" name="name-length">"length of attribute value must not exceed LITLEN less NORMSEP (1022)"</a></dt>
<dd>
<p>
This usually occurs in conjunction with the
<a href="#attr-char">previous error</a>. It almost always means that
you've forgotten a closing quote on an attribute value. For instance,
in:
</p>
<pre>
<IMG SRC="fred.gif>
<!-- 50 lines of stuff -->
<IMG SRC="joe.gif">
</pre>
<p>
The SRC value for the first <code><IMG></code> is the entire
fifty lines of stuff up to the next double quote, which probably
exceeds the <a href="sgml.html#sgml">SGML</a>-defined length limit for
HTML string literals. Note that the position indicator in the error
message points to where the attribute value <em>ended</em> — in
this case, the <code>"joe.gif"</code> line.
</p>
</dd>
<dt><a id="undef-tag" name="undef-tag">"element `FOO' undefined"</a></dt>
<dd>
<p>
You've used an unknown tag (represented here by FOO). Make sure the
DTD indicated by your DOCTYPE actually includes this element.
</p>
<p>
If the tag in question is a frame-related tag you must use the
"Frameset" DTD, and if you use (deprecated) physical markup ("FONT"
and friends) you must use the "Transitional" DTD.
</p>
</dd>
<dt><a id="not-allowed" name="not-allowed">"document type does not allow element "FOO" here"</a></dt>
<dd>
<p>
Straightforward, but not terribly informative. There are a
<em>lot</em> of different errors that will generate this error
message:
</p>
<ul>
<li>
Using an unknown tag. In this case, the next error will be
<a href="#undef-tag">"element `FOO' undefined"</a>.
</li>
<li>
Using a tag in the wrong place. For instance,
<code><TABLE><TD>blah</TABLE></code> will cause
this error. The trick here is that <code><TABLE></code> cannot
<em>directly</em> contain <code><TD></code>'s; it contains
<code><TR></code>'s which contain <code><TD></code>'s.
The above example should be
<code><TABLE><TR><TD>blah</TABLE></code>.
</li>
</ul>
</dd>
<dt><a id="not-contained" name="not-contained">document type does not allow element "FOO" here; assuming missing "BAR" start-tag</a></dt>
<dd>
<p>
Similar to the <a href="#not-allowed">previous error</a>, but more
specific: in this case, you have a FOO element that is not contained
in a BAR element when FOO is not allowed outside of BAR. Some of the
most common causes of this error are:
</p>
<ul>
<li>
Using the <code>DD</code> element as a fake paragraph indent.
<code>DD</code> is not allowed outside of a <code>DL</code> element.
</li>
<li>
Improper construction of a nested list. An inner UL or OL in a
nested list may not appear directly within an outer UL/OL, but only
within an LI of the outer UL/OL, as in the following example:
<pre>
<OL>
<LI>Obtain the following items:
<UL>
<LI>Ham</LI>
<LI>Bread; one of:
<UL>
<LI>White</LI>
<LI>Rye</LI>
<LI>Whole wheat</LI>
</UL>
</LI> <!-- End of the "Bread" <LI> -->
<LI>Cheese</LI>
</UL>
</LI> <!-- End of the "Obtain" <LI> -->
<LI>Place ham and cheese between two slices of bread</LI>
<LI>Consume the resulting ham-and-cheese sandwich</LI>
</OL>
</pre>
<p>
The <code></LI></code> end tags are optional and are only
included above to emphasize how the structure of the nested list
is arranged; if you omit them, the parser will infer their
presence in the locations shown above.
</p>
</li>
</ul>
<p>
The validator has inserted a BAR start tag where it thinks there needs
to be one; it will probably complain later on that <a href="#no-end-tag">the
corresponding end tag is also missing</a>.
</p>
</dd>
<dt><a id="attr-undef" name="attr-undef">"there is no attribute `FOO' for this element (in this HTML version)"</a></dt>
<dd>
<p>
You have used an attribute with an element that is defined not to have
that attribute. This is most commonly caused by using
vendor-specific attributes without setting the document type
appropriately.
</p>
</dd>
<dt><a id="undef-attr-val" name="undef-attr-val">"`FOO' is not a member of the group specified in the declared value of this attribute"</a></dt>
<dd>
<p>
Similar to the <a href="#attr-undef">previous error</a>; this time,
you're using an attribute that is defined for the element, but with a
value that isn't defined for the attribute. For instance, the Netscape
extension <code><IMG ALIGN=ABSMIDDLE></code> will cause this
error; ABSMIDDLE isn't one of the allowed values for the ALIGN
attribute of <code><IMG></code> (unless, of course, you provided
a Netscape document type).
</p>
<p>
If you're using the Netscape document type, the BORDER attribute of
<code><TABLE></code> can cause this error.
</p>
<p>
This error can also be caused, oddly enough, by missing close quotes
on attribute values. For instance, given:
</p>
<pre>
<IMG SRC="fred.gif> <IMG SRC="joe.gif>
</pre>
<p>
The validator will (correctly) see a SRC attribute of
<code>"fred.gif> <IMG SRC="</code>, and then try to interpret
JOE.GIF as an attribute of <code><IMG></code>.
</p>
</dd>
<dt><a id="bad-attr-char" name="bad-attr-char">"syntax of attribute value does not conform to declared value"</a></dt>
<dd>
<p>
Yet another attribute error; this time, the attribute in question was
defined to take a numeric value, or an <a
href="sgml.html#sgml">SGML</a> identifier value, and you used a
character that doesn't match what it was expecting.
</p>
<p>
One potentially annoying source of this error is the <code>TD
WIDTH</code> attribute. Whether intentionally or by oversight, the
HTML 3.2 DTD defines this attribute to have a value type of NUMBER,
which means that <code><TD WIDTH="50%"></code> is not allowed.
</p>
</dd>
<dt><a id="attr-bad-name" name="attr-bad-name">"value of attribute "FOO" invalid: "#" cannot start a name"</a></dt>
<dd>
<p>
A special case of <a href="#bad-attr-char">the previous error</a>; the
attribute in question is defined to take as value an SGML name token,
which must begin with a letter.
</p>
</dd>
<dt><a id="bad-abbrev-attr" name="bad-abbrev-attr">"`FOO' is not a member of a group specified for any attribute"</a></dt>
<dd>
<p>
Another attribute error, this time referring to an "abbreviated"
attribute. <a href="sgml.html#sgml">SGML</a> allows you to omit the
name of an attribute if the attribute value is unambiguous. For
instance, <code><IMG ISMAP></code> is actually an abbreviation
of <code><IMG ISMAP=ISMAP></code>. (Technically, this also means
that e.g. <code><P ALIGN=CENTER></code> could be abbreviated to
<code><P CENTER></code>, but it is unlikely that current
browsers will get this right.) The validator has found something that
looks like an abbreviated attribute but doesn't match the value of any
attribute for this element. For instance, a typo like <code><IMG
ISNAP></code> would produce this error.
</p>
<p>
A missing close quote on a previous attribute value can also trigger
this error if the next quote it finds is followed by something that
looks like an abbreviated attribute; for instance, <code><IMG
SRC="fred.gif><IMG SRC="joe.gif></code> would produce this
error, referring to the "attribute value" <code>JOE.GIF</code>.
</p>
</dd>
<dt><a id="attr-missing" name="attr-missing">"required attribute `FOO' not specified"</a></dt>
<dd>
<p>
You left off a required attribute of the indicated element. The most
common such omitted attribute is the <code>ALT</code> attribute of the
<code>AREA</code> or <code>IMG</code> element; browsers will typically
use these to build a menu equivalent to your client-side imagemap if
the user has disabled image loading, so you'll want to use a
meaningful value here.
</p>
</dd>
<dt><a id="no-end-tag" name="no-end-tag">"end tag for `FOO' omitted, but its declaration does not permit this"</a></dt>
<dd>
<p>
You forgot to close something. FOO is the element you forgot to close
(and the next message, `start tag was here' points to the particular
instance of FOO in question); the positional indicator points to where
the validator expected you to close the element. There are a few
common ways that this can happen:
</p>
<ul>
<li>
You've put something inside the FOO element that isn't allowed
there. For instance, <code><UL><LI><H4>fake font
change</H4></UL></code> will cause this error, since
headers aren't allowed inside <code><UL></code>'s; the
validator assumes that you meant to close the
<code><UL></code> before opening the <code><H4></code>.
</li>
<li>
Interlocked elements. For instance,
<code><B><I>nope</B></I></code> will cause
this error. HTML requires that you close elements ``inside-out'' ---
that is, the last element you opened is the first element you should
close. In this example, you'd have to close the
<code><I></code> before the <code><B></code>.
</li>
<li>
Unclosed <code><A></code> tags. Yes, even <code><A
NAME="foo"></code> has to have a corresponding
<code></A></code>. Note that an empty <code><A
NAME></code> element won't be recognized by some browsers; be
sure to put at least a word or two inside the
<code><A></code>.
</li>
<li>
Having unadorned text where the validator was expecting a
sub-element of FOO. For instance, <code><DL>fake
indent</DL></code> will produce this error, since inside a
<code><DL></code>, the validator only expects to see
<code><DT></code>'s and <code><DD></code>'s.
</li>
<li>
A tag of the form <code><TABLE WIDTH=100%></code>. The
previous error should have been that the `%' was <a
href="#attr-char">"not allowed in attribute specification list"</a>.
What's happening here is that, in trying to get past the `%', the
validator has become confused and thinks the `%' is <em>inside</em>
the <code><TABLE>...</TABLE></code>, thus triggering the
error message for the previous reason. This error will likely be
followed by mistaken complaints that your <code><TR></code>'s
are <a href="#not-allowed">"not allowed here"</a>, plus a complaint
about your <code></TABLE></code> end tag. The solution is to
put the attribute value in quotes; ie. <code><TABLE
WIDTH="100%"></code>.
</li>
</ul>
<p>
In general, you should always explicitly close all elements and
quote all attribute values.
</p>
</dd>
<dt><a id="floating-close" name="floating-close">"end tag for element "FOO" which is not open"</a></dt>
<dd>
<p>
The validator found an end tag, represented here by FOO, without a
corresponding start tag. This frequently occurs in conjunction with
the <a href="#no-end-tag">previous error</a>. For instance, given
<code><B><I>nope</B></I></code>, the validator
will insert a <code></I></code> before the
<code></B></code>, and then will find the
<code></I></code> after the <code></B></code> and will
have nothing to match it with.
</p>
<p>
A subtle variation of this is <code><P><H4>fake font
change</H4></P></code>. <code><H4></code>'s aren't
allowed inside <code><P></code>'s, but since HTML allows you to
omit the <code></P></code> end tag for paragraphs, the validator
assumes that you meant <code><P></P><H4>fake font
change</H4></P></code>, in which case the final
<code></P></code> is indeed superfluous.
</p>
<p>
This error can also be caused by incorrectly supplying an end tag for
"empty" elements like <code><HR></code>, <code><BR></code>
or <code><IMG></code>.
</p>
</dd>
<dt><a id="omitted-content" name="omitted-content">"end tag for `FOO' which is not finished"</a></dt>
<dd>
<p>
You have a FOO element, but you have omitted some required sub-element
of it. For instance, a <code>TABLE</code> with no <code>TR</code>'s
would cause this error.
</p>
</dd>
<dt><a id="no-start-tag" name="no-start-tag">"start tag for `FOO' omitted, but its declaration does not permit this"</a></dt>
<dd>
<p>
The validator expected you to start a FOO element at the indicated
point. This probably means you've put unadorned text somewhere it
isn't allowed; for instance, <code><UL>fake
indent</UL></code> will cause this error.
</p>
</dd>
<dt><a id="bad-entity" name="bad-entity">"unknown entity `FOO'"</a></dt>
<dd>
<p>
The validator has found an entity (something like
<code>&this;</code>) that it doesn't recognize. There are a few
possibilities:
</p>
<ul>
<li>
<p>
A reference to a URI that uses <code>&</code> as a separator
between parameters, such as
"<code>http://example.org/prog?x=1&y=2</code>".
</p>
<p>
To solve this problem, simply replace all the <code>&</code>'s
in attribute values with <code>&amp;</code> (user agents will
convert them back before following the links.)
</p>
<p>
Another way to get around this problem is for the author of the CGI
program to allow a different value to be used between arguments,
like ';' or '|', which would allow the link to be coded as e.g.
<code><a href="http://example.org/prog?x=1;y=2"></code>
</p>
</li>
<li>
An unterminated entity; for instance, <code>this&ampthat</code>
for "this&that", which the validator (correctly) interprets as a
request for the entity <code>&ampthat;</code>. Technically, any
non-alphanumeric character (such as a space) will suffice to
terminate the entity, but some browsers get this wrong; the safest
thing to do is to terminate all entities with a semicolon, turning
our example into <code>this&amp;that</code>.
</li>
<li>
The entity <code>&quot;</code> in conjunction with the HTML 3.2
<code>DOCTYPE</code>. This entity was <a
href="http://lists.w3.org/Archives/Public/www-html/1997Mar/0003.html">accidentally
omitted</a> from the most recent version of the HTML 3.2 DTD. You
should be able to ignore this error safely, though if you wish, you
can replace <code>&quot;</code> with the equivalent character
entity <code>&#34;</code>.
</li>
</ul>
</dd>
<dt><a id="bad-char" name="bad-char">"non SGML character number ###"</a></dt>
<dd>
<p>
You've used an illegal character in your text. HTML uses the standard
ISO8859-1 character encoding, and ISO8859-1 leaves undefined 65
character codes (0 to 31 inclusive and 127 to 159 inclusive); the
validator has found one of these undefined characters in your
document. The character may appear on your browser as a curly quote,
or a trademark symbol, or some other fancy glyph; on a different
computer, however, it will likely appear as a completely different
character, or nothing at all.
</p>
<p>
Your best bet is to replace the character with the nearest equivalent
ASCII character, or to use an appropriate <a
href="http://www.w3.org/hypertext/WWW/MarkUp/html3/latin1.html">character
entity</a>. For more information on ISO8859-1, see <a
href="http://ppewww.ph.gla.ac.uk/%7Eflavell/aflavell.html">Alan
Flavell</a>'s excellent <a
href="http://ppewww.ph.gla.ac.uk/%7Eflavell/iso8859/">ISO8859-1/HTML
reference</a>.
</p>
<p>
This error can also be triggered by formatting characters embedded in
documents by some word processors. If you use a word processor to edit
your HTML documents, be sure to use the "Save as ASCII" or similar
command to save the document without formatting information.
</p>
</dd>
<dt><a id="unicode-char" name="unicode-char">"`####' is not a valid character number"</a></dt>
<dd>
<p>
You'll get several occurrences of this error if you use the Cougar
DTD. Cougar uses the 16-bit UCS-4 (a.k.a. "Unicode") character set
instead of the 8-bit ISO8859-1 character set used by HTML 2.0 and HTML
3.2. It also defines mnemonic entities for various Unicode characters;
for instance, the entity <code>&trade;</code> is defined as the
character entity <code>&#8482;</code>, which is the Unicode
trademark character. Unfortunately, the <code>nsgmls</code> executable
used by the validator does not appear to have 16-bit character support
compiled in, and so it chokes on these 16-bit character entities.
</p>
<p>
These errors are not produced by anything in your document and should
not otherwise affect the validation of your document, so you can
pretty much ignore them.
</p>
</dd>
<dt><a id="bad-pub-id" name="bad-pub-id">"cannot generate system identifier for entity `HTML'"</a></dt>
<dd>
<p>
Your <code>DOCTYPE</code> declaration contains a public identifier
that the validator doesn't recognize. See the <a
href="sgml.html#doctype">discussion of <code>DOCTYPE</code></a> for an
explanation of what's happening, and what public identifiers the
validator recognizes.
</p>
<p>
Note that all of the rest of the errors you received are meaningless;
the validator was unable to find a <a href="sgml.html#dtd">DTD</a> to
work from, and thus could not validate your document.
</p>
</dd>
<dt><a id="missing-subel" name="missing-subel">"missing a required sub-element of `FOO'"</a></dt>
<dd>
<p>
The element "FOO" is defined to <em>require</em> one or more
sub-elements. One example is TR which requires one or more TD or TH
elements.
</p>
</dd>
<dt><a id="start-tag" name="start-tag">"start tag was here"</a></dt>
<dd>
<p>
Not an error, but rather a pointer to the start tag of the element
the previous error referred to.
</p>
</dd>
<dt><a id="utf8-bom" name="utf8-bom">"UTF-8 'BOM' detected and removed"</a></dt>
<dd>
<p>
The document contained an UTF-8 encoded Unicode Byte Order Mark (BOM)
as the first character and we have removed it before parsing.
Many XML Processors
do not allow it. To be on the safe side you should avoid using the
BOM in UTF-8 encoded documents.
</p>
<p>
Note that the BOM in <em>UTF-16</em> encoded documents
is required and handled by all conforming XML Processors.
</p>
</dd>
</dl>
<!--#include virtual="/footer.html" -->
</body>
</html>
|