Reply-To set to ietf-http-wg, to avoid crossposting.
On 27/04/2008, at 8:39 PM, Brian Smith wrote:
[CC'd to ietf-http-wg. I think it is better to continue the
conversation
over there as most of my comments are not specific to Atom.]
Mark Nottingham wrote:
The draft does not advocate removing links from Atom
documents to put them in headers; rather, the common
use case is repeating them in headers, so that they
can be easily discovered and processed.
With HTML, I've never seen the Link header used that way; it has
always been
used to add new links to the document (usually style sheets that vary
depending on the UA).
My experience is the opposite; seeing people put a link in headers but
omit it in content is more rare. The only common exception is when
it's not possible to put the link in content (e.g., it's an image).
When processing Atom documents, we are usually more interested in
atom:title, atom:content/@src (if any), and atom:content/@type. In
AtomPub
we also often want atom:link/@rel='edit' and atom:link/@rel='edit-
media'.
Since the Link header can only store the atom:link elements, we are
almost
always going to have to parse the document anyway. If parsing Atom
(or HTML)
is problematic for the software application then the application
shouldn't
have chosen to store everything in Atom (or HTML) documents. :)
Are you saying that there are no use cases for a link header in Atom?
I find that hard to believe (e.g., link with a relation of 'edit-
media' on a media response seems obvious and useful), but if it's so,
perhaps the simple answer is to use a separate registry for the
header, with the option of registering Atom relations later.
For all those reasons, I actually think it makes a lot more
sense for the Link header registry to be mutually exclusive
with the HTML and Atom registry, instead of attempting to
merge them all together.
You're the first person to suggest that. I think we can get
to a place where there's alignment between the specs without
abusing the semantics of existing relations. It's certainly
worth trying...
It seems like a lot of effort just to (re-)define all the link
relations in
a format-agnostic way without being overly vague. It is probably
even more
work to convince everybody (especially the HTML WG) to agree to the
result.
I don't disagree, but it is worth a try.
I think it would be nice if the same link relation identifiers meant
the
same thing in Atom as they do in HTML. However, for most of the
existing
registrations, I don't see the advantage to also making them
available in
the HTTP message header.
The current HTML registrations are grandfathered in, so that's to be
expected; many of them are there more to prevent future collisions
than they are to provide anything new.
[...]
1. There is too much flexibility in the syntax of the "rel"
parameter. For
example, the following all mean the same thing:
rel=edit
rel="edit"
rel="\e\d\i\t"
rel="http://www.iana.org/assignments/link-relations.html#edit"
....
If you want to be able to catch all variations, then you have to
write a
pretty nasty regular expression.
What leads you to believe that "\d" is the same as "d" in a URI
reference? Regardless, regex is often the wrong tool for parsing.
2. The Link header mixes unrelated information into the same header
field.
Consequently, in order to process specific types of links, you have
to parse
the Link header field into parts, process the parts that you are
interested
in, and put it all back together.
That's true of just about any delimited text format.
3. The "rev" mechanism makes processing unnecessarily difficult. You
have to
be careful to note whenever rev=A means the same thing of rel=B when
you are
attempting to process the header.
There seems to be pretty strong support for dropping 'rev', so this
isn't a concern.
I think a better alternative to a single "Link" header is to define a
standard for multiple Link-like headers:
[Relation]-Links: #(URI-Reference LWS *(; param=value LWS))
For example, an "edit" link would be:
Edit-Links: http://foo.org
This could be done by changing the registration rules for HTTP
headers so
that header fields with a "-Links" suffix must have the above
syntax, with
the definitions of the "media", "type", and "title" parameters to be
the
fixed to be the same as in HTML 4 (or 5) and Atom 1.0. Each link
header
would have to define the processing rules for when multiple links are
provided, and applications must be prepared to handle multiple links
of the
same type, even when they are not expected (that is why I chose "-
Links"
instead of "-Link").
Try to write a mod_headers rule or Python WSGI middleware that
filters out
all the links with a particular type. Using the "-Links" header
syntax, it
is just "del environ[HTTP_RELATION_NAME_LINKS]" in Python and "unset
RELATION-NAME-LINKS" in mod_headers. The Link header version
requires a some
tricky parsing in Python. I think it is actually impossible to
process the
Link header correctly using Apache's mod_headers.
I think the "-Links" header idea allows for uniform syntax (like the
Link
header) while still being extremely easy to process.
This approach didn't work terribly well for entity headers, and would
further clog up the header registry. It would also require people to
register their links in at least two places, and coordinate them over
time.
Changing the registration procedures is also not a small thing, since
they already have IETF consensus. Similar proposals to the ones being
put forward (e.g., com.foo.link:) have been put forward for media
types, and have been shot down quite firmly.
Cheers,
--
Mark Nottingham http://www.mnot.net/