<li>Request clients to add notify='1' on retraction requests, so they do trigger notifications (see <linkurl='https://xmpp.org/extensions/xep-0060.html#publisher-delete-success-notify'>XEP-0060 §7.2.2.1</link> for a rationale).</li>
<li>Announce a feature when the server supports compat between old &xep0048; (version 1.0) and this specification, and another between current &xep0048; (version 1.1) and this specification.</li>
<td>The user's preferred roomnick for the chatroom, if different to that specified by &xep0172;. In the absence of this element being present, the nickname from &xep0172; SHOULD be used if present.</td>
<td>string</td>
<td>OPTIONAL</td>
</tr>
<tr>
<td><password/> element</td>
<td>A password used to access the chatroom. Note this is not intended to be a secure storage.</td>
<td>A set of child elements (of potentially any namespace). Clients MUST preserve these (particularly preserving unknown elements) when editing items.</td>
<p>This bookmark would be displayed as 'Council of Oberon' and, if activated, would attempt to join the conference room 'council@conference.underhill.org' with nickname 'Puck'.</p>
<p>Note that a bookmark item MUST contain only one conference room.</p>
<p>A client interested in bookmarks SHOULD include the '&namespace;+notify' feature in its &xep0115;, as per &xep0163;, so that it receives notifications for updates done by other clients of the user, and reacts accordingly. The actual notifications are explained in the <linkurl='#notifications'>Bookmark Notifications</link> section of this specification.</p>
<p>Once connected, a client first retrieves the current list of bookmarks. It then SHOULD join every MUC identified by the items’ 'id' attribute that have an 'autojoin' attribute that is set to "true" or "1".</p>
<p>NOTE: A future version of this specification might refer to &xep0312; or a similar protocol to reduce the need for full synchronisation on each connection.</p>
<p>publish-options (as defined in <linkurl='https://xmpp.org/extensions/xep-0060.xml#publisher-publish-options'>XEP-0060</link>) MUST be supported by the server in order to check that the node is correctly configured before publishing a new conference. This is especially important to avoid leaking your bookmarks to your contacts for instance.</p>
<section2topic='Editing a bookmark'anchor='adding-a-bookmark'>
<p>Editing a bookmark means republishing the item, with the same bookmark JID as id, to the '&namespace;' node.</p>
<p>Note that clients MUST preserve any XML elements they do not understand, particularly including unknown elements, within the <extensions/> element of the bookmark.</p>
<p>publish-options (as defined in <linkurl='https://xmpp.org/extensions/xep-0060.xml#publisher-publish-options'>XEP-0060</link>) MUST be supported by the server in order to check that the node is correctly configured before publishing a new conference. This is especially important to avoid leaking your bookmarks to your contacts for instance.</p>
<examplecaption='Client corrects typo in name of bookmark'><![CDATA[
<p>When a client is sent an event from the Pubsub service for the '&namespace;' node, it SHOULD join the room immediately if the 'autojoin' attribute is both present and true.</p>
<p>&xep0060; is used for data storage, specifically through the use of private, personal pubsub nodes (described in &xep0223;) hosted at the user's virtual pubsub service (see &xep0163;).</p>
<p>It is encouraged to at least support unification between Private XML Storage because as of 2019 this is still the storage backend that is implemented in the majority of clients.</p>
<p>A server that supports unifying bookmarks from &xep0049; and &xep0402; SHOULD announce the "&namespace;#compat" feature on the account. Clients may use that feature as an indication that it is safe to store bookmarks using only &xep0402; without losing backward compatibility to clients that are only using &xep0049;.</p>
<p>A server that supports unifying bookmarks between &xep0223; and &xep0402; SHOULD announce the "&namespace;#compat-pep" feature on the account.</p>
<section3topic="Publishing via this specification">
<p>When a client publishes a new item, the server MAY collate all items, casting them into the 'storage:bookmarks' namespace and setting the jid attribute to the item id in each case. When contained within a storage element qualified by the 'storage:bookmarks' namespace, this will be the correct format for both current and previous variants of &xep0048;</p>
</section3>
<section3topic="Publishing via the old specification">
<p>If a client publishes a replacement list of bookmarks via the older specifications, a server MAY examine the list and update the individual items as required, sending updates or retraction notifications as needed. Servers electing to perform this OPTIONAL behaviour SHOULD NOT send notifications for unchanged items.</p>
<p>Server side unification between &xep0049; bookmarks and PEP Native Bookmarks is announced with the feature "&namespace;#compat" on the account.</p>
<p>Server side unification between the current use of XEP-0048 bookmarks (PEP) is annouced with the feature "&namespace;#compat-pep" on the account.</p>
<p>The authors would like to note that much of the syntax description was copied exactly from &xep0048; by Rachel Blackman, Peter Millard, and Peter Saint-Andre. Much of the remainder of this specification is based closely on their work.</p>
<p>Security considerations related to object persistence via publish-subscribe are described in <cite>XEP-0060</cite> and <cite>XEP-0223</cite>.</p>
<p>The client needs to make sure that the server actually supports the "http://jabber.org/protocol/pubsub#publish-options" feature, before relying on it. If it's not supported, the client should configure the '&namespace;' node first (see <cite>xep-0060</cite>), before adding any bookmarks.</p>