vCard语法概要


一、          vCard简介
vCard是电子商务名片(The Electronic Business Card)的一种简称,它定义了一种个人信息的组织方法,统一了个人信息的表示方法,为个人信息交换(PDI:Personal Data Interchange)提供了一种有效的工具,也可说是一种信息交换的媒介,主要用于个人信息的传输和交换。vCard主要应用于个人信息管理系统(PIM:Personal Information Manager),并且成为了PIM标准的一个组成部分,当前vCard版本有V2.1和V3.0两种,但现在主要应用的是V2.1版本,本文要分析的也是V2.1版本的内容。
 
二、          vCard数据包的组织形式:
 
形式一:基本形式
<BEGIN:VCARD>
<VERSION:2.1>
[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                                                  . . . . . .
<END:VCARD>
                                   数据包中包含了vCard头和vCard尾,紧接vCard头后是vCard的版本信息,版本信息后跟随着一系列的字段信息,对于字段信息是可选的。
      
形式二:含多个vCard基本包的分组形式
<BEGIN:VCARD>
<VERSION:2.1>
<BEGIN:VCARD>
[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                                                               . . . . . .
<END:VCARD>
<BEGIN:VCARD>
[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                                                  . . . . . .
<END:VCARD>
                                          . . . . . .
<END:VCARD>
                                   在分组形式中的vCard子数据包的格式与基本包不一样的地方是子数据包中不一定包含vCard的版本信息,在以下分组形式中也是如此。vCard数据包是面向行的组织形式,除了在字段值中的多行,每一行都是表示一个完整的信息。
 
形式三:对字段名进行分组的分组形式:
<BEGIN:VCARD>
<VERSION:2.1>
[<char string>‘.’PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                                             . . . . . .
<END:VCARD>
 
形式四:在字段值中嵌套vCard基本包的分组形式:
<BEGIN:VCARD>
<VERSION:2.1>
[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                            . . . . . .
<PropertyName[‘;’PropertyParmeters]’:’>
<BEGIN:VCARD>
[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
                                             . . . . . .
<END:VCARD>
. . . . . .
<END:VCARD>
这种形式当前只出现在“AGENT”字段值中。
 
三、          vCard属性(Property)的组织
 
1、 基本格式:[PropertyName[‘;’PropertyParmeters]’:’PropertyValue]
 
2、 字段名(PropertyName):
对于字段名有两种形式,一种是单纯的字段名,另一种是在字段名前加一个字符分组名的前缀(见第二点的形式三定义)。
在vCard2.1中定义了如下24种字段名:FN、N、PHOTO、BDAY、ADR、LABAL、TEL、EMAIL、MAILER、TZ、GEO、TITLE、ROLE、LOGO、 AGENT、ORG、NOTE、REV、SOUND、URL、UID、VERSION、KEY、X- <任意名>,对于这些字段名除了“VERSION”、“N”外(有些系统可能没有“N”、“VERSION”字段),其余字段都是可选的,其中“X- <任意名>”是扩展字段名,对于字段名字符都是大写形式(有些系统可能会有小写形式)。
 
3、 字段参数(PropertyParmeters):
1)、参数类型分六种:字段类型(TYPE)、字段值类型(VALUE)、编码类型(ENCODING)、字符集类型(CHARSET)、语言类型(LANGUAGE)、X- <任意名>。
这六种类型在数据包中不分先后次序,并且都是可选的,参数类型名可有可无,可以只有参数值而无参数类型名,也可以有带参数类型名的参数类型值,其中参数类型名和参数值之间用“=”隔开。
每种参数类型之间应当用“;”隔开,其中字段类型(TYPE)可以定义多个参数值,每个参数值之间当是在“=”后面时用“,”分开,否则用“;”分开,参数值中有“;. , : \”字符时必须加上转义字符“\”,参数值也可以有自定义的扩展参数值,扩展参数值一样用“X- <任意名>”表示。
              2)、字段类型(TYPE):
                     字段类型值是因字段名的不同而不同,同种字段名同时可以包含多种字段类型,当不指定字段类型时,每一种字段名有相应的默认字段类型。
              3)、字段值类型(VALUE):
                     字段值类型包含三种:INLINE、URL、CONTENT-ID,该类型用来指定字段值的存储位置,默认为INLINE,即在当前行中,URL为在网络中,必须根据提供的网址下载才能得到所要的信息,但是URL类型对于一些字段(如Version、Time Zone、Comment、Unique Identifier)是没有意义的,CONTENT-ID用于MIME邮件信息中,是作为从MIME包的任何地方引用这些内容的标识符。
              4)、编码类型(ENCODING):
编码类型包含四种:7BIT、BASE64、QUOTED-PRINTABLE、8BIT,默认编码类型为7BIT,主要用于在网络传输过程中对数据的完整性保护,常用的编码类型是BASE64和QUOTED-PRINTABLE。
              5)、字符集类型(CHARSET):
                     字符集类型包含有:ASCII、UTF-8、ISO-8859-8等等,ASCII为默认类型,但常用的是UTF-8类型,vCard2.1中没有具体定义字符集类型的值。
              6)、语言类型(LANGUAGE):
                     语言类型默认值为“en-US”,vCard2.1中没有具体定义语言类型的值,语言类型对于PHOTO、LOGO、SOUND、TEL字段是没意义的。
 
