子元素
如 扩展名字空间extended namespaces(第二章第四节)所述, 一个出席信息节可以(MAY)包含任何适当名字空间的子元素.
和缺省名字空间声明一致, 缺省出席信息节的名字空间是'jabber:client' 或 'jabber:server', 定义了某几个允许的出席信息节的子元素. 如果出席信息节的类型是 \它必须(MUST)包含一个
1.
展示
可选的(OPTIONAL)
? away -- 实体或资源临时离开. ? chat -- 实体或资源在聊天中是激活的. ? dnd -- 实体或资源是忙(dnd = \不要打扰\
? xa -- 实体或资源是长时间的离开(xa = \长时间离开\
如果没有提供
状态
可选的(OPTIONAL)
9
优先权
可选的(OPTIONAL)
IQ语法
IQ节提供一个结构化的请求-应答机制. 这个机制的基本语义学(例如, 'id'属性是必需的(REQUIRED))定义在[XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920], 然而完成特定用例所需要的特定语义的所有案例定义在扩展名字空间extended namespace(第二章第四节)之中(注意'jabber:client'和'jabber:server'名字空间没有定义除通用的
扩展名字空间
因为在\或\名字空间中定义的三个XML节类型(也包括它们的属性和子元素)提供了一个基本功能级用于消息和出席信息, XMPP使用XML名字空间来扩展节用于提供额外的功能, 所以一个消息或出席信息节可以(MAY)包含一个或更多可选的子元素表达扩展消息含义的内容(例如, 一个XHTML格式版本的消息主体), 并且一个IQ节可以(MAY)包含一个这样的子元素. 这个子元素可以(MAY)有任何名字并且可以(MUST)拥有一个'xmlns'名字空间声明(不同于\\或\http://etherx.jabber.org/streams\定义所有包含在子元素中的数据.
对于任何特定的扩展名字空间的支持在任何实现中的一部分是可选的(OPTIONAL)(除了在这里定义的扩展名字空间以外). 如果一个实体不理解这样一个名字空间, 实体被期望的行为依赖于这个实体是(1) 接收者 或 (2) 一个正在路由到接收者的实体
接收者: 如果一个接收者接收了一个包含不理解的子元素的节, 它应该(SHOULD)忽略那个特定的XML数据,例如, 它应该(SHOULD)不处理它或不向用户或相关的应用程序(如果有的话)显示它. 具体来说:
? 如果一个实体接收了一个消息或出席信息节包含一个不理解的名字空间, 在
节的未知名字空间的这部分应该(SHOULD)被忽略.
10
? 如果一个实体接收了一个消息节中仅有的一个子元素是不理解的, 它必须
(MUST)忽略整个节.
? 如果一个实体接收了一个类型\或\的IQ节包含一个不理解的子元素,
这个实体应该(SHOULD)返回一个类型为\的
路由: 如果一个路由实体(通常是一个服务器)处理一个包含它不理解的子元素的节, 它应该(SHOULD)原封不动地把它转给接收者而忽略相关的XML数据.
会话的建立
绝大部分基于XMPP的消息和出席信息应用是由一个客户端-服务器体系结构实现的,为了参加期望的即时消息和出席信息活动,需要客户端在服务器上建立一个会话. 无论如何, 在客户端能够建立一个即时消息和出席信息会话之前有很多前提必须(MUST)满足. 它们是:
1. 流验证 -- 客户端在尝试建立一个会话或发送任何XML节之前必须(MUST)完
成[XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920]中定义的流验证.
2. 资源绑定 -- 完成流验证之后, 一个客户端必须(MUST)绑定一个资源到流上,
使得客户端的地址符合
[XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920]规定的术语来说就是一个 已连接的资源\
如果一个服务器支持会话, 在完成一个[XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920]定义的流验证之后它必须(MUST)在它向客户端声明的流特性中包含一个符合'urn:ietf:params:xml:ns:xmpp-session'名字空间的
xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'> 收到需要会话确立的通知之后(并且是在完成资源绑定之后), 客户端如果想使用即时消息和出席信息功能必须(MUST)建立一个会话; 它向服务器发送一个符合'urn:ietf:params:xml:ns:xmpp-session'名字空间的类型为\并包含空的 步骤 1: 客户端向服务器请求会话: 11 步骤 2: 服务器通知客户端会话已经建立: 建立会话之后, 一个 已连接的资源([XMPP-CORE|XMPP文档列表/XMPP正式RFC标准/RFC3920]术语)就被称为一个 激活的资源\ 许多错误条件是可能的. 例如, 服务器可能遭遇一个内部条件阻碍了它建立会话, 用户名或授权身份可能缺乏建立会话的许可, 或同一个名字相关的这个资源ID已经有一个激活的资源. 如果服务器遭到一个内部条件阻碍了它建立会话, 它必须(MUST)返回一个错误. 步骤 2 (替代): 服务器应答一个错误(内部服务器错误): xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 如果用户名或资源不被允许建立一个会话, 服务器必须(MUST)返回一个错误(例如, 被禁止). 步骤 2 (替代): 服务器应答错误(用户名或资源不被允许建立一个会话): xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 如果已经同一名字已经存在一个激活的资源,服务器必须(MUST) (1) 终止这个激活的资源并允许新请求的会话, 或者 (2) 不允许新申请的会话并继续激活的资源. 服务器做哪一步取决于具体的实现, 尽管建议的(RECOMMENDED)实现 情景 #1. 在 情景 #1, 服务器应该(SHOULD)发送一个 步骤 2 (替代): 服务器通知现有的激活的资源 资源冲突(情景 #1): 12
相关推荐: