Re: [link draft] Changing the model for links

My initial reaction is a long groan. This is an aspect of HTML 4 of 
which I'd been blissfully ignorant. OK, wise up...

Here's a possible case using white space separated lists of rel values:

Link: <powder1.xml> rel="describedby mobileOK" ...
Link: <powder2.xml> rel="describedby dc" ...

This is meant to imply that powder1.xml is a POWDER document that 
contains a mobileOK claim and that powder2.xml is a similar document 
that contains a bunch of Dublin Core descriptors. In other words, /both/ 
relationship apply.

That's rather different from the "alternate stylesheet" construct, or, 
indeed the "up up" one where one rel value contextualises the other.

Can we somehow concatenate the context and the rel type with some 
syntactic sugar, something like "alternate-stylesheet" or 
"stylesheet(alternate)" - thus preserving a single token as the rel 
value? Any syntax would do here - the key thing being that it's the 
syntax that tells you that one value is context for the other. I guess 
the fact that this doesn't exist in HTML 4 is the biggest obstacle.

For me, the biggest hole in Link in this respect is the lack of support 
for media types. Not being able to write

Link <styles1.css> media="handheld" ...
Link <styles2.css> media="screen" ...

is a real downer but I know this has been raised before.


Mark Nottingham wrote:
> I've been discussing the link draft with Ian Hickson, who points out 
> that in HTML4, there's a difference between
> <link rel="stylesheet" href="a"/>
> <link rel="stylesheet alternate" href="a"/>
> and
> <link rel="stylesheet alternate" href="a/>
> (see 
> <> 
> for the background of why these are different)
> In the current link draft, there isn't any way to express the difference 
> between these; the underlying model is
> [ context ] ---[ relation type ]---> [ target ]
> where 'relation type' is singular.
> To accommodate this use, the model would need to be something like
> [ context ] ---[ list of relation types ]---> [ target ]
> noting that there may be more than one list of relation types between 
> any context and target.
> Personally, I think that it would be only in pathological cases that it 
> would be necessary to know the difference between the two (i.e., real 
> world Web pages will not point to a URI as both a stylesheet and as an 
> alternate for themselves, so it's safe to say that even the first 
> example above means that "a" is an alternate stylesheet).
> However, it is important for Link to interoperate well with HTML4. Also, 
> the HTML5 folks plan to use this model for other purposes (e.g., "up up" 
> to indicate a parent of a parent).
> The practical impact of making this change is that serialisations of 
> links won't be able to collapse multiple relation types between two URIs 
> into one link; they'll have to be separate to allow this interpretation.
> So, for example, if you have link types ['w', 'x', 'y z'] between A and 
> B, it will have to be serialised as
>   Link: <B>; rel="w"
>   Link: <B>; rel="x"
>   Link: <B>; rel="y z"
> in HTTP headers, NOT
>   Link: <B>; rel="w x y z"
> because that's ambiguous.
> The alternative is to say that the 'stylesheet alternate' combination 
> isn't specific to how it's serialised, but is tied to the occurrence of 
> the links. I.e., when both relations are present in links between the 
> same resources, these special semantics take affect. However, this does 
> seem to directly conflict with the HTML4 language (see link above), so I 
> don't think doing so is viable.
> Comments?
> -- 
> Mark Nottingham


Phil Archer

i-sieve technologies                |      W3C Mobile Web Initiative
Making Sense of the Buzz            |

Received on Wednesday, 8 April 2009 10:01:53 UTC