> Summary of the problem:
>
> HTML 2 explicitly allows META and LINK elements to appear anywhere
> inside the HEAD element, but the Wilbur content model:
>
> <!ENTITY % head.content "TITLE & ISINDEX? & BASE? & STYLE? &
> SCRIPT* & META* & LINK*">
>
> requires all the METAs to appear together, all the LINKs to
> appear together, et cetera.
I don't know about WIlbur (who is he?) but this was discussed in some
detail for HTML 2, and I and some others at SoftQuad suggested a model
using inclusions. This model was accepted by the people on the mailing list
at the time; I don't know what happened to it. Joe mentioned it in
his message.
It had a challenge to its intellectual appeal in that it required exceptions
on TITLE and anything else in HEAD that had content. It goes
something like this, modified under the assumption that STYLE and SCRIPT
contain data characters (presumably CDATA), possibly with a CONREF attribute
to make them empty if they have a SRC attribute:
<!Entity EmptyHeadElements % "(META|LINK|ISINDEX|BASE)">
<!Element Head O O
(TITLE, (SCRIPT|STYLE)*) +%EmptyHeadElements
>
<!Element Title - O
%title.content; -%EmptyHeadElements
>
I have imposed order on TITLE and SCRIPT/STYLE arbitrarily here;
it could also be written
(TITLE|SCRIPT|STYLE)*
which allows for old-style Netscape animated titles :-)
Joe also wrote:
> Another solution is:
>
> <!ENTITY % head.any "(SCRIPT | META | LINK)*"
> -- repeatable HEAD elements -->
>
> <!ENTITY % head.content
> "(%head.any;,
> ((TITLE, %head.any;) &
> (ISINDEX, %head.any;)? &
> (BASE, %head.any;)? &
> (STYLE, %head.any;)? ))"
> >
But this imposes a much stricter order, as all META elements must come
before the TITLE. Internet Assistant (I _think_ that's the one) puts
META elements either side of TITLE.
Lee
|