- From: Jukka K. Korpela <jkorpela@cs.tut.fi>
- Date: Thu, 20 Jan 2005 08:54:53 +0200 (EET)
- To: "David R. Stong" <drs18@psu.edu>
- Cc: www-validator@w3.org
On Wed, 19 Jan 2005, David R. Stong wrote:
> - - <label> elements will not
> validate. The Markup Validator says <label> is not allowed in that
> position. If I nest the form's contents inside a <p></p> tag, then
> place the <form<</form> around the <p></p>, the page validates.
In Strict versions of DTDs, inline markup (or plain text) is not allowed
directly inside a <form> element; everything needs to be wrapped inside a
block level container. It need not be specifically <p>; it could be
<div>, or <fieldset>, for example, or you could have <table> inside a
<form>. Actually using <p> is often not logical, since a <label> and an
<input> don't really form a _paragraph_; moreover, <p> markup implies
typically some default margins, which might be undesired.
> I can't find anything in the DTD or XHTML standard that explains
> this.
In the XHTML 1.0 Strict DTD there is:
<!ELEMENT form %form.content;>
<!ENTITY % form.content "(%block; | %misc;)*">
<!ENTITY % block
"p | %heading; | div | %lists; | %blocktext; | fieldset | table">
<!ENTITY % misc "noscript | %misc.inline;">
<!ENTITY % misc.inline "ins | del | script">
The Transitional DTD is more permissive as regards to form content:
<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
The principle of allowing only block level elements directly inside a
<form>, as well as directly inside a <body>, is not explicitly explained
in HTML specifications, even in the good old HTML 2.0 specification (which
also had Strict versions of DTDs and was a great improvement over its
successors in clarity). It is logically independent of the principle of
disallowing (most) presentational elements and attributes, which is what
Strict is best known for.
--
Jukka "Yucca" Korpela, http://www.cs.tut.fi/~jkorpela/
Received on Thursday, 20 January 2005 06:55:26 UTC