vCard学习笔记
转载时请注明出处:http://blog.csdn.net/absurd/
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~~