Re: Atom Content Negotiation

Alistair Miles <alimanfoo@googlemail.com> Mon, 16 May 2011 10:39 UTC

Return-Path: <owner-atom-syntax@mail.imc.org>
X-Original-To: ietfarch-atompub-archive@ietfa.amsl.com
Delivered-To: ietfarch-atompub-archive@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2338AE0710 for <ietfarch-atompub-archive@ietfa.amsl.com>; Mon, 16 May 2011 03:39:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.599
X-Spam-Level:
X-Spam-Status: No, score=-3.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VEA5HsD+busQ for <ietfarch-atompub-archive@ietfa.amsl.com>; Mon, 16 May 2011 03:39:24 -0700 (PDT)
Received: from hoffman.proper.com (IPv6.Hoffman.Proper.COM [IPv6:2001:4870:a30c:41::81]) by ietfa.amsl.com (Postfix) with ESMTP id 3F264E06F7 for <atompub-archive@ietf.org>; Mon, 16 May 2011 03:39:22 -0700 (PDT)
Received: from hoffman.proper.com (localhost [127.0.0.1]) by hoffman.proper.com (8.14.4/8.14.3) with ESMTP id p4GAY3Mt081623 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 16 May 2011 03:34:03 -0700 (MST) (envelope-from owner-atom-syntax@mail.imc.org)
Received: (from majordom@localhost) by hoffman.proper.com (8.14.4/8.13.5/Submit) id p4GAY2JX081622; Mon, 16 May 2011 03:34:02 -0700 (MST) (envelope-from owner-atom-syntax@mail.imc.org)
X-Authentication-Warning: hoffman.proper.com: majordom set sender to owner-atom-syntax@mail.imc.org using -f
Received: from mail-fx0-f43.google.com (mail-fx0-f43.google.com [209.85.161.43]) by hoffman.proper.com (8.14.4/8.14.3) with ESMTP id p4GAY0Ej081617 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=FAIL) for <atom-syntax@imc.org>; Mon, 16 May 2011 03:34:02 -0700 (MST) (envelope-from alimanfoo@googlemail.com)
Received: by fxm3 with SMTP id 3so4723097fxm.16 for <atom-syntax@imc.org>; Mon, 16 May 2011 03:34:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=u/Z0NYfj7rXVuT7T6m+mE5d6pYQprOF6hInXo1UyMcE=; b=GRsuDjS0Z45ff3pObU67uIut1yHyWOwcotnuv9FT+8kfM41xRBWYO9u+/bDtm4jR7M im1pcxy8kEofrxO1pl/8T3geXGq1cFutTshNyTN0AIJD0IzHxfGZQ9KJ1iuWlKQRLeFV VLIqXQvuXScw/8FKkdWWVtrHkX78d/8cpSyj4=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; b=QfNHjcyVDRTFsv1VCO9Qp37tiqlXrlGF/7079hKQ0wlACA7V6fV51vM34fbTpnTm+O dMfUPR5d67iQ24lBnyEe/AVMlZ6d0TUbq0CdQR5zctaPSeh0Hf9L3oNlH0Et5yeOlvHL gkjBwjr5gvCN3M43S67zW12vz25mqw3OxoUEI=
Received: by 10.223.76.212 with SMTP id d20mr3126651fak.5.1305542039933; Mon, 16 May 2011 03:33:59 -0700 (PDT)
Received: from skiathos (dhcp462.well.ox.ac.uk [129.67.46.49]) by mx.google.com with ESMTPS id j12sm1780502fax.33.2011.05.16.03.33.58 (version=SSLv3 cipher=OTHER); Mon, 16 May 2011 03:33:59 -0700 (PDT)
Date: Mon, 16 May 2011 11:33:55 +0100
From: Alistair Miles <alimanfoo@googlemail.com>
To: Erik Wilde <dret@berkeley.edu>
Cc: Atom-Syntax <atom-syntax@imc.org>
Subject: Re: Atom Content Negotiation
Message-ID: <20110516103355.GA8063@skiathos>
References: <4DBA06CE.8070304@berkeley.edu> <20110516092225.GD5335@skiathos>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20110516092225.GD5335@skiathos>
User-Agent: Mutt/1.5.21 (2010-09-15)
Sender: owner-atom-syntax@mail.imc.org
Precedence: bulk
List-Archive: <http://www.imc.org/atom-syntax/mail-archive/>
List-Unsubscribe: <mailto:atom-syntax-request@imc.org?body=unsubscribe>
List-ID: <atom-syntax.imc.org>

Hi Erik,

Apologies, I wrote the message below before reading the rest of the discussion 
thread, and I think I misunderstood your requirement. My suggestion only allows 
you to retrieve a variant (non-Atom) representation of an entire feed, which, as 
you point out, requires a specification of how to completely represent atom 
feeds in html, json, rdf or whatever.

I don't have a solution for how to request or discover variant representations 
of an atom feed, where the main media type is still 
application/atom+xml;type=feed, but where the media type of the entry content 
varies.

