Bug in xhtml1-dtd's?

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Bug in xhtml1-dtd's?

Terje Rosenlund

I have observed something that seems like a bug in the 3 xhtml1-dtd's
The definition for the head-element is declared as:

<!ELEMENT head (%head.misc;,
     ((title, %head.misc;, (base, %head.misc;)?) |
      (base, %head.misc;, (title, %head.misc;))))>

which expands to:

<!ELEMENT head ((script|style|meta|link|object)*,
     ((title, (script|style|meta|link|object)*, (base, (script|style|meta|link|object)*)?) |
      (base, (script|style|meta|link|object)*, (title, (script|style|meta|link|object)*))))>

The 1. blue part: (base, (script|style|meta|link|object)*)?

I suppose the intended meaning for this part is: 0 or 1 base element followed by 0 or many %head.misc
This implies that the number of elements found may be more than 1 (when base followed by one or more %head.misc exists)
The trailing ? in (...)? should mean 1 or no elements (=optional)  but must be interpreted as boolean (if 'base followed by %head.misc') in order to give the intended meaning

Would it not be more correct to write this as: base?, (script|style|meta|link|object)*

The 2. blue part: (title, (script|style|meta|link|object)*)
 title, (script|style|meta|link|object)*
gives the same meaning

I might have misunderstood something about the ?-quantifier in xhtml1-dtd's but has not found anything indicating that it is a boolean operator (?)

Terje Rosenlund