SIMPLE WG J. Urpalainen Internet-Draft Nokia Research Center Expires: August 18, 2005 February 14, 2005 The Extensible Markup Language (XML) Configuration Access Protocol (XCAP) Patch Operations draft-urpalainen-simple-xcap-patch-ops-00 Status of this Memo This document is an Internet-Draft and is subject to all provisions of Section 3 of RFC 3667. By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she is aware have been or will be disclosed, and any of which he or she become aware will be disclosed, in accordance with RFC 3668. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on August 18, 2005. Copyright Notice Copyright (C) The Internet Society (2005). Abstract Many prevailing systems nowadays utilize XML documents. Sometimes there's need to do some minor changes to the documents and therefore it is useful to transport only the changes e.g. over the network. This document describes XML patch operations which can be used to achieve this goal by defining XML elements which can be embedded within a transported XML change document. Urpalainen Expires August 18, 2005 [Page 1] Internet-Draft Patch Operations February 2005 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Patch operations . . . . . . . . . . . . . . . . . . . . . . 3 3.1 element . . . . . . . . . . . . . . . . . . . . . . 5 3.2 element . . . . . . . . . . . . . . . . . . . . 5 3.3 element . . . . . . . . . . . . . . . . . . . . . 5 4. Error handling . . . . . . . . . . . . . . . . . . . . . . . 5 5. Usage of patch operations . . . . . . . . . . . . . . . . . 5 6. Node Selector . . . . . . . . . . . . . . . . . . . . . . . 6 7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 6 8. XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . 8 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 9 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 10.1 Normative references . . . . . . . . . . . . . . . . . . 9 10.2 Informative references . . . . . . . . . . . . . . . . . 9 Author's Address . . . . . . . . . . . . . . . . . . . . . . 10 Intellectual Property and Copyright Statements . . . . . . . 11 Urpalainen Expires August 18, 2005 [Page 2] Internet-Draft Patch Operations February 2005 1. Introduction Many prevailing systems nowadays utilize XML documents. Sometimes there's need to do some minor changes to the documents and therefore it is useful to transport only the changes e.g. over the network. The XCAP [4] protocol defines a model where HTTP transport with methods: PUT and DELETE can be used to apply changes to a single XML document by doing one update at a time. The patch operations will complement that model by allowing several modifications to be applied to the document during one transaction. This document describes XML patch operations by defining XML elements which can be embedded within a transported XML change document. This requires however, a more flexible transport e.g. SIP [7] or a new HTTP PATCH method [8]. 2. Conventions In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in RFC 2119 [1] and indicate requirement levels for compliant implementations. The following terms are used in this demo: XML change document: This is the document that will carry all the patch operations, namepace definitions and all the data content changes. Patched document: This is the local copy of the document onto which all the patch operations in the XML change document are being applied. 3. Patch operations The XML change document contains a collection of add, replace or remove operations which will be applied one-by-one in the given order. Each of the operations contains at least one XPath [2] compatible selector which is used to select a unique specific part within the patched document. Furthermore, also the changed or added data content is given. For example, when an add operation is being requested, the element onto which new data is going to be appended is searched first from the document to be patched and then the new data content is added. OPEN ISSUE: do we want to have and . OPEN ISSUE: do we want to have http put semantics ? i.e. if replace fails continue with add. Urpalainen Expires August 18, 2005 [Page 3] Internet-Draft Patch Operations February 2005 OPEN ISSUE: do we want to have operations for xml Processing Instructions, comments or namespace definitions ? All of these seem to call for a new operation. Adding namespace definitions could be almost automatic, however. When evaluating XPath location steps, namespace expansion follows XPath 1.0 [2] semantics, i.e. if the QName does not have a prefix then the namespace URI in the expanded name is null. When the patched document is using namespace definitions, QName expansion in the location steps is done according to the definitions in the XML change document. Thus the namespace URIs for the prefixes in the evaluation steps are easily found from the XML change document. It should be emphasized that the client MAY use any prefix value, i.e. it does not have to be the same than that of the patched document. Also when the patched document uses default namespaces an equivalent namespace URI with some prefix has to be defined within the XML change document and the defined prefix MUST be used in selectors. As all the namespace definitions relevant to the patch operations are within the XML change document the element names within the optional data content are also fully namespace qualified. This means that the content of the XML change document is independent of the prefixes of the patched document. The process that performs all these patch operations does not add new or change the namespace definitions based on the prefixes and definitions in the root node of the XML change document. Instead it keeps the definitions that already exist within the patched document. If the intention is to add new namespace definitions to the patched document their definition MUST be within the added or changed data content. When doing these XPath evaluations with a fully XPath 1.0 compatible library it means that if e.g. "pref:node" location step has to be evaluated and is thus defined within the XML change document the location step "pref:node" has to be changed to e.g. "*[namespace-uri()="urn:ietf:params:xml:ns"][local-name()="node"]". However, XPath libraries usually support some sort of "namespace registering" APIs so that location step parsing can be done properly without any changes in the location step string once the prefixes versus URIs has been "registered". The XML Schema defines element types for different patch operations. The XML Schema is supposed to be included into the other XML Schemas that utilize these operations: e.g. XCAP package [5] and partial PIDF [6]. They will provide a relevant XML change document context. Furthermore, it is anticipated that they will define , and elements from the corresponding types defined in this XML Schema. The XML document fragments defined in this draft MUST be Urpalainen Expires August 18, 2005 [Page 4] Internet-Draft Patch Operations February 2005 well formed and valid. 3.1 element The element type has two selection attributes: 'parent' and 'sel'. The value of the 'parent' attribute is used to select a single element from the document onto which new data content will be appended. The second selector 'sel' is a relative location step that will uniquely point after the append to the created element, text-node content or attribute within the 'parent' selection context. If there are several sibling elements in the new document the 'sel' selector MUST include a positional constraint to fulfill an unambiguous request. The content of the element is plain text for attributes and elements which have only text-content i.e. XPath text() function is being used in the 'sel' selector. Once the 'sel' selector identifies a single element, the content of the element inludes all the attributes and child elements and e.g. possible namespace definitions, comment nodes and processing instructions. 3.2 element The element type has only one attribute: 'sel' the value of which is used to select an element, a text-node content or an attribute that is going to be replaced with the new content. The content of the element is similar as with operation. 3.3 element The element type has only one attribute: 'sel' the content of which is used to select an element, text-node content or an attribute that is going to be removed. 4. Error handling It is an error condition if any of the given operations can not be unambiguously fulfilled. However, it is beyond the scope of this document to describe a generic error response. OPEN ISSUE: format could be extended as it could be trivial to respond that e.g. operation add[2] failed combined with some text description. HTTP patch seems to favor multi-status responses (WebDAV style). 5. Usage of patch operations The XML change document SHOULD contain only those elements or attributes that have been updated. However, when there are a lot of Urpalainen Expires August 18, 2005 [Page 5] Internet-Draft Patch Operations February 2005 queued changes it MAY be desirable to send the full document content instead. How this will be done in practice is beyond the scope of this document. 6. Node Selector The ABNF [3] is used to describe the syntax for the node selector expressions. The node selector syntax is defined to be XPath [2] compatible, but has a more restricted set of capabilities. Each element selection has to point to a single node. As the document root is always the starting point for selections relative location paths can be used. XPath text() function can be used to select the text node content. It can't be used in this context e.g. when the element has mixed content or the element has child elements. XPath last() function can be used in predicates if e.g. the added new element should be the last sibling. node-sel = element-sel ["/" (attribute-sel / "text()")] element-sel = element-step *("/" element-step) element-step = ("*" / node-name) [conditions] conditions = *("[" condition "]") condition = 1*DIGIT / ; positional cond-name "=" <"> value <"> / ; value comparison "last()" ; XPath last() function cond-name = "@" node-name / ; attribute selection node-name / ; element selection "." ; current node selection node-name = [prefix ":"] string prefix = string = value = attribute-sel = "@" node-name 7. Examples The document to be patched: Urpalainen Expires August 18, 2005 [Page 6] Internet-Draft Patch Operations February 2005 This is a sample document The following namespace definitions have been added to the XML change document which uses default namespaces itself: xmlns:x="urn:ietf:params:xml:ns:xxx" xmlns:y="urn:ietf:params:xml:ns:yyy" The four example patch operations are shown as XML fragments: Patched doc new attr The resulting document after applying the patches: Patched doc Urpalainen Expires August 18, 2005 [Page 7] Internet-Draft Patch Operations February 2005 8. XML Schema The XML schema types for the patch operations. Urpalainen Expires August 18, 2005 [Page 8] Internet-Draft Patch Operations February 2005 9. Acknowledgments The author would like to thank Eva Leppanen, Mikko Lonnfors, Aki Niemi and Jonathan Rosenberg for their valuable comments. 10. References 10.1 Normative references [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [2] "XML Path Language (XPath) Version 1.0", W3C REC REC-xpath-19991116 , November 1999. [3] Crocker, D., "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. 10.2 Informative references [4] Rosenberg, J., "The Extensible Markup Language (XML) Configuration Access Protoco (XCAP)", draft-ietf-simple-xcap-06, February 2005. [5] Rosenberg, J., "An Extensible Markup Language (XML) Document Format For Indicating Changes in XML Configuration Access Protocol (XCAP) Resources", draft-ietf-simple-xcap-diff-00 (work in progress), February 2005. [6] Lonnfors, M., Leppanen, E., Khartabil, H. and J. Urpalainen, "Presence Information Data format (PIDF) Extension for Partial Presence", draft-ietf-simple-partial-pidf-format-03 (work in progress), February 2005. [7] Niemi, A., "Session Initiation Protocol (SIP) Extension for Event State Publication", RFC 3903, October 2004. [8] Dusseault, L., "Partial Document Changes (PATCH Method) for HTTP", draft-dusseault-http-patch-06 (work in progress), October 2004. Urpalainen Expires August 18, 2005 [Page 9] Internet-Draft Patch Operations February 2005 Author's Address Jari Urpalainen Nokia Research Center Itamerenkatu 11-13 00180 Helsinki Finland Phone: +358 7180 37686 Email: jari.urpalainen@nokia.com Urpalainen Expires August 18, 2005 [Page 10] Internet-Draft Patch Operations February 2005 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org. Disclaimer of Validity This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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. Copyright Statement Copyright (C) The Internet Society (2005). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. Acknowledgment Funding for the RFC Editor function is currently provided by the Internet Society. Urpalainen Expires August 18, 2005 [Page 11]