Questions about capabilities

View: Old framed views
3 Messages — Rating Filter:   Alert me  
Henrik /KaarPoSoft-2
Questions about capabilities
Reply More
Rate this Message:
Print
Show in thread view
Show in list view (by date)
Permalink
1)
In capabilities.xsd we have an element called Parameter with
maxOccurs="unbounded".
In opensync_capability.h/c we have osync_capability_set_parameter whichs
sets ONE parameter.
As far as I can see, it sould be possible to have several parameters (such
as both Location and Pref for an Address).
So: is this a bug in the capabilities API (i.e. opensync_capability.h/c)?

2)
A well-formed XML document must have exactly one root node.
According to capabilities.xsd the root node must be <Caps> which has an
attribute called CapsFormat.
If a plugin is offering capabilities in different CapsFormats (e.g.
because it supports both vformat and xmlformat), how would this be
specified?
Suggestion: Rename <ObjType> to <ObjTypeCaps> and move the CapsFormat
attribute from <Caps> to <ObjTypeCaps>.
(API change probably needed as well).

3)
capabilities.xsd defines that <Cap> can have a <DisplayName> child, and
that <Parameter> can have a <DisplayName> child.
When would we ever want to show an end-user the name of a capability or
parameter?

4)
capabilities.xsd defines that <Cap> can have a <MaxOccurs> child, but no
<MinOccurs> child.
Is this a mistake, or is it because the demerger would not be able to
handle it anyway (i.e. what should the merger do if the change does not
include the attribute for which MinOccurs > 0 ? )

5)
capabilities.xsd defines that <Cap> can have a <Type> child, and that
<Parameter> can have a <Type> child.
What is the purpose of this?
I would expect that the type is defined by the format-plugin.

6)
capabilities.xsd defines that <Cap> can have <Min> and <Max> children.
I would like an example of how this would be used.
I.e.: Are there any conceivable format elements which have an unrestricted
range, or say a range of A-B, but where a plugin/member would only be able
to handle part of this range?

7)
capabilities.xsd defines that <Cap> can have a <MaxOccurs> child.
Do we really expect demergers to handle this?

8)
The current logic in _osync_obj_engine_mapping_find is:
Clone (i.e. make a complete copy of) change1. Demerge fields from the
clone which are not in caps2.
Clone (i.e. make a complete copy of) change2. Demerge fields from the
clone which are not in caps1.
Compare the two cloned objects.
To me this seems unnecessarily complicated and incurs a performance penalty.
Why is this not implemented as a more "intelligent" compare function,
which takes capabilities into account?

/Henrik


------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Opensync-devel mailing list
Opensync-devel@...
https://lists.sourceforge.net/lists/listinfo/opensync-devel
Daniel Gollub-3
Re: Questions about capabilities
Reply More
Rate this Message:
Print
Show in thread view
Show in list view (by date)
Permalink
On Friday 23 October 2009 11:32:46 am henrik@... wrote:
> 1)
> In capabilities.xsd we have an element called Parameter with
> maxOccurs="unbounded".
> In opensync_capability.h/c we have osync_capability_set_parameter whichs
> sets ONE parameter.
> As far as I can see, it sould be possible to have several parameters (such
> as both Location and Pref for an Address).
> So: is this a bug in the capabilities API (i.e. opensync_capability.h/c)?

Yes, that's a bug - we need to break the API for this ...


>
> 2)
> A well-formed XML document must have exactlny one root node.
> According to capabilities.xsd the root node must be <Caps> which has an
> attribute called CapsFormat.
> If a plugin is offering capabilities in different CapsFormats (e.g.
> because it supports both vformat and xmlformat), how would this be
> specified?
> Suggestion: Rename <ObjType> to <ObjTypeCaps> and move the CapsFormat
> attribute from <Caps> to <ObjTypeCaps>.
> (API change probably needed as well).

