Sharing and attributes (Was: Re: [Dev] isPrivate: never-share flag)

John Anderson john at osafoundation.org
Tue Nov 16 09:16:16 PST 2004


Lisa Dusseault wrote:

> I don't think we can always afford to "upgrade the item to the new 
> schema".  We can do that with the local repository copy, but not with 
> the shared copies on the server -- that would cut out from sharing any 
> client that hadn't yet upgraded code.  So there needs to be constant 
> transformation between the local schema and the shared schema (aka the 
> "old schema", aka the "interoperability schema"), every time a synch 
> happens to a server.  (Even in a P2P system architecture, there would 
> need to be constant transformation between the local schema and the 
> peer's schema.  Typically this responsibility would fall to the client 
> with the newer code and awareness of both schemas.)
>
I agree that having a server keep multiple copies of data to match 
different versions of schema makes sense.

> I'm not sure we understand each other around "making sure that version 
> of the schema is available".  In my understanding, we could easily 
> make the new version of the schema available to older clients but it 
> would be no help.  The schema doesn't tell you what each attribute 
> means.  Older clients only know the meaning of older versions of the 
> schema (or perhaps older clients can be aware of an interoperability 
> base schema which almost never changes, but only gets extended).
>
All I was saying is that the data and matching schema needs be both be 
available to whoever is using the data, since Chandler needs the schema 
to use the data.

> Forcing old clients to obtain new schema with enough information to 
> display the new schema items would theoretically be possible if 
> everything were data driven.  However, this would now be tantamount to 
> forcing them to upgrade as soon as one other person they share with 
> upgraded.  New features would spread like a virus.  For that matter, 
> it could be a virus.  Maybe I'm describing a straw man here, rather 
> than anybody's real position, but if so it's a failure of 
> understanding so please fill me in...
>
> Lisa
>
> On Nov 15, 2004, at 2:53 PM, John Anderson wrote:
>
>> I think Lisa's describing the schema evolution problem, which has a 
>> number of subtle of pitfalls.
>>
>> If we have an item that depends on a certain version of the schema, 
>> then we probably have to make sure that version of the schema is 
>> available, i.e. it should also be shared. If I have a newer version 
>> of the schema on a machine and get a shared content item from an 
>> older version of the schema then we'd probably have to update the 
>> item to match the new schema, otherwise the Chandler code will break 
>> because it depends on the schema being a correct description of the 
>> data. Unfortunately, that leads to two items with potentially 
>> different attributes on the two machines. Hopefully most of the item 
>> transformations necessary to adapt to schema changes can be 
>> automated, but sometimes it will be necessary to run a hand written 
>> piece of code to upgrade the item to the new schema. Also, the schema 
>> can accomodate two different items with different optional 
>> attributes, so a well designed schema can leave room for new 
>> functionality.
>>
>> John
>>
>> Lisa Dusseault wrote:
>>
>>> Note also that to make different Chandler release versions 
>>> interoperate with each other over the same shares, we'll have the 
>>> same issues.  How will the schema on the WebDAV server be different 
>>> from Chandler 1.0's internal schema? (Probably not much, except for 
>>> CalDAV). How will the schema on the WebDAV server be different from 
>>> Chandler 2.0's internal schema?  Probably more so.
>>>
>>> One wild idea I had (and discussed a bit with Stuart) was to define 
>>> transformations between formats.  If there was some standard way to 
>>> spit out an item's attributes to an XML document in memory, then is 
>>> there a straightforward transformation to turn that into a 
>>> PROPPATCH?  Vice versa, how about taking a PROPFIND answer (or 
>>> fragment for one item) and turn it into a set of attribute values?  
>>> These transformations could be written as XSLT (or something else) 
>>> and could be stored as data.  So then the way to share a given Item 
>>> is to take the appropriate transformation based on that item's 
>>> schema version, and apply it.
>>>
>>> It's probably not really feasible for the sharing code to just 
>>> ignore the attributes, no matter how we did sharing.  If I create a 
>>> "knitting project" custom item for my "knitting management" parcel, 
>>> then any schema changes risk breaking sharing of that data.  So the 
>>> parcel developer has to keep in mind the sharing schema and at times 
>>> make an adjustment.  In the first version my "gauge" attribute might 
>>> be an integer (in stitches per inch.) In my next version I decide I 
>>> need two attributes, one for  "stitch-gauge" and one for 
>>> "row-gauge".  So as a developer of a parcel, I just have to write 
>>> the code to take the new schema and make it spit out the old "gauge" 
>>> attribute for backward compatibility with earlier versions of my own 
>>> parcel -- likewise the new version of my parcel must understand when 
>>> it sees a "gauge" attribute on a shared knitting project Item.  This 
>>> logic is completely independent of protocol or whether the sharing 
>>> data model is different from the internal data model.
>>>
>>> Of course, one choice the parcel developer can make is to say that 
>>> backward-compatibility in the face of schema changes is not needed.  
>>> That's the only way I can see for parcel developers to be able to 
>>> make schema changes and not write code.
>>>
>>> Actually, I'm not too worried about the property/attribute 
>>> connections.  What I'm more worried about is when the item 
>>> boundaries change.  What if I decided Gauge was a complex reusable 
>>> item and needed to be broken out as a completely separate item?  So 
>>> that in one version of my parcel, each knitting-project item has an 
>>> integer gauge attribute, and in the next version it has a reference 
>>> to a Gauge item?
>>>
>>> Lisa
>>>
>>> On Nov 15, 2004, at 2:01 PM, Morgen Sagen wrote:
>>>
>>>> On the other hand, sharing items with non-Chandler clients is a 
>>>> high priority, and do we think that the schema these non-Chandler 
>>>> clients use will exactly mirror the Chandler content model?  For 
>>>> example, Chandler might internally model a calendar event 
>>>> differently from CalDAV, and therefore the sharing layer would not 
>>>> "blindly" be transferring event items to and from the server; 
>>>> rather, this layer would need to perform transformations on the 
>>>> items, converting between Chandler-schema and non-Chandler-schema.  
>>>> So the question becomes, what should the schema on the WebDAV 
>>>> server look like, and how does it differ from Chandler's schema?
>>>>
>>>> On Nov 15, 2004, at 1:24 PM, Mike wrote:
>>>>
>>>>> +1
>>>>>
>>>>> John Anderson wrote:
>>>>>
>>>>>> I've been hoping that maybe we could handle the name issue in the 
>>>>>> view, so that it would be possible for the sharing transport 
>>>>>> layer not to know anything about the data that's being shared -- 
>>>>>> keeping all attributes and the UUID of the items the same on all 
>>>>>> the machines that have a copy of the item.
>>>>>
>>>>>
>>>>>
>>>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>>>
>>>>> Open Source Applications Foundation "Dev" mailing list
>>>>> http://lists.osafoundation.org/mailman/listinfo/dev
>>>>
>>>>
>>>>
>>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>>
>>>> Open Source Applications Foundation "Dev" mailing list
>>>> http://lists.osafoundation.org/mailman/listinfo/dev
>>>
>>>
>>>
>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>
>>> Open Source Applications Foundation "Dev" mailing list
>>> http://lists.osafoundation.org/mailman/listinfo/dev
>>
>>
>


More information about the Dev mailing list