On 6 Jul 2006, at 02:37, Elias Torres wrote:
9. I'm not sure why we are forcing order by atom:updated. This gives
no room to server-side or client requested ordering.
+1
atom:updated is not enough for a client to synchronize with a server
without having to retrieve every "page" of the collection feed,
because atom:updated might not be changed while the entry has ben
modified.
In case the client can do a GET to the entry IRI just before editing
it, it's OK, but that's not the case during offline editing...
I definitely see your problem with it. I wasn't going as far as
talking
about synchronization, but you are right. Is synchronization part
of the
scope of the spec? I bet the WG/Gang/Crew is not too interested in
solving that problem.
I would say that synchronization is covered. If the updated time
stamp is not modified then that means that there is no "significant"
change. And so there is nothing to update.
1. Detour through AtomOwl
-------------------------
I'll make a slight detour through Atom Owl [1] for a more precise
demonstration.
(There are some new elements in this demonstration by the way. I have
never been able to make it this clear before, as we have only
recently resolved some problems that help make this case. )
In AtomOwl the above is expressed by:
[] cifp:productProperty ( :updated :id );
a owl:InverseFunctionalProperty .
That means that if we have the two entries written in N3 as
_:e1 a :Entry;
:title "My first Entry"^:text
:id <tag:eg.com,2006/e1>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime.
_:e2 a :Entry;
:title "My First Entry"^:text
:id <tag:eg.com,2006/e1>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime.
Then since the :id and :updated time stamp of both are the same we
conclude that
_:e1 owl:sameAs _:e2 .
and so after smushing the graph:
[] a :Entry;
:title "My first Entry"^:text ;
:title "My First Entry"^:text ;
:id <tag:eg.com,2006/e1>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime.
which is the same as
[] a :Entry;
:title [ :text "My first Entry" ];
:title [ :text "My First Entry" ];
:id <tag:eg.com,2006/e1>;
:updated "2003-12-13T18:30:02Z"^^xsd:dateTime.
Let us name the two anonymous title object above:
_:t1 :text "My first Entry" .
_:t2 :text "My First Entry" .
our entry can then be written:
[] a :Entry;
:title _:t1;
:title _:t2 .
now since :title is a owl:FunctionalProperty we have
_:t1 owl:sameAs _:t2 .
ie:
[] a :Entry;
:title [ :text "My first Entry";
:text "My First Entry" ] .
which is believe it or not, ok!
:text is an inverse functional property, and atom :Content objects
have very weakly
defined identity relations. (ie. it is not character for character
identity).
So if someone changes an old entry without changing :updated, there
is not need to synchronise anything since you are dealing with
exactly the same (vaguely defined) thing.
2. Limitations on Atom Content
------------------------------
This vaguely defined thing that is an atom content, does have some
restrictions and limitations that are in part defined by usage and
will clearly be by law.
The protocol clearly specifies one type of restriction: namely that
entries should be ordered by their :updated time stamp. So people who
make updates to entries without changing their :updated time stamp
will not get their entries synchronized (since they are declaring
them to not have changed!).
By law: I am ready to bet that if your bank puts up an atom feed with
information about your bank account information, then removes money
from your account but does not specify an :updated time stamp, and
furthermore does this in a recurring way that shows intent to
deceive, they will be held liable for lying to their clients. And
lawyers will be delighted to help some money flow in the other
direction.
I am sure there are other constraints. We cannot put everything into
words. With our ontology we can create a framework to help constrain
things lightly.
Henry Story
[1] http://bblfish.net/work/atom-owl/2006-06-06/
I have just updated it, after noticing some things that had not
been properly changed.