Network Working Group                                            M. Rose
Request for Comments: 3343                  Dover Beach Consulting, Inc.
Category: Experimental                                          G. Klyne
                                                            Nine by Nine
                                                              D. Crocker
                                             Brandenburg InternetWorking
                                                              April 2003
        
Network Working Group                                            M. Rose
Request for Comments: 3343                  Dover Beach Consulting, Inc.
Category: Experimental                                          G. Klyne
                                                            Nine by Nine
                                                              D. Crocker
                                             Brandenburg InternetWorking
                                                              April 2003
        

The Application Exchange (APEX) Presence Service

应用程序交换(APEX)状态服务

Status of this Memo

本备忘录的状况

This memo defines an Experimental Protocol for the Internet community. It does not specify an Internet standard of any kind. Discussion and suggestions for improvement are requested. Distribution of this memo is unlimited.

这份备忘录为互联网社区定义了一个实验性协议。它没有规定任何类型的互联网标准。要求进行讨论并提出改进建议。本备忘录的分发不受限制。

Copyright Notice

版权公告

Copyright (C) The Internet Society (2003). All Rights Reserved.

版权所有(C)互联网协会(2003年)。版权所有。

Abstract

摘要

This memo describes the Application Exchange (APEX) presence service, addressed as the well-known endpoint "apex=presence". The presence service is used to manage presence information for APEX endpoints.

此备忘录描述了应用程序交换(APEX)状态服务,称为众所周知的端点“APEX=presence”。状态服务用于管理APEX端点的状态信息。

Table of Contents

目录

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
   2.  Use and Management of Presence Information . . . . . . . . . .  3
   2.1 Update of Presence Information . . . . . . . . . . . . . . . .  3
   2.2 Distribution of Presence Information . . . . . . . . . . . . .  4
   2.3 Distribution of Watcher Information  . . . . . . . . . . . . .  7
   3.  Format of Presence Entries . . . . . . . . . . . . . . . . . . 10
   4.  The Presence Service . . . . . . . . . . . . . . . . . . . . . 11
   4.1 Use of XML and MIME  . . . . . . . . . . . . . . . . . . . . . 12
   4.2 The Subscribe Operation  . . . . . . . . . . . . . . . . . . . 13
   4.3 The Watch Operation  . . . . . . . . . . . . . . . . . . . . . 14
   4.4 The Publish Operation  . . . . . . . . . . . . . . . . . . . . 15
   4.5 The Terminate Operation  . . . . . . . . . . . . . . . . . . . 17
   4.6 The Notify Operation . . . . . . . . . . . . . . . . . . . . . 17
   4.7 The Reply Operation  . . . . . . . . . . . . . . . . . . . . . 18
   5.  Registration: The Presence Service . . . . . . . . . . . . . . 18
   6.  The Presence Service DTD . . . . . . . . . . . . . . . . . . . 18
   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 21
       References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
        
   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
   2.  Use and Management of Presence Information . . . . . . . . . .  3
   2.1 Update of Presence Information . . . . . . . . . . . . . . . .  3
   2.2 Distribution of Presence Information . . . . . . . . . . . . .  4
   2.3 Distribution of Watcher Information  . . . . . . . . . . . . .  7
   3.  Format of Presence Entries . . . . . . . . . . . . . . . . . . 10
   4.  The Presence Service . . . . . . . . . . . . . . . . . . . . . 11
   4.1 Use of XML and MIME  . . . . . . . . . . . . . . . . . . . . . 12
   4.2 The Subscribe Operation  . . . . . . . . . . . . . . . . . . . 13
   4.3 The Watch Operation  . . . . . . . . . . . . . . . . . . . . . 14
   4.4 The Publish Operation  . . . . . . . . . . . . . . . . . . . . 15
   4.5 The Terminate Operation  . . . . . . . . . . . . . . . . . . . 17
   4.6 The Notify Operation . . . . . . . . . . . . . . . . . . . . . 17
   4.7 The Reply Operation  . . . . . . . . . . . . . . . . . . . . . 18
   5.  Registration: The Presence Service . . . . . . . . . . . . . . 18
   6.  The Presence Service DTD . . . . . . . . . . . . . . . . . . . 18
   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 21
       References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
        
       Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 22
       Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 22
       Full Copyright Statement . . . . . . . . . . . . . . . . . . . 23
        
       Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 22
       Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 22
       Full Copyright Statement . . . . . . . . . . . . . . . . . . . 23
        
1. Introduction
1. 介绍

This memo describes a presence service that is built upon the APEX [1] "relaying mesh". The APEX presence service is used to manage presence information for APEX endpoints.

本备忘录描述了一种基于APEX[1]“中继网格”的状态服务。APEX状态服务用于管理APEX端点的状态信息。

APEX, at its core, provides a best-effort datagram service. Within an administrative domain, all relays must be able to handle messages for any endpoint within that domain. APEX services are logically defined as endpoints, but given their ubiquitous semantics they do not necessarily need to be associated with a single physical endpoint. As such, they may be provisioned co-resident with each relay within an administrative domain, even though they are logically provided on top of the relaying mesh, i.e.,

APEX的核心是提供尽力而为的数据报服务。在管理域内,所有中继必须能够处理该域内任何端点的消息。APEX服务在逻辑上被定义为端点,但鉴于其普遍存在的语义,它们不一定需要与单个物理端点关联。因此,它们可以与管理域内的每个中继共同驻留,即使它们在逻辑上被提供在中继网的顶部,即。,

      +----------+     +----------+    +----------+    +---------+
      |   APEX   |     |   APEX   |    |   APEX   |    |         |
      |  access  |     | presence |    |  report  |    |   ...   |
      | service  |     |  service |    | service  |    |         |
      +----------+     +----------+    +----------+    +---------+
           |                |               |               |
           |                |               |               |
   +----------------------------------------------------------------+
   |                                                                |
   |                            APEX core                           |
   |                                                                |
   +----------------------------------------------------------------+
        
      +----------+     +----------+    +----------+    +---------+
      |   APEX   |     |   APEX   |    |   APEX   |    |         |
      |  access  |     | presence |    |  report  |    |   ...   |
      | service  |     |  service |    | service  |    |         |
      +----------+     +----------+    +----------+    +---------+
           |                |               |               |
           |                |               |               |
   +----------------------------------------------------------------+
   |                                                                |
   |                            APEX core                           |
   |                                                                |
   +----------------------------------------------------------------+
        

