summaryrefslogtreecommitdiffstats
path: root/htdocs/docs/errors.html
blob: be2984827f71803785824d3fbf5c477cfa9f896a (plain)
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
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
<!--#set var="revision" value="\$Id: errors.html,v 1.29 2004-07-21 23:43:21 link Exp $"
--><!--#set var="date" value="\$Date: 2004-07-21 23:43:21 $"
--><!--#set var="title" value="Error Explanations for The W3C Markup Validation Service"
--><!--#set var="relroot" value="../"
--><!--#include virtual="../header.html" -->

<h2>Explanation of the error messages<br /> for the W3C Markup Validator</h2>
    <p>
      These error explanations were originally written by Scott Bigham,
      and are used here with his permission.
    </p>

<h3 id="TableOfContents">Table of Contents</h3>

    <div id="toc">
      <ul>
        <li><a href="#undef-id">ID "<var>FOO</var>" already defined</a></li>
        <li><a href="#unterm-comment-1">entity end not allowed in comment</a></li>
        <li><a href="#unterm-comment-2">name start character invalid: only s and comment allowed in comment declaration</a></li>
        <li><a href="#bad-comment">unknown declaration type "<var>FOO</var>"</a></li>
        <li><a href="#attr-quoted">an attribute value must be a literal unless it contains only name characters</a></li>
        <li><a href="#attr-char">character `X' not allowed in attribute specification list</a></li>
        <li><a href="#name-length">length of attribute value must not exceed LITLEN less NORMSEP (1022)</a></li>
        <li><a href="#undef-tag">element "<var>FOO</var>" undefined</a></li>
        <li><a href="#not-allowed">document type does not allow element "<var>FOO</var>" here</a></li>
        <li><a href="#not-contained">document type does not allow element "<var>FOO</var>" here; assuming missing "<var>BAR</var>" start-tag</a></li>
        <li><a href="#attr-undef">there is no attribute "<var>FOO</var>" for this element (in this <abbr title="HyperText Markup Language">HTML</abbr> version)</a></li>
        <li><a href="#undef-attr-val">"<var>FOO</var>" is not a member of the group specified in the declared value of this attribute</a></li>
        <li><a href="#bad-attr-char">syntax of attribute value does not conform to declared value</a></li>
        <li><a href="#attr-bad-name">value of attribute "<var>FOO</var>" invalid: "#" cannot start a name</a></li>
        <li><a href="#bad-abbrev-attr">"<var>FOO</var>" is not a member of a group specified for any attribute</a></li>
        <li><a href="#attr-missing">required attribute "<var>FOO</var>" not specified</a></li>
        <li><a href="#no-end-tag">end tag for "<var>FOO</var>" omitted, but its declaration does not permit this</a></li>
        <li><a href="#floating-close">end tag for element "<var>FOO</var>" which is not open</a></li>
        <li><a href="#omitted-content">end tag for "<var>FOO</var>" which is not finished</a></li>
        <li><a href="#no-start-tag">start tag for "<var>FOO</var>" omitted, but its declaration does not permit this</a></li>
        <li><a href="#bad-entity">unknown entity "<var>FOO</var>"</a></li>
        <li><a href="#bad-char">non <abbr title="Standard Generalized Markup Language">SGML</abbr> character number ###</a></li>
        <li><a href="#bad-pub-id">cannot generate system identifier for entity `HTML'</a></li>
        <li><a href="#missing-subel">missing a required sub-element of "<var>FOO</var>"</a></li>
        <li><a href="#start-tag">start tag was here</a></li>
        <li><a href="#text-not-allowed"> text is not allowed here; try wrapping the text in a more descriptive container</a></li>
        <li><a href="#unkn-att-val"> value of attribute "<var>FOO</var>" cannot be "<var>BAR</var>"; must be one of "<var>FOO</var>", "<var>BAR</var>", "<var>BAZ</var>"</a></li>
        <li><a href="#no-attr-end">character "<var>FOO</var>" not allowed in attribute specification list possibly caused by a missing quotation mark ending a previous attribute value</a></li>
        <li><a href="#dup-attr">duplicate specification of attribute "<var>FOO</var>"</a></li>
        <li><a href="#invalid-attr-val">invalid attribute value</a></li>
        <li><a href="#attr-spec-nmtoken">an attribute specification must start with a name or name token</a></li>
        <li><a href="#inval-comment">invalid comment declaration; check your comment syntax</a></li>
        <li><a href="#assuming-missing-starttag">element "<var>FOO</var>" not allowed here; assuming missing "<var>BAR</var>" start-tag</a></li>
      </ul>
    </div>

    <div><a name="skip" id="skip"></a>
      <h3>Listing of errors and their explanation</h3>
      <dl id="expl">
        <dt id="undef-id"><code>ID "<var>FOO</var>" already defined</code></dt>
        <dd>
          <p>
            You have defined the id/name "<var>FOO</var>" 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 <abbr title="HyperText Markup Language">HTML</abbr> 4.01 Recommendation
            for further information.
          </p>
        </dd>
        <dt id="unterm-comment-1"><code>entity end not allowed in comment</code></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 class="inline">&lt;!--</code>" in the document.
          </p>
        </dd>
        <dt id="unterm-comment-2"><code>name start character invalid: only s and comment allowed in comment declaration</code></dt>
        <dd>
          <p>
            Unterminated comments again. This time, you have a case like:
          </p>
          <code class="block">
            &lt;!-- This is the first unterminated comment &gt;<br />
            &lt;!-- This is the second one &gt;
          </code>
          <p>
            The validator (correctly) interprets the "<code class="inline">--</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 id="bad-comment"><code>unknown declaration type "<var>FOO</var>"</code></dt>
        <dd>
          <p>
            Most likely an invalid comment of the form
            "<code class="inline">&lt;!invalid comment&gt;</code>"; the validator is
            (correctly) attempting to interpret it as an
            <a href="sgml.html#sgml"><abbr
              title="Standard Generalized Markup Language">SGML</abbr></a>
            markup declaration.
          </p>
        </dd>
        <dt id="attr-quoted"><code>an attribute value must be a literal unless it contains only name characters</code></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 OK from an <a href="sgml.html#sgml"><abbr
              title="Standard Generalized Markup Language">SGML</abbr></a>
            standpoint, but some browsers don't recognize them).
          </p>
        </dd>
        <dt id="attr-char"><code>character "<var>X</var>" not allowed in attribute specification list</code></dt>
        <dd>
          <p>
            The validator has found a character inside an <abbr title="HyperText Markup Language">HTML</abbr> 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>
          <code class="block">
            &lt;img src="http://foo.com/fred.gif&gt;<br />
            &lt;img src="http://foo.com/joe.gif&gt;
          </code>
          <p>
            The validator will (correctly) interpret this as a <code class="inline">src</code>
            value of <code class="inline">"http://example.com/fred.gif&gt; &lt;img src="</code>, and then
            choke on the following "<code>:</code>". In this case, the position indicator in
            the error message may be several lines below the line with the missing
            quote.
          </p>
        </dd>
        <dt id="name-length"><code>length of attribute value must not exceed LITLEN less NORMSEP (1022)</code></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>
          <code class="block">
            &lt;img src="fred.gif&gt;<br />
            &lt;!-- 50 lines of stuff --&gt;<br />
            &lt;img src="joe.gif"&gt;
          </code>
          <p>
            The "<code class="inline">src</code>" value for the first
            <code class="inline">&lt;img&gt;</code> is the entire
            fifty lines of stuff up to the next double quote, which probably
            exceeds the <a href="sgml.html#sgml"><abbr
              title="Standard Generalized Markup Language">SGML</abbr></a>-defined
            length limit for <abbr title="HyperText Markup Language">HTML</abbr>
            string literals. Note that the position indicator in the error
            message points to where the attribute value <em>ended</em> &mdash; in
            this case, the <code class="inline">"joe.gif"</code> line.
          </p>
        </dd>
        <dt id="undef-tag"><code>element "<var>FOO</var>" undefined</code></dt>
        <dd>
          <p>
            You've used an unknown tag (represented here by "<var>FOO</var>"). Make sure the
            <abbr title="Document Type Definition">DTD</abbr> indicated by your
            <code class="inline">DOCTYPE</code> actually includes this element.
          </p>
          <p>
            If the tag in question is a frame-related tag you must use the
            "Frameset" <abbr title="Document Type Definition">DTD</abbr>,
            and if you use (deprecated) physical markup ("FONT"
            and friends) you must use the "Transitional" <abbr
              title="Document Type Definition">DTD</abbr>.
          </p>
        </dd>
        <dt id="not-allowed"><code>document type does not allow element "<var>FOO</var>" here</code></dt>
        <dd>
          <p>
            Straightforward, but not terribly informative. There are several
            different mistakes 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 "<var>FOO</var>" undefined"</a>.
            </li>
            <li>
              Using a tag in the wrong place. For instance,
              <code class="inline">&lt;table&gt;&lt;td&gt;blah&lt;/table&gt;</code>
              will cause this error. The trick here is that a <code
                class="inline">&lt;table&gt;</code> element
              cannot <em>directly</em> contain <code class="inline">&lt;td&gt;</code>
              elements; it contains
              one or more <code class="inline">&lt;tr&gt;</code> elements which in turn
              contain <code class="inline">&lt;td&gt;</code> elements.
              The above example should be
              <code class="inline">&lt;table&gt;&lt;tr&gt;&lt;td&gt;blah&lt;/table&gt;</code>.
            </li>
          </ul>
        </dd>
        <dt><a id="not-contained"><code>document type does not allow element "<var>FOO</var>" here; assuming missing "<var>BAR</var>" start-tag</code></a></dt>
        <dd>
          <p>
            Similar to the <a href="#not-allowed">previous error</a>, but more
            specific: in this case, you have a "<var>FOO</var>" element that is not contained
            in a "<var>BAR</var>" element when "<var>FOO</var>" is not allowed outside of
            "<var>BAR</var>". Some of the most common causes of this error are:
          </p>
          <ul>
            <li>
              Using the "<code class="inline">&lt;dd&gt;</code>" element as a fake paragraph
              indent. "<code class="inline">&lt;dd&gt;</code>" is not allowed outside of a
              "<code class="inline">&lt;dl&gt;</code>" element.
            </li>
            <li>
              Improper construction of a nested list. An inner "<code
                class="inline">&lt;ul&gt;</code>" or "<code class="inline">&lt;ol&gt;</code>"
              in a nested list may not appear directly within an outer
              "<code class="inline">&lt;ol&gt;</code>" or "<code class="inline">&lt;ul&gt;</code>",
              but only within an "<code class="inline">&lt;li&gt;</code>" of the outer
              "<code class="inline">&lt;ol&gt;</code>" or "<code class="inline">&lt;ul&gt;</code>", as in the following example:
              <code class="block">
