Sorry again to take so long to respond. I have been a little too
busy to respond recently.
On 4 Dec 2005, at 16:42, Simon Phipps wrote:
On Dec 4, 2005, at 14:33, Henry Story wrote:
I have written my first blog entry in French [1] which has made
me aware that
it would be very useful to add language information to the atom
file generated by
BlogEd. A menu beneath the Entry icon would probably do the trick.
Henry
[1] http://bblfish.net/blog/page9.html#t2005_12_04.14_17_02_642
Does Atom allow there to be multiple parallel renditions of a
blog entry in different languages? I've been discussing with Dave
Johnson how we might provide a facility in Roller where a blog
entry might be provided in multiple languages and then select the
appropriate entry based on the contents of the HTTP GET. If this
were to be implemented, we'd need a way to express the same
reality in the Atom feed.
This is a complicated and delicate issue. An atom entry has been
syntactically limited by the atom spec by the following clause
[[
If multiple atom:entry elements with the same atom:id value
appear in
an Atom Feed Document, they represent the same entry. Their
atom:updated timestamps SHOULD be different. If an Atom Feed
Document contains multiple entries with the same atom:id, Atom
Processors MAY choose to display all of them or some subset of
them.
One typical behavior would be to display only the entry with the
latest atom:updated timestamp.
]] last para of section 4.1.1 of http://www.ietf.org/rfc/rfc4287
So it is not really possible to put atom entries with the same id
and updated time stamp in a feed (without a SHOULD level
violation) even if they are translation of each other. That means
that the Swiss would not be able to publish a law with the same
atom id in french and in german, as they are obliged to publish
these at the exact same time by law. (No linguistic preference)
If we want to respect this we have to give different translations
of a document different ids. We should be able to specify that
they are translations of each other some other way. Using the Atom
OWL ontology [1] we could do this by adding some translation
relation between the entries. Once this the best way to do this is
settled and that it satisfies our needs it should be possible to
put a proposal to the atom syntax group for an extension to their
xml format.
So perhaps something like this is needed
[ a :Feed, :Version;
:title [ :value "Example Feed";
:type "text/plain" ];
:link [ :href <http://example.org/>;
:rel iana:alternate ];
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:author [ :name "John Doe" ];
:id <urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6>;
:entry [ a :Entry;
:title [ :value "Atom-Powered Robots Run Amok";
:type "text/plain" ];
:link [ :href <http://example.org/2003/12/13/en/
atom03>;
:rel iana:alternate ];
:id <tag:example.com,2005/en/atom03>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:summary [ :value "After a course of integration in
French philosophy,...";
:type "text/plain" ];
ext:translation <tag:example.com,2005/fr/atom03>
];
:entry [ a :Entry;
:title [ :value "Des Robot Atomiques se rebellent";
:type "text/plain" ];
:link [ :href <http://example.org/2003/12/13/fr/
atom03>;
:rel iana:alternate ];
:id <tag:example.com,2005/fr/atom03>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:summary [ :value "Apres un cours d'integration en
philosophie francaise...";
:type "text/plain" ]
ext:translation <tag:example.com,2005/en/atom03>
];
] .
The ext:translation relation above relates a :Entry to an :EntryId
which is to say that it cannot distinguish between one version of
an entry and another. So we would either be saying that each
version of one entry is always going to be a translation of the
other, or that there is some version of the other entry that is a
translation of this one (which is a little too vague for comfort).
We could be more precise by giving each entry version its unique
id, in which case we could say that this particular entry is a
translation of that particular entry, which would be more precise
and satisfactory. In N3:
[ a :Feed, :Version;
:title [ :value "Example Feed";
:type "text/plain" ];
:link [ :href <http://example.org/>;
:rel iana:alternate ];
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:author [ :name "John Doe" ];
:id <urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6>;
:entry [ a :Entry;
= _:someid1;
:title [ :value "Atom-Powered Robots Run Amok";
:type "text/plain" ];
:link [ :href <http://example.org/2003/12/13/en/
atom03>;
:rel iana:alternate ];
:id <tag:example.com,2005/en/atom03>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:summary [ :value "After a course of integration in
French philosophy,...";
:type "text/plain" ];
ext:translation _:someid2;
];
:entry [ a :Entry;
= _:someid2;
:title [ :value "Des Robot Atomiques se rebellent";
:type "text/plain" ];
:link [ :href <http://example.org/2003/12/13/fr/
atom03>;
:rel iana:alternate ];
:id <tag:example.com,2005/fr/atom03>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime;
:summary [ :value "Apres un cours d'integration en
philosophie francaise...";
:type "text/plain" ]
ext:translation _:someid1;
];
] .
So in RDF we have no trouble doing the right thing and we have
choice.
It should therefore be possible to express something like the
above in atom syntax. How to do it is of course less clear given
the lack of clear semantics for the atom xml.
Henry Story
[1] http://groups.google.com/group/atom-owl/browse_frm/thread/
a5ff6dcca7b512b8
S.