W3C home > Mailing lists > Public > www-html@w3.org > July 2008

Re: XHTML Basic 1.1 and setting input field to numeric mode

From: Luca Passani <passani@eunet.no>
Date: Tue, 01 Jul 2008 09:50:30 +0200
Message-ID: <4869E1C6.4070803@eunet.no>
To: Benjamin Hawkes-Lewis <bhawkeslewis@googlemail.com>
CC: Mark Birbeck <mark.birbeck@webbackplane.com>, Tina Holmboe <tina@greytower.net>, Shane McCarron <shane@aptest.com>, "Michael(tm) Smith" <mike@w3.org>, www-html@w3.org


This is absolutely fantastic. Your code makes my point exactly.

 > It's not poetry, but anyways:

it's not poetry and the fact that you cannot use @style *is* the culprit.
What about this (to be fair to you, I will also start with your arrays 
that simulate interaction with the backend):

<?php
header( 'content-type: application/xhtml+xml; charset=utf-8' );

// For demonstration purposes, we'll define the images, but the
// imagined case is that these are dynamic not static.
$pairs = array(
    array(
        array(
            'url'             => 'http://example.com/images/1.jpg',
            'width'           => 40,
            'height'          => 100,
            'text_equivalent' => 'hello',
        ),
        array(
            'url'             => 'http://example.com/images/2.jpg',
            'width'           => 30,
            'height'          => 200,
            'text_equivalent' => ' world',
        ),
    ),
    array(
        array(
            'url'             => 'http://example.com/images/1.jpg',
            'width'           => 20,
            'height'          => 500,
            'text_equivalent' => 'goodbye',
        ),
        array(
            'url'             => 'http://example.com/images/2.jpg',
            'width'           => 10,
            'height'          => 400,
            'text_equivalent' => ' world',
        ),
    ),
);

}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; 
charset=utf-8" />
<title>Image pairs</title>
</head>
<body>
<h1>Image pairs</h1>
<?php
foreach( $pairs as $pair ) {
    $pair_width   = $pair[0]['width'] + $pair[1]['width'];
?>
 <div style="width:'*<?= $pair_width ?>* .'px;">
   <?foreach ( $pair as $image ) { ?>
   <img src="<?= htmlentities( $image['url'] )?>" width="<?= 
$image['width']?>"
           height="<?= $image['height']?>"  alt="<?= 
htmlentities($image['text_equivalent'],ENT_QUOTES)" />
    <?php  } ?>
</div>
<?php } ?>
</body>
</html>

look! Miracle! it's still almost XHTML!!!!

and, let me tell you, I am not the greatest PHP programmer. If I had to 
do this in Java, assuming I can use JSTL and a common MVC framework such 
as Struts, Spring MVC or similar (i.e. I typically already find all the 
variables in the context of the page, since the controller has placed 
them there for me), this would be as simple as:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; 
charset=utf-8" />
<title>Image pairs</title>
</head>
<body>
<h1>Image pairs</h1>
<c:forEach var="pair" items="${pairs}">
<div style="width:${pair[0].width+pair[1].width}">
  <c:forEach var="image" items="${pair}">
     <img src="${image.url}" width="${image.width}" 
height="${image.height}" alt="${image.textEquivalent}">
  </c:forEach>
</div>
</c:forEach>
</body>
</html>

(if you had to create a style tag, as you would be forced to do, if you 
want to avoid using a deprecated attribute, you would get my original 
point about repeating the code)

you see? another miracle....are you guys still going to tell me that 
@style should be deprecated in the name of purity of separation? what 
about the real world?

Luca