This requires some more discussion i guess. Actually the capsformat is
independent of the objformat .... i still need to describe how the capsformat
thing works. I will go in more details in a separated mail about capsformat
...

>
> 3)
> capabilities.xsd defines that <Cap> can have a <DisplayName> child, and
> that <Parameter> can have a <DisplayName> child.
> When would we ever want to show an end-user the name of a capability or
> parameter?

Maybe thats useful to let user now which fields will be not synced and due to
missing capabilities support - and will not get lost.

The idea of DisplayName comes from SyncML - SyncML spec has this defined. So
some phones are providing this information .. so if this is available we might
want to use this information on the first Sync or so to inform the users which
fields will not appear on member X..


>
> 4)
> capabilities.xsd defines that <Cap> can have a <MaxOccurs> child, but no
> <MinOccurs> child.
> Is this a mistake, or is it because the demerger would not be able to
> handle it anyway (i.e. what should the merger do if the change does not
> include the attribute for which MinOccurs > 0 ? )

We still can add this .. but first there needs to be a real use case in the
"wild" ... This capabilities schema is based on the capabilities description
from SyncML specs. AFAIK they haven't minoccurs either ...


Maybe if minoccurs can not be met - maybe the demerger should demerge the
entire cap?

>
> 5)
> capabilities.xsd defines that <Cap> can have a <Type> child, and that
> <Parameter> can have a <Type> child.
> What is the purpose of this?

This is also from SyncML Spec. maybe one day this could be handy for some
merger and demerge. The Type is something like chr, string or something like
that ...

e.g. in SyncML say set for capability N (in case of a vcard, Name) Type to
"chr" ... which is character ... and some devices also set max and min ...

> I would expect that the type is defined by the format-plugin.

Hmm, why? e.g. the vformat is very generic and can handle for example the
entire vcard spec ... now imagine that some devices has limited support for
the field TEL - e.g. only integers - no characters. But yeah that's just an
example i made up ... need to check for a better example which exist in the
real world.

>
> 6)
> capabilities.xsd defines that <Cap> can have <Min> and <Max> children.
> I would like an example of how this would be used.

Max number of characters for example ...

For capability Name, only characters - but max are 32 characters.

Again, this is from the SyncML capabilities definition (not quite sure if this
included also min or if i made this just up  ...)

> I.e.: Are there any conceivable format elements which have an unrestricted
> range, or say a range of A-B, but where a plugin/member would only be able
> to handle part of this range?

Telephone numbers.

Most devices only supported 0123456789 +#*pcw and so ... maybe some more ( )
whitespace ... and some allow dashes - some not.


>
> 7)
> capabilities.xsd defines that <Cap> can have a <MaxOccurs> child.
> Do we really expect demergers to handle this?

I guess i added this also because it was part of the SyncML capabilities
definition. Real life Example:

Only one Name field
MaxOccurs of Telephone fields 3

And yeah, we might want to handle this in demerge in the future. Imagine you
have a contact with 5 telephone numbers, but your mobile supports only up to 3
numbers. The mobile might would reject the entire contact if OpenSync would
try to send a contact with 5 numbers ... or even worse, it would tolerate this
and loose two telephone Numbers if this entry get synced back, due a change.

So with the maxoccurs information we could merge back the 2 not-sync numbers
...

But we still need to solve the question which numbers should get synced ...
you could just sync the first 3 numbers in a contact. And prefer the numbers
which have the type preferred ...

>
> 8)
> The current logic in _osync_obj_engine_mapping_find is:
> Clone (i.e. make a complete copy of) change1. Demerge fields from the
> clone which are not in caps2.
> Clone (i.e. make a complete copy of) change2. Demerge fields from the
> clone which are not in caps1.
> Compare the two cloned objects.
> To me this seems unnecessarily complicated and incurs a performance
>  penalty. Why is this not implemented as a more "intelligent" compare
>  function, which takes capabilities into account?
[...]

This is pretty new code and more or less just a proof of concept. If you came
up with a more efficient solution, let me know. This was the last thing i was
working on ... it's not completed.


