XEP-0147

来自Jabber/XMPP中文翻译计划
跳转到: 导航, 搜索


本文的英文原文来自XEP-0147

XEP-0147: XMPP URI Scheme查询组件

摘要: 本文定义了一个查询组件的注册项用于XMPP IRIs/URIs的上下文,也指定了注册项的值的首次提交步骤.
作者: Peter Saint-Andre
版权: © 1999 - 2012 XMPP标准化基金会(XSF). 参见法律通告.
状态: 活跃
类型: 信息
版本: 1.2
最后更新日期: 2006-09-13

注意: 这个信息性的协议定义了一个已经被XMPP评议会 和/或 XSF董事会批准的最佳实践或协议范本. 该协议被鼓励实现并且这一最佳实践或或协议范本适于部署到生产环境.


目录

简介

RFC 5122 1 定义了一个统一资源标识符(URI)方案用于把用可扩展的消息和出席信息协议(参见 XMPP核心 3)来通讯的实体的地址格式化成 URIs 和互联网资源标识符(IRIs) 2. 这些标识符使得非类似数据库和web浏览器的本地应用能对XMPP实体进行鉴定和与之交互.

无论如何, RFC 5122 故意在查询组件留下开放式的潜在值, 未对查询提供一个常用"操作"列表(例如, 发送小西或加入聊天室), 并且未指定推荐的"键-值" 对来用于这类操作作的上下文. 所以, 本文定义了这类操作的注册项和 键-值 对(由 XMPP注册项 4) 维护并为那个注册项指定一组初始值.

本文组织如下:

注意: XMPP URI scheme 的格式, 包括查询组件的格式, 完全被指定并正式地被定义是在 RFC 5122 ; 本文未以任何方式修改 xmpp URI scheme 并假定读者对 RFC 5122 各方面很熟悉.

术语

本文从 RFC 3986 5, RFC 3987 6, 和 RFC 5122 继承术语.

查询操作

通过XMPP IRI/URI和XMPP实体的交互来触发的操作的范围,接本上和XMPP扩展的范围一样广泛. 本文不专注于详尽地定义所有这类潜在的操作. 然而, 以下操作可能一般人都会感兴趣的:

  1. 发送一条消息.
  2. 添加或删除一个名册条目.
  3. 订阅或取消订阅一个实体的出席信息.
  4. 确定一个实体的服务发现 7 信息.
  5. 加入一个群聊房间(见多用户聊天 8).
  6. 请求对一个实体执行特定的命令 9.
  7. 接收和一个实体相关的电子名片 10 数据.
  8. 订阅或取消订阅一个发布-订阅 11 节点.
  9. 通过带内注册 12来注册另一个实体.
  10. 发起和另一个实体的文件传输 (见 文件传输 1213]]).

对于每个这类操作, XMPP注册项维护一个推荐的(RECOMMENDED) "查询类型" (这可以被认为是操作的名称或 "动词"; 语法和语义参见 RFC 5122) 以及如果必要的话,可选的(OPTIONAL)用于 键-值 对的键列表.

RFC 3920RFC 3921相关的查询类型和 键-值 对定义于此; 和XMPP标准基金会的XEP系列定义的协议相关的查询类型和 键-值 对定义于相应的XMPP扩展协议规范中.

消息操作