4、 字段值(PropertyValue):
字段值紧跟参数值的“:”后面,字段值以“\r\n”来结束其内容,在字段值中可以用多行(folding)来表示,但在从vCard数据包中取出值时必须去除换行换行标志符(unfolding)。
根据不同编码对字段值进行分行的方法有:
1)、对于非QP和非BASE64编码,在原始字段值中当有出现空格时则可以在空格前用“\r\n”进行分行,“\r\n”后至少要有一个空格符;
2)、对于QP编码,在要分行的行尾添加上“=”紧接用“\r\n”来分行,对于QP编码每行长度不得超过76个字符(包含最后的“=”,但不包含“\r\n”的长度),超过76个字符时则要进行分行。
3)、对于BASE64编码,可直接用“\r\n”来分行,每行长度也不得超过76个字符(不包含“\r\n”的长度),超过76个字符时则要进行分行。
                     根据不同编码对字段值进行去除换行标志的方法:
1)、对于非QP和非BASE64编码,在字段值内,若发现有“\r\n”且后面紧跟有“空格”符,则应去除掉“\r\n”。
2)、对于QP编码,在字段值内,若发现有“=\r\n”,则应去除“=\r\n”。
3)、对于BASE64编码,在字段值内,若发现有“\r\n”,则应去除“\r\n”。
根据不同编码判断字段值结束位置:
1)、对于非QP和非BASE64编码,若发现有“\r\n”且后面没有紧跟“空格”符,则表示字段结束。
2)、对于QP编码,在字段值内,若发现有“\r\n”,且“\r\n”前没有“=” 则表示字段结束。
3)、对于BASE64编码,在字 段值内,若发现有“\r\n”, 且“\r\n”前有“=”或“==”,则表示字段结束,若发现有“\r\n”且“\r\n”前没有有“=”或“==”,这时应判断这里的“\r\n”与后一个“\r\n”之间是否包含有 “:”,若有则表示字段结束。
 
 
 
vCard2.1定义的各种字段
字段名
字段类型
字段值
备注
FN
无定义
该字段值定义了一种格式化名字(Formatted Name),日常名字的表示方法。
基于X.520的普通名字语义规则
N
无定义
字段值表示人名或物名形式:
[Family Name];[Given Name];[Additional Names];[Name Prefix];[Name Suffix]
有些字段值可能只有一个“;”
PHOTO
GIF,CGM,WMF,BMP,MET,PMB,
DIB,PICT,TIFF,PS,PDF,JPEG,
MPEG,MPEG2,AVI,QTIME
字段值是图象数据或存储图象数据的文件名(包含URL路径)
没有默认的字段类型,所以必须指定一种字段类型
BDAY
无定义
字段值是出生日期的数据,有两种表示方法:
1)、基于ISO8601的基本格式:
<year><month><day>
2)、基于ISO8601的扩展格式:
<year>-<month>-<day>
其中年是四个字符表示,月份和日期是两个字符表示
 
