If one is willing to interpret a relational database through the eyes of an application (family, really), Atom does indeed help. In more general sense a simple two level hierarchy (container, element (container, element()) can go quite far when using hyperlinks. However, if interpreting a relational schema without any knowledge of applications that use this schema, Atom won't be of much help, and you might be better off with something else like Web3S or RDF.

Note to myself: Atom pub still doesn't provide a comprehensive mechanism for synchronizing changes to these feeds across autonomous agents, but that's for another day.

Let me show an example where data is richly interconnected, and at present, lives in relational databases. Then I will show how this data as Atom feeds (both atompub and regular atom). Drivers carry insurance (except those who like paying for tickets), and insurance covers vehicles. So this three node graph can be represented as three separate collections one for each node, and three compound feeds one for each edge in the graph. I am only showing one of the compound feeds but others would be similar.

Might I add that the additional bytes being generated for Atom feeds could be offset by the diminished traffic to a server because the data required is already sitting in an intermediary or the client, and may be synchronized efficiently. Whether you would be willing to work with potentially "stale" application data is still another discussion to have.

<atom:feed xmlns:atom="http://www.w3.org/2005/Atom";>
   <atom:title>Vehicles insured by example.com</atom:title>
   <atom:id>tag:example.com,vehicles</atom:id>
   <atom:link rel="self" href="http://example.com/vehicles/"/>
   <atom:updated>2007-06-04T19:42:22Z</atom:updated>
   <atom:author>
       <atom:name/>
       <atom:uri>http://example.com</atom:uri>
   </atom:author>

   <atom:entry>
      <atom:title>Honda Civic</atom:title>
      <atom:id>tag:example.com:vehicle=1</atom:id>
      <atom:link rel="edit" href="http://example.com/vehicle/1"/>
<auto:vin xmlns:auto="http://example.com/xmlns/auto";>2FMZU62E02ZB78590</auto:vin>
      <atom:content/>
      <atom:updated>2007-06-04T19:44:22Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T19:44:22Z</app:edited>
   </atom:entry>

   <atom:entry>
      <atom:title>Chrysler Jeep</atom:title>
      <atom:id>tag:example.com:vehicle=2</atom:id>
      <atom:link rel="edit" href="http://example.com/vehicle/2"/>
<auto:vin xmlns:auto="http://example.com/xmlns/auto";>2FMZU62E02ZB23290</auto:vin>
      <atom:content/>
      <atom:updated>2007-06-04T19:42:53Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T19:42:53Z</app:edited>
   </atom:entry>

   <atom:entry>
      <atom:title>Volkswagon Beetle</atom:title>
      <atom:id>tag:example.com:vehicle=3</atom:id>
      <atom:link rel="edit" href="http://example.com/vehicle/3"/>
<auto:vin xmlns:auto="http://example.com/xmlns/auto";>12LSDSU62E02ZB23290</auto:vin>
      <atom:content/>
      <atom:updated>2007-06-04T19:40:23Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T19:42:53Z</app:edited>
   </atom:entry>
</atom:feed>

<atom:feed xmlns:atom="http://www.w3.org/2005/Atom";>
   <atom:title>Drivers insured by example.com</atom:title>
   <atom:id>tag:example.com,drivers</atom:id>
   <atom:link rel="self" href="http://example.com/drivers/"/>
   <atom:updated>2007-06-04T20:21:22Z</atom:updated>
   <atom:author>
       <atom:name/>
       <atom:uri>http://example.com</atom:uri>
   </atom:author>

   <atom:entry>
      <atom:title>Mr. John Doe</atom:title>
      <atom:id>tag:example.com:driver=1</atom:id>
      <atom:link rel="edit" href="http://example.com/driver/1"/>
<auto:license xmlns:auto="http://example.com/xmlns/auto"; number="32139213" issuer="CA" country="USA"/>
      <atom:content/>
      <atom:updated>2007-06-04T09:44:22Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T09:44:22Z</app:edited>
   </atom:entry>

   <atom:entry>
      <atom:title>Ms. Jane Ko</atom:title>
      <atom:id>tag:example.com:driver=2</atom:id>
      <atom:link rel="edit" href="http://example.com/driver/2"/>
<auto:license xmlns:auto="http://example.com/xmlns/auto"; number="32139213" issuer="ON" country="Canada"/>
      <atom:content/>
      <atom:updated>2007-06-04T09:42:53Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T09:42:53Z</app:edited>
   </atom:entry>

   <atom:entry>
      <atom:title>Mr. Ajay Kumar</atom:title>
      <atom:id>tag:example.com:driver=3</atom:id>
      <atom:link rel="edit" href="http://example.com/driver/3"/>
<auto:license xmlns:auto="http://example.com/xmlns/auto"; number="1238122" issuer="MH" country="India"/>
      <atom:content/>
      <atom:updated>2007-06-04T09:40:23Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-04T09:42:53Z</app:edited>
   </atom:entry>
</atom:feed>

<atom:feed xmlns:atom="http://www.w3.org/2005/Atom";>
   <atom:title>Insurance policies issued by example.com</atom:title>
   <atom:id>tag:example.com,policies</atom:id>
   <atom:link rel="self" href="http://example.com/policies/"/>
   <atom:updated>2007-06-05T20:21:22Z</atom:updated>
   <atom:author>
       <atom:name/>
       <atom:uri>http://example.com</atom:uri>
   </atom:author>

   <atom:entry>
      <atom:title/>
      <atom:id>tag:example.com:policy=1</atom:id>
      <atom:link rel="edit**" href="http://example.com/policy/1"/>
      <atom:link rel="related" href="http://example.com/driver/1"/>
      <atom:link rel="related" href="http://example.com/driver/2"/>
      <atom:link rel="related" href="http://example.com/vehicle/1"/>
      <atom:link rel="related" href="http://example.com/vehicle/2"/>
      <auto:liability xmlns:auto="http://example.com/xmlns/auto";>
         <auto:property currency="USD">50000</auto:property>
         <auto:injury currency="USD">25000</auto:injury>
         <auto:medical currency="USD">5000</auto:medical>
      </auto:liability>
      <atom:content/>
      <atom:updated>2007-06-05T09:44:22Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-05T09:44:22Z</app:edited>
   </atom:entry>

   <atom:entry>
      <atom:title/>
      <atom:id>tag:example.com:policy=2</atom:id>
      <atom:link rel="edit" href="http://example.com/ploicy/2"/>
      <atom:link rel="related" href="http://example.com/driver/3"/>
      <atom:link rel="related" href="http://example.com/vehicle/3"/>
      <auto:liability xmlns:auto="http://example.com/xmlns/auto";>
         <auto:property currency="USD">100000</auto:property>
         <auto:injury currency="USD">50000</auto:injury>
         <auto:medical currency="USD">10000</auto:medical>
      </auto:liability>
      <atom:content/>
      <atom:updated>2007-06-05T09:42:53Z</atom:updated>
<app:edited xmlns:atompub="http://www.w3.org/2007/app";>2007-06-05T09:42:53Z</app:edited>
   </atom:entry>
</atom:feed>

<atom:feed xmlns:atom="http://www.w3.org/2005/Atom";>
   <atom:title>Drivers by insurance policies</atom:title>
   <atom:id>tag:example.com,driversnpolicies</atom:id>
   <atom:link rel="self" href="http://example.com/driversnpolicies/"/>
   <atom:updated>2007-06-05T20:21:22Z</atom:updated>
   <atom:author>
       <atom:name/>
       <atom:uri>http://example.com</atom:uri>
   </atom:author>
<atom:entry>
      <atom:title/>
      <atom:id>tag:example.com:drivers,policy=1</atom:id>
      <atom:link rel="related" href="http://example.com/policy/1"/>
      <atom:content type="application/atom+xml">
         <atom:feed>
           <atom:title/>
           <atom:id>tag:example.com,drivers,policy=1</atom:id>
           <atom:updated>2007-06-04T20:21:22Z</atom:updated>
           <atom:author>
               <atom:name/>
           </atom:author>

           <atom:entry>
              <atom:title>Mr. John Doe</atom:title>
              <atom:id>tag:example.com:driver=1</atom:id>
              <atom:link rel="edit" href="http://example.com/driver/1"/>
              <atom:content/>
              <atom:updated>2007-06-04T09:44:22Z</atom:updated>
           </atom:entry>

           <atom:entry>
              <atom:title>Ms. Jane Ko</atom:title>
              <atom:id>tag:example.com:driver=2</atom:id>
              <atom:link rel="edit" href="http://example.com/driver/2"/>
              <atom:content/>
              <atom:updated>2007-06-04T09:42:53Z</atom:updated>
           </atom:entry>

         </atom:feed>
      </atom:content>
      <atom:updated>2007-06-05T09:42:53Z</atom:updated>
   </atom:entry>
   <atom:entry>
      <atom:title/>
      <atom:id>tag:example.com:drivers,policy=2</atom:id>
      <atom:link rel="related" href="http://example.com/policy/2"/>
      <atom:content type="application/atom+xml">
         <atom:feed>
           <atom:title/>
           <atom:id>tag:example.com,drivers,policy=2</atom:id>
           <atom:updated>2007-06-04T20:21:22Z</atom:updated>
           <atom:author>
               <atom:name/>
           </atom:author>
           <atom:entry>
              <atom:title>Mr. Ajay Kumar</atom:title>
              <atom:id>tag:example.com:driver=3</atom:id>
              <atom:link rel="edit" href="http://example.com/driver/3"/>
              <atom:content/>
              <atom:updated>2007-06-04T09:40:23Z</atom:updated>
           </atom:entry>
         </atom:feed>
      </atom:content>
      <atom:updated>2007-06-05T09:42:53Z</atom:updated>
   </atom:entry>
</atom:feed>

Yaron Goland wrote:
We wanted to focus on actual services that real folks could hit against so we 
focused our explanations and such on LiveContacts which we released support for 
(using an ancient version of Web3S) last May. But our overall use cases stretch 
across all the deeply structured stores at Live. I can't quite get into the 
details yet, which is why I just focused on LiveContacts which I can discuss. 
But Astoria makes the situation even easier to understand. In Astoria's case 
they are exposing relational databases which for our purposes can be thought of 
as deeply structured data.

A particular question I would really love to hear a concrete answer to though 
is - what are the characteristics that make a data set look like a 
'publication'? In other words, what is a loose check list of things to look for 
that let you know if the information you want to expose is a good candidate for 
ATOM?

        Thanks,

                Yaron

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Wednesday, June 20, 2007 8:42 PM
To: Yaron Goland
Cc: [EMAIL PROTECTED]
Subject: Re: Is it just us?


On Jun 20, 2007, at 4:21 PM, Yaron Goland wrote:

I will be following up this e-mail with e-mails addressing specific
problems we ran into when we tried to use APP in the context of
Windows Live (and later SQL Server (Codename "Astoria" project)) to
make our structured data available for machine processing.
For what it's worth, based on the description of the problem in
http://dev.live.com/livedata/web3s.htm (from the introduction: "The
purpose of this document is to define a protocol that is a good fit
for Live Contacts. Live Contacts is the central data store in Windows
Live for address book information. All Hotmail contacts, Messenger
buddies and Spaces' friends are recorded in Live Contacts. There are
currently approximately 500,000,000 active address books in Live
Contacts"), it seems you have a unitary and unique dataset you're
trying to update and it doesn't seem to behave much like a
"publication" in several important senses, so it seems unsurprising
that APP would be a poor fit for updating it.  -Tim



Reply via email to