Btw. do you want to specialize for the merger/demerger capabilities handling
in OpenSync? You already got a pretty good understanding how things tick ...
even if they don't tick as expected ;)

Best Regards,
Daniel

--
Daniel Gollub                        Geschaeftsfuehrer: Ralph Dehner
FOSS Developer                       Unternehmenssitz:  Vohburg
B1 Systems GmbH                      Amtsgericht:       Ingolstadt
Mobil: +49-(0)-160 47 73 970         Handelsregister:   HRB 3537
EMail: gollub@...          http://www.b1-systems.de

Adresse: B1 Systems GmbH, Osterfeldstraße 7, 85088 Vohburg
http://pgpkeys.pca.dfn.de/pks/lookup?op=get&search=0xED14B95C2F8CA78D


------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Opensync-devel mailing list
Opensync-devel@...
https://lists.sourceforge.net/lists/listinfo/opensync-devel

signature.asc (204 bytes) Download Attachment
Henrik /KaarPoSoft-2
Re: Questions about capabilities
Reply More
Rate this Message:
Print
Show in thread view
Show in list view (by date)
Permalink
Daniel Gollub wrote:

> On Friday 23 October 2009 11:32:46 am henrik@... wrote:
>  
>> 1)
>> In capabilities.xsd we have an element called Parameter with
>> maxOccurs="unbounded".
>> In opensync_capability.h/c we have osync_capability_set_parameter whichs
>> sets ONE parameter.
>> As far as I can see, it sould be possible to have several parameters (such
>> as both Location and Pref for an Address).
>> So: is this a bug in the capabilities API (i.e. opensync_capability.h/c)?
>>    
>
> Yes, that's a bug - we need to break the API for this ...
>  
ACK. Maybe one day I will provide a patch...

>
>  
>> 2)
>> A well-formed XML document must have exactlny one root node.
>> According to capabilities.xsd the root node must be <Caps> which has an
>> attribute called CapsFormat.
>> If a plugin is offering capabilities in different CapsFormats (e.g.
>> because it supports both vformat and xmlformat), how would this be
>> specified?
>> Suggestion: Rename <ObjType> to <ObjTypeCaps> and move the CapsFormat
>> attribute from <Caps> to <ObjTypeCaps>.
>> (API change probably needed as well).
>>    
> This requires some more discussion i guess. Actually the capsformat is
> independent of the objformat .... i still need to describe how the capsformat
> thing works. I will go in more details in a separated mail about capsformat
> ...
>  
Looking forward to that!

>> 3)
>> capabilities.xsd defines that <Cap> can have a <DisplayName> child, and
>> that <Parameter> can have a <DisplayName> child.
>> When would we ever want to show an end-user the name of a capability or
>> parameter?
>>    
>
> Maybe thats useful to let user now which fields will be not synced and due to
> missing capabilities support - and will not get lost.
>
> The idea of DisplayName comes from SyncML - SyncML spec has this defined. So
> some phones are providing this information .. so if this is available we might
> want to use this information on the first Sync or so to inform the users which
> fields will not appear on member X..
>  
Right, but I do not think this DisplayName should come from the caps, it
should come from the format...

>> 4)
>> capabilities.xsd defines that <Cap> can have a <MaxOccurs> child, but no
>> <MinOccurs> child.
>> Is this a mistake, or is it because the demerger would not be able to
>> handle it anyway (i.e. what should the merger do if the change does not
>> include the attribute for which MinOccurs > 0 ? )
>>    
>
> We still can add this .. but first there needs to be a real use case in the
> "wild" ... This capabilities schema is based on the capabilities description
> from SyncML specs. AFAIK they haven't minoccurs either ...
>  
I could not find MaxOccurs (or MinOccurs) in SyncML.
> Maybe if minoccurs can not be met - maybe the demerger should demerge the
> entire cap?
>  
Possibly....

