Internal DTD subset without a displayed "]>"

(Moving to www-archive.)

In reply to: 
http://www.w3.org/mid/20100218010121863991.5635f637@xn--mlform-iua.no


Leif Halvard Silli, Thu, 18 Feb 2010 01:01:21 +0100:
> Krzysztof Maczyński, Wed, 17 Feb 2010 21:41:03 +0100:

>> Thanks, Leif, for your clever solution at 
>> http://www.målform.no/html4-or-html5/take2_workaround which looks 
>> both cleaner and more universal. Have you got an explanation handy? 
>> As SGML I understand it but not how mainstream browsers parse it.

Trying to explain more simply + add new info. Some repetition, to be 
complete.

First: The "<!>" on line 3,

  [<!ATTLIST P myattr   CDATA #implied --><!><!-- >]>

is just a placeholder for "<!DOCTYPE HTML>"

  [<!ATTLIST P myattr   CDATA #implied --><!DOCUMENT HTML><!-- >]>

(which makes Safari trigger standards mode). User agents don't display 
'<!>' anyway. Second: Like I said, the last line is just something I 
did to un-confuse the syntax coloring of VIM. Thus the shortest variant 
of my workaround is the following (where I replaced the system 
identifier with simply "" - which is enough according to the current 
edition of HTML5 - thanks to Philip for that info.):

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "" 
    [<!ATTLIST P myattr   CDATA #implied --><!-- >]>
  <!--><!!-->

Annotation of components of the 2 last lines of the workaround:

[<!ATTLIST P myattr   CDATA #implied --> = The '-->' makes the 
                                           preceding somehow end
                                           here as a "comment".

<!-- >]> = "comment start". *Must* be a space before ">]>". 
           Probably because "<!-->" is interpreted as a full
           comment (e.g. in Safari and also in HTML5.)

           ( "--><!--" is together a SGML comment inside the
           DOCTYPE - I know you know this, Krzysztof.) ;-)

<!--><!!--> = 1) If the line only contained '<!-->', then ']>' 
              would have been hidden in Safari and Firefox.
              But: Not valid mark-up syntax, of course.

              2) If the line only contained '<!!-->', then ']>'
              would have been hidden in all GUI browsers I've
              tested. But: Not valid mark-up syntax, of course.

              3) If the line only contained '<!---->', then ']>' 
              would have been hidden in Firefox 3.6 with 
              HTML5.enable turned on - and in Safari, Opera 
              and IE. BUT: Firefox without HTML5.eable would hide
              the entire page content.

              4) So why "<!--><!!-->"? When it starts with a 
              '<!-->', then it is interpreted as a comment
              in itself, by many of the UAs. And thus '<!!--->'
              retains the benefit described in 2), while the
              entire line may still be interpreted as a valid
              HTML4 comment.  (It is not a valid HTML5 
              comment ...)

I hope this is not far from the truth ...
-- 
Leif Halvard Silli

Received on Thursday, 18 February 2010 15:05:12 UTC