Replaced hardcoded NodeIDs (one node per namespace) with server-side namespace matching; more fully specified use of PEP for private data storage.
Replaced hardcoded NodeIDs (one node per namespace) with server-side namespace matching; specified semantic layering of data format, wrapper, and NodeID; defined registry for NodeIDs; more fully specified use of PEP for private data storage.
The XMPP &xep0060; extension ("pubsub") can be used to broadcast state change events associated with a Jabber/XMPP account or user, such as those described in &xep0080;, &xep0107;, &xep0108;, and &xep0118;.
The XMPP &xep0060; extension ("pubsub") can be used to broadcast state change events associated with a Jabber/XMPP account or user, such as those described in &xep0080; or &xep0107;.
+
Note: This document does not show error flows related to the various publish-subscribe use cases referenced herein, since they are exhaustively defined in XEP-0060. The reader is referred to XEP-0060 for all relevant protocol details related to the XMPP publish-subscribe extension.
Personal eventing via pubsub ("PEP") is based on the following five principles:
+Personal eventing via pubsub ("PEP") is based on the following principles:
These principles are described more fully below.
These uses of presence simplify the task of developing compliant clients (cf. &xep0134;).
By default, the existence of an XMPP presence subscription is used to establish a PEP subscription to the account owner's personal eventing data. In order to filter which notifications are sent by the PEP service, the contact's client includes extended &xep0115; information in the presence notifications it sends to the account owner. The PEP service then sends only those notifications that match the contact's expressed notification preferences, based on the "pubsub#type" of the nodes that match.
+By default, the existence of an XMPP presence subscription is used to establish a PEP subscription to the account owner's personal eventing data. In order to filter which notifications are sent by the PEP service, the contact's client includes extended &xep0115; information in the presence notifications it sends to the account owner. The PEP service then sends only those notifications that match the contact's expressed notification preferences, based on the "pubsub#type" of the nodes that match -- where the payload type is the wrapper namespace (if any) or, in the absence of a wrapper, the data format namespace (as described below under Semantic Layering).
Most pubsub configuration options and metadata are not needed for personal eventing. Instead, PEP services offer smart defaults to simplify node creation and management. The only required configuration options are the access model and the pubsub type (payload namespace).
There are several layers of meaning in personal eventing:
Thus there is a one to many relationship between data formats and wrappers, and a one to many relationship between wrappers and NodeIDs. The examples below show the function of semantic layering in PEP.
+An owner-publisher juliet@capulet.com who publishes the following information:
When an account owner attempts to publish an item to a PEP node and that node does not already exist, the PEP service MUST automatically create the node with default configuration.
For example, Juliet would send the following stanzas in order to create the nodes mentioned above:
-In the foregoing examples, we assume the following semantic layering:
+A contact may not want to receive notifications for all payload types. A contact SHOULD signal its preferences to the account owner's server by including XEP-0115 information that specifies the namespaces for which the contact wishes to receive notifications (if any).
-In order to make this possible, all possible payload namespaces can be appended with the string "+notify" to indicate that the contact wishes to receive notifications for the payload format. Thus if Romeo wants to receive notifications for activity data and geolocation data but not tune data, his client would advertise support for the following namespaces in the disco#info results it sends:
In order to make this possible, all possible payload namespaces can be appended with the string "+notify" to indicate that the contact wishes to receive notifications for the payload format. Thus if Romeo wants to receive notifications for tune data and geolocation data but not blog data, his client would advertise support for the following namespaces in the disco#info results it sends:
This set of namespaces would then be advertised as a XEP-0115 "ext" value, such as the following:
@@ -515,10 +534,10 @@ id='disco123'>Now we revisit account owner publication and server generation of notifications, with filtering enabled because the server has caps information:
If Juliet publishes a tune item to the open-access "mytunes" node (pubsub type "http://jabber.org/protocol/tune" node, her server will send notifications to <benvolio@montague.net> (bare JID) and to <nurse@capulet.com/chamber> (full JID) but not to <romeo@montague.net/orchard>.
If Juliet publishes an activity item to the presence-access "whatimdiong" node (pubsub type "http://jabber.org/protocol/activity"), her server will send notifications only to <nurse@capulet.com/chamber>.
If Juliet publishes a geolocation item to the roster-access "whereiam" node (pubsub type "http://jabber.org/protocol/geoloc"), her server will send notifications only to <romeo@montague.net/orchard>.
If Juliet publishes a blog item to the open-access "blog1" node (pubsub type "http://weblog.example.org/schema" node, her server will send notifications to <benvolio@montague.net> (bare JID) and to <nurse@capulet.com/chamber> (full JID) but not to <romeo@montague.net/orchard>.
If Juliet publishes a tune item to the presence-access "mytunes" node (pubsub type "http://jabber.org/protocol/tune"), her server will send notifications only to <nurse@capulet.com/chamber>.
If Juliet publishes a geolocation item to the roster-access "mylocation" node (pubsub type "http://jabber.org/protocol/geoloc"), her server will send notifications only to <romeo@montague.net/orchard>.
A PEP service MUST:
A PEP service MAY support other use cases, affiliations, access models, and features, but such support is OPTIONAL.
A service SHOULD support all NodeIDs that are registered with the XMPP Registrar as described in the PEP Nodes section of this document. This support shall include enforcement of the NodeID within the context of a given account, the payload type (whether wrapper or data format namespace), and any other configuration defaults as specified in the registry (this enables clients to perform seamless publish-and-create in one step).
+In order to ensure appropriate access to information published at nodes of type "presence" and "roster", a PEP service MUST re-calculate access controls when:
The XMPP Registrar shall create a registry of PEP nodes.
+ ®PROCESS; +
+ the NodeID for the PEP node
+ a natural-language description of the PEP node
+ the specification in which the PEP node is specified
+
+ default_value
+
+
+ ]]>
+ Note: The "pubsub_configuration_field_name" and "default_value" strings are as registered for the "pubsub#node_config" FORM_TYPE by XEP-0060.
+The registrant may register more than one PEP node at a time, each contained in a separate <node/> element.
+The authors wish to thank the participants in the XMPP Interoperability Testing Event held July 24 and 25, 2006, who provided valuable feedback that resulted in radical simplification of the protocol.
-Version 1.0 included the principle that "there is only one publish-subscribe node associated with any given payload type (XML namespace) for the account owner (e.g., there is one pubsub node for geolocation events, one node for tune events, and one node for mood events)." The rationale for this principle was simplification of node creation, discovery, publishing, and subscribing. However, node discovery and subscribing are already simplified through the use of presence extensions. In addition, hardcoding NodeIDs in this way violates the core pubsub principle that NodeIDs shall be opaque. Therefore the "one node per namespace" principle was removed in version 1.1 of this specification.
+The authors wish to thank the participants in the XMPP Interoperability Testing Event held July 24 and 25, 2006, who provided valuable feedback that resulted in radical simplification of the protocol. Thanks also to Ralph Meijer and Ian Paterson for helpful discussions related to payload types and NodeID registration.