- From: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
- Date: Wed, 5 May 2010 06:45:22 +0200
- To: Henri Sivonen <hsivonen@iki.fi>
- Cc: Toby Inkster <tai@g5n.co.uk>, HTMLWG WG <public-html@w3.org>
Henri Sivonen, Tue, 4 May 2010 11:35:22 +0300: > On May 3, 2010, at 17:55, Toby Inkster wrote: > >> I was thinking of using <object> in <head> as a way of embedding RDFa >> or microdata without disturbing the appearance of the page. > > That doesn't seem like a legitimate use case of <object> to me. > Rather, it seems like a way of exploiting the limitations of > DTD-based validation. > > If you are using <object> for a purpose other > than embedding an external resource, you are misusing <object> that > already does too many things. You have two claims here: 1) to use <object> as a container element should be forbidden 2) even HTML4 agrees with that it should be forbidden, it is only a loophole in DTD based validation which causes HTML4 and XHTML1.x validators to not display an error whenever one uses <object> without either the @type or the @data attribute. To the latter: * So if it *is* possible to express such a thing in a DTD (I don't know if it is), then I suppose you consider that as a proof of the opposite? Are there any DTD experts that can tell us? * HTML4 several times mentions that something is not possible to express in a DTD, but still defines a rule for it. Thus even if it is impossible in a DTD, this may not be a good argument. To the former: Why should it be forbidden? <object> has many times been taken as an example of were XHTML2 was heading: All elements would be able to serve the role as embedding element, as mark-up container element - or both. It has been said that HTML5, by allowing <a> to enclose e.g. a <table>, took inspiration from XHTML2 - this way allowing "impossible" elements to become links. Likewise, by using <object> as the sole direct child of e.g. a <p> element, one can say that XHTML2's radical content model is still partly alive. E.g. this would allow me to have captioned images inside a paragraph: <p>Lorem ipsum. <object> <figure> <img src="*" alt=""> <figcaption>Caption</figcaption> </figure> </object> </p> Of course, an alternative to the above, would be to allow <figure> to be both inline and block level. THe above is anyhow currently illegal in HTML5. And not only because it contains no @data or @type attribute. But because it contains, as HTML5 sees it, an illegal nesting. [1] Though the illegal nesting did not hinder Lachlan from presenting a Change Proposal for Issue-107, where he offered one <p> element which, according to how HTMl5 currently sees it, was nested inside another <p> element. Even Ian himself did not react, but instead said that he would be happy to add Lachlans example! [2] So, that this nesting should be illegal, cannot be very well founded. And shows that <object> is not very well defined in HTML5, as it stands. So there is plenty of room for bugs. [3] >> Filing a bug against html5-diffs seems to beg the bigger question of >> whether <object> should be allowed inside <head>. I can't find any >> record of this having been discussed - the HTML5 draft spec seems to >> have just accepted the behaviour of Opera, Gecko and WebKit, even >> though it goes against the HTML 4 specification, and against Internet >> Explorer's behaviour. > > What HTML 4 said doesn't really matter. What Opera, Gecko, WebKit and > IE do does. When there's a 3 vs. 1 situation with 3 on the side of > parser simplicity, I think the spec should follow the 3. That math is very difficult/inconsistent ... And HTML 4 does really matter. But anyway, as it stands, then <object> is defined as having a transparent content model. I don't think that transparent is the correct content model for <object>. At least not with the current definition of what that means. However, as long as the content model remains transparent, then it would at least be conceivable to allow an <object> inside <head> to contain anything that <head> is allowed to contain (we should probably not allow it to contain <title> though.) I don't know if that would help you, Toby? The outline which <object> creates anyhow has to be defined - it cannot work the same way that it works for <a>. And when the outline w.r.t. <object> becomes defined (see bug 9658 [4]), then I don't see any hindrance for making <object> an element which can be used as a pure mark-up container, both inside <body> and inside <head>. (The alternative is to make <figure> able to appear inline.) [1] http://www.w3.org/mid/20100505051403824276.4d2b5b7f@xn--mlform-iua.no [2] http://www.w3.org/mid/Pine.LNX.4.64.1004222153450.1619@ps20323.dreamhostps.com [3] http://www.w3.org/Bugs/Public/show_bug.cgi?id=9657 [4] http://www.w3.org/Bugs/Public/show_bug.cgi?id=9658 -- leif halvard silli
Received on Wednesday, 5 May 2010 04:45:56 UTC