XEP-0054
小 |
|||
(未显示1个用户的26个中间版本) | |||
第10行: | 第10行: | ||
作者: Peter Saint-Andre | 作者: Peter Saint-Andre | ||
− | 版权: | + | 版权: ? 1999 - 2010 XMPP标准化基金会(XSF). 参见[[XEP-0054#附录C:法律通告|法律通告]]. |
状态: 活跃的 | 状态: 活跃的 | ||
第26行: | 第26行: | ||
这份vCard-XML格式的说明文档在Jabber社区内正被使用。未来的说明文档将会推荐一个标准协议来取代这份文档。 | 这份vCard-XML格式的说明文档在Jabber社区内正被使用。未来的说明文档将会推荐一个标准协议来取代这份文档。 | ||
− | + | 对于用户来说,基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于所有现存的Jabber服务器的实现。这可以通过发送类型为“set”(存储)或者“get”(获取)的<iq/>到Jabber服务器来完成,该<iq/>节点包含了<vCard/>子节点并用“vcard-temp”命名空间限定,<vCard/>包含实际的vCard-XML格式的元素,这在vCard-XML DTD中定义。然后其他用户就可以查看某人的vcard信息了。 | |
==历史== | ==历史== | ||
− | + | vCard是一种现存的、广泛使用的,用户个人信息存储的标准,有点像是电子名片。vCard的格式在[http://tools.ietf.org/html/rfc2426 RFC 2426] [[XEP-0054#附录G:备注|1]]中定义。 | |
− | 在1998年和1999年,Frank | + | 在1998年和1999年,Frank Dawson提交了4个修订的Internet草案描述了用XML表示的vCard格式。起初,当Jabberd开源项目在寻找一种存储个人信息的方法时,jabberd开发者最近一次修订版本是draft-dawson-vcard-xml-dtd-01 [[XEP-0054#附录G:备注|2]]。他也在1998年11月15日提交了第二次修订版 [[XEP-0054#附录G:备注|3]] 和在1999年6月22提交了第三次修订版 [[XEP-0054#附录G:备注|4]]。 |
− | + | 不幸的是,Dawson的建议没有被提交到IETF的标准进程。但是因为某些原因被遗忘和丢失了,Jabber项目继续使用draft-dawson-vcard-xml-dtd-01 的DTD,为了使它适合在Jabber(增加了JABBERID和DESC的元素)中使用,它被做两个小的修改。也指定了元素名是大写而不是在draft-dawson-vcard-xml-dtd-01中定义的小写字母。另外,Jabber社区延续了关于版本信息的草案的使用(而不是DTD),把它作为vCard元素的属性而不是子元素。这格式在Jabber中和在“vcard-temp”命名空间下被Jabber社区实现。 | |
==用例== | ==用例== | ||
第40行: | 第40行: | ||
===检索用户的电子身份=== | ===检索用户的电子身份=== | ||
− | + | 用户通过发送不含'to'地址并且包含以'vcard-temp'命名空间为限制的<vCard/>子元素的IQ-get节来检索他(她)自己的vCard电子身份。 | |
'''例子1. vCard检索请求''' | '''例子1. vCard检索请求''' | ||
第52行: | 第52行: | ||
</source> | </source> | ||
− | + | 如果用户拥有vCard,则服务器必须(MUST)返回IQ-result。 | |
'''例子2. 服务器返回vCard''' | '''例子2. 服务器返回vCard''' | ||
第107行: | 第107行: | ||
</DESC> | </DESC> | ||
</vCard> | </vCard> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | 如果不存在 vCard , 服务必须 MUST 返回一个节错误 (它应该 (SHOULD) 是 <item-not-found/>) 或一个包含空的 <vCard/> 元素的 IQ-result. | ||
+ | |||
+ | 例子 3. 没有vCard(条目没找到) | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iq id='v1' | ||
+ | to='stpeter@jabber.org/roundabout' | ||
+ | type='error'> | ||
+ | <vCard xmlns='vcard-temp'/> | ||
+ | <error type='cancel'> | ||
+ | <item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> | ||
+ | </error> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | 例子 4. 没有vCard(空元素) | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iq id='v1' | ||
+ | to='stpeter@jabber.org/roundabout' | ||
+ | type='result'> | ||
+ | <vCard xmlns='vcard-temp'/> | ||
</iq> | </iq> | ||
</source> | </source> | ||
第112行: | 第137行: | ||
===更新用户的vCard=== | ===更新用户的vCard=== | ||
− | + | 用户通过发送类型为'set',不带'to'地址的IQ节来发布或者更新他(她)的vCard,,并且符合前个用例的格式。 | |
− | ''' | + | '''例子5. vCard更新请求''' |
<source lang="xml"> | <source lang="xml"> | ||
第167行: | 第192行: | ||
</source> | </source> | ||
− | + | 然后服务器返回IQ-result(或者IQ-error) | |
− | ''' | + | '''例子6. 服务器返回成功''' |
<source lang="xml"> | <source lang="xml"> | ||
第177行: | 第202行: | ||
</source> | </source> | ||
− | 注意,上述的IQ- | + | 注意,上述的IQ-Set只有一个元素发生了变化(<DESC/>元素)。目前没有可以局部更新vCard的方法,为了更新任何一部分的vCard,必须发送完整的vCard到服务器。 |
− | 如果用户企图执行一个关于其他用户的vCard的IQ set( | + | 如果用户企图执行一个关于其他用户的vCard的IQ set(即,把to地址设为不是发送者的纯JID),那么服务必须(MUST)返回一个节错误,应该为 <forbidden/> 或 <not-allowed/>. |
− | === | + | '''例子 7. 实体试图修改别人的vCard''' |
+ | |||
+ | <source lang="xml"> | ||
+ | <iq id='v2' | ||
+ | to='stpeter@jabber.org/roundabout' | ||
+ | type='error'> | ||
+ | <error type='auth'> | ||
+ | <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> | ||
+ | </error> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | ===查看另一个用户的vCard=== | ||
用户可能要查看另一个用户的vCard,通过发送类型为get的IQ到另一个用户的纯JID | 用户可能要查看另一个用户的vCard,通过发送类型为get的IQ到另一个用户的纯JID | ||
− | ''' | + | '''例子8. 请求另一个用户的vCard''' |
<source lang="xml"> | <source lang="xml"> | ||
第196行: | 第233行: | ||
</source> | </source> | ||
− | 根据XMPP | + | 根据XMPP Core [[XEP-0054#附录G:备注|5]],一个兼容的服务器必须(MUST)代表(被请求者)响应请求并且不将IQ转发到被请求者的已连接的资源。 |
− | ''' | + | '''例子9. 接收另一个用户的vCard''' |
<source lang="xml"> | <source lang="xml"> | ||
第219行: | 第256行: | ||
</source> | </source> | ||
− | + | 如果不存在 vCard 或该用户不存在, 服务必须 MUST 返回一个节错误, 它应该 SHOULD 是 <service-unavailable/> 或 <item-not-found/>. | |
+ | |||
+ | '''例子 10. 无vCard''' | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iq id='v3' | ||
+ | to='stpeter@jabber.org/roundabout' | ||
+ | type='error'> | ||
+ | <vCard xmlns='vcard-temp'/> | ||
+ | <error type='cancel'> | ||
+ | <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> | ||
+ | </error> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | 注意:vCard的使用不受限于自然人用户帐号。比如,XMPP服务器可以有自己的vCard,该vCard可以被服务器主机上的组织,物理位置,相关的联系地址定义。 | ||
+ | |||
+ | ==确定支持== | ||
+ | |||
+ | 如果一个实体支持 vcard-temp 协议, 它必须 MUST 报告这一点,通过在对[[XEP-0030|服务发现]] [[XEP-0054#附录G:备注|6]]信息请求disco#info的回应中包含一个服务发现特性 "vcard-temp" (关于发行一个或多个名字空间,参见[[XEP-0054#协议名字空间|协议名字空间]]): | ||
+ | |||
+ | '''例子 11. 服务发现信息请求''' | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iq type='get' | ||
+ | from='juliet@capulet.lit/balcony' | ||
+ | to='capulet.lit' | ||
+ | id='disco1'> | ||
+ | <query xmlns='http://jabber.org/protocol/disco#info'/> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | '''例子 12. 服务发现信息应答''' | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <iq type='result' | ||
+ | from='capulet.lit' | ||
+ | to='juliet@capulet.lit/balcony' | ||
+ | id='disco1'> | ||
+ | <query xmlns='http://jabber.org/protocol/disco#info'> | ||
+ | ... | ||
+ | <feature var='vcard-temp'/> | ||
+ | ... | ||
+ | </query> | ||
+ | </iq> | ||
+ | </source> | ||
+ | |||
+ | 这个信息也可以通过 [http://xmpp.org/extensions/xep-0115.html 实体能力] [[XEP-0054#附录G:备注|7]] 为那些共享出席信息的实体封装. | ||
==安全事项== | ==安全事项== | ||
第227行: | 第311行: | ||
==IANA事项== | ==IANA事项== | ||
− | + | 本文档与[http://www.iana.org/ 互联网编号分配授权机构] [[XEP-0054#附录G:备注|8]]无关。 | |
==XMPP注册事项== | ==XMPP注册事项== | ||
− | === | + | ===协议名字空间=== |
− | XMPP | + | [http://www.xmpp.org/registrar/ XMPP Registrar] [[XEP-0054#附录G:备注|9]]在它的协议名字空间注册项中包含了'vcard-temp'(参考<http://www.xmpp.org/registrar/namespaces.html>)。 |
===URI查询类型=== | ===URI查询类型=== | ||
− | + | 作为由[http://www.xmpp.org/extensions/xep-0147.html XMPP URI Query Components] [[XEP-0054#附录G:备注|10]]授权的机构,XMPP登记处维护着一个用于 XMPP URIs 的查询和键-值对的注册项(见<[http://www.xmpp.org/registrar/querytypes.html http://www.xmpp.org/registrar/querytypes.html]>)。 | |
vCard的查询类型是作为vCard相关的动作被注册的。 | vCard的查询类型是作为vCard相关的动作被注册的。 | ||
− | ''' | + | '''例子13. vCard 动作:IRI/URI''' |
+ | <source lang="xml"> | ||
xmpp:romeo@montague.net?vcard | xmpp:romeo@montague.net?vcard | ||
+ | </source> | ||
− | ''' | + | '''例子14. vCard动作:结果节''' |
<source lang="xml"> | <source lang="xml"> | ||
第264行: | 第350行: | ||
</source> | </source> | ||
− | == | + | ==实现注意事项== |
注意以下事项: | 注意以下事项: | ||
第270行: | 第356行: | ||
* 这个被包含的元素的正确大小写是<vCard/>(XML元素名称是大小写敏感的)。 | * 这个被包含的元素的正确大小写是<vCard/>(XML元素名称是大小写敏感的)。 | ||
− | * 所有在<vCard/>中的元素必须(MUST) | + | * 所有在<vCard/>中的元素必须(MUST)是大写的(即使和draft-dawson-vcard-xml-dtd-01中的不一致) |
* 国家的简称是<CTRY/>元素,不是<COUNTRY/>元素(即使和draft-dawson-vcard-xml-dtd-01不一致)。 | * 国家的简称是<CTRY/>元素,不是<COUNTRY/>元素(即使和draft-dawson-vcard-xml-dtd-01不一致)。 | ||
− | * 电话号码必须(MUST) | + | * 电话号码必须(MUST)包含在<NUMBER>元素里,而不是包含在CDATA中的<TEL/>元素里 |
* 如果<TEL/>元素没有包含电话号码,那么空的<NUMBER/>也必须被包含。 | * 如果<TEL/>元素没有包含电话号码,那么空的<NUMBER/>也必须被包含。 | ||
− | * Email地址必须(MUST)包含在<USERID> | + | * Email地址必须(MUST)包含在<USERID>元素里,而不是CDATA中的<EMAIL/>元素 |
− | * 一些Jabber实现会添加version属性到<vCard/>元素,属性值为2.0或者3.0。DTD是不正确的,draft-dawson-vcard-xml-dtd- | + | * 一些Jabber实现会添加version属性到<vCard/>元素,属性值为2.0或者3.0。DTD是不正确的,draft-dawson-vcard-xml-dtd-01中的例子明确的指出通过version属性表示版本信息,而不是DTD中定义的<VERSION/>元素。然而,为了符合draft-dawson-vcard-xml-dtd-01,版本信息应该被设置为3.0,不是2.0。 |
==DTD== | ==DTD== | ||
− | + | 下面的DTD包含了轻微修改过的draft-dawson-vcard-xml-dtd-01版本。除此外,其他唯一修改的地方就是添加JABBERID和DESC元素。 | |
<source lang="xml"> | <source lang="xml"> | ||
第604行: | 第690行: | ||
</source> | </source> | ||
− | == | + | ==附录== |
+ | ===附录A:文档信息=== | ||
− | + | Source Control: HTML RSS | |
− | + | This document in other formats: XML PDF | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 系列:[http://xmpp.org/extensions/ XEP] | |
− | + | 序号:0054 | |
− | + | 发布者:[http://xmpp.org/xsf/ XMPP标准基金会] | |
− | + | 状态:[http://xmpp.org/extensions/xep-0001.html#states-Active 活跃的] | |
− | + | 类型:[http://xmpp.org/extensions/xep-0001.html#types-Historical 历史的] | |
− | + | 版本:1.2 | |
− | + | 最后更新:2008-07-16 | |
− | + | 批准机构:[http://xmpp.org/council/ XMPP理事会] | |
− | + | 依赖标准: XMPP Core | |
− | + | 替代标准:无 | |
− | + | 被替代标准:无 | |
− | + | 缩略名:vcard-temp | |
− | + | 原文控制: [http://svn.xmpp.org:18080/browse/XMPP/trunk/extensions/xep-0054.xml HTML] [http://svn.xmpp.org:18080//changelog/~rss/XMPP/trunk/extensions/xep-0054.xml/rss.xml RSS] | |
− | + | 本文的其它格式: [http://xmpp.org/extensions/xep-0054.xml XML] [http://xmpp.org/extensions/xep-0054.pdf PDF] | |
− | + | ===附录B:作者信息=== | |
− | + | '''Peter Saint-Andre''' | |
− | + | Email: [mailto:stpeter@jabber.org stpeter@jabber.org] | |
− | + | JabberID: stpeter@jabber.org | |
− | + | URI: https://stpeter.im/ | |
− | + | {{Template:XEP附录CDEF}} | |
− | + | ===附录G:备注=== | |
− | + | # RFC 2426: vCard MIME Directory Profile <http://tools.ietf.org/html/rfc2426>. | |
+ | # 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-01.txt>. | ||
+ | # 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-02.txt>. | ||
+ | # 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-03.txt>. | ||
+ | # RFC 3920: 可扩展的消息和出席信息协议 (XMPP): Core <http://tools.ietf.org/html/rfc3920>. | ||
+ | # XEP-0030: Service Discovery <http://xmpp.org/extensions/xep-0030.html>. | ||
+ | # XEP-0115: Entity Capabilities <http://xmpp.org/extensions/xep-0115.html>. | ||
+ | # 互联网编号分配机构(IANA) 是用于互联网协议的唯一性参数值分配的核心协调者, 例如号码和URI计划. 更多信息, 见 <http://www.iana.org/>. | ||
+ | # XMPP登记员XMPP Registrar 维护着一个保留的协议名字空间以及用于由XMPP标准基金会批准的XMPP扩展协议的上下文参数的注册项的列表. 更多信息, 见 <http://xmpp.org/registrar/>. | ||
+ | # XEP-0147: XMPP URI Query Components <http://xmpp.org/extensions/xep-0147.html>. | ||
− | + | ===附录H:修订历史=== | |
− | + | 注意: 本协议的旧版本可能在 http://xmpp.org/extensions/attic/ 还可用 | |
− | ''' | + | '''版本 1.2 (2008-07-16)''' |
− | + | 更多完全定义的错误情景; 增加了确定支持的章节. | |
− | + | (psa) | |
− | + | '''版本 1.1 (2003-03-26)''' | |
+ | 澄清了特定历史的不准确并增加了连接到 Frank Dawson's 的互联网草案的归档版本. | ||
− | + | (psa) | |
− | ''' | + | '''版本 1.0 (2003-01-09)''' |
− | + | 通过Jabber理事会投票更新状态为活跃. | |
− | + | (psa) | |
− | + | '''版本 0.2 (2002-11-06)''' | |
− | + | 很多小修改; 增加了实现注意事项. | |
− | + | (psa) | |
− | ''' | + | '''版本 0.1 (2002-10-31)''' |
− | + | 初始版本. | |
− | + | (psa) | |
− | + | ---- | |
− | + | 结束 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
2012年9月29日 (六) 08:17的最后版本
本文的英文原文来自XEP-0054
XEP-0054:电子名片
摘要: 本文档提供了目前在Jabber社区中使用的vCard-XML格式的典型文档.
作者: Peter Saint-Andre
版权: ? 1999 - 2010 XMPP标准化基金会(XSF). 参见法律通告.
状态: 活跃的
类型: 历史的
版本: 1.2
最后更新日期: 2008-07-16
注意: 这个历史性的标准提供了目前在Jabber/XMPP社区中使用的一个协议.本文不是XMPP标准化基金会标准跟踪过程中的标准跟踪协议,无论如何,将来它可能被转化为标准跟踪,也可能被一个更新的协议取代.
目录 |
绪论
这份vCard-XML格式的说明文档在Jabber社区内正被使用。未来的说明文档将会推荐一个标准协议来取代这份文档。
对于用户来说,基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于所有现存的Jabber服务器的实现。这可以通过发送类型为“set”(存储)或者“get”(获取)的<iq/>到Jabber服务器来完成,该<iq/>节点包含了<vCard/>子节点并用“vcard-temp”命名空间限定,<vCard/>包含实际的vCard-XML格式的元素,这在vCard-XML DTD中定义。然后其他用户就可以查看某人的vcard信息了。
历史
vCard是一种现存的、广泛使用的,用户个人信息存储的标准,有点像是电子名片。vCard的格式在RFC 2426 1中定义。
在1998年和1999年,Frank Dawson提交了4个修订的Internet草案描述了用XML表示的vCard格式。起初,当Jabberd开源项目在寻找一种存储个人信息的方法时,jabberd开发者最近一次修订版本是draft-dawson-vcard-xml-dtd-01 2。他也在1998年11月15日提交了第二次修订版 3 和在1999年6月22提交了第三次修订版 4。
不幸的是,Dawson的建议没有被提交到IETF的标准进程。但是因为某些原因被遗忘和丢失了,Jabber项目继续使用draft-dawson-vcard-xml-dtd-01 的DTD,为了使它适合在Jabber(增加了JABBERID和DESC的元素)中使用,它被做两个小的修改。也指定了元素名是大写而不是在draft-dawson-vcard-xml-dtd-01中定义的小写字母。另外,Jabber社区延续了关于版本信息的草案的使用(而不是DTD),把它作为vCard元素的属性而不是子元素。这格式在Jabber中和在“vcard-temp”命名空间下被Jabber社区实现。
用例
检索用户的电子身份
用户通过发送不含'to'地址并且包含以'vcard-temp'命名空间为限制的<vCard/>子元素的IQ-get节来检索他(她)自己的vCard电子身份。
例子1. vCard检索请求
<iq from='stpeter@jabber.org/roundabout' id='v1' type='get'> <vCard xmlns='vcard-temp'/> </iq>
如果用户拥有vCard,则服务器必须(MUST)返回IQ-result。
例子2. 服务器返回vCard
<iq id='v1' to='stpeter@jabber.org/roundabout' type='result'> <vCard xmlns='vcard-temp'> <FN>Peter Saint-Andre</FN> <N> <FAMILY>Saint-Andre</FAMILY> <GIVEN>Peter</GIVEN> <MIDDLE/> </N> <NICKNAME>stpeter</NICKNAME> <URL>http://www.xmpp.org/xsf/people/stpeter.shtml</URL> <BDAY>1966-08-06</BDAY> <ORG> <ORGNAME>XMPP Standards Foundation</ORGNAME> <ORGUNIT/> </ORG> <TITLE>Executive Director</TITLE> <ROLE>Patron Saint</ROLE> <TEL><WORK/><VOICE/><NUMBER>303-308-3282</NUMBER></TEL> <TEL><WORK/><FAX/><NUMBER/></TEL> <TEL><WORK/><MSG/><NUMBER/></TEL> <ADR> <WORK/> <EXTADD>Suite 600</EXTADD> <STREET>1899 Wynkoop Street</STREET> <LOCALITY>Denver</LOCALITY> <REGION>CO</REGION> <PCODE>80202</PCODE> <CTRY>USA</CTRY> </ADR> <TEL><HOME/><VOICE/><NUMBER>303-555-1212</NUMBER></TEL> <TEL><HOME/><FAX/><NUMBER/></TEL> <TEL><HOME/><MSG/><NUMBER/></TEL> <ADR> <HOME/> <EXTADD/> <STREET/> <LOCALITY>Denver</LOCALITY> <REGION>CO</REGION> <PCODE>80209</PCODE> <CTRY>USA</CTRY> </ADR> <EMAIL><INTERNET/><PREF/><USERID>stpeter@jabber.org</USERID></EMAIL> <JABBERID>stpeter@jabber.org</JABBERID> <DESC> More information about me is located on my personal website: http://www.saint-andre.com/ </DESC> </vCard> </iq>
如果不存在 vCard , 服务必须 MUST 返回一个节错误 (它应该 (SHOULD) 是 <item-not-found/>) 或一个包含空的 <vCard/> 元素的 IQ-result.
例子 3. 没有vCard(条目没找到)
<iq id='v1' to='stpeter@jabber.org/roundabout' type='error'> <vCard xmlns='vcard-temp'/> <error type='cancel'> <item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
例子 4. 没有vCard(空元素)
<iq id='v1' to='stpeter@jabber.org/roundabout' type='result'> <vCard xmlns='vcard-temp'/> </iq>
更新用户的vCard
用户通过发送类型为'set',不带'to'地址的IQ节来发布或者更新他(她)的vCard,,并且符合前个用例的格式。
例子5. vCard更新请求
<iq id='v2' type='set'> <vCard xmlns='vcard-temp'> <FN>Peter Saint-Andre</FN> <N> <FAMILY>Saint-Andre</FAMILY> <GIVEN>Peter</GIVEN> <MIDDLE/> </N> <NICKNAME>stpeter</NICKNAME> <URL>http://www.xmpp.org/xsf/people/stpeter.shtml</URL> <BDAY>1966-08-06</BDAY> <ORG> <ORGNAME>XMPP Standards Foundation</ORGNAME> <ORGUNIT/> </ORG> <TITLE>Executive Director</TITLE> <ROLE>Patron Saint</ROLE> <TEL><WORK/><VOICE/><NUMBER>303-308-3282</NUMBER></TEL> <TEL><WORK/><FAX/><NUMBER/></TEL> <TEL><WORK/><MSG/><NUMBER/></TEL> <ADR> <WORK/> <EXTADD>Suite 600</EXTADD> <STREET>1899 Wynkoop Street</STREET> <LOCALITY>Denver</LOCALITY> <REGION>CO</REGION> <PCODE>80202</PCODE> <CTRY>USA</CTRY> </ADR> <TEL><HOME/><VOICE/><NUMBER>303-555-1212</NUMBER></TEL> <TEL><HOME/><FAX/><NUMBER/></TEL> <TEL><HOME/><MSG/><NUMBER/></TEL> <ADR> <HOME/> <EXTADD/> <STREET/> <LOCALITY>Denver</LOCALITY> <REGION>CO</REGION> <PCODE>80209</PCODE> <CTRY>USA</CTRY> </ADR> <EMAIL><INTERNET/><PREF/><USERID>stpeter@jabber.org</USERID></EMAIL> <JABBERID>stpeter@jabber.org</JABBERID> <DESC> Check out my blog at https://stpeter.im/ </DESC> </vCard> </iq>
然后服务器返回IQ-result(或者IQ-error)
例子6. 服务器返回成功
<iq id='v2' to='stpeter@jabber.org/roundabout' type='result'/>
注意,上述的IQ-Set只有一个元素发生了变化(<DESC/>元素)。目前没有可以局部更新vCard的方法,为了更新任何一部分的vCard,必须发送完整的vCard到服务器。
如果用户企图执行一个关于其他用户的vCard的IQ set(即,把to地址设为不是发送者的纯JID),那么服务必须(MUST)返回一个节错误,应该为 <forbidden/> 或 <not-allowed/>.
例子 7. 实体试图修改别人的vCard
<iq id='v2' to='stpeter@jabber.org/roundabout' type='error'> <error type='auth'> <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
查看另一个用户的vCard
用户可能要查看另一个用户的vCard,通过发送类型为get的IQ到另一个用户的纯JID
例子8. 请求另一个用户的vCard
<iq from='stpeter@jabber.org/roundabout' id='v3' to='jer@jabber.org' type='get'> <vCard xmlns='vcard-temp'/> </iq>
根据XMPP Core 5,一个兼容的服务器必须(MUST)代表(被请求者)响应请求并且不将IQ转发到被请求者的已连接的资源。
例子9. 接收另一个用户的vCard
<iq from='jer@jabber.org' to='stpeter@jabber.org/roundabout' type='result' id='v3'> <vCard xmlns='vcard-temp'> <FN>JeremieMiller</FN> <N> <GIVEN>Jeremie</GIVEN> <FAMILY>Miller</FAMILY> <MIDDLE/> </N> <NICKNAME>jer</NICKNAME> <EMAIL><INTERNET/><PREF/><USERID>jeremie@jabber.org</USERID></EMAIL> <JABBERID>jer@jabber.org</JABBERID> </vCard> </iq>
如果不存在 vCard 或该用户不存在, 服务必须 MUST 返回一个节错误, 它应该 SHOULD 是 <service-unavailable/> 或 <item-not-found/>.
例子 10. 无vCard
<iq id='v3' to='stpeter@jabber.org/roundabout' type='error'> <vCard xmlns='vcard-temp'/> <error type='cancel'> <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
注意:vCard的使用不受限于自然人用户帐号。比如,XMPP服务器可以有自己的vCard,该vCard可以被服务器主机上的组织,物理位置,相关的联系地址定义。
确定支持
如果一个实体支持 vcard-temp 协议, 它必须 MUST 报告这一点,通过在对服务发现 6信息请求disco#info的回应中包含一个服务发现特性 "vcard-temp" (关于发行一个或多个名字空间,参见协议名字空间):
例子 11. 服务发现信息请求
<iq type='get' from='juliet@capulet.lit/balcony' to='capulet.lit' id='disco1'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>
例子 12. 服务发现信息应答
<iq type='result' from='capulet.lit' to='juliet@capulet.lit/balcony' id='disco1'> <query xmlns='http://jabber.org/protocol/disco#info'> ... <feature var='vcard-temp'/> ... </query> </iq>
这个信息也可以通过 实体能力 7 为那些共享出席信息的实体封装.
安全事项
发送到Jabber服务器的vCard信息是在整个世界范围内可读的;因此,用户应该谨慎地决定更新哪些信息。(比如,街道地址,个人电话,email地址)。
IANA事项
本文档与互联网编号分配授权机构 8无关。
XMPP注册事项
协议名字空间
XMPP Registrar 9在它的协议名字空间注册项中包含了'vcard-temp'(参考<http://www.xmpp.org/registrar/namespaces.html>)。
URI查询类型
作为由XMPP URI Query Components 10授权的机构,XMPP登记处维护着一个用于 XMPP URIs 的查询和键-值对的注册项(见<http://www.xmpp.org/registrar/querytypes.html>)。
vCard的查询类型是作为vCard相关的动作被注册的。
例子13. vCard 动作:IRI/URI
xmpp:romeo@montague.net?vcard
例子14. vCard动作:结果节
<iq to='romeo@montague.net' type='get'> <vCard xmlns='vcard-temp'/> </iq>
下面的提交注册了vCard查询类型。
<querytype> <name>vcard</name> <proto>vcard-temp</proto> <desc>enables retrieval of an entity's vCard data</desc> <doc>XEP-0054</doc> </querytype>
实现注意事项
注意以下事项:
- 这个被包含的元素的正确大小写是<vCard/>(XML元素名称是大小写敏感的)。
- 所有在<vCard/>中的元素必须(MUST)是大写的(即使和draft-dawson-vcard-xml-dtd-01中的不一致)
- 国家的简称是<CTRY/>元素,不是<COUNTRY/>元素(即使和draft-dawson-vcard-xml-dtd-01不一致)。
- 电话号码必须(MUST)包含在<NUMBER>元素里,而不是包含在CDATA中的<TEL/>元素里
- 如果<TEL/>元素没有包含电话号码,那么空的<NUMBER/>也必须被包含。
- Email地址必须(MUST)包含在<USERID>元素里,而不是CDATA中的<EMAIL/>元素
- 一些Jabber实现会添加version属性到<vCard/>元素,属性值为2.0或者3.0。DTD是不正确的,draft-dawson-vcard-xml-dtd-01中的例子明确的指出通过version属性表示版本信息,而不是DTD中定义的<VERSION/>元素。然而,为了符合draft-dawson-vcard-xml-dtd-01,版本信息应该被设置为3.0,不是2.0。
DTD
下面的DTD包含了轻微修改过的draft-dawson-vcard-xml-dtd-01版本。除此外,其他唯一修改的地方就是添加JABBERID和DESC元素。
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright (C) The Internet Society (2000). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implmentation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process MUST be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. --> <!-- ==== --> <!-- NOTE: the following root element is not used in the modified vcard-temp DTD published by the Jabber project (now XMPP Standards Foundation) and is included here only for historical purposes; implementations that comply with vcard-temp must specify the root element as vCard, not xCard. --> <!-- Root element and container for one or more vCard objects --> <!ELEMENT xCard (vCard)+> <!-- Individual vCard container --> <!ELEMENT vCard ( (VERSION, FN, N), (NICKNAME?, PHOTO?, BDAY?, ADR?, LABEL?, TEL?, EMAIL?, JABBERID?, MAILER?, TZ?, GEO?, TITLE?, ROLE?, LOGO?, AGENT?, ORG?, CATEGORIES?, NOTE?, PRODID?, REV?, SORT-STRING?, SOUND?, UID?, URL?, CLASS?, KEY?, DESC? )*)> <!-- vCard specification version property. This MUST be 2.0, if the document conforms to RFC 2426. --> <!ELEMENT VERSION (#PCDATA)> <!-- Formatted or display name property. --> <!ELEMENT FN (#PCDATA)> <!-- Structured name property. Name components with multiple values must be specified as a comma separated list of values. --> <!ELEMENT N ( FAMILY?, GIVEN?, MIDDLE?, PREFIX?, SUFFIX?)> <!ELEMENT FAMILY (#PCDATA)> <!ELEMENT GIVEN (#PCDATA)> <!ELEMENT MIDDLE (#PCDATA)> <!ELEMENT PREFIX (#PCDATA)> <!ELEMENT SUFFIX (#PCDATA)> <!-- Nickname property. Multiple nicknames must be specified as a comma separated list value. --> <!ELEMENT NICKNAME (#PCDATA)> <!-- Photograph property. Value is either a BASE64 encoded binary value or a URI to the external content. --> <!ELEMENT PHOTO ((TYPE, BINVAL) | EXTVAL)> <!-- Birthday property. Value must be an ISO 8601 formatted date or date/time value. --> <!ELEMENT BDAY (#PCDATA)> <!-- Structured address property. Address components with multiple values must be specified as a comma separated list of values. --> <!ELEMENT ADR ( HOME?, WORK?, POSTAL?, PARCEL?, (DOM | INTL)?, PREF?, POBOX?, EXTADD?, STREET?, LOCALITY?, REGION?, PCODE?, CTRY? )> <!ELEMENT POBOX (#PCDATA)> <!ELEMENT EXTADD (#PCDATA)> <!ELEMENT STREET (#PCDATA)> <!ELEMENT LOCALITY (#PCDATA)> <!ELEMENT REGION (#PCDATA)> <!ELEMENT PCODE (#PCDATA)> <!ELEMENT CTRY (#PCDATA)> <!-- Address label property. --> <!ELEMENT LABEL ( HOME?, WORK?, POSTAL?, PARCEL?, (DOM | INTL)?, PREF?, LINE+ )> <!-- Individual label lines. --> <!ELEMENT LINE (#PCDATA)> <!-- Telephone number property. --> <!ELEMENT TEL ( HOME?, WORK?, VOICE?, FAX?, PAGER?, MSG?, CELL?, VIDEO?, BBS?, MODEM?, ISDN?, PCS?, PREF?, NUMBER )> <!-- Phone number value. --> <!ELEMENT NUMBER (#PCDATA)> <!-- Email address property. Default type is INTERNET. --> <!ELEMENT EMAIL ( HOME?, WORK?, INTERNET?, PREF?, X400?, USERID )> <!ELEMENT USERID (#PCDATA)> <!-- NOTE: the following element was added by the Jabber project (now XMPP Standards Foundation) to handle Jabber IDs; the value must be in the form of user@host --> <!ELEMENT JABBERID (#PCDATA)> <!-- Mailer (e.g., Mail User Agent Type) property. --> <!ELEMENT MAILER (#PCDATA)> <!-- Time zone's Standard Time UTC offset. Value must be an ISO 8601 formatted UTC offset. --> <!ELEMENT TZ (#PCDATA)> <!-- Geographical position. Values are the decimal degress of LATitude and LONgitude. The value should be specified to six decimal places.--> <!ELEMENT GEO (LAT, LON)> <!-- Latitude value. --> <!ELEMENT LAT (#PCDATA)> <!-- Longitude value. --> <!ELEMENT LON (#PCDATA)> <!-- Title property. --> <!ELEMENT TITLE (#PCDATA)> <!-- Role property. --> <!ELEMENT ROLE (#PCDATA)> <!-- Organization logo property. --> <!ELEMENT LOGO ((TYPE, BINVAL) | EXTVAL)> <!-- Administrative agent property. --> <!ELEMENT AGENT (vCard | EXTVAL)> <!-- Organizational name and units property. --> <!ELEMENT ORG (ORGNAME, ORGUNIT*)> <!ELEMENT ORGNAME (#PCDATA)> <!ELEMENT ORGUNIT (#PCDATA)> <!-- Application specific categories property. --> <!ELEMENT CATEGORIES (KEYWORD+)> <!ELEMENT KEYWORD (#PCDATA)> <!-- Commentary note property. --> <!ELEMENT NOTE (#PCDATA)> <!-- Identifier of product that generated the vCard property. --> <!ELEMENT PRODID (#PCDATA)> <!-- Last revised property. The value must be an ISO 8601 formatted UTC date/time. --> <!ELEMENT REV (#PCDATA)> <!-- Sort string property. --> <!ELEMENT SORT-STRING (#PCDATA)> <!-- Formatted name pronunciation property. The value is either a textual phonetic pronunciation, a BASE64 encoded binary digital audio pronunciation or a URI to an external binary digital audio pronunciation.--> <!ELEMENT SOUND (PHONETIC | BINVAL | EXTVAL)> <!-- Textual phonetic pronunciation. --> <!ELEMENT PHONETIC (#PCDATA)> <!-- Unique identifier property. --> <!ELEMENT UID (#PCDATA)> <!-- Directory URL property. --> <!ELEMENT URL (#PCDATA)> <!-- NOTE: the following element was added by the Jabber project (now XMPP Standards Foundation) to handle free-form descriptive text. --> <!ELEMENT DESC (#PCDATA)> <!-- Privacy classification property. --> <!ELEMENT CLASS (PUBLIC | PRIVATE | CONFIDENTIAL)> <!ELEMENT PUBLIC EMPTY> <!ELEMENT PRIVATE EMPTY> <!ELEMENT CONFIDENTIAL EMPTY> <!-- Authentication credential or encryption key property. --> <!ELEMENT KEY (TYPE?, CRED)> <!ELEMENT CRED (#PCDATA)> <!-- ==== --> <!-- Common elements. --> <!-- Addressing type indicators. --> <!ELEMENT HOME EMPTY> <!ELEMENT WORK EMPTY> <!ELEMENT POSTAL EMPTY> <!ELEMENT PARCEL EMPTY> <!ELEMENT DOM EMPTY> <!ELEMENT INTL EMPTY> <!ELEMENT PREF EMPTY> <!ELEMENT VOICE EMPTY> <!ELEMENT FAX EMPTY> <!ELEMENT PAGER EMPTY> <!ELEMENT MSG EMPTY> <!ELEMENT CELL EMPTY> <!ELEMENT VIDEO EMPTY> <!ELEMENT BBS EMPTY> <!ELEMENT MODEM EMPTY> <!ELEMENT ISDN EMPTY> <!ELEMENT PCS EMPTY> <!ELEMENT INTERNET EMPTY> <!ELEMENT X400 EMPTY> <!-- Format type parameter. --> <!ELEMENT TYPE (#PCDATA)> <!-- Base64 encoded binary value. --> <!ELEMENT BINVAL (#PCDATA)> <!-- URI to external binary value --> <!ELEMENT EXTVAL (#PCDATA)> <!-- ==== -->
附录
附录A:文档信息
Source Control: HTML RSS This document in other formats: XML PDF
系列:XEP
序号:0054
发布者:XMPP标准基金会
状态:活跃的
类型:历史的
版本:1.2
最后更新:2008-07-16
批准机构:XMPP理事会
依赖标准: XMPP Core
替代标准:无
被替代标准:无
缩略名:vcard-temp
附录B:作者信息
Peter Saint-Andre
Email: stpeter@jabber.org
JabberID: stpeter@jabber.org
URI: https://stpeter.im/
附录C:法律通告
版权
XMPP扩展协议的版权(1999-2008)归XMPP标准化基金会(XSF)所有.
权限
特此授权,费用全免,对任何获得本协议副本的人,对使用本协议没有限制,包括不限制在软件程序中实现本协议,不限制在网络服务中布署本协议,不限制拷贝,修改,合并,发行,翻译,分发,转授,或销售本协议的副本,被允许使用本协议做了以上工作的人士,应接受前述的版权声明和本许可通知并且必须包含在所有的副本或实质性部分的规格中.除非单独的许可,被重新分发的修改工作,不得含有关于作者,标题,编号,或出版者的规格的误导性资料,并不得宣称修改工作是由本文的作者,作者所属的任何组织或项目,或XMPP标准基金会签注。
免责声明'
## 特别注意:本协议是提供的“原样”的基础,没有担保或任何形式的条件,明示或暗示,包括,但不限于任何担保或关于名称,非侵权性,适销性或适合作某一特定目的的条件. ##
责任限制
在任何情况下以及没有任何法律规定时,不论是侵权行为(包括疏忽),合同或其它方面,除非根据适用法律的要求(如蓄意和有严重疏忽行为)或以书面形式同意,XMPP标准基金会或任何作者不对本协议所造成的损失承担责任,包括任何直接,间接,特殊,偶发,或任何从本协议出,入,连接的字符产生的或实现,布署或其他对本协议的使用导致的相应的损害赔偿(包括但不限于善意的损失,停止作业,电脑失灵或故障,或任何和所有其他商业损害或损失) ,即使XMPP标准基金会或作者已被告知此类损害的可能性。
知识产权的一致性
XMPP扩展协议完全遵守XSF的知识产权策略(可在<http://www.xmpp.org/extensions/ipr-policy.shtml>找到副本或写信给XMPP标准基金会, 1899 Wynkoop Street, Suite 600, Denver, CO 80202 USA).
附录D:和XMPP的关系
可扩展的消息和出席信息协议 (XMPP) 定义于 XMPP Core (RFC 3920) 和 XMPP IM (RFC 3921) 规范里,由 XMPP标准基金会贡献到由依据RFC 2026成立的互联网工程人物组管理的互联网标准流程 Internet Standards Process. 本文定义的任何协议已在互联网标准流程之外开发,并且被理解为 XMPP 的扩展而不是一个XMPP本身的演化, 开发, 或修改.
附录E:讨论地点
主要的XMPP扩展协议讨论地点是 <standards@xmpp.org> 讨论列表.
在 xmpp.org 的其它讨论列表中的讨论可能也有合适的; 所有的列表见 <http://xmpp.org/about/discuss.shtml> .
勘误表可以发送邮件到 <editor@xmpp.org>.
附录F:需求一致性
以下用于本文的需求关键字的解释见于 RFC 2119: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".
附录G:备注
- RFC 2426: vCard MIME Directory Profile <http://tools.ietf.org/html/rfc2426>.
- 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-01.txt>.
- 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-02.txt>.
- 本文被归档于 <http://www.watersprings.org/pub/id/draft-dawson-vcard-xml-dtd-03.txt>.
- RFC 3920: 可扩展的消息和出席信息协议 (XMPP): Core <http://tools.ietf.org/html/rfc3920>.
- XEP-0030: Service Discovery <http://xmpp.org/extensions/xep-0030.html>.
- XEP-0115: Entity Capabilities <http://xmpp.org/extensions/xep-0115.html>.
- 互联网编号分配机构(IANA) 是用于互联网协议的唯一性参数值分配的核心协调者, 例如号码和URI计划. 更多信息, 见 <http://www.iana.org/>.
- XMPP登记员XMPP Registrar 维护着一个保留的协议名字空间以及用于由XMPP标准基金会批准的XMPP扩展协议的上下文参数的注册项的列表. 更多信息, 见 <http://xmpp.org/registrar/>.
- XEP-0147: XMPP URI Query Components <http://xmpp.org/extensions/xep-0147.html>.
附录H:修订历史
注意: 本协议的旧版本可能在 http://xmpp.org/extensions/attic/ 还可用
版本 1.2 (2008-07-16)
更多完全定义的错误情景; 增加了确定支持的章节.
(psa)
版本 1.1 (2003-03-26)
澄清了特定历史的不准确并增加了连接到 Frank Dawson's 的互联网草案的归档版本.
(psa)
版本 1.0 (2003-01-09)
通过Jabber理事会投票更新状态为活跃.
(psa)
版本 0.2 (2002-11-06)
很多小修改; 增加了实现注意事项.
(psa)
版本 0.1 (2002-10-31)
初始版本.
(psa)
结束