Interestingly, I have also run into problems where the media type of the content 
of an Atom entry can vary, and have found myself wanting some 
additional machinery. E.g., I have found myself inventing an <x:accept-inline> 
extension element for atom service documents, to allow servers to say something 
like "I will accept Atom entries, but only where the inline content type is 
text/html".

As Hadrien points out, this seems to be a more general problem, which is 
encountered whenever you have a media type for containers or compound documents 
- you end up wanted some additional machinery which parallels existing HTTP and 
Atom machinery for talking about media types, but within the outer container. I 
think the SWORD folks are struggling with something similar, where they want to 
be able to talk in HTTP and Atom about different "packaging" formats which may 
share the same base media type (e.g., application/zip). They've ended up 
inventing new HTTP headers etc., e.g., "Accept-Packaging".

One thought that does occur, as something you could deploy without having to get 
into debates about media type parameters, perhaps you could invent a new link 
relation like "atom-content" as you suggest, and use it in a link template which 
tells a client how to request a variant representation of a feed with a given 
inline content type. E.g., something like...

<link-template rel="alternate-content" 
href="http://example.org/foo?inlinecontenttype={inlinecontenttype}"/>

...just a thought, this has probably occurred to you already.

Cheers,

Alistair

On Mon, May 16, 2011 at 10:22:25AM +0100, Alistair Miles wrote:
> Hi Erik,
> 
> On Thu, Apr 28, 2011 at 05:31:10PM -0700, Erik Wilde wrote:
> > 
> > hello.
> > 
> > on http://dret.typepad.com/dretblog/2011/04/atom-content-negotiation.html
> > i have posted some thoughts on whether there should eb a way how to
> > differentiate between "feed variants", so that publishers could link
> > the HTML feed to the XML feed. any feedback would be very welcome,
> > both encouraging and critical. commenting on the blog might be
> > better visible, and i will take the freedom to link back from the
> > blog to the mailing archive if there are interesting follow-up
> > mails, unless you don't want me to do so.
> 
> Why not just use <atom:link rel='alternate' href='...'/> at both the feed and 
> entry levels? 
> 
> In our data repository systems (based on AtomPub), both collections and 
> collection members are content negotiable resources. I.e., you can retrieve an 
> Atom, HTML or JSON representation, by specifying different preferences in the 
> Accept request header. In addition to this content negotiation at the collection 
> or member URI, each variant representation also has a URI, and links are 
> provided in entry and feed representations to all variant representations via 
> the 'alternate' link relation.
> 
> E.g., 
> 
> GET /foo
> Host: example.org
> Accept: application/atom+xml
> 
> 200 OK
> Content-Type: application/atom+xml;type=feed
> Content-Location: http://example.org/foo?format=atom
> Vary: Accept 
> 
> <atom:feed xmlns:atom="http://www.w3.org/2005/Atom">
>   <atom:link rel="self" href="http://example.org/foo"/>
>   <atom:link rel="alternate" type="text/html" href="http://example.org/foo?format=html"/>
>   <atom:link rel="alternate" type="application/json" href="http://example.org/foo?format=json"/>
>   ...
>   <atom:entry>
>     <atom:link rel="edit" href="http://example.org/foo/bar"/>
>     <atom:link rel="alternate" type="text/html" href="http://example.org/foo/bar?format=html"/>
>     <atom:link rel="alternate" type="application/json" href="http://example.org/foo/bar?format=json"/>
>     ...
>   </atom:entry>
> </atom:feed>
> 
> FWIW, this is implemented using a generic content negotiation plugin for 
> AtomBeat [1], sorry no documentation as yet.
> 
> Cheers,
> 
> Alistair
> 
> [1] http://code.google.com/p/atombeat/wiki/ReleaseNotes#configurable_conneg_plugin 
> 
> > 
> > thanks and kind regards,
> > 
> > dret.
> > 
> > -- 
> > erik wilde | mailto:dret@berkeley.edu  -  tel:+1-510-6432253 |
> >            | UC Berkeley  -  School of Information (ISchool) |
> >            | http://dret.net/netdret http://twitter.com/dret |
> > 
> 
> -- 
> Alistair Miles
> Head of Epidemiological Informatics
> Centre for Genomics and Global Health <http://cggh.org>
> The Wellcome Trust Centre for Human Genetics
> Roosevelt Drive
> Oxford
> OX3 7BN
> United Kingdom
> Web: http://purl.org/net/aliman
> Email: alimanfoo@gmail.com
> Tel: +44 (0)1865 287669

-- 
Alistair Miles
Head of Epidemiological Informatics
Centre for Genomics and Global Health <http://cggh.org>
The Wellcome Trust Centre for Human Genetics
Roosevelt Drive
Oxford
OX3 7BN
United Kingdom
Web: http://purl.org/net/aliman
Email: alimanfoo@gmail.com
Tel: +44 (0)1865 287669