对于XMPP IRI/URI来说触发特定的接口用来发送一个XMPP消息节可能是最受欢迎的. 对于这个操作,建议的查询类型是"message". 如果没有提供 键-值 对, 和包含了查询类型"message"的 XMPP IRI/URI交互应该触发一个接口允许用户输入一个XMPP消息文本和其他相关的参数(例如, 一个消息标题或 XHTML-IM [[XEP-0147#附录G:备注|14] 加成).

示例1. 基本消息操作

xmpp:romeo@montague.net?message

一个查询类型为"message"的查询组件可以指定各种 键-值 对. 以下三个键和XMPP IM 15 中的'jabber:client'命名空间的XML schema定义的<message/>节的子元素相关:

  1. subject
  2. body
  3. thread

另外, 以下三个键和'jabber:client'命名空间的XML schema定义的<message/>节的属性相关('to'属性是不必要的, 因为它由 IRI/URI中包含的XMPP Address提供):

  1. from
  2. id
  3. type

其他键可以在XMPP注册处去注册但是没有在这里定义.

示例2. 带键的消息操作: IRI/URI

xmpp:romeo@montague.net?message;subject=Test%20Message;body=Here%27s%20a%20test%20message

示例3. M带键的操作: 结果节

<message to='romeo@montague.net'>
  <subject>Test Message</subject>
  <body>Here&apos;s a test message.</body>
</message>

名册管理操作

'jabber:iq:roster' 命名空间提供一个机制来管理XMPP名册(也称为"联系人列表"). 这个命名空间定义于RFC3921. 定义了以下操作.

添加名册条目

用于添加条目到名册或在名册里修改条目的已注册的查询类型是 "roster" (实际上添加和修改是没区别的). 一个包含了 "roster" 查询类型的 XMPP IRI/URI 可以也包含至少一个 "name" 键,它的值映射到'jabber:iq:roster'命名空间的<item/>元素的 'name' 属性, 而且可以包含一个 "group" 键,它的值映射为<item/>元素的<group/>子元素的字符串数据.

示例4. 名册操作: IRI/URI

xmpp:romeo@montague.net?roster

示例5. 名册操作: 结果节

<iq type='set'>
  <query xmlns='jabber:iq:roster'>
    <item jid='romeo@montague.net'/>
  </query>
</iq>

示例6. 对名册的Name操作: IRI/URI

xmpp:romeo@montague.net?roster;name=Romeo%20Montague

示例7. 对名册的Name操作: 结果节’‘’

<iq type='set'>
  <query xmlns='jabber:iq:roster'>
    <item jid='romeo@montague.net' name='Romeo Montague'/>
  </query>
</iq>

示例8. 对名册的Name和Group操作: IRI/URI

xmpp:romeo@montague.net?roster;name=Romeo%20Montague;group=Friends

示例9. 对名册的Name和Group操作: 结果节

<iq type='set'>
  <query xmlns='jabber:iq:roster'>
    <item jid='romeo@montague.net' name='Romeo Montague'>
      <group>Friends</group>
    </item>
  </query>
</iq>

注意: 还未确定包含多个group的方法(如果有的话).

删除名册条目

'jabber:iq:roster'命名空间包含了一个机制用来移除XMPP名册条目. 用来从名册中移除一个条目的已注册查询类型是"remove".

示例10. 名册移除操作: IRI/URI

xmpp:romeo@montague.net?remove

示例11. 名册移除操作: 结果节

<iq type='set'>
  <query xmlns='jabber:iq:roster'>
    <item jid='romeo@montague.net' subscription='remove'/>
  </query>
</iq>

订阅管理操作

和名册管理紧密相关的是出席信息订阅管理. 在XMPP中, 订阅管理是通过<presence/>节的特定值来处理的, 如RFC3921所述. 定义了以下操作

订阅

当一个实体通过一个XMPP IRI/URI订阅了另一个实体的出席信息, 被调用的XMPP应用应该首先发送一个下面展示的添加名册的节(这和RFC3921中的建议是一致的).

示例12. 订阅操作: IRI/URI

xmpp:romeo@montague.net?subscribe

示例13. 订阅操作: 结果节

<iq type='set'>
  <query xmlns='jabber:iq:roster'>
    <item jid='romeo@montague.net'/>
  </query>
</iq>
 
<presence to='romeo@montague.net' type='subscribe'/>

取消订阅

XMPP包含了一个机制用于从一个实体取消订阅. 这种行为的已注册查询类型是"unsubscribe".

示例14. 取消订阅操作: IRI/URI

xmpp:romeo@montague.net?unsubscribe

示例15. 取消订阅操作: 结果节

<presence to='romeo@montague.net' type='unsubscribe'/>

国际化事项

对于XMPP IRIs/URIs的国际化事项定义于 RFC 5122 ; 读者可以参考那个文档来了解相关问题的全部讨论.

展示给自然人用户的应用程序特有的数据的本地化(例如, 封装在 键-值 对中的) 是"使用协议"的责任.

安全事项

对于XMPP IRIs/URIs的安全事项定义于 RFC 5122 .

完成一些定义于此的操作将导致对一个实体的帐户的修改, 对信息的订阅, 注册到服务, 和其他实体通讯, 完成特定的命令, 类似的等等. 自然的, 这些修改, 信息, 服务, 以及通讯是潜在的不受欢迎的(例如, 加入一个你对其主题没兴趣或甚至有冒犯加入的用户的行为的聊天室). 被调用的应用应该适当地对一个自然人用户警告该操作完成后的潜在后果.

IANA事项

本文不要求和 互联网号码分配机构(IANA) 16交互. 如果将来 IANA 应该希望维护一个XMPP URI/IRI 查询组件的注册项, 那么XMPP注册处将努力协作把注册项从XMPP注册处中迁移到IANA.

XMPP注册处事项

XMPP IRI/URI查询类型注册项

XMPP注册处维护一个查询类型值的注册项(见 <http://xmpp.org/registrar/querytypes.html>).

注册过程

为了提交新值到该注册项, 注册者应该按下述的表格定义一个XML片段并且把它包含在相关的XMPP扩展协议中或把它发送到email地址 <registrar@xmpp.org>:

<querytype>
  <name>the name of the querytype (e.g., "pubsub")</name>
  <proto>
    the namespace of associated protocol output 
    (e.g., "http://jabber.org/protocol/pubsub")
  </proto>
  <desc>a natural-language description of the querytype</desc>
  <doc>the document in which the querytype is specified</doc>
  <keys>
    <key>
      <name>the name of the key (e.g., "action")</name>
      <desc>a natural-language description of the key</desc>
      <values>
        <value>
          <name>the name of a value (e.g., "subscribe")</name>
          <desc>a natural-language description of the value</desc>
        </value>
      </values>
    </key>
  </keys>
</querytype>

注意: 在<querytype/>元素中, <keys/>子元素是可选的; 在任何给定的<key/>元素中, <values/>子元素也是可选的.

注册者可以同时注册多个查询类型, 每个包含一个独立的<querytype/>元素.

注册项

以下提交项注册了和XMPP RFCs相关的参数. 对于和XMPP扩展相关的提交项, 参考相关的XMPP扩展协议规范.

<querytype>
  <name>message</name>
  <proto>jabber:client</proto>
  <desc>enables sending of an XMPP message stanza</desc>
  <doc>XEP-0147</doc>
  <keys>
    <key>
      <name>subject</name>
      <desc>a subject for the message per the "jabber:client" schema</desc>
    </key>
    <key>
      <name>body</name>
      <desc>a body for the message per the "jabber:client" schema</desc>
    </key>
    <key>
      <name>thread</name>
      <desc>a Thread ID for the message per the "jabber:client" schema</desc>
    </key>
    <key>
      <name>from</name>
      <desc>a from address for the message per the "jabber:client" schema</desc>
    </key>
    <key>
      <name>id</name>
      <desc>an ID for the message per the "jabber:client" schema</desc>
    </key>
    <key>
      <name>type</name>
      <desc>the message type per the "jabber:client" schema</desc>
      <values>
        <value>
          <name>chat</name>
          <desc>a message of type "chat"</desc>
        </value>
        <value>
          <name>groupchat</name>
          <desc>a message of type "groupchat"</desc>
        </value>
        <value>
          <name>headline</name>
          <desc>a message of type "headline"</desc>
        </value>
        <value>
          <name>normal</name>
          <desc>a message of type "normal"</desc>
        </value>
      </values>
    </key>
  </keys>
</querytype>
 
<querytype>
  <name>remove</name>
  <proto>jabber:iq:roster</proto>
  <desc>enables removing a roster item</desc>
  <doc>XEP-0147</doc>
</querytype>
 
<querytype>
  <name>roster</name>
  <proto>jabber:iq:roster</proto>
  <desc>enables adding or editing a roster item</desc>
  <doc>XEP-0147</doc>
  <keys>
    <key>
      <name>group</name>
      <desc>the user-assigned group for the roster item</desc>
    </key>
    <key>
      <name>name</name>
      <desc>the user-assigned name for the roster item</desc>
    </key>
  </keys>
</querytype>
 
<querytype>
  <name>subscribe</name>
  <proto>jabber:client</proto>
  <desc>enables sending a presence subscription request</desc>
  <doc>XEP-0147</doc>
</querytype>
 
<querytype>
  <name>unsubscribe</name>
  <proto>jabber:client</proto>
  <desc>enables unsubscribing from an entity's presence</desc>
  <doc>XEP-0147</doc>
</querytype>

附录

附录A:文档信息

系列:XEP

序号:0147

发布者:XMPP标准基金会

状态:活跃

类型:信息

版本:1.2

最后更新:2006-09-13

批准机构:XMPP理事会

依赖标准:XMPP Core, RFC 5122, XEP-0053

取代: 无

被替代标准:无

缩略名:querytypes

注册项: <http://xmpp.org/registrar/querytypes.html>

原文控制: HTML

本文的其它格式: XML PDF


附录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:备注

  1. RFC 5122: 用于可扩展的消息和出席信息协议(XMPP)的国际化资源标识符(IRIs)和统一资源标识符(URIs) <http://tools.ietf.org/html/rfc5122>.
  2. IRIs和URIs之间的不同, 参见 RFC 3987.
  3. RFC 6120: 可扩展的消息和出席信息协议(XMPP): 核心 <http://tools.ietf.org/html/rfc6120>.
  4. XMPP注册处维护一个保留的协议命名空间的列表和在XMPP标准基金会批准的XMPP扩展协议的上下文中使用的参数的注册项的列表. 更多信息见 <http://xmpp.org/registrar/>.
  5. RFC 3986: 统一资源标识符(URI): 通用语法 <http://tools.ietf.org/html/rfc3986>.
  6. RFC 3987: 国际化资源标识符(IRIs) <http://tools.ietf.org/html/rfc3987>.
  7. XEP-0030: 服务发现 <http://xmpp.org/extensions/xep-0030.html>.
  8. XEP-0045: 多用户聊天 <http://xmpp.org/extensions/xep-0045.html>.
  9. XEP-0050: 特定命令 <http://xmpp.org/extensions/xep-0050.html>.
  10. XEP-0054: 电子名片 <http://xmpp.org/extensions/xep-0054.html>.
  11. XEP-0060: 发布-订阅 <http://xmpp.org/extensions/xep-0060.html>.
  12. XEP-0077: 带内注册 <http://xmpp.org/extensions/xep-0077.html>.
  13. XEP-0096: 文件传输 <http://xmpp.org/extensions/xep-0096.html>.
  14. XEP-0071: XHTML-IM <http://xmpp.org/extensions/xep-0071.html>.
  15. RFC 6121: 可扩展的消息和出席信息协议(XMPP): 即时消息和出席信息 <http://tools.ietf.org/html/rfc6121>.
  16. 互联网号码分配机构(IANA)是为互联网协议分配唯一性的参数值的中间协调者, 类似端口号码和 URI schemes. 更多信息参见 <http://www.iana.org/>.

附录H:修订历史

注意: 本协议的旧版本可能在 http://xmpp.org/extensions/attic/ 还可用

Version 1.2 (2006-09-13)
Removed probe action.
(psa)
Version 1.1 (2006-06-19)
Added actions for roster removal, presence unsubscription, and cancellation of registration; moved querytypes related to XMPP extensions from this document to the relevant XMPP Extension Protocol specifications.
(psa)
Version 1.0 (2006-03-23)
Per a vote of the Jabber Council, advanced to Active.
(psa)
Version 0.7 (2006-03-16)
Added actions for ad-hoc commands and vCard retrieval; clarified some explanatory text.
(psa)
Version 0.6 (2005-12-01)
Updated to reflect draft-saintandre-xmpp-iri-03; modified file transfer query operations to handle both send and receive use cases.
(psa)
Version 0.5 (2005-09-05)
Updated to reflect draft-saintandre-xmpp-iri-01; added file querytype for file transfer.
(psa)
Version 0.4 (2005-06-06)
Updated to reflect draft-saintandre-xmpp-iri-00.
(psa)
Version 0.3 (2005-02-28)
Updated to reflect draft-saintandre-xmpp-uri-08 and subsequent XMPP WG discussion; removed use cases for editing roster items, removing roster items, leaving chatrooms, unsubscribing, and unregistering (these make more sense from within a dedicated client); added use case for simultaneously joining a room and inviting other participants; further specified security considerations.
(psa)
Version 0.2 (2004-11-17)
Updated to reflect draft-saintandre-xmpp-uri-07; specified Service Discovery usage.
(psa)
Version 0.1 (2004-11-12)
Initial version.
(psa)

结束

个人工具