- XML流是一个容器,用于任何两个实体通过网络进行XML元素的交换. XML流的开始明确表达为一个打开的 "流头" (即,一个包含了适当树形和命名空间声明的 XML <stream> 标签),而这个XML流的结尾明确表达为一个关闭的XML </stream> 标签. 在流的生存期间,发起方实体可以通过这个流发送不限数量的XML元素,这些元素或用来协商这个流 (例如,完成TLS协商或SASL协商) 或用于 XML节. "发起流" 是从发起方实体 (通常是一个客户端或服务器) 到接收方实体 (通常是一个服务器),也可视为对应发起方 "连接到" 或 "和......开启会话" 接收方实体. 发起流允许从发起方实体到接收方实体的单向通讯; 为了让接收方实体能够向发起方实体发送节,接收方实体必须(MUST) 协商一个相反的流 ("应答流").
XML节是一个XMPP中的基本语义单位. 一个节就是一个第一层元素 (在流的深度=1),它的元素名是 "message","presence",或 "iq" ,而它的合格命名空间是 'jabber:client' 或 'jabber:server'. 相比之下,任何其他命名空间限定的第一层元素都不是一个XML节 (stream errors,stream features,TLS相关的元素,SASL相关的元素,等等.),由'jabber:client' 或 'jabber:server' 命名空间限定的 <message/>,<presence/>,或 <iq/> 元素但不在第一层 (例如,包含在一个扩展元素中的 <message/> 元素 ( 做报告用的8.4)也不是一个XML节,不是命名空间 'jabber:client' 或 'jabber:server'限定的 <message/>,或 <iq/> 元素也不是一个XML节. 一个XML节典型的包含一个或多个必要的子元素 (以及相关的属性,元素,和 XML 字符串数据) 来传达所需的信息,子元素可以(MAY)使用任何XML命名空间.
有三种节: message,presence,和 IQ ("Info/Query"的缩写). 这些节类型提供三种不同的通讯原语: 一个 "推送" 机制用于已生成的消息,一个特定的 "发行-订阅" 机制用于广播网络可用性信息,和一个 "请求-应答" 机制用于更结构化的数据交换。
打开流
连接到接收方实体的适当的IP地址和端口之后,发起方实体通过发送一个流头 ("发起流头") 来打开到接收方实体的流.
I: <?xml version='1.0'?> <stream:stream from='juliet@im.example.com' to='im.example.com' '1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
然后接收方实体通过发送一个它自己的流头 ("应答流头") 来回复发起方实体.
接着实体们就可以再进行流协商过程的剩余步骤了.