ContactFormatsComparison
This page provides a summary of the differences between the following Contacts Formats:
- Portable Contacts - Version 1.0 Draft C
- vCard - version 3.0 + hCard 1.0 (both formats noted due to the explicit 1:1 mapping declaration made between these two specifications.
- vCard - version 4.0
A contacts formats comparison table has also been created by Chris Messina (see the related blog post) that provides a useful mapping between multiple Contacts Formats. A world-writable copy of the table is also available.
This page will provide a comprehensive analysis of the interoperability between vCard v3.0/4.0 and Portable Contacts and suggest ways in which the gap between both formats could be addressed.
This document is an early work-in-progress (3rd Sep 2010)
Portable Contacts -> vCard
The following table shows the mapping of Portable Contacts to other Contact Formats.
Where a mapping does not exist an extension proposal is made in red.
The proposals marked in red indicate that a current well-defined specification does not yet exist. Instead this table serves to show that the general vCard extension mechanism could be used to create well-defined interpretations of Portable Contacts (and by proxy OpenSocial) properties within vCard files. This proposal also aims to enable lossless conversion from the Portable Contacts format to vCard v3.0 and vCard v4.0 formats (and vice versa - todo). The attributes proposed in red could, for example, result in the production of a new IETF draft entitled vCard Extensions for Portable Contacts (TBD...and this does not represent any kind of consensus at this stage).
Portable Contacts v1.0 draft C * | vCard v3.0 / hCard v1.0 | vCard v4.0 |
---|---|---|
id | uid | uid |
displayName | n or fn | n or fn |
name.formatted | n or fn | n or fn |
name.familyName | n | n |
name.givenName | n | n |
name.middleName | n | n |
name.honorificPrefix | n | n |
name.honorificSuffix | n | n |
nickname | nickname | nickname |
{emails}.value | {email} | {email} |
{emails}.type | {email} | {email} |
{emails}.primary | {email} | {email} |
{urls}.value | {url} | {url} |
{urls}.type | {x-url} | {url} |
{urls}.primary | {x-url} | {url} |
{phoneNumbers}.value | {tel} | {tel} |
{phoneNumbers}.type | {tel} | {tel} |
{phoneNumbers}.primary | {tel} | {tel} |
{ims}.value | {impp} 1 | {impp} |
{ims}.type | {impp} 1 | {impp} |
{ims}.primary | {impp} 1 | {impp} |
{photos}.value | {photo} | {photo} |
{photos}.type | {photo} | {photo} |
{photos}.primary | {photo} | {photo} |
{tags}.value | {categories} | {categories} |
{tags}.type | {categories} | {categories} |
{tags}.primary | {categories} | {categories} |
{relationships}.value | {x-related} | {related} |
{relationships}.type | {x-related} | {related} |
{relationships}.primary | {x-related} | {related} |
{addresses}.formatted | {addr} | {addr} |
{addresses}.streetAddress | {addr} | {addr} |
{addresses}.locality | {addr} | {addr} |
{addresses}.region | {addr} | {addr} |
{addresses}.postalCode | {addr} | {addr} |
{addresses}.country | {addr} | {addr} |
{organisations}.name | {org} | {org} |
{organisations}.department | {org} | {org} |
{organisations}.title | title | title |
{organisations}.startDate | {x-org} | {x-org} |
{organisations}.endDate | {x-org} | {x-org} |
{organisations}.location | {x-org} | {x-org} |
{organisations}.description | {x-org} | {x-org} |
{accounts}.domain | {x-account} | {x-account} |
{accounts}.username | {x-account} | {x-account} |
{accounts}.userid | {x-account} | {x-account} |
published | {x-created} | {x-created} |
updated | rev | rev |
birthday | bday | bday |
anniversary | {x-anniversary} | anniversary |
gender | {x-sex} | sex |
note | note | note |
preferredUsername | nickname? | nickname? |
utcOffset | tz | tz |
connected | {x-connected} | {x-connected} |
aboutMe | {x-about} | {x-about} |
bodyType | {x-bodytype} | {x-bodytype} |
currentLocation | geo | geo |
drinker | {x-drinker} | {x-drinker} |
ethnicity | {x-ethnicity} | {x-ethnicity} |
fashion | {x-fashion} | {x-fashion} |
happiestWhen | {x-happiestwhen} | {x-happiestwhen} |
humor | {x-humor} | {x-humor} |
livingArrangement | {x-livingarrangement} | {x-livingarrangement} |
lookingFor | {x-lookingfor} | {x-lookingfor} |
profileSong | url? or {x-song} | url? or {x-song} |
profileVideo | url? or {x-video} | url? or {x-video} |
relationshipStatus | {x-relationshipstatus} | {x-relationshipstatus} |
religion | {x-religion} | {x-religion} |
romance | {x-romance} | {x-romance} |
scaredOf | {x-scaredof} | {x-scaredof} |
sexualOrientation | {x-sexualorientation} | {x-sexualorientation} |
smoker | {x-smoker} | {x-smoker} |
status | {x-status} | {x-status} |
* Complex OpenSocial fields have not yet been included in this table
1 Only possible with the use of RFC 4770: vCard Extensions for Instant Messaging.
vCard -> Portable Contacts
@todo
vCard v4.0 | vCard v3.0 / hCard v1.0 | Portable Contacts v1.0 draft C * |
---|---|---|
... | ... | ... |