Benjamin Hawkes-Lewis wrote:
> Luca Passani wrote:
>> Benjamin Hawkes-Lewis wrote:
>>>
>>> I was talking about your generic claim that because something has 
>>> uses it must not be deprecated. bgcolor support was also useful when 
>>> HTML 4.01 was released, that doesn't mean they were wrong for /that/ 
>>> reason to deprecate it in favour of stylesheets.
>>>
>>> Features may have use-cases a specification is intended to meet, but 
>>> still be deprecated because there are /or/ will be in the future 
>>> better ways to fulfill those use-cases.
>> better ways in theory. Not in practice.
>
> Again, I was addressing the general point, not "style" in particular. 
> The fact that there are use-cases for a feature does not mean there 
> aren't better ways to address those use-cases. Deprecation is a 
> mechanism for gradually moving from worse to better ways of addressing 
> use-cases by warning people about what's planned. Therefore the fact 
> that there are use-cases for a feature /cannot/ be an argument against 
> deprecation, or nothing would ever be deprecated.
>
> So the mere existence of use-cases for the "style" attribute is not by 
> itself a sufficient argument against deprecation.
>
> Now, in the case of the "style" attribute, there may well be other 
> arguments against deprecation, but I think they all turn out to be 
> arguments against its removal in disguise. For example, you might 
> argue that "style" is the /best/ way to address a particular use-case. 
> This is, I guess, the position you're gravitating towards with your 
> "theory" and "practice" rhetoric.
>
>>>> I presented examples of legitimate uses of @style to which you 
>>>> responded with "hacks" (manipulate the dom,
>>>> repeat the code to create the CSS definition elsewhere, and so on).
>>>
>>> * Manipulating the DOM is not a hack.
>> it is, if presented as an alternative to <div style="color:red">Red 
>> Text</div>
>>> * Adding a style attribute /is/ manipulating the DOM.
>> sure, for some definitions of manipulating the DOM
>
> Since you agree that adding a style attribute is a change to the DOM 
> (for "some definitions"), I think we've clarified that changing the 
> DOM is not an issue for you. As far as I can tell from what you're 
> saying, anything that is not your choice of markup is a "hack".
>
>> What is a hack to me, isn't a hack to you and the other way around, 
>> probably. 
>
> Maybe it would help if you picked a phrase that you don't think is so 
> subjective?
>
>>> * My suggestion did not involve any repetition of code. Your 
>>> imagined implementation did, but I can't understand why. Insisting 
>>> that I proposed this, in direct contradiction of the email you're 
>>> replying to, is really not helpful.
>> well, yeah, I imagined implementation.
>
> It's not poetry, but anyways:
>
> <?php
> header( 'content-type: application/xhtml+xml; charset=utf-8' );
>
> // For demonstration purposes, we'll define the images, but the
> // imagined case is that these are dynamic not static.
> $pairs = array(
>     array(
>         array(
>             'url'             => 'http://example.com/images/1.jpg',
>             'width'           => 40,
>             'height'          => 100,
>             'text_equivalent' => 'hello',
>         ),
>         array(
>             'url'             => 'http://example.com/images/2.jpg',
>             'width'           => 30,
>             'height'          => 200,
>             'text_equivalent' => ' world',
>         ),
>     ),
>     array(
>         array(
>             'url'             => 'http://example.com/images/1.jpg',
>             'width'           => 20,
>             'height'          => 500,
>             'text_equivalent' => 'goodbye',
>         ),
>         array(
>             'url'             => 'http://example.com/images/2.jpg',
>             'width'           => 10,
>             'height'          => 400,
>             'text_equivalent' => ' world',
>         ),
>     ),
> );
>
> $i           = 0;
> $pairs_css   = '';
> $pairs_xhtml = '';
>
> foreach( $pairs as $pair ) {
>     $i++;
>     $id           = 'image-pair-'.$i;
>     $pair_width   = $pair[0]['width'] + $pair[1]['width'];
>     $pairs_css   .= '#'.$id.'{width:'.$pair_width.'px;}';
>     $pairs_xhtml .= '<div id="'.$id.'">';
>
>     foreach ( $pair as $image ) {
>         $pairs_xhtml .= '<img src="'
>                         .htmlentities( $image['url'] )
>                         .'" width="'
>                         .$image['width']
>                         .'" height="'
>                         .$image['height']
>                         .'" alt="'
>                         .htmlentities(
>                              $image['text_equivalent'],
>                              ENT_QUOTES
>                          )
>                         .'" />';
>     }
>
>     $pairs_xhtml .= '</div>';
> }
>
> /* One loop has produced two blocks: one suggested styling, one
> "semantic" markup, that can be output wherever we like. You could
> output the CSS to a file and cache it, but in this case we'll assume 
> the styles are throwaway and just use the (undeprecated) "style" 
> element. */
>
> ?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
>     "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
> <head>
> <meta http-equiv="Content-Type" content="application/xhtml+xml; 
> charset=utf-8" />
> <title>Image pairs</title>
> <style type="text/css"><![CDATA[<?php echo $pairs_css; ?>]]></style>
> </head>
> <body>
> <h1>Image pairs</h1>
> <?php echo $pairs_xhtml; ?>
> </body>
> </html>
>
>>> * I've regularly seen the style attribute used to apply the same 
>>> style in multiple places, either for rapid prototyping or to style 
>>> included DOM. That's an example of code repetition that can be 
>>> avoided by using "link" or "style" elements rather than "style" 
>>> attribute.
>> I think we are in a loop here. IMO it should be up to the coder to 
>> understand when the time to 'refactor' their markup has come, and 
>> multiple @style uses would be better turned into a reusable class. 
>
> I suppose you can consistently assert both that "style" should be 
> allowed in order to avoid code repetition in final delivery /and/ that 
> it should be allowed in order to allow repetition in prototyping.
>
> Coders can produce markup however they like; it doesn't mean that 
> every coding preference needs expression at a markup language level 
> (many coding preferences can actually be met by decent programmers' 
> tools) and naturally XHTML 1.1 Basic doesn't even try. There's no 
> special catering for people who struggle to read lowercase markup, for 
> example.
>
> If a coding practice tends to produce worse code, I think it becomes 
> harder to argue for features to support it. I've never found "style" 
> terribly helpful myself, and from watching others work with it, my 
> impression is that prototyping using the "style" attribute does tend 
> to produce worse markup. That's not so much an argument for removing 
> the "style" attribute as a reason why I don't (personally) find the 
> prototyping use-case terribly persuasive as a reason for keeping it. 
> Not that I'm a decision-maker in all this.
>
>> Enforcing this with the grammar (even though just deprecating) is IMO 
>> wrong!
>
> As avoiding the "style" attribute is /not/ being enforced in the 
> proposed standard, this opinion appears to have only indirect bearing 
> on the deprecation that is the subject of this thread.
>
> Deprecation is a warning mechanism to ease migration. So long as the 
> Working Group views XHTML2 as a natural migration target from XHTML 
> 1.1 Basic, and so long as "style" is likely to be absent from XHTML2, 
> I'd guess it's incumbent on the Working Group to warn publishers of 
> that by deprecating it.
>
> So it seems to me you either need to:
>
> 1. Make the case that XHTML2 is not a natural migration target, or at 
> least that there are other natural migration targets which are likely 
> to include the "style" attribute or something very similar.
>
> /or/
>
> 2. Make the case against removing the "style" attribute from any 
> (X)HTML standard. None of your arguments seem specific to XHTML 1.1 
> Basic anyway.
>
> -- 
> Benjamin Hawkes-Lewis
>
Received on Tuesday, 1 July 2008 07:51:20 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 27 March 2012 18:16:14 GMT