That is, applications communicate with an APEX service by exchanging data with a "well-known endpoint" (WKE).

也就是说,应用程序通过与“已知端点”(WKE)交换数据来与APEX服务通信。

APEX applications communicate with the presence service by exchanging data with the well-known endpoint "apex=presence" in the corresponding administrative domain, e.g., "apex=presence@example.com" is the endpoint associated with the presence service in the "example.com" administrative domain.

APEX应用程序通过与相应管理域中的知名端点“APEX=presence”(例如“APEX”)交换数据来与状态服务通信=presence@example.com是与“example.com”管理域中的状态服务关联的端点。

Note that within a single administrative domain, the presence service makes use of the APEX access [3] service in order to determine if an originator is allowed to view or manage presence information.

请注意,在单个管理域中,状态服务使用APEX access[3]服务来确定是否允许发起者查看或管理状态信息。

2. Use and Management of Presence Information
2. 状态信息的使用和管理

Management of presence information falls into three categories:

状态信息的管理分为三类:

o applications may update the presence information associated with an endpoint;

o 应用程序可以更新与端点相关联的存在信息;

o applications may subscribe to receive presence information associated with an endpoint; and,

o 应用程序可以订阅以接收与端点相关联的存在信息;和

o applications may find out who is subscribed to receive presence information.

o 应用程序可能会发现谁订阅了接收状态信息。

Each is now described in turn.

现在依次描述每种方法。

2.1 Update of Presence Information
2.1 更新状态信息

When an application wants to modify the presence information associated with an endpoint, it sends a publish operation to the service, e.g.,

当应用程序想要修改与端点关联的状态信息时,它会向服务发送发布操作,例如。,

       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <publish publisher='fred@example.com' transID='1'
                         timeStamp='2000-05-14T13:30:00-08:00'>
                    <presence publisher='fred@example.com'
                           lastUpdate='2000-05-14T13:02:00-08:00'
                           publisherInfo='http://www.example.com/fred/'>
                        <tuple
                          destination='apex:fred/appl=im@example.com'
                          availableUntil='2000-05-14T14:02:00-08:00' />
                        <tuple destination='mailto:fred@flintstone.com'
                          availableUntil='2525-12-31T23:59:59-08:00' />
                    </presence>
                </publish>
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <publish publisher='fred@example.com' transID='1'
                         timeStamp='2000-05-14T13:30:00-08:00'>
                    <presence publisher='fred@example.com'
                           lastUpdate='2000-05-14T13:02:00-08:00'
                           publisherInfo='http://www.example.com/fred/'>
                        <tuple
                          destination='apex:fred/appl=im@example.com'
                          availableUntil='2000-05-14T14:02:00-08:00' />
                        <tuple destination='mailto:fred@flintstone.com'
                          availableUntil='2525-12-31T23:59:59-08:00' />
                    </presence>
                </publish>
            </data-content>
        </data>
     S: <ok />
        

Note that this example uses the "subaddress" convention specified in Section 2.2 of [1] (e.g., "fred/appl=im") to denote multiplexing of traffic for a particular endpoint. Of course, popular applications may have their own URI method assigned to them (e.g., "im:fred@example.com").