&lt;ol&gt;<br />
&nbsp;&lt;li&gt;<samp>Obtain the following items:</samp><br />
&nbsp;&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>Ham</samp>&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>Bread; one of:</samp><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>White</samp>&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>Rye</samp>&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>Whole wheat</samp>&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/li&gt;  &lt;!-- End of the "Bread" &lt;li&gt; --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;li&gt;<samp>Cheese</samp>&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;/ul&gt;<br />
&nbsp;&lt;/li&gt;  &lt;!-- End of the "Obtain" &lt;li&gt; --&gt;<br />
&nbsp;&lt;li&gt;<samp>Place ham and cheese between two slices of bread</samp>&lt;/li&gt;<br />
&nbsp;&lt;li&gt;<samp>Consume the resulting ham-and-cheese sandwich</samp>&lt;/li&gt;<br />
&lt;/ol&gt;<br />
              </code>
              <p>
                The "<code class="inline">&lt;/li&gt;</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 "<var>BAR</var>" 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 id="attr-undef"><code>there is no attribute "<var>FOO</var>" for this element</code></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 id="undef-attr-val"><code>"<var>FOO</var>" is not a member of the group specified in the declared value of this attribute</code></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 class="inline">&lt;img align="absmiddle"&gt;</code> will
            cause this error; "<code class="inline">absmiddle</code>" is not one of
            the allowed values for the "<code class="inline">align</code>" attribute
            of <code class="inline">&lt;img&gt;</code> (unless, of course, you provided
            a Netscape document type).
          </p>
          <p>
            If you're using the Netscape document type, the
            "<code class="inline">border</code>" attribute of
            "<code class="inline">&lt;table&gt;</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>
          <code class="block">
            &lt;img src="fred.png&gt; &lt;img src="joe.png&gt;
          </code>
          <p>
            The validator will (correctly) see a <code class="inline">src</code> attribute of
            "<code class="inline">fred.png&gt; &lt;img src=</code>", and then try to
            interpret <code class="inline">joe.png</code> as an attribute of
            <code class="inline">&lt;img&gt;</code>.
          </p>
        </dd>
        <dt id="bad-attr-char"><code>syntax of attribute value does not conform to declared value</code></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"><abbr
              title="Standard Generalized Markup Language">SGML</abbr></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 class="inline">width</code> attribute on the <code class="inline">td</code>
            element. Whether intentionally or by oversight, the <abbr
              title="HyperText Markup Language">HTML</abbr> 3.2 <abbr
              title="Document Type Definition">DTD</abbr> defines this attribute to have a
            value type of <code class="inline">NUMBER</code>, which means that
            <code class="inline">&lt;td width="50%"&gt;</code> is not allowed.
          </p>
        </dd>
        <dt id="attr-bad-name"><code>value of attribute "<var>FOO</var>" invalid: "<var>#</var>" cannot start a name</code></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 <abbr
              title="Standard Generalized Markup Language">SGML</abbr>
            <code class="inline">NMTOKEN</code>, a name token, which must begin with
            a letter.
          </p>
        </dd>
        <dt id="bad-abbrev-attr"><code>"<var>FOO</var>" is not a member of a group specified for any attribute</code></dt>
        <dd>
          <p>
            Another attribute error, this time referring to an "abbreviated"
            (minimized) attribute. <a href="sgml.html#sgml"><abbr
              title="Standard Generalized Markup Language">SGML</abbr></a> allows
            you to omit the name of an attribute if the attribute value is unambiguous.
            For instance, "<code class="inline">&lt;img ismap&gt;</code>" is actually an
            abbreviation of <code class="inline">&lt;img ismap="ismap"&gt;</code>.
            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 class="inline">&lt;img is<em>n</em>ap&gt;</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,
          </p>
          <code class="block">&lt;img src="fred.png&gt;&lt;img src="joe.png&gt;</code>
          <p>
            would produce this error, referring to the "attribute value"
            <code class="inline">joe.png</code>.
          </p>
        </dd>
        <dt id="attr-missing"><code>required attribute "<var>FOO</var>" not specified</code></dt>
        <dd>
          <p>
            You left off a required attribute of the indicated element. The most
            common such omitted attribute is the <code class="inline">alt</code>
            attribute of the <code class="inline">area</code> or <code
              class="inline">img</code> element; browsers will typically
            use these to build a menu equivalent to your client-side image map if
            the user has disabled image loading, so you'll want to use a
            meaningful value here.
          </p>
        </dd>
        <dt id="no-end-tag"><code>end tag for "<var>FOO</var>" omitted, but its declaration does not permit this</code></dt>
        <dd>
          <p>
            You forgot to close something. "<var>FOO</var>" is the element you forgot to
            close (and the next message, "<code class="inline">start tag was here</code>"
            points to the particular instance of "<var>FOO</var>" 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>
              <p>
                You've put something inside the "<var>FOO</var>" element that isn't allowed
                there. For instance,
              </p>
              <code class="block">
                &lt;ul&gt;&lt;li&gt;&lt;h4&gt;<samp>fake font change</samp>&lt;/h4&gt;&lt;/li&gt;&lt;/ul&gt;
              </code>
              <p>
                will cause this error, since headers aren't allowed inside <code
                  class="inline">&lt;ul&gt;</code> elements; the validator assumes that you
                meant to close the <code class="inline">&lt;ul&gt;</code> before opening the
                <code class="inline">&lt;h4&gt;</code>.
              </p>
            </li>
            <li>
              Interlocked elements. For instance,
              <code class="inline">&lt;b&gt;&lt;i&gt;<samp>nope</samp>&lt;/b&gt;&lt;/i&gt;</code> will cause
              this error. <abbr title="HyperText Markup Language">HTML</abbr> requires that you close elements inside-out
              &mdash; that is, the last element you opened is the first element you should
              close. In this example, you'd have to close the <code
                class="inline">&lt;i&gt;</code> before the <code
                class="inline">&lt;b&gt;</code>.
            </li>
            <li>
              Unclosed <code class="inline">&lt;a&gt;</code> tags. Yes, even
              <code class="inline">&lt;a name="foo"&gt;</code> has to have a corresponding
              <code class="inline">&lt;/a&gt;</code>. Note that an empty
              <code class="inline">&lt;a name="foo"&gt;</code> element won't be recognized by some
              browsers; be sure to put at least a word or two inside the
              <code class="inline">&lt;a&gt;</code>.
            </li>
            <li>
              Having unadorned text where the validator was expecting a
              sub-element of "<var>FOO</var>". For instance,
              <code class="inline">&lt;dl&gt;<samp>fake indent</samp>&lt;/dl&gt;</code>
              will produce this error, since inside a
              <code class="inline">&lt;dl&gt;</code>, the validator only expects to see
              <code class="inline">&lt;dt&gt;</code> and <code
                class="inline">&lt;dd&gt;</code> elements (i.e. you can't just put text
              in there).
            </li>
            <li>
              <p>
                A tag of the form <code class="inline">&lt;table width=100%&gt;</code>.
                The previous error should have been that the "<code class="inline">%</code>"
                was "<a href="#attr-char"><code class="inline">not allowed in attribute
                  specification list</code></a>".
              </p>
              <p>
                What's happening here is that, in trying to get past the "<code
                  class="inline">%</code>", the validator has become confused and
                thinks the "<code class="inline">%</code>" is <em>inside</em> the
                <code class="inline">&lt;table&gt;&hellip;&lt;/table&gt;</code>,
                thus triggering the error message for the previous reason. This error
                will likely be followed by mistaken complaints that your <code
                  class="inline">&lt;tr&gt;</code> elements are "<a
                  href="#not-allowed"><code class="inline">not allowed here</code></a>",
                plus a complaint about your <code class="inline">&lt;/table&gt;</code>
                end tag. The solution is to put the attribute value in quotes; ie.
                <code class="inline">&lt;table width="100%"&gt;</code>.
              </p>
            </li>
          </ul>
          <p>
            <strong>In general, you should always explicitly close all elements and
            quote all attribute values!</strong>
          </p>
        </dd>
        <dt id="floating-close"><code>end tag for element "<var>FOO</var>" which is not open</code></dt>
        <dd>
          <p>
            The validator found an end tag, represented here by "<var>FOO</var>", without a
            corresponding start tag. This frequently occurs in conjunction with
            the <a href="#no-end-tag">previous error</a>. For instance, given
            <code class="inline">&lt;b&gt;&lt;i&gt;<samp>nope</samp>&lt;/b&gt;&lt;/i&gt;</code>,
            the validator will insert a <code class="inline">&lt;/i&gt;</code> before the
            <code class="inline">&lt;/b&gt;</code>, and then will find the
            <code class="inline">&lt;/i&gt;</code> after the <code
              class="inline">&lt;/b&gt;</code> and will have nothing to match it with.
          </p>
          <p>
            A subtle variation of this is <code
              class="inline">&lt;p&gt;&lt;h4&gt;<samp>fake font change</samp>&lt;/h4&gt;&lt;/p&gt;</code>.
            <code class="inline">&lt;h4&gt;</code> elements are not allowed inside
            <code class="inline">&lt;p&gt;</code> elements, but since <abbr
              title="HyperText Markup Language">HTML</abbr> allows you to
            omit the <code class="inline">&lt;/p&gt;</code> end tag for paragraphs
            (unlike <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>),
            the validator assumes that you meant <code
              class="inline">&lt;p&gt;<em>&lt;/p&gt;</em>&lt;h4&gt;<samp>fake font
                change</samp>&lt;/h4&gt;&lt;/p&gt;</code>, in which case the final
            <code class="inline">&lt;/p&gt;</code> is indeed superfluous.
          </p>
          <p>
            This error can also be caused by incorrectly supplying an end tag for
            "empty" elements like <code class="inline">&lt;hr&gt;</code>,
            <code class="inline">&lt;br&gt;</code>
            or <code class="inline">&lt;img&gt;</code>. This is why they are written
            <code class="inline">&lt;hr /&gt;</code>, <code class="inline">&lt;br /&gt;</code>, and
            <code class="inline">&lt;img /&gt;</code> in <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>.
          </p>
        </dd>
        <dt id="omitted-content"><code>end tag for "<var>FOO</var>" which is not finished</code></dt>
        <dd>
          <p>
            You have a "<var>FOO</var>" element, but you have omitted some required
            sub-element of it. For instance, a <code class="inline">table</code>
            with no <code class="inline">tr</code>'s would cause this error.
          </p>
        </dd>
        <dt id="no-start-tag"><code>start tag for "<var>FOO</var>" omitted, but its declaration does not permit this</code></dt>
        <dd>
          <p>
            The validator expected you to start a "<var>FOO</var>" element at the indicated
            point. This probably means you've put unadorned text somewhere it
            isn't allowed; for instance, <code class="inline">&lt;ul&gt;<samp>fake
            indent</samp>&lt;/ul&gt;</code> will cause this error.
          </p>
        </dd>
        <dt id="bad-entity"><code>unknown entity "<var>FOO</var>"</code></dt>
        <dd>
          <p>
            The validator has found an entity (something like
            <code class="inline">&amp;this;</code>) that it doesn't recognize.
            There are a few possibilities:
          </p>
          <ul>
            <li>
              <p>
                A reference to a <abbr title="Uniform Resource Locator">URL</abbr>
                that uses "<code class="inline">&amp;</code>" as a separator between
                parameters, such as "<code
                  class="inline">http://example.com/cgi-bin/prog?x=1&amp;y=2</code>".
              </p>
              <p>
                To solve this problem, simply replace all the <code
                  class="inline">&amp;</code>'s
                in attribute values with <code class="inline">&amp;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
                <abbr title="Common Gateway Interface">CGI</abbr>
                program to allow a different value to be used between arguments,
                like "<code class="inline">;</code>" or "<code class="inline">|</code>",
                which would allow the link to be coded as e.g.
                <code class="inline">&lt;a href="http://example.com/cgi-bin/prog?x=1;y=2"&gt;</code>
              </p>
            </li>
            <li>
              An unterminated entity; for instance, "<code
                class="inline">this&amp;ampthat</code>"
              for "<code class="inline">this&amp;that</code>", which the validator
              (correctly) interprets as a request for the entity "<code
                class="inline">&amp;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 class="inline">this&amp;amp;that</code>".
            </li>
            <li>
              The entity <code class="inline">&amp;quot;</code> in conjunction with the
              <abbr title="HyperText Markup Language">HTML</abbr> 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 <abbr
                title="HyperText Markup Language">HTML</abbr> 3.2 <abbr
                title="Document Type Definition">DTD</abbr>. You
              should be able to ignore this error safely, though if you wish, you
              can replace <code class="inline">&amp;quot;</code> with the equivalent
              character entity <code class="inline">&amp;#34;</code>.
            </li>
          </ul>
        </dd>
        <dt id="bad-char"><code>non <abbr title="Standard Generalized Markup Language">SGML</abbr> character number ###</code></dt>
        <dd>
          <p>
            You have used an illegal character in your text.
            <abbr title="HyperText Markup Language">HTML</abbr> uses the standard
            <a href="http://www.unicode.org/">UNICODE Consortium</a> character repertoire,
            and it leaves undefined (among others) 65 character codes (0 to 31 inclusive and 127 to 159
            inclusive) that are sometimes used for typographical quote marks and similar in
            proprietary character sets. 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/MarkUp/html3/latin1.html">character
            entity</a>. For more information on Character Encoding on the web, 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/charset/">HTML Character Set Issues</a>
            reference.
          </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 <abbr title="HyperText Markup Language">HTML</abbr> documents, be sure to use the "Save as ASCII" or similar
            command to save the document without formatting information.
          </p>
        </dd>
        <dt id="bad-pub-id"><code>cannot generate system identifier for entity "HTML"</code></dt>
        <dd>
          <p>
            Your <code class="inline">DOCTYPE</code> declaration contains a public identifier
            that the validator does not recognize. See the <a
              href="sgml.html#doctype">discussion of <code class="inline">DOCTYPE</code></a>
            for an explanation of what's happening, and what public identifiers the
            validator recognizes.
          </p>
        </dd>
        <dt id="missing-subel"><code>missing a required sub-element of "<var>FOO</var>"</code></dt>
        <dd>
          <p>
            The element "<var>FOO</var>" is defined to <em>require</em> one or more
            sub-elements. One example is <code class="inline">tr</code> which requires
            one or more <code class="inline">td</code> or <code class="inline">th</code>
            elements.
          </p>
        </dd>
        <dt id="start-tag"><code>start tag was here</code></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 id="text-not-allowed"><code> text is not allowed here; try wrapping the text in a more descriptive container</code></dt>
        <dd>
          <p>
            The document contained bare text where an element was expected.
            For instance, you must wrap text in <code class="inline">&lt;p&gt;</code>
            if it appears directly inside the <code class="inline">&lt;body&gt;</code>.
          </p>
          <p>
            This error may also indicate an unquoted attribute value containing
            a reserved character (such as "<code class="inline">/</code>") which
            terminates the attribute. The net effect is that the rest of the attribute
            value appears to be plain text, outside any element, to an <abbr
              title="Standard Generalized Markup Language">SGML</abbr> parser.
           </p>
        </dd>
        <dt id="unkn-att-val"><code> value of attribute "<var>FOO</var>" cannot be "<var>BAR</var>"; must be one of "<var>FOO</var>", "<var>BAR</var>", "<var>BAZ</var>"</code></dt>
        <dd>
          <p>
            An attribute was specified to contain one of a set of predefined
            values and you have used a value that is not in that set. The error
            message tells which attribute value was unknown and the possible
            legal values for this attribute.
          </p>
        </dd>
        <dt id="no-attr-end"><code>character "<var>FOO</var>" not allowed in attribute specification list possibly caused by a missing quotation mark ending a previous attribute value</code></dt>
        <dd>
          <p>
            A character that is illegal in the attribute list for a particular
            attribute was encountered. It's is likely that this is a result of
            a missing quote character on a previous attribute value.
          </p>
        </dd>
        <dt id="dup-attr"><code>duplicate specification of attribute "<var>FOO</var>"</code></dt>
        <dd>
          <p>
            You have specified an attribute more than once. For instance, you have
            used the "<code class="inline">height</code>" attribute twice on the same
            "<code class="inline">img</code>" tag.
          </p>
        </dd>
        <dt id="invalid-attr-val"><code>invalid attribute value</code></dt>
        <dd>
          <p>
            The value of this attribute is not a legal value for attributes. For
            instance, the attribute cannot be the empty string. This is distinct
            from errors related to illegal values for a specific attribute.
          </p>
        </dd>
        <dt id="attr-spec-nmtoken"><code>an attribute specification must start with a name or name token</code></dt>
        <dd>
          <p>
            An attribute name (and some attribute values) must start with one of
            a restricted set of characters. This error usually indicates that
            you have failed to add a closing quotation mark on a previous
            attribute value (so the attribute value looks like the start of a
            new attribute) or have used an attribute that is not defined
            (usually a typo in a common attribute name).
          </p>
        </dd>
        <dt id="inval-comment"><code>invalid comment declaration; check your comment syntax</code></dt>
        <dd>
          <p>
            There is a syntax error in an <abbr title="Standard Generalized Markup Language">SGML</abbr> Comment Declaration. This may be
            caused by too many or too few hyphens "-" or that you have included
            an invalid character in the comment. The next message will be
            "comment declaration started here".
          </p>
        </dd>
        <dt id="assuming-missing-starttag"><code>element "<var>FOO</var>" not allowed here; assuming missing "<var>BAR</var>" start-tag</code></dt>
        <dd>
          <p>
            The referenced element "<var>FOO</var>" isn't allowed in the context it occurs
            in, but it would be if it was wrapped in a "<var>BAR</var>" element. The
            Validator has assumed that you have forgotten to add a "<var>BAR</var>"
            start tag and continued validation as if it was there. You should
            check if this is the case and insert the proper tag.
          </p>
        </dd>
      </dl>
    </div>
<!--#include virtual="../footer.html" -->
  </body>
</html>