W3C home > Mailing lists > Public > www-validator@w3.org > December 2005

Re: Error Message Feedback

From: Jukka K. Korpela <jkorpela@cs.tut.fi>
Date: Tue, 20 Dec 2005 09:22:06 +0200 (EET)
To: www-validator@w3.org
Cc: Peter Yuen <pcy@mssl.ucl.ac.uk>, Frank.Roberts@benfieldgroup.com, mas@mssl.ucl.ac.uk
Message-ID: <Pine.GSO.4.63.0512200901130.26702@korppi.cs.tut.fi>

On Mon, 19 Dec 2005, Peter Yuen wrote:

> I encounter some difficulties to resolve the errors in my code after HTML 4.01
> validation. The errors include the embedded Javascript in HTML at
> http://www.eurotempest.com/index_.html as follows:

Actually, the embedded JavaScript is not an issue here (though it is 
generally an issue - embedded JavaScript considered risky).

> 1. Error Line 182 column 15: document type does not allow element "MAP" here.
> <map name="map">

That's because you have the end tags </body> and </html> on lines 179 and 
180. No markup and no content (except white space) is allowed after 
them. They should appear at the very end of the document (or be omitted, 
though using explicit end tags is good style).

> 2. Error Line 464 column 30: document type does not allow element "SCRIPT" here.
> <SCRIPT type="text/javascript">

That's of course a consequence of the same error. The long <map> element 
ends at line 462, and the next element starts at 464.

The point is that _nothing_ is allowed after you have ended the <html> 
element. Maybe the validator could say this more explicitly, but I'm 
afraid that doing so might require a major rewrite of its code.

> When I move the Javascript to the beginning of HTML as recommended, it passes
> the validation but fails at Internet Explorer 6.0 with an error message
> 'document.animation' is null or not an object at my index_.html line 482.

The validator doesn't recommend any particular move. It simply says that 
the element cannot be where it now resides. Moving the <script> element
near the beginning of the document causes problems because the JavaScript 
code uses objects that have not been created yet, by the excuse for an 
HTML parser that a browser contains.

Moving the </body> and </html> tags at the end of the document should help 
with your immediate concern. A more structured approach would be to move 
all JavaScript code, except short invocations of functions in event 
attributes, into an external file referred to in a
<script src="..."></script>
construct and with the necessary initial operations invoked with <body onload="...">.

Actually you now have a <script src="...">...</script> construct, with 
nonempty content. This is not a syntax error, since a DTD cannot impose a 
restriction that the content must be empty if a particular attribute is 
present. That's however the general idea, expressed verbally:

"The script may be defined within the contents of the SCRIPT element or in 
an external file. If the src attribute is not set, user agents must 
interpret the contents of the element as the script. If the src has a URI 
value, user agents must ignore the element's contents and retrieve the 
script via the URI."
   http://www.w3.org/TR/REC-html40/interact/scripts.html#edef-SCRIPT

P.S. You sent your message to the www-validator discussion list and two 
individuals. This is probably bound to cause some confusion sooner or 
later, but I have Cc'ed the individuals.

-- 
Jukka "Yucca" Korpela, http://www.cs.tut.fi/~jkorpela/
Received on Tuesday, 20 December 2005 07:22:18 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 25 April 2012 12:14:20 GMT