ADR
DOM,INTL(*),
POSTAL(*),PARCEL(*),HOME,WORK(*)
分7个字段表示地址的值:
[Post Office Address];[Extended Address];
[Street];[Locality];[Region];[Postal code];
[Country]
第一个字段基于X.500标准,其余字段基于X.520标准
LABEL
DOM,INTL(*),
POSTAL(*),PARCEL(*),HOME,WORK(*)
字段值是一种日常表示地址的方法
基于X.520的邮政地址标准
TEL
PREF,WORK,HOME,VOICE(*),FAX,MSG,CELL,PAGER,
BBS,MODEM,CAR,ISDN,VIDEO
字段值是基于X.520的电话号码表示方法,这种数据格式不能保证能被拨号程序直接使用,具体的数据格式解析应由拨号程序解决。
 
EMAIL
AOL,AppleLink,
ATTMail,CIS,eWorld,INTERNET(*),
IBMMail,MCIMail,
POWERSHARE,
PRODIGY,TLX,
X400
字段值是电子邮件地址
第二栏列出的是该字段类型的一部份,可能会有其它的类型
EMAILER
无定义
字段值是电子邮件软件的名称
 
TZ
无定义
字段值是某地时间相对于UTC(Coordianted Universal Time)的时差(时区),用正负值表示相对值,UTC以西则为负值,以东为正值,值表示根据ISO8610标准,有两种形式:
1)、<+/-><hour(two digit)><minute(two digit)>
2)、<+/-><hour(two digit)>:<minute(two digit)>
 
GEO
无定义
字段值表示某地的经度(longitude)和纬度(latitude)的地理位置信息,北纬为正值,南纬为负值,东经为正值,西经为负值:
 <+/->[longitude value],<+/->[latitude value]
 
TITLE
无定义
字段值表示某人头衔名
 
ROLE
无定义
字段值表示一个人的职业名称或承担的角色或其它商务类型,基于X.520商务类型定义。
 
LOGO
GIF,CGM,WMF,
BMP,MET,PMB,
DIB,PICT,TIFF,
PDF,PS,JPEG,
MPEG,MPEG2,AVI,
QTIME
字段值表示某种标识的图像或肖像
没有默认字段类型,所以必须指定一种字段类型
AGENT
无定义
字段值表示与vCard对象所定义的人有关系的另一个人的信息(如管理员,助手,秘书等),字段值是一个完整的vCard数据包
 
ORG
无定义
字段值表示一个机构名称,基于X.520标准:
[Organization Name];[Organization Unit]
[;additional Organizational Unit;…]
 
NOTE
无定义
字段值为与本vCard对象有关的备注或提示信息,基于X.520标准。
 
REV
无定义
字段值表示最后一次的对本vCard对象的更新时间,时间采用日程表中的时间表示方法,基于ISO8601标准:
1)、<year(four digits)><month(two digits)>
<day(two digits)>T<hour(two digits)>
<minitue(two digits)><second(two digits)>
[time zone]
2)、<year(four digits)>-<month(two digits)>-
<day(two digits)>T<hour(two digits)>:
<minitue(two digits)>:<second(two digits)>
[time zone]
 
SOUND
WAVE,PCM,AIFF
字段值表示与本vCard对象有关的发音的声音数据,如该字段没有与其它字段分组,则该字段表示FN字段值的发音,字段值可以是二制的声音数据,也可以用其它单词表示的发音方法。
没有默认字段类型,当没有指定字段类型时,字段值为表示发音方法的文件或单词
URL
无定义
字段值表示统一资源位置(Uniform Resource Locator),基于IETF RFC 1738定义。
 
UID
无定义
字段值表示本vCard对象的GUID号或本vCard对象将被更新的URL地址
 
VERSION
无定义
字段值表示本vCard对象的版本号
该字段是必选字段,在更早以前的版本是可选
KEY
X509,PGP
该字段值表示加密密钥,默认的格式是明文格式(clear-text)
没有默认字段类型,字段类型必需被定义
X-<user- defined name>
无定义
该字段值由用户自定义
字段参数值由用户自选
注:1、字段类型后带“*”表示是默认字段类型;
  2、字段值中若以“;”进行值分类的,当值中本身还包含有“;”或“\r\n”则必须进行转义,相应地用“\;”和“\”CRCF来进行转义。
 
附:
 RFC822关于分行(folding)和去除分行(unfolding)的描述:
分行规则是:在一行中当存在至一少一个空格时,则可在空格前用CRLF(“\r\n”)进行分行,确保CRLF后有至少一个空格。
       去除分行规则:在CRLF后有紧跟空格,则去除CRLF。


转自:http://blog.csdn.net/dznlong/archive/2007/08/05/1726921.aspx
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值