Ok, the first round of discussions around PaceMediaEntries was very
good.  It's obvious given the various implementations out there and the
disagreements in that thread that more work is needed.  Here's a second
attempt that incorporates some of the feedback from that discussion:

http://www.intertwingly.net/wiki/pie/PaceMediaEntries2

- James

== Abstract ==

Fix Media Collections by replacing it with an approach that works
seamlessly with existing podcasting applications.

== Status ==

Proposed

[snip]

Section 7.1: Remove:
{{{
"My Blog Entries" is an Entry collection and "Pictures" is a Media
collection. Entry and Media collections are discussed in Section 7.2.4.
}}}

Section 7.2.2: Change:
{{{
In an app:workspace element, the first app:collection element of each
type MUST refer to the preferred or primary collection. In the following
example, the "Entries" collection would be considered the preferred (or
primary) entries collection of the workspace and the "Photos" collection
would be considered the primary media collection:
}}}

To
{{{
In an app:workspace element, the first app:collection element MUST refer
to the preferred or primary collecton.  In the following example, the
"Entries" collection would be considered the preferred collection"
}}}

Remove the member-type element from the example in Section 7.2.2
Remove the member-type element from Section 7.2.3
Remove Section 7.2.4.
Remove Section 12

{{{
8. Collections

8.1 Creating resources with POST

To add members to a collection, clients send POST requests to the
collection's URI.  Collections MAY impose constraints on the media-types
of request entities POSTed to the collection and MAY generate a response
with a status code of 415 ("Unsupported Media Type").  On successful
creation, the response to the POST request MUST return a Location:
header with the URI of an Atom Entry Document representing the newly
created resource.

If the server generates a response with a status code of 201
("Created"), the response SHOULD include an Atom Entry Document
representing the newly-created resource. Clients MUST NOT assume that an
Atom Entry returned is a full representation of the member resource and
SHOULD perform a GET on the member resource before editing.

Clients MUST NOT assume that the URI provided by the Location: header
can be used to edit the created entry.

8.1.1 Example

Below, the client sends a POST request containing an Atom Entry to the
URI of the Collection:

    POST /myblog/entries HTTP/1.1
    Host: example.org
    User- Agent: Thingio/1.0
    Content- Type: application/atom+xml
    Content- Length: nnn

    <?xml version="1.0" ?>
    <entry xmlns="http://www.w3.org/2005/Atom";>
      <title>Atom-Powered Robots Run Amok</title>
      <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
      <updated>2003-12-13T18:30:02Z</updated>
      <author><name>John Doe</name></author>
      <content>Some text.</content>
    </entry>

The server signals a successful creation with a status code of 201. The
response includes a "Location" header indicating the URI of the Atom
Entry and a representation of that Entry in the body of the response.

    HTTP/1.1 201 Created
    Date: Fri, 7 Oct 2005 17:17:11 GMT
    Content- Length: nnn
    Content- Type: application/atom+xml; charset="utf-8"
    Location: http://example.org/edit/first-post.atom

    <?xml version="1.0"?>
    <entry xmlns="http://www.w3.org/2005/Atom";>
      <title>Atom-Powered Robots Run Amok</title>
      <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
      <updated>2003-12-13T18:30:02Z</updated>
      <author><name>John Doe</name></author>
      <content>Some text.</content>
      <link rel="edit" href="http://example.org/edit/first-post.atom"; />
    </entry>

Note that the Entry created by the server may or may not exactly match
the Entry POSTed by the client.  In particular, a server MAY change the
values of various elements in the Entry such as the atom:id,
atom:updated and  atom:author values and MAY choose to remove or add
metadata elements.

8.2 The 'edit' Link

Each member Entry within a collection SHOULD contain an atom:link
element with a link relation of "edit" that contains the IRI used to
retrieve, update or delete the member Entry.

8.3 Media Entries

A Media Entry is an Atom Entry associated with a resource of any
media-type linked to the entry using either the atom:content element's
"src" attribute or an enclosure link relation. Media Entries SHOULD
contain an atom:link element with a link relation of "edit-resource"
that contains the IRI used to modify the linked resource.

To add a Media Entry to a collection, clients send a POST request
containing a representation of the media resource to the collection's URI.

Deletion of a Media Entry SHOULD result in the deletion of it's linked
media resource.  Likewise, if a server allows clients to send DELETE
requests to the URI of the media resource, it's associated Media Entry
SHOULD also be deleted.

8.3.1 Title: Header

A POST to a Collection requesting the creation of a Media Entry SHOULD
contain a Title: header indicating the client's suggested title for the
resource.

    POST /myblog/fotes HTTP/1.1
    Host: example.org
    User- Agent: Thingio/1.0
    Content- Type: image/png
    Content- Length: nnnn
    Title: An Atom-Powered Robot

    ...binary data...

The server MAY ignore the content of the Title: header or modify the
suggested title.

    Title = "Title" ":" [TEXT]

The syntax of this header MUST conform to the augmented BNF grammar in
section 2.1 of the HTTP/1.1 specification [RFC2616]. The [TEXT] rule is
described in section 2.2 of the same document. Words of *TEXT MAY
contain characters from character sets other than [ISO88591]
[ISO-8859-1] only when encoded according to the rules of [RFC2047]
[RFC2047].

8.3.2 Example

Below, the client sends a POST request containing a PNG image resouce to
the URI of the Collection:

    POST /myblog/entries HTTP/1.1
    Host: example.org
    User- Agent: Thingio/1.0
    Content- Type: image/png
    Content- Length: nnn
    Title: A picture of the beach

    {binary data}

The server signals a successful creation with a status code of 201. The
response includes a "Location" header indicating the URI of the Atom
Entry and a representation of that Entry in the body of the response.
The Entry includes one atom:link with a link relation of "enclosure",
and a second with a link relation "edit-resource", respectively
identifying the IRI's used for public read-only referencing of the media
resource and the IRI to be used for modifying the media resource.

    HTTP/1.1 201 Created
    Date: Fri, 7 Oct 2005 17:17:11 GMT
    Content- Length: nnn
    Content- Type: application/atom+xml; charset="utf-8"
    Location: http://example.org/edit/first-post.atom

    <?xml version="1.0"?>
    <entry xmlns="http://www.w3.org/2005/Atom";>
      <title>A picture of the beach</title>
      <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
      <updated>2003-12-13T18:30:02Z</updated>
      <author><name>John Doe</name></author>
      <content type="image/png"
               src="http://example.org/media/img123.png"/>
      <link rel="edit" href="http://example.org/edit/first-post.atom"; />
      <link rel="edit-resource"
            href="http://example.org/edit/img123.png"; />
    </entry>
}}}

Section 9: Change:
{{{
Each entry in the Feed Document MUST have an atom:link element with a
relation of "edit"
}}}

To

{{{
Each entry in the Feed Document SHOULD have an atom:link element with a
relation of "edit"
}}}

Add Section 10.2
{{{
10.2 The "edit-resource" Link Relation

The Atom Protocol adds the value "edit-resource" to the Atom Registry of
Link Relations (see section 7.1 of [RFC4287]). The value of the href
attribute is an IRI that may be used to modify a media resource
associated with an entry.
}}}

== Impacts ==

Actually makes things better

== Notes ==


----

CategoryProposals

Reply via email to