注意,该示例使用[1]第2.2节中指定的“子地址”约定(例如,“fred/appl=im”)来表示特定端点的流量多路复用。当然,流行应用程序可能有自己的URI方法(例如,“im:fred@example.com").

The service immediately responds with a reply operation containing the same transaction-identifier, e.g.,

服务立即响应包含相同事务标识符的应答操作,例如。,

                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='1' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='1' />
            </data-content>
        </data>
     S: <ok />
        
2.2 Distribution of Presence Information
2.2 状态信息的分发

When an application wants to (periodically) receive the presence information associated with an endpoint, it sends a subscribe operation to the service, e.g.,

当应用程序希望(定期)接收与端点关联的状态信息时,它向服务发送订阅操作,例如。,

       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='wilma@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <subscribe publisher='fred@example.com' duration='86400'
                           transID='100' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='wilma@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <subscribe publisher='fred@example.com' duration='86400'
                           transID='100' />
            </data-content>
        </data>
     S: <ok />
        

The service immediately responds with a publish operation containing the same transaction-identifier, e.g.,

服务立即响应包含相同事务标识符的发布操作,例如。,

                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <publish publisher='fred@example.com' transID='100'
                         timeStamp='2000-05-14T13:30:00-08:00'>
                    <presence publisher='fred@example.com'
                           lastUpdate='2000-05-14T13:02:00-08:00'
                           publisherInfo='http://www.example.com/fred/'>
                        <tuple
                          destination='apex:fred/appl=im@example.com'
                          availableUntil='2000-05-14T14:02:00-08:00' />
                    </presence>
                </publish>
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <publish publisher='fred@example.com' transID='100'
                         timeStamp='2000-05-14T13:30:00-08:00'>
                    <presence publisher='fred@example.com'
                           lastUpdate='2000-05-14T13:02:00-08:00'
                           publisherInfo='http://www.example.com/fred/'>
                        <tuple
                          destination='apex:fred/appl=im@example.com'
                          availableUntil='2000-05-14T14:02:00-08:00' />
                    </presence>
                </publish>
            </data-content>
        </data>
     S: <ok />
        

Subsequently, for up to the specified "duration", the service sends new publish operations whenever there are any changes to the endpoint's presence information. If the "duration" is zero-valued, a one time poll of the presence information is achieved; otherwise, at the end of the "duration", a terminate operation is sent.

随后,在指定的“持续时间”内,只要端点的状态信息发生任何更改,服务就会发送新的发布操作。如果“持续时间”为零值,则实现对存在信息的一次性轮询;否则,在“持续时间”结束时,将发送终止操作。

Note that Step 5 of Section 4.4 requires that the "lastUpdate" attribute of a presence entry be supplied in order to update that entry; accordingly, applications must successfully retrieve a presence entry prior to trying to update that entry. This is usually accomplished by subscribing with a zero-valued duration. (Regardless, administrators should ensure that applications authorized to update a presence entry are also authorized to retrieve that entry.)

注意,第4.4节的步骤5要求提供状态条目的“lastUpdate”属性,以便更新该条目;因此,应用程序必须在尝试更新状态条目之前成功检索该条目。这通常是通过以零值持续时间订阅来实现的。(无论如何,管理员应确保有权更新状态条目的应用程序也有权检索该条目。)

Either the subscriber or the service may cancel a subscription by sending a terminate operation, e.g.,

订户或服务可以通过发送终止操作来取消订阅,例如。,

       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='wilma@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <terminate transID='100' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='wilma@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <terminate transID='100' />
            </data-content>
        </data>
     S: <ok />
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='100' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='100' />
            </data-content>
        </data>
     S: <ok />
        
   or
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
   or
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <terminate transID='100' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='wilma@example.com' />
            <data-content Name='Content'>
                <terminate transID='100' />
            </data-content>
        </data>
     S: <ok />
        
2.3 Distribution of Watcher Information
2.3 观察者信息的分发

When an application wants to (periodically) receive notices about endpoints that are subscribed to receive presence information, it sends a watch operation to the service, e.g.,

当应用程序希望(定期)接收关于订阅接收状态信息的端点的通知时,它会向服务发送监视操作,例如。,

       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <watch publisher='fred@example.com' duration='86400'
                       transID='2' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <watch publisher='fred@example.com' duration='86400'
                       transID='2' />
            </data-content>
        </data>
     S: <ok />
        

The service immediately responds with a reply operation containing the same transaction-identifier, e.g.,

服务立即响应包含相同事务标识符的应答操作,例如。,

                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'
                <reply code='250' transID='2' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'
                <reply code='250' transID='2' />
            </data-content>
        </data>
     S: <ok />
        

For each current subscriber, the service immediately sends a notify operation containing the same transaction-identifier, e.g.,

对于每个当前订户,服务立即发送包含相同事务标识符的notify操作,例如。,

                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <notify subscriber='wilma@example.com' transID='2'
                        duration='86000' action='subscribe' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <notify subscriber='wilma@example.com' transID='2'
                        duration='86000' action='subscribe' />
            </data-content>
        </data>
     S: <ok />
        

Subsequently, for up to the specified "duration", the service sends new notify operations whenever an application subscribes successfully or a subscription is terminated. If the "duration" is zero-valued, a one time poll of the watcher information is achieved; otherwise, at the end of the "duration", a terminate operation is sent.

随后,在指定的“持续时间”内,每当应用程序成功订阅或订阅终止时,服务将发送新的notify操作。如果“持续时间”为零值,则实现对观察者信息的一次性轮询;否则,在“持续时间”结束时,将发送终止操作。

Either the watcher or the service may cancel the request by sending a terminate operation, e.g.,

观察者或服务可以通过发送终止操作来取消请求,例如。,

       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
       +-------+                  +-------+
       |       | -- data -------> |       |
       | appl. |                  | relay |
       |       | <--------- ok -- |       |
       +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <terminate transID='2' />
            </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='fred@example.com' />
            <recipient identity='apex=presence@example.com' />
            <data-content Name='Content'>
                <terminate transID='2' />
            </data-content>
        </data>
     S: <ok />
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='2' />
             </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <reply code='250' transID='2' />
             </data-content>
        </data>
     S: <ok />
        
   or
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
   or
                                  +-------+                  +-------+
                                  |       | <------- data -- |       |
                                  | relay |                  | pres. |
                                  |       | -- ok ---------> |  svc. |
                                  +-------+                  +-------+
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <terminate transID='2' />
             </data-content>
        </data>
     S: <ok />
        
     C: <data content='#Content'>
            <originator identity='apex=presence@example.com' />
            <recipient identity='fred@example.com' />
            <data-content Name='Content'>
                <terminate transID='2' />
             </data-content>
        </data>
     S: <ok />
        
3. Format of Presence Entries
3. 在场记录的格式

Each administrative domain is responsible for maintaining a "presence entry" for each of its endpoints (regardless of whether those endpoints are currently attached to the relaying mesh).

每个管理域负责维护其每个端点的“状态条目”(无论这些端点当前是否连接到中继网格)。

Section 6 defines the syntax for presence entries. Each presence entry has a "publisher" attribute, a "lastUpdate" attribute, a "publisherInfo" attribute, and contains one or more "tuple" elements:

第6节定义了状态条目的语法。每个状态条目都有一个“publisher”属性、“lastUpdate”属性、“publisherInfo”属性,并包含一个或多个“tuple”元素:

o the "publisher" attribute specifies the endpoint associated with the presence entry;

o “publisher”属性指定与状态条目关联的端点;

o the "lastUpdate" attribute specifies the date and time that the service last updated the presence entry;

o “lastUpdate”属性指定服务上次更新状态条目的日期和时间;

o the "publisherInfo" attribute specifies arbitrary information about the publisher (using a URI); and,

o “publisherInfo”属性指定关于发布者的任意信息(使用URI);和

o each "tuple" element specifies information about an entity associated with the endpoint.

o 每个“tuple”元素指定与端点关联的实体的相关信息。

Each "tuple" element has a "destination" attribute, an "availableUntil" attribute, a "tupleInfo" attribute, and contains zero or more "capability" elements:

每个“tuple”元素都有一个“destination”属性、“availableUntil”属性和一个“tupleInfo”属性,并且包含零个或多个“capability”元素:

o the "destination" attribute identifies the entity as a URI (e.g., "apex:fred/appl=im@example.com" or "mailto:fred@flintstone.com");

o “destination”属性将实体标识为URI(例如,“apex:fred/appl=im@example.com“或”邮寄至:fred@flintstone.com");

o the "availableUntil" attribute specifies the latest date and time that the entity is capable of receiving messages;

o “availableUntil”属性指定实体能够接收消息的最新日期和时间;

o the "tupleInfo" attribute specifies arbitrary information about the entity (using a URI); and,

o “tupleInfo”属性指定关于实体的任意信息(使用URI);和

o each "capability" element contains a specification as to the kinds of content the entity is capable of receiving.

o 每个“能力”元素都包含一个关于实体能够接收的内容类型的规范。

Each "capability" element contains arbitrary character data formatted according to the standard indicated in the element's "baseline" attribute.

每个“capability”元素包含根据元素的“baseline”属性中指示的标准格式化的任意字符数据。

4. The Presence Service
4. 出席服务

Section 5 contains the APEX service registration for the presence service:

第5节包含状态服务的APEX服务注册:

o Within an administrative domain, the service is addressed using the well-known endpoint of "apex=presence".

o 在管理域中,使用众所周知的端点“apex=presence”对服务进行寻址。

o Section 6 defines the syntax of the operations exchanged with the service.

o 第6节定义了与服务交换的操作的语法。

o A consumer of the service initiates communications by sending data containing the subscribe, watch, or publish operation.

o 服务的使用者通过发送包含订阅、监视或发布操作的数据来发起通信。

o In addition to replying to these operations, the service may also initiate communications by sending data containing the terminate, publish, or notify operations.

o 除了回复这些操作之外,服务还可以通过发送包含终止、发布或通知操作的数据来启动通信。

An implementation of the service must maintain information about both presence entries and in-progress operations in persistent storage.

服务的实现必须在持久性存储中维护有关存在项和正在进行的操作的信息。

Consult Section 6.1.1 of [1] for a discussion on the properties of long-lived transaction-identifiers.

有关长寿命事务标识符属性的讨论,请参阅[1]第6.1.1节。

4.1 Use of XML and MIME
4.1 XML和MIME的使用

Section 4.1 of [1] describes how arbitrary MIME content is exchanged as a BEEP [2] payload. For example, to transmit:

[1]的第4.1节描述了如何将任意MIME内容交换为蜂鸣[2]负载。例如,要传输:

       <data content='...'>
            <originator identity='apex=presence@example.com' />
           <recipient identity='fred@example.com' />
       </data>
        
       <data content='...'>
            <originator identity='apex=presence@example.com' />
           <recipient identity='fred@example.com' />
       </data>
        
   where "..." refers to: <reply code='250' transID='1' />
        
   where "..." refers to: <reply code='250' transID='1' />
        

then the corresponding BEEP message might look like this:

然后相应的蜂鸣声消息可能如下所示:

       C: MSG 1 1 . 42 1234
       C: Content-Type: multipart/related; boundary="boundary";
       C:               start="<1@example.com>";
       C:               type="application/beep+xml"
       C:
       C: --boundary
       C: Content-Type: application/beep+xml
       C: Content-ID: <1@example.com>
       C:
       C: <data content='cid:2@example.com'>
       C:     <originator identity='fred@example.com' />
       C:     <recipient identity='apex=presence@example.com' />
       C: </data>
       C: --boundary
       C: Content-Type: application/beep+xml
       C: Content-ID: <2@example.com>
       C:
       C: <reply code='250' transID='1' />
       C: --boundary--
       C: END
        
       C: MSG 1 1 . 42 1234
       C: Content-Type: multipart/related; boundary="boundary";
       C:               start="<1@example.com>";
       C:               type="application/beep+xml"
       C:
       C: --boundary
       C: Content-Type: application/beep+xml
       C: Content-ID: <1@example.com>
       C:
       C: <data content='cid:2@example.com'>
       C:     <originator identity='fred@example.com' />
       C:     <recipient identity='apex=presence@example.com' />
       C: </data>
       C: --boundary
       C: Content-Type: application/beep+xml
       C: Content-ID: <2@example.com>
       C:
       C: <reply code='250' transID='1' />
       C: --boundary--
       C: END
        

or this:

或者这个:

       C: MSG 1 1 . 42 1234
       C: Content-Type: application/beep+xml
       C:
       C: <data content='#Content'>
       C:     <originator identity='fred@example.com' />
       C:     <recipient identity='apex=presence@example.com' />
       C:     <data-content Name='Content'>
       C:         <reply code='250' transID='1' />
       C:     </data-content>
       C: </data>
       C: END
        
       C: MSG 1 1 . 42 1234
       C: Content-Type: application/beep+xml
       C:
       C: <data content='#Content'>
       C:     <originator identity='fred@example.com' />
       C:     <recipient identity='apex=presence@example.com' />
       C:     <data-content Name='Content'>
       C:         <reply code='250' transID='1' />
       C:     </data-content>
       C: </data>
       C: END
        
4.2 The Subscribe Operation
4.2 订阅操作

When an application wants to (periodically) receive the presence information associated with an endpoint, it sends a "subscribe" element to the service.

当应用程序希望(定期)接收与端点关联的状态信息时,它会向服务发送一个“subscribe”元素。

The "subscribe" element has a "publisher" attribute, a "duration" attribute, a "transID" attribute, and no content:

“subscribe”元素具有“publisher”属性、“duration”属性、“transID”属性,并且没有内容:

o the "publisher" attribute specifies the endpoint associated with the presence entry;

o “publisher”属性指定与状态条目关联的端点;

o the "transID" attribute specifies the transaction-identifier associated with this operation; and,

o “transID”属性指定与此操作关联的事务标识符;和

o the "duration" attribute specifies the maximum number of seconds for which the originator is interested in receiving updated presence information.

o “持续时间”属性指定发起者希望接收更新状态信息的最大秒数。

When the service receives a "subscribe" element, we refer to the "publisher" attribute of that element as the "subject", and the service performs these steps:

当服务接收到“subscribe”元素时,我们将该元素的“publisher”属性称为“subject”,服务将执行以下步骤:

1. If the subject is outside of this administrative domain, a "reply" element having code 553 is sent to the originator.

1. 如果主题不在此管理域内,则向发端人发送代码为553的“回复”元素。

2. If the subject does not refer to a valid endpoint, a "reply" element having code 550 is sent to the originator.

2. 如果主题未引用有效端点,则将代码为550的“reply”元素发送给发起人。

3. If the subject's access entry does not contain a "presence:subscribe" token for the originator, a "reply" element having code 537 is sent to the originator.

3. 如果主体的访问条目不包含发起人的“存在:订阅”令牌,则向发起人发送代码为537的“回复”元素。

4. If the originator already has an in-progress subscribe operation for the subject, then the previous subscribe operation is silently terminated, and processing continues.

4. 如果发起人已经对主题进行了正在进行的订阅操作,则先前的订阅操作将以静默方式终止,并继续处理。

5. If the "transID" attribute refers to an in-progress subscribe or watch operation for the originator, a "reply" element having code 555 is sent to the originator.

5. 如果“transID”属性指的是发起人正在进行的订阅或监视操作,则向发起人发送代码为555的“reply”元素。

6. Otherwise:

6. 否则:

1. A "publish" element, corresponding to the subject's presence entry, is immediately sent to the originator.

1. 与主体的状态条目相对应的“发布”元素将立即发送给发起人。

2. For each endpoint currently watching subscribers to the subject's presence information, a "notify" element is immediately as sent (c.f., Step 6.3 of Section 4.6).

2. 对于当前监视受试者存在信息订阅者的每个端点,立即发送“通知”元素(c.f.,第4.6节第6.3步)。

3. For up to the amount of time indicated by the "duration" attribute of the "subscribe" element, if the subject's presence entry changes, an updated "presence" element is sent to the originator using the publish operation (Section 4.4). Finally, when the amount of time indicated by the "duration" attribute expires, a terminate operation (Section 4.5) is sent to the originator.

3. 对于“订阅”元素的“持续时间”属性所指示的时间量,如果受试者的状态条目发生变化,则使用发布操作将更新的“状态”元素发送给发起人(第4.4节)。最后,当“duration”(持续时间)属性指示的时间量到期时,终止操作(第4.5节)被发送给发起人。

Note that if the duration is zero-valued, then the subscribe operation is making a one-time poll of the presence information. Accordingly, Step 6.3 above does not occur.

注意,如果持续时间为零值,则订阅操作对存在信息进行一次性轮询。因此,上述步骤6.3不会发生。

Regardless of whether a "publish" or "reply" element is sent to the originator, the "transID" attribute is identical to the value found in the "subscribe" element sent by the originator.

无论是“发布”还是“回复”元素发送给发起者,“transID”属性都与发起者发送的“订阅”元素中的值相同。

4.3 The Watch Operation
4.3 监视操作

When an application wants to (periodically) receive notices about endpoints that are subscribed to receive presence entry, it sends a "watch" element to the service.

当应用程序希望(定期)接收关于订阅接收状态条目的端点的通知时,它会向服务发送一个“watch”元素。

The "watch" element has a "publisher" attribute, a "duration" attribute, a "transID" attribute, and no content:

“watch”元素具有“publisher”属性、“duration”属性、“transID”属性,并且没有内容:

o the "publisher" attribute specifies the endpoint associated with the presence entry;

o “publisher”属性指定与状态条目关联的端点;

o the "transID" attribute specifies the transaction-identifier associated with this operation; and,

o “transID”属性指定与此操作关联的事务标识符;和

o the "duration" attribute specifies the maximum number of seconds for which the originator is interested in watching subscribers.

o “duration”(持续时间)属性指定发起者关注订阅者的最大秒数。

When the service receives a "watch" element, we refer to the "publisher" attribute of that element as the "subject", and the service performs these steps:

当服务接收到“watch”元素时,我们将该元素的“publisher”属性称为“subject”,服务将执行以下步骤:

1. If the subject is outside of this administrative domain, a "reply" element having code 553 is sent to the originator.

1. 如果主题不在此管理域内,则向发端人发送代码为553的“回复”元素。

2. If the subject does not refer to a valid endpoint, a "reply" element having code 550 is sent to the originator.

2. 如果主题未引用有效端点,则将代码为550的“reply”元素发送给发起人。

3. If the subject's access entry does not contain a "presence:watch" token for the originator, a "reply" element having code 537 is sent to the originator.

3. 如果受试者的访问条目不包含发端人的“存在:监视”令牌,则向发端人发送代码为537的“回复”元素。

4. If the originator already has an in-progress watch operation for the subject, then the previous watch operation is silently terminated, and processing continues.

4. 如果发起者已经对主题进行了正在进行的监视操作,则先前的监视操作将以静默方式终止,并且处理将继续。

5. If the "transID" attribute refers to an in-progress subscribe or watch operation for the originator, a "reply" element having code 555 is sent to the originator.

5. 如果“transID”属性指的是发起人正在进行的订阅或监视操作,则向发起人发送代码为555的“reply”元素。

6. Otherwise:

6. 否则:

1. A "reply" element having code 250 is sent to the originator.

1. 将代码为250的“回复”元素发送给发起人。

2. For each endpoint currently subscribing to the subject's presence information, a "notify" element is immediately sent to the originator (c.f., Section 4.6).

2. 对于当前订阅受试者存在信息的每个端点,立即向发起人发送“通知”元素(c.f.,第4.6节)。

3. For up to the amount of time indicated by the "duration" attribute of the "watch" element, whenever a subscribe operation succeeds or a subscription is terminated, a "notify" element is sent to the originator. Finally, when the amount of time indicated by the "duration" attribute expires, a terminate operation (Section 4.5) is sent to the originator.

3. 在“watch”元素的“duration”属性指示的最长时间内,每当订阅操作成功或订阅终止时,都会向发起人发送一个“notify”元素。最后,当“duration”(持续时间)属性指示的时间量到期时,终止操作(第4.5节)被发送给发起人。

Note that if the duration is zero-valued, then the watch operation is making a one-time poll of the presence information. Accordingly, Step 6.3 above does not occur.

注意,如果持续时间为零值,则监视操作对存在信息进行一次性轮询。因此,上述步骤6.3不会发生。

Regardless of whether a "notify" or "reply" element is sent to the originator, the "transID" attribute is identical to the value found in the "presence" element sent by the originator.

无论“notify”或“reply”元素是否发送给发端人,“transID”属性与发端人发送的“presence”元素中的值相同。

4.4 The Publish Operation
4.4 发布操作

When an application wants to modify the presence entry associated with an endpoint, it sends a "publish" element to the service. In addition, the service sends a "publish" element to endpoints that have subscribed to see presence information (c.f., Section 4.2).

当应用程序想要修改与端点关联的状态条目时,它会向服务发送一个“publish”元素。此外,该服务向已订阅查看状态信息的端点发送“发布”元素(c.f.,第4.2节)。

The "publish" element has a "publisher" attribute, a "transID" attribute, a "timeStamp" attribute, and contains a "presence" element:

“publish”元素具有“publisher”属性、“transID”属性、“timeStamp”属性,并包含“presence”元素:

o the "publisher" attribute specifies the endpoint to be associated with the presence entry;

o “publisher”属性指定要与状态条目关联的端点;

o the "transID" attribute specifies the transaction-identifier associated with this operation;

o “transID”属性指定与此操作关联的事务标识符;

o the "timeStamp" attribute specifies the application's notion of the current date and time; and,

o “timeStamp”属性指定应用程序当前日期和时间的概念;和

o the "presence" element contains the desired presence entry for the endpoint.

o “presence”元素包含端点所需的presence条目。

When the service sends a "publish" element, the "transID" attribute specifies the transaction-identifier associated with the subscribe operation that caused this "publish" element to be sent, and the "timeStamp" attribute specifies the service's notion of the current date and time. No reply is sent by the receiving endpoint.

当服务发送“publish”元素时,“transID”属性指定与导致发送此“publish”元素的订阅操作相关联的事务标识符,“timeStamp”属性指定服务的当前日期和时间概念。接收端点不发送回复。

When the service receives a "publish" element, we refer to the "publisher" attribute of that element as the "subject", and the service performs these steps:

当服务接收到“publish”元素时,我们将该元素的“publisher”属性称为“subject”,服务将执行以下步骤:

1. If the "publisher" attribute of the "publish" element doesn't match the "publisher" attribute of the "presence" element contained in the "publish" element, a "reply" element having code 503 is sent to the originator.

1. 如果“publish”元素的“publisher”属性与“publish”元素中包含的“presence”元素的“publisher”属性不匹配,则将代码为503的“reply”元素发送给发起人。

2. If the subject is outside of this administrative domain, a "reply" element having code 553 is sent to the originator.

2. 如果主题不在此管理域内,则向发端人发送代码为553的“回复”元素。

3. If the subject does not refer to a valid endpoint, a "reply" element having code 550 is sent to the originator.

3. 如果主题未引用有效端点,则将代码为550的“reply”元素发送给发起人。

4. If the subject's access entry does not contain a "presence:publish" token for the originator, a "reply" element having code 537 is sent to the originator.

4. 如果主体的访问条目不包含发端人的“存在:发布”令牌,则向发端人发送代码为537的“回复”元素。

5. If the "lastUpdate" attribute of the "publish" element is not semantically identical to the "lastUpdate" attribute of the subject's presence entry, a "reply" element having code 555 is sent to the originator. (This allows a simple mechanism for atomic updates.)

5. 如果“publish”元素的“lastUpdate”属性在语义上与主体的存在条目的“lastUpdate”属性不相同,则向发起人发送代码为555的“reply”元素。(这允许原子更新的简单机制。)

6. Otherwise:

6. 否则:

1. The subject's presence entry is updated from the "publish" element.

1. 主题的状态条目从“publish”元素更新。

2. The "lastUpdate" attribute of the presence entry is set to the service's notion of the current date and time.

2. 状态条目的“lastUpdate”属性设置为服务的当前日期和时间概念。

3. A "reply" element having code 250 is sent to the originator.

3. 将代码为250的“回复”元素发送给发起人。

When sending the "reply" element, the "transID" attribute is identical to the value found in the "publish" element sent by the originator.

发送“reply”元素时,“transID”属性与发起者发送的“publish”元素中的值相同。

4.5 The Terminate Operation
4.5 终止操作

When an application no longer wishes to subscribe to presence information or to watch endpoints that are subscribed to receive presence information, it sends a "terminate" element to the service; similarly, when the service no longer considers an application to be subscribing or watching, a "terminate" element is sent to the application.

当应用程序不再希望订阅状态信息或监视已订阅接收状态信息的端点时,它向服务发送“终止”元素;类似地,当服务不再认为某个应用程序正在订阅或观看时,会向该应用程序发送一个“terminate”元素。

The "terminate" element contains only a "transID" attribute that specifies the transaction-identifier associated an in-progress subscribe or watch operation. Section 9.1 of [1] defines the syntax for the "terminate" element.

“terminate”元素仅包含一个“transID”属性,该属性指定与正在进行的订阅或监视操作相关联的事务标识符。[1]的第9.1节定义了“terminate”元素的语法。

When the service receives a "terminate" element, it performs these steps:

当服务接收到“terminate”元素时,它将执行以下步骤:

1. If the transaction-identifier does not refer to a previous subscribe or watch operation for the originator, an "error" element having code 550 is returned.

1. 如果事务标识符没有引用发起人以前的订阅或监视操作,则返回代码为550的“error”元素。

2. Otherwise, the previous subscribe or watch operation for the originator is terminated, and a "reply" element having code 250 is sent to the originator.

2. 否则,终止发起人的先前订阅或监视操作,并且向发起人发送具有代码250的“应答”元素。

Note that following a terminate operation, the originator may receive further presence or watcher updates. Although the service will send no further updates after processing a terminate operation and sending the reply operation, earlier updates may be in transit.

请注意,在终止操作之后,发起者可能会收到进一步的状态或观察者更新。虽然服务在处理终止操作并发送回复操作后不会发送进一步的更新,但早期的更新可能正在传输中。

4.6 The Notify Operation
4.6 通知操作

The service sends a "notify" element to endpoints that are watching other endpoints subscribed to presence information (c.f., Section 4.3).

该服务向正在监视订阅状态信息的其他端点的端点发送“notify”元素(c.f.,第4.3节)。

The "notify" element has a "subscriber" attribute, a "transID" attribute, a "duration" attribute, an "action" attribute, and no content:

“notify”元素具有“subscriber”属性、“transID”属性、“duration”属性、“action”属性,并且没有内容:

o the "subscriber" attribute specifies the endpoint that is subscribed to presence information; and,

o “subscriber”属性指定订阅状态信息的端点;和

o the "transID" attribute specifies the transaction-identifier associated with the watch operation that caused this "notify" element to be sent;

o “transID”属性指定与导致发送此“notify”元素的监视操作相关联的事务标识符;

o the "action" attribute specifies whether a subscription or its termination has occurred; and,

o “action”属性指定订阅或其终止是否已发生;和

o if a subscription is being reported, the "duration" attribute specifies the requested duration of the subscription.

o 如果正在报告订阅,“duration”(持续时间)属性指定请求的订阅持续时间。

No reply is sent by the receiving endpoint.

接收端点不发送回复。

4.7 The Reply Operation
4.7 应答操作

While processing operations, the service may respond with a "reply" element. Consult Sections 10.2 and 6.1.2 of [1], respectively, for the definition and an exposition of the syntax of the reply element.

在处理操作时,服务可以使用“reply”元素进行响应。有关reply元素语法的定义和说明,请分别参阅[1]的第10.2节和第6.1.2节。

5. Registration: The Presence Service
5. 注册:在线服务

Well-Known Endpoint: apex=presence

已知终点:顶点=存在

Syntax of Messages Exchanged: c.f., Section 6

交换信息的语法:c.f.,第6节

Sequence of Messages Exchanged: c.f., Section 4

交换的信息顺序:c.f.,第4节

   Access Control Tokens: presence:subscribe, presence:watch,
      presence:publish
        
   Access Control Tokens: presence:subscribe, presence:watch,
      presence:publish
        

Contact Information: c.f., the "Authors' Addresses" section of this memo

联系方式:c.f.,本备忘录的“作者地址”部分

6. The Presence Service DTD
6. 状态服务DTD

<!-- DTD for the APEX presence service, as of 2001-05-08

<!-- 从2001-05-08起,APEX存在服务的DTD

Refer to this DTD as:

将此DTD称为:

       <!ENTITY % APEXPRESENCE PUBLIC "-//IETF//DTD APEX PRESENCE//EN"
                  "">
       %APEXPRESENCE;
     -->
        
       <!ENTITY % APEXPRESENCE PUBLIC "-//IETF//DTD APEX PRESENCE//EN"
                  "">
       %APEXPRESENCE;
     -->
        
   <!ENTITY % APEXCORE PUBLIC "-//IETF//DTD APEX CORE//EN" "">
   %APEXCORE;
        
   <!ENTITY % APEXCORE PUBLIC "-//IETF//DTD APEX CORE//EN" "">
   %APEXCORE;
        

<!-- Synopsis of the APEX presence service

<!-- APEX presence服务简介

service WKE: apex=presence

服务WKE:apex=在场

message exchanges:

信息交换:

           consumer initiates    service replies
           ==================    ================
           subscribe             publish or reply
           terminate             reply
           watch                 reply
           publish               reply
        
           consumer initiates    service replies
           ==================    ================
           subscribe             publish or reply
           terminate             reply
           watch                 reply
           publish               reply
        
           service initiates     consumer replies
           =================     ================
           terminate             (nothing)
           publish               (nothing)
           notify                (nothing)
        
           service initiates     consumer replies
           =================     ================
           terminate             (nothing)
           publish               (nothing)
           notify                (nothing)
        

access control:

访问控制:

           token                 target
           ==================    ======
           presence:subscribe    for "publisher" of "subscribe" element
           presence:watch        for "publisher" of "watch" element
           presence:publish      for "publisher" of "publish" element
     -->
        
           token                 target
           ==================    ======
           presence:subscribe    for "publisher" of "subscribe" element
           presence:watch        for "publisher" of "watch" element
           presence:publish      for "publisher" of "publish" element
     -->
        
   <!ELEMENT subscribe   EMPTY>
   <!ATTLIST subscribe
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         #REQUIRED>
        
   <!ELEMENT subscribe   EMPTY>
   <!ATTLIST subscribe
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         #REQUIRED>
        
   <!ELEMENT watch       EMPTY>
   <!ATTLIST watch
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         #REQUIRED>
        
   <!ELEMENT watch       EMPTY>
   <!ATTLIST watch
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         #REQUIRED>
        
   <!-- publisher attributes must match in publish and presence -->
   <!ELEMENT publish     (presence)>
   <!ATTLIST publish
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             timeStamp   %TIMESTAMP;       #REQUIRED>
        
   <!-- publisher attributes must match in publish and presence -->
   <!ELEMENT publish     (presence)>
   <!ATTLIST publish
             publisher   %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             timeStamp   %TIMESTAMP;       #REQUIRED>
        
   <!ELEMENT notify      EMPTY>
   <!ATTLIST notify
             subscriber  %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         "0"
             action     (subscribe|terminate)
                                           "subscribe">
   <!--
     presence entries
     -->
        
   <!ELEMENT notify      EMPTY>
   <!ATTLIST notify
             subscriber  %ENDPOINT;        #REQUIRED
             transID     %UNIQID;          #REQUIRED
             duration    %SECONDS;         "0"
             action     (subscribe|terminate)
                                           "subscribe">
   <!--
     presence entries
     -->
        
   <!ELEMENT presence    (tuple+)>
   <!ATTLIST presence
             publisher   %ENDPOINT;        #REQUIRED
             lastUpdate  %TIMESTAMP;       #REQUIRED
             publisherInfo
                         %URI;             "">
        
   <!ELEMENT presence    (tuple+)>
   <!ATTLIST presence
             publisher   %ENDPOINT;        #REQUIRED
             lastUpdate  %TIMESTAMP;       #REQUIRED
             publisherInfo
                         %URI;             "">
        
   <!ELEMENT tuple       (capability*)>
   <!ATTLIST tuple
             destination %URI;             #REQUIRED
             availableUntil
                         %TIMESTAMP;       #REQUIRED
             tupleInfo   %URI;             "">
        
   <!ELEMENT tuple       (capability*)>
   <!ATTLIST tuple
             destination %URI;             #REQUIRED
             availableUntil
                         %TIMESTAMP;       #REQUIRED
             tupleInfo   %URI;             "">
        
   <!-- e.g., baseline='urn:ietf:rfc:rfc2533' -->
   <!ELEMENT capability (#PCDATA)>
   <!ATTLIST capability
             baseline    %URI              #REQUIRED>
        
   <!-- e.g., baseline='urn:ietf:rfc:rfc2533' -->
   <!ELEMENT capability (#PCDATA)>
   <!ATTLIST capability
             baseline    %URI              #REQUIRED>
        
7. Security Considerations
7. 安全考虑

Consult [1]'s Section 11 for a discussion of security issues.

有关安全问题的讨论,请参阅[1]的第11节。

In addition, timestamps issued by the the presence service may disclose location information. If this information is considered sensitive, the special timezone value "-00:00" may be used (after converting the local time accordingly).

此外,由存在服务发布的时间戳可以公开位置信息。如果该信息被视为敏感信息,则可使用特殊时区值“-00:00”(在相应转换本地时间后)。

References

工具书类

[1] Rose, M., Klyne, G. and D. Crocker, "The Application Exchange Core", RFC 3340, July 2002.

[1] Rose,M.,Klyne,G.和D.Crocker,“应用程序交换核心”,RFC3440,2002年7月。

[2] Rose, M., "The Blocks Extensible Exchange Protocol Core", RFC 3080, March 2001.

[2] Rose,M.,“块可扩展交换协议核心”,RFC 30802001年3月。

[3] Rose, M., Klyne, G. and D. Crocker, "The Application Exchange (APEX) Access Service", RFC 3341, July 2002.

[3] Rose,M.,Klyne,G.和D.Crocker,“应用程序交换(APEX)访问服务”,RFC 33412002年7月。

Acknowledgements

致谢

The authors gratefully acknowledge the contributions of: Neil Cook, Eric Dixon, Darren New, Scott Pead, and Bob Wyman.

作者衷心感谢Neil Cook、Eric Dixon、Darren New、Scott Pead和Bob Wyman的贡献。

Authors' Addresses

作者地址

Marshall T. Rose Dover Beach Consulting, Inc. POB 255268 Sacramento, CA 95865-5268 US

马歇尔T.罗斯多佛海滩咨询公司POB 255268萨克拉门托,加利福尼亚州95865-5268美国

   Phone: +1 916 483 8878
   EMail: mrose@dbc.mtview.ca.us
        
   Phone: +1 916 483 8878
   EMail: mrose@dbc.mtview.ca.us
        

Graham Klyne Nine by Nine

格雷厄姆·克莱恩九乘九

   EMail: gk@ninebynine.org
        
   EMail: gk@ninebynine.org
        

David H. Crocker Brandenburg InternetWorking 675 Spruce Drive Sunnyvale, CA 94086 US

David H.Crocker Brandenburg互联网络美国加利福尼亚州桑尼维尔市云杉大道675号,邮编94086

   Phone: +1 408 246 8253
   EMail: dcrocker@brandenburg.com
   URI:   http://www.brandenburg.com/
        
   Phone: +1 408 246 8253
   EMail: dcrocker@brandenburg.com
   URI:   http://www.brandenburg.com/
        

Full Copyright Statement

完整版权声明

Copyright (C) The Internet Society (2003). All Rights Reserved.

版权所有(C)互联网协会(2003年)。版权所有。

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 implementation 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.

本文件和其中包含的信息是按“原样”提供的,互联网协会和互联网工程任务组否认所有明示或暗示的保证,包括但不限于任何保证,即使用本文中的信息不会侵犯任何权利,或对适销性或特定用途适用性的任何默示保证。

Acknowledgement

确认

Funding for the RFC Editor function is currently provided by the Internet Society.

RFC编辑功能的资金目前由互联网协会提供。