- From: Paul Fidler <praf1@cam.ac.uk>
- Date: Tue, 15 Jul 1997 18:16:34 +0100 (BST)
- To: www-html@w3.org
I've just been messing around with 'A Kinder, Gentler HTML Validator' [1] just to see what would validate and what wouldn't with the HTML4.0 DTD [2] and came across what may be a problem, but which may equally well be a problem with my understanding of SGML, but I thought I'd ask anyway... The HTML 4.0 specification for frames [3] says: An HTML document with frames has a slightly different makeup than an HTML document without frames. A standard document has one HEAD section and one BODY. A document with frames has a HEAD, a FRAMESET, and an optional BODY. ... The BODY section that follows the FRAMESET declaration provides alternate content for user agents that do not support frames or are configured not to display frames. And later, when discussing alternative content: User agents that do not support frames must display the BODY section that follows the outermost FRAMESET of a document. From these, plus the bits of example HTML in the same document, I got the impression that the preferred way of specifying non-frames content is now: <HTML> <HEAD> <TITLE>Foo</TITLE> </HEAD> <FRAMESET ...> <FRAME ...> <FRAME ...> </FRAMESET> <BODY> ... </BODY> </HTML> However when trying a test file [4] with KGV I got the error: Error at line 14: <BODY> document type does not allow element "BODY" here A revised version of the file [5] did validate, but this used the following structure: <HTML> <HEAD> <TITLE>Foo2</TITLE> </HEAD> <FRAMESET ...> <FRAME ...> <FRAME ...> <NOFRAMES> <BODY> ... </BODY> </NOFRAMES> </FRAMESET> </HTML> The HTML 4.0 DTD [2] says this about the HTML element: <!ENTITY % html.content "HEAD, (FRAMESET|BODY)"> <!ELEMENT HTML O O (%html.content)> <!ATTLIST HTML %version; %i18n; -- lang, dir -- > The 'How to read the HTML DTD' section of the spec. [6] says the following about content model definitions: A | B Both A and B are permitted in any order A , B A must occur before B. From which I understand "HEAD, (FRAMESET|BODY)" to mean a mandatory HEAD element, followed by optional FRAMESET and BODY elements in any order, (although [3] does go on to say: Elements that might normally be placed in the BODY element must not appear before the first FRAMESET element or the FRAMESET will be ignored. which I assume to mean that FRAMESET should actually come before BODY). So, my questions are: a) Given the above definition of the HTML element, why does my original example [4] not validate ? Am I missing something ? b) Would a content model definition of "HEAD, FRAMESET?, BODY" be better than "HEAD, (FRAMESET|BODY)" ? c) Should the content model for the FRAMESET element be changed to exclude NOFRAMES element, and the content model for the NOFRAMES element changed to exclude BODY ? This would (I think) cause my second example [5] not to validate which, if this is no longer the preferred way of doing things, may be desirable. References: [1] http://ugweb.cs.ualberta.ca/~gerald/validate/ [2] http://www.w3.org/TR/WD-html40/HTML4.dtd [3] http://www.w3.org/TR/WD-html40/present/frames.html [4] http://www2.eng.cam.ac.uk/~praf1/test/frames.html [5] http://www2.eng.cam.ac.uk/~praf1/test/frames2.html [6] http://www.w3.org/TR/WD-html40-970708/intro/sgmltut.html Paul Fidler -- Cambridge University Engineering Department Trumpington Street, Cambridge, CB2 1PZ, UK
Received on Tuesday, 15 July 1997 13:16:39 UTC