Presence Information Data Format (PIDF) Extension for Partial Presence
Extracted elements (17)
A new MIME type 'application/pidf-diff+xml' was introduced rather than extending the existing 'application/pidf+xml' because PIDF was not originally designed for partial updates. The new type allows applications to negotiate partial update support via the Accept header, which would not have been possible without a distinct MIME type.
The 'version' counter increments independently of whether <pidf-full> or <pidf-diff> content is transported — a single shared counter spans both document types. This enables 'state delta' processing per RFC 3265 and aligns with the partial notification model of RFC 5263.
Systems compliant with Common Profile for Presence (CPP, RFC 3859) will not support this specification by default. This is not problematic because all endpoints must support the baseline 'application/pidf+xml' type; partial PIDF is only used when both sides negotiate support via SIP content type negotiation.
Conformant XML processors MUST support both UTF-8 and UTF-16 encodings. UTF-8 is the RECOMMENDED encoding for this partial presence format. If a receiving application accepted a character set in an initial <pidf-full>, it MUST continue to accept that same character set in subsequent <pidf-diff> documents but MUST NOT need to accept a character set change.
Implementations MUST follow guidelines from PIDF (RFC 3863) and PIDF extension formats (DataModel RFC 4479, RPID RFC 4480, CIPID RFC 4482), and MUST support the XML schema data type ID from those RFCs. The XML document MUST be well-formed and SHOULD be valid.
The 'entity' attribute content within <pidf-diff> MUST be the same as the 'entity' attribute value of the <presence> element described in RFC 3863.
The partial presence document SHOULD only contain those elements or attributes that have changed. When there are a large number of changes, the full presence document MAY be transported instead.
Error conditions MAY be indicated using error elements defined in RFC 5261. Incorrect content in 'version' or 'entity' attributes MAY be signaled using the <invalid-attribute-value> error element. No additional error elements are defined by this document.
The optional 'entity' attribute in <pidf-diff> carries a presentity URI that MUST match the 'entity' attribute of the <presence> element defined in RFC 3863. It identifies the presentity to which the partial update applies.
The optional 'version' attribute (unsigned integer) appears in both <pidf-full> and <pidf-diff> elements. It is incremented by one with each successive document update and is maintained as a single counter across both document types, enabling ordered delivery and loss detection.
The <pidf-diff> root element carries partial presence updates using XML patch operations (RFC 5261). It contains <add>, <replace>, and <remove> child elements that modify the recipient's cached copy of the full presence document.
The <pidf-full> root element carries the complete presence document with an optional 'version' attribute. Its content is equivalent to 'application/pidf+xml' with the addition of versioning; use of <presence> as a root element is explicitly disallowed.
IANA registered a new XML namespace URN 'urn:ietf:params:xml:ns:pidf-diff' per RFC 3688 for the pidf-diff element namespace defined by this specification.
IANA registered a new XML Schema under URI 'urn:ietf:params:xml:schema:pidf-diff' per RFC 3688 procedures, with schema content as defined in Section 7 of this document.
IANA registered the new MIME type 'application/pidf-diff+xml' per RFC 4288 procedures and RFC 3023 guidelines. The charset parameter defaults to UTF-8; intended usage is LIMITED USE, restricted to Presence (RFC 3863) based systems.
All security considerations from PIDF (RFC 3863) apply unchanged, as presence information may be highly sensitive. The protocol SHOULD provide authorization policies governing which watchers may receive which presence information, per RFC 5025.
The 'version' attribute is typed as xsd:unsignedInt. The 'entity' attribute in <pidf-diff> is typed as xsd:anyURI. The <pidf-diff> element contains a sequence of zero or more <add>, <replace>, or <remove> patch-op elements.