[XHTML2] Specifying alternative resources/content

[I haven't had the chance to read the earlier drafts of follow the
mailing list discussions. I apologize, if what I say has been
considered already.]

XHMTL 2.0 Draft from 22nd of July defines a new method for specifying
alternative representations of content by using the "src" attribute
in almost any element.
http://w3.org/TR/2004/WD-xhtml2-20040722/mod-embedding.html#s_embeddingmodule

I feel that approach has a number of problems:

   1. It provides alternative representations only for remote resources
   2. It introduces an attribute that totally overrides the semantics of
      any element, opening possibilities for misuse and misunderstanding
   3. The recursive nature of the mechanism is hard to parse and not
      explicit


What I would like to see instead is an explicit element, tentatively
called "<alt>" here but the name is not relevant, for denoting
alternative representations of local or remote resources. Each of the
childs of the element represent a possible alternative in decreasing
order of preference. The user agent should pick the first one available
and matching user's preferences and discard the others.

I feel this approach is much more straightforward and explicit and
it also frees the content of "<object>" for its real content, be it
"<param>" or whatever. Furthermore, the "<alt>" tag provides a nice
place to add attributes in the future that further control how the
alternatives are evaluated.

Any comments?

Below are some examples of the same contents represented in these two 
approaches:

This example is from
http://w3.org/TR/2004/WD-xhtml2-20040722/mod-object.html#s_objectmodule_xref_4

   <!-- First, try the applet -->
   <object
       src="http://www.example.com/TheEarth.class"
       type="application/x-java-applet">

         <!-- Else, try the video -->
         <object
             src="TheEarth.mpeg"
             type="video/mpeg"
             xml:base="http://www.example.com/">

               <!-- Else, try the image -->
               <object
                   src="TheEarth.png"
                   type="image/png"
                   xml:base="http://www.example.com/">

                   <!-- Else process the alternate text -->
                   The <strong>Earth</strong> as seen from space.
               </object>
         </object>
   </object>

Using the "<alt>" element, we would have:

   <alt>
       <!-- First, try the applet -->
       <object
           src="http://www.example.com/TheEarth.class"
           type="application/x-java-applet"
       />

       <!-- Else, try the video -->
       <object
           src="TheEarth.mpeg"
           type="video/mpeg"
           xml:base="http://www.example.com/"
       />

       <!-- Else, try the image -->
       <object
           src="TheEarth.png"
           type="image/png"
           xml:base="http://www.example.com/"
       />

       <!-- Else process the alternate text -->
       The <strong>Earth</strong> as seen from space.
   </alt>

This example is from
http://w3.org/TR/2004/WD-xhtml2-20040722/mod-embedding.html#s_embeddingmodule

   <p src="holiday.png" type="image/png">
       <span src="holiday.gif" type="image/gif">
           An image of us on holiday.
       </span>
   </p>

Using "<alt>", we get quite simply:

   <alt>
       <object src="holiday.png" type="image/png" />
       <object src="holiday.gif" type="image/gif" />
       <span>An image of us on holiday.</span>
   </alt>

Another example from the same section. I think this is a good example of 
the confusing nature of the "src" attribute. With a couple more 
attributes thrown in to the "<table>" tag you would easily miss the 
"src" attribute and fail to understand what is happening:

   <table src="temperature-graph.png" type="image/png">
       <caption>Average monthly temperature over the last 20 years
       </caption>
       <tr>
           <th>Jan</th><th>Feb</th><th>Mar</th>
           <th>Apr</th><th>May</th><th>Jun</th>
           <th>Jul</th><th>Aug</th><th>Sep</th>
           <th>Oct</th><th>Nov</th><th>Dec</th>
       </tr>
       <tr>
           <td> 4</td><td> 2</td><td> 7</td>
           <td> 9</td><td>13</td><td>16</td>
           <td>17</td><td>17</td><td>14</td>
           <td>11</td><td> 7</td><td> 4</td>
       </tr>
   </table>

With "<alt>" element, we get:

   <alt>
       <object src="temperature-graph.png" type="image/png" />

       <table>
           <caption>Average monthly temperature over the last 20 years
           </caption>
           <tr>
               <th>Jan</th><th>Feb</th><th>Mar</th>
               <th>Apr</th><th>May</th><th>Jun</th>
               <th>Jul</th><th>Aug</th><th>Sep</th>
               <th>Oct</th><th>Nov</th><th>Dec</th>
           </tr>
           <tr>
               <td> 4</td><td> 2</td><td> 7</td>
               <td> 9</td><td>13</td><td>16</td>
               <td>17</td><td>17</td><td>14</td>
               <td>11</td><td> 7</td><td> 4</td>
           </tr>
       </table>
   </alt>


If the author of the document would prefer a table presentation and only 
show the graph if the agent doesn't support tables, s/he could easily 
just simply reverse the elements inside "<alt>". With the mechanism 
proposed in the draft that is not possible.

Here is an example that cannot be represented at all with the approach 
proposed in the draft, but which is important in the international World 
Wide Web. The user agent could choose the first alternative, if it has 
available the Cyrillic fonts needed (and the user has set preference to 
accept Russian). Failing that, the agent could show a vector drawing of 
the phrase, if it supports the content type. Or it can show a version of 
the phrase using just Latin characters. Finally, if the user doesn't 
want to see Russian, the agent can select the last alternative, an 
English translation of the phrase.

   <alt>
       <!-- in Cyrillic letters -->
       <p xml:lang="ru">
           С днем рождения!
       </p>

       <!-- vector image rendering -->
       <object
           xml:lang="ru"
           src="happybirthday.svg"
           type="image/svg+xml"
       />

       <!-- Latin transliteration -->
       <p xml:lang="ru">
           S dnem rozhden'ja!
       </p>

       <!-- English translation -->
       <p xml:lang="en" encoding="">
           Happy birthday! (in Russian)
       </p>
   </alt>

Finally as an additional possibility, the "<alt>" mechanism could allow 
for more complex combinations of alternative resources:

   <alt>
       <!-- Try to show a video clip -->
       <object
           src="holiday.mpeg"
           type="video/mpeg"
       </

       <!-- Or show a still image and audio -->
       <div>
           <object src="holiday.jpeg" type="image/jpeg" />
           <object src="holiday-narration.mp3" type="audio/mp3" />
       </div>

       <!-- Or show an image and some text -->
       <div>
           <object src="holiday.jpeg" type="image/jpeg" />
           <p>Our holiday started on Sunday, the 1st of August. ...</p>
       </div>

       <!-- Or show just a place holder -->
       <p>(holiday picture here)</p>
   </alt>

Here the agent would first try to show the video clip. Failing that, the 
  agent would then try to get BOTH the image and audio files. If either 
of them fails, the agent would continue to the third alternative.

The mechanism proposed in the draft considers each resource on its own, 
but the "<alt>" syntax gives a natural way to group related resources, 
so that they are either all shown, or none of them are shown.


Regards,
Risto Kankkunen

Received on Saturday, 16 October 2004 21:12:12 UTC