vCard?看起来像个专业术语,一下让人敬畏三分。当然这全仰仗着第一个字母v了,如果把v去掉,剩下的Card就是名片的意思,简单得不能再简单了。事实上vCard就是一个描述名片的规范。为什么前面加个v呢,据说这个规范最初是由​​Versit​​联盟提出的,至于为什么v是小写的,据说是出于技术限制(technical restrictions),不懂不懂,也懒得管它了。


奇怪!名片也要规范吗?对大多数人来说,名片就是姓名+电话号码,有必要定一个规范吗?当然有必要,任何用于交换的数据都需要定规范,否则大家划不是一套拳,就没有办法交换了。比如一张名片的信息本来为:姓名:张三,手机:13012345678。在不同的软件中,表现方式可能千差万别,有的表示为: 张三, 13012345678。有的表示为: name=张三,mobile=13012345678。… 总之,种种千奇百怪的写法都有。


有了vCard这个规范,大家都按统一的格式描述名片(至少在交换时)。你可以把outlook或者foxmail中的名片,上传放到手机中,手机可以是nokia的,也可以是moto的,或者其它任何支持vCard的手机,这都没有任何关系,大家说的是同一语言,交流时就没有障碍了。当然也可以在手机之间传递名片,对方手机可以直接把发过来的名片保存到电话本中。


废话少说,还是先看看vCard长什么样吧:

BEGIN:vCard

VERSION:3.0

FN:Frank Dawson

ORG:Lotus Development Corporation

ADR;TYPE=WORK,POSTAL,PARCEL:;;6544 Battleford Drive

;Raleigh;NC;27613-3502;U.S.A.

TEL;TYPE=VOICE,MSG,WORK:+1-919-676-9515

TEL;TYPE=FAX,WORK:+1-919-676-9564

EMAIL;TYPE=INTERNET,PREF:Frank_Dawson@Lotus.com

EMAIL;TYPE=INTERNET:fdawson@earthlink.net

URL:http://home.earthlink.net/~fdawson

END:vCard


在上例中:

BEGIN:vCard 表示接下来的内容是一个vCard。

VERSION:3.0 表示vCard的版本号,不同的版本会有差异。

FN:Frank Dawson 表示姓名。

ORG:Lotus Development Corporation 表示公司名。

ADR;TYPE=WORK,POSTAL,PARCEL:;;6544 Battleford Drive

;Raleigh;NC;27613-3502;U.S.A. 表示地址。TYPE=WORK,POSTAL,PARCEL表示地址类别为:工作地址、信件投递地址和包裹投递地址。

TEL;TYPE=VOICE,MSG,WORK:+1-919-676-9515 表示电话。TYPE=VOICE,MSG,WORK表示电话类别为: 语音电话、信息电话和工作电话。

TEL;TYPE=FAX,WORK:+1-919-676-9564 表示电话。TYPE=FAX,WORK表示电话类别为:传真和工作电话。

EMAIL;TYPE=INTERNET,PREF:Frank_Dawson@Lotus.com 表示EMAL地址。类型为INTERNET,并且为首选EMAL地址。

EMAIL;TYPE=INTERNET:fdawson@earthlink.net表示EMAL地址。类型为INTERNET。

URL:http://home.earthlink.net/~fdawson 表示主页。

END:vCard 表示vCard结束。


Rfc2426描述了vCard的中规范,里面定义一些常用的信息,如:FN, N, NICKNAME, PHOTO, BDAY, ADR, LABEL, TEL, EMAIL,MAILER, TZ, GEO, TITLE, ROLE, LOGO, AGENT, ORG, CATEGORIES, NOTE,PRODID, REV, SORT-STRING, SOUND, URL, UID, VERSION, CLASS, KEY。


也规定了诸如语言和编码要求。比如在下面的例子中,相片采用了base64编码,PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0。


尽管在rfc2426描述的信息,对于普通名片来说已经足够了。但是特殊情况下,需要一些扩展信息,为此,rfc2426也提供一种扩展机制,扩展的信息以X-打头。在交换时,若对方不支持这个扩展,它可以安全的忽略它。


GPE项目中,有一个库libmimedir,提供了解析vCard的功能。


W3为了满足一些新需要,定义了另一套规范(http://www.w3.org/TR/vcard-rdf),它用RDF(Resource Description Framework)来描述vCard,表示的内容一样,只是用XML来的描述的。如:


<?xml version="1.0"?>



<rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"



xmlns:vCard = "http://www.w3.org/2001/vcard-rdf/3.0#">






<rdf:Description rdf:about = "http://qqqfoo.com/staff/corky" >



<vCard:FN> Corky Crystal </vCard:FN>



<vCard:N rdf:parseType="Resource">



<vCard:Family> Crystal </vCard:Family>



<vCard:Given> Corky </vCard:Given>



<vCard:Other> Jacky </vCard:Other>



<vCard:Prefix> Dr </vCard:Prefix>



</vCard:N>



<vCard:BDAY> 1980-01-01 </vCard:BDAY>



<vCard:TITLE> Computer Officer Class 3 </vCard:TITLE>



<vCard:ROLE> Programmer </vCard:ROLE>



<vCard:TEL rdf:parseType="Resource">



<rdf:value> +61 7 555 5555 </rdf:value>



<rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#work"/>



<rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#voice"/>



</vCard:TEL>



<vCard:EMAIL rdf:parseType="Resource">



<rdf:value> corky@qqqfoo.com </rdf:value>



<rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#internet"/>



</vCard:EMAIL>



<vCard:ADR rdf:parseType="Resource">



<vCard:Street> 111 Lake Drive </vCard:Street>



<vCard:Locality> WonderCity </vCard:Locality>



<vCard:Pcode> 5555 </vCard:Pcode>



<vCard:Country> Australia </vCard:Country>



</vCard:ADR>



</rdf:Description>



</rdf:RDF>





~~end~~