>> 5)
>> capabilities.xsd defines that <Cap> can have a <Type> child, and that
>> <Parameter> can have a <Type> child.
>> What is the purpose of this?
>>    
>
> This is also from SyncML Spec. maybe one day this could be handy for some
> merger and demerge. The Type is something like chr, string or something like
> that ...
>
> e.g. in SyncML say set for capability N (in case of a vcard, Name) Type to
> "chr" ... which is character ... and some devices also set max and min ...
>
>  
>> I would expect that the type is defined by the format-plugin.
>>    
>
> Hmm, why? e.g. the vformat is very generic and can handle for example the
> entire vcard spec ... now imagine that some devices has limited support for
> the field TEL - e.g. only integers - no characters. But yeah that's just an
> example i made up ... need to check for a better example which exist in the
> real world.
>
>  
I still think the datatype should be defined by the format.
How can you have a format that says it wants parameter x as an integer,
and a capability that says it can only handle x as a string?
If you want digits, no characters, and similar stuff, a regex would be
better, I think.

>> 6)
>> capabilities.xsd defines that <Cap> can have <Min> and <Max> children.
>> I would like an example of how this would be used.
>>    
>
> Max number of characters for example ...
>
> For capability Name, only characters - but max are 32 characters.
>
> Again, this is from the SyncML capabilities definition (not quite sure if this
> included also min or if i made this just up  ...)
>  
ACK
As far as I recall, SyncML just has "Size", ie. our "Max".

>> I.e.: Are there any conceivable format elements which have an unrestricted
>> range, or say a range of A-B, but where a plugin/member would only be able
>> to handle part of this range?
>>    
>
> Telephone numbers.
>
> Most devices only supported 0123456789 +#*pcw and so ... maybe some more ( )
> whitespace ... and some allow dashes - some not.
>
>  
This has nothing to do with min-max. This looks like a regex to me...

>> 7)
>> capabilities.xsd defines that <Cap> can have a <MaxOccurs> child.
>> Do we really expect demergers to handle this?
>>    
>
> I guess i added this also because it was part of the SyncML capabilities
> definition. Real life Example:
>
> Only one Name field
> MaxOccurs of Telephone fields 3
>
> And yeah, we might want to handle this in demerge in the future. Imagine you
> have a contact with 5 telephone numbers, but your mobile supports only up to 3
> numbers. The mobile might would reject the entire contact if OpenSync would
> try to send a contact with 5 numbers ... or even worse, it would tolerate this
> and loose two telephone Numbers if this entry get synced back, due a change.
>
> So with the maxoccurs information we could merge back the 2 not-sync numbers
> ...
>
> But we still need to solve the question which numbers should get synced ...
> you could just sync the first 3 numbers in a contact. And prefer the numbers
> which have the type preferred ...
>
>  
ACK

>> 8)
>> The current logic in _osync_obj_engine_mapping_find is:
>> Clone (i.e. make a complete copy of) change1. Demerge fields from the
>> clone which are not in caps2.
>> Clone (i.e. make a complete copy of) change2. Demerge fields from the
>> clone which are not in caps1.
>> Compare the two cloned objects.
>> To me this seems unnecessarily complicated and incurs a performance
>>  penalty. Why is this not implemented as a more "intelligent" compare
>>  function, which takes capabilities into account?
>>    
> [...]
>
> This is pretty new code and more or less just a proof of concept. If you came
> up with a more efficient solution, let me know. This was the last thing i was
> working on ... it's not completed.
>  
OK, let's continue this on a separate thread...
>
> Btw. do you want to specialize for the merger/demerger capabilities handling
> in OpenSync? You already got a pretty good understanding how things tick ...
> even if they don't tick as expected ;)
>  
I will try to contribute whenever and whereever I can - preferably
without specialization!

/Henrik


------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Opensync-devel mailing list
Opensync-devel@...
https://lists.sourceforge.net/lists/listinfo/opensync-devel