This table attempts to explain the mappings between the new VCard ontology and two other vocabulariees commonly used to describe people, the W3C's PIM vocabulary and the community-driven FOAF vocabulary. However, neither of these vocabularies is isomorphic to the VCard (and thus hCard) and as such a new vocabulary had to be created.
Note that this table contains the RDF and OWL statements needed to formalize these relationships in Embedded RDF so that a formal description of these mappings can be easily extracted via a GRDDL transformation.
VCard | VCard Ontology | FOAF | W3C PIM | Other Vocabularies or Notes |
vCard | v:VCard | |||
v:Location | con:Location | |||
v:Address | ||||
@@TODO: Where is this in VCard spec? | v:agent | foaf:Agent(@@TODO: This is a class, not a property, can't be sameAs or subclassOf unless we use OWL FULL!) | ||
fn | v:fn | foaf:fullName | @@TODO: It seems this should have some relationship to W3C Contact, but can only think of con:knownAs | |
n | v:n | foaf:name | @@TODO: Not sure if this mapping should include this as a superclass of all other naming conventions | |
family-name | v:family-name | foaf:family_name,foaf:surname | con:lastName | |
given-name | v:given-name | foaf:givenname | con:firstName | |
additional-name | v:additional-name | foaf:name | con:knownAs | |
honorific-prefix | v:honorific-prefix | foaf:title | con:personalTitle | Note that prefixes are subproperties of titles, since every title cannot be a prefix but every prefix is a title |
honorific-suffix | v:honorific-suffix | con:personalSuffix | ||
nickname | v:nickname | foaf:nick | con:knownAs | |
url | v:url | foaf:homePage | con:homepage @@TODO: Or should this be con:publicHomepage? | |
v:email | foaf:mbox | con:emailAddress | ||
v:mobileEmail | foaf:mbox | con:emailAddress | ||
v:workEmail | foaf:mbox | con:emailAddress | ||
v:unlabelledEmail | foaf:mbox | con:emailAddress | ||
fax | v:fax | foaf:mbox | con:fax | |
tel | v:tel | foaf:phone | con:phone | |
v:homeTel | foaf:phone | con:phone | ||
v:mobileTel | foaf:phone | con:mobile@@TODO: Why is the range restricted to ContactLocation, when con:phone is not? Needs fixing. | ||
v:workTel | foaf:phone | con:phone | ||
v:unlabelledTel | foaf:phone | con:phone | ||
adr | v:adr | con:address | ||
v:homeAdr | con:address | |||
v:workAdr | con:address | |||
v:unlabelledAdr | con:address | |||
post-office-box | v:post-office-box | con:_addressProperty | ||
extended-address | v:extended-address | con:_addressProperty | ||
v:street-address | con:street | |||
locality | v:locality | con:city | ||
region | v:region | con:_addressProperty | ||
postal-code | v:postal-code | con:_addressProperty | ||
country-name | v:country-name | con:country | ||
label | v:label | |||
geo | v:geo | @@TODO: Very close to con:ContactLocation, but is a property, not a class | ||
latitude | v:latitude | geo:lat@@TODO: (Not standardized yet..is this a problem?) | ||
longitude | v:longitude | geo:long@@TODO: (Not standardized yet..is this a problem?) | ||
tz | v:tz | @@TODO: Would be nice to map to RDFCalendar, but RDFCalendar seems to use datatypes to model timezones...unclear how mapping would work | ||
photo | v:photo | foaf:img | ||
logo | v:logo | foaf:logo | ||
sound | v:sound | |||
bday | v:bday | foaf:birthday | con:birthday | |
title | v:title | foaf:title | con:personalTitle | |
role | v:role | |||
org | v:Organization | foaf:Organization | con:SocialEntity@@TODO: There is a con:organization but that's a property, not a class | |
organization-name | v:organization-name | foaf:name | con:departmentName | |
organization-unit | v:organization-unit | |||
category | v:category | |||
note | v:note | rdfs:comment | ||
class | v:class | @@TODO: Is there no access-right (Public, private, etc.) vocab for RDF? | ||
key | v:key | wot:pubkeyAddress@@TODO: Using the non-standard Web of Trust vocab, not sure if this is right... | ||
mailer | v:mailer | |||
uid | v:uid | |||
rev | v:rev | @@TODO: It seems a revision ontology must exist somewhere... | ||
role | v:role | @@TODO: Do we have any ontologies of roles? | ||
sort-string | v:sort-string | @@TODO: Related. but not in a clear way, to con:sortName |
@@TODO: Why not make mobile, home, etc. (types in VCard) classes instead of properties, so you just have one class called phone
so that everything object of a v:tel
relationship is a "phone", and then to distinguish between phones
by virtue of sub-classing them for mobile
, home
, etc? Is it the fact that this data might be lost in RDF graph merging? Yet if the properties have the right domain and ranges, they should not.
@@TODO: Why the unlabelled prefix for some properties?
@@TODO: Someone more familiar with PIM should check how I used the address property and the W3C PIM _addressProperty.
@@TODO: In W3C PIM we map from People to their Contactlocations which in turn have addresses, phone numbers, etc. and in vCard addresses are mapped to types (like "home"), which seem like they should be sub-classes of ContactLocations.
@@TODO: It should be noted in the text that the VCard Ontology carries the same exceptions as hCard, i.e. not encoding: NAME, PROFILE, SOURCE, PRODID, VERSION