view Side-By-Side changes
SIMPLE J. Rosenberg Internet-Draft dynamicsoft Expires:December 22, 2003 June 23,April 26, 2004 October 27, 2003 The Extensible Markup Language (XML) Configuration Access Protocol (XCAP)draft-ietf-simple-xcap-00draft-ietf-simple-xcap-01 Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. 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 onDecember 22, 2003.April 26, 2004. Copyright Notice Copyright (C) The Internet Society (2003). All Rights Reserved. Abstract This specification defines the Extensible Markup Language (XML) Configuration Access Protocol (XCAP). XCAP allows a client to read, write and modify application configuration data, stored in XML format on a server. XCAP is not a new protocol. XCAP maps XML document sub-trees and element attributes to HTTP URIs, so that these components can be directly accessed by HTTP. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 1] Internet-Draft XCAPJuneOctober 2003 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Overview of Operation . . . . . . . . . . . . . . . . . . . 4 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 5 4. Application Usages . . . . . . . . . . . . . . . . . . . . . 6 5. URI Construction . . . . . . . . . . . . . . . . . . . . . . 8 5.1 Identifying the XML Document . . . . . . . . . . . . . . . . 8 5.2 Identifying the XML Nodes . . . . . . . . . . . . . . . . . 9 6. Client Operations . . . . . . . . . . . . . . . . . . . . .1012 6.1 Creating a New Document . . . . . . . . . . . . . . . . . .1012 6.2 Replace an Existing Document . . . . . . . . . . . . . . . .1012 6.3 Deleting a Document . . . . . . . . . . . . . . . . . . . .1012 6.4 Fetching a Document . . . . . . . . . . . . . . . . . . . .1012 6.5 Creating a New Element . . . . . . . . . . . . . . . . . . .1012 6.6 Replacing an Element in the Document . . . . . . . . . . . .1113 6.7 Delete an Element . . . . . . . . . . . . . . . . . . . . .1213 6.8 Fetch an Element . . . . . . . . . . . . . . . . . . . . . .1213 6.9 Create an Attribute . . . . . . . . . . . . . . . . . . . .1214 6.10 Replacing Attributes . . . . . . . . . . . . . . . . . . . .1314 6.11 Deleting Attributes . . . . . . . . . . . . . . . . . . . .1314 6.12 Fetching Attributes . . . . . . . . . . . . . . . . . . . .1314 6.13Fetching Metadata . . . . . . . . . . . . . . . . . . . . . 13 6.14Read/Modify/Write Transactions . . . . . . . . . . . . . . .1415 7. Server Behavior . . . . . . . . . . . . . . . . . . . . . .1516 7.1 POST Handling . . . . . . . . . . . . . . . . . . . . . . . 16 7.2 PUT Handling . . . . . . . . . . . . . . . . . . . . . . . . 17 7.3 GET Handling . . . . . . . . . . . . . . . . . . . . . . . . 18 7.4 DELETE Handling . . . . . . . . . . . . . . . . . . . . . . 18 7.5 ManagingModification TimesEtags . . . . . . . . . . . . . . . . . . . . . . . 19 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . .2120 9. Security Considerations . . . . . . . . . . . . . . . . . . 23 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . 24 Normative References . . . . . . . . . . . . . . . . . . . . 25 Informative References . . . . . . . . . . . . . . . . . . . 26 Author's Address . . . . . . . . . . . . . . . . . . . . . . 27 Intellectual Property and Copyright Statements . . . . . . . 28 Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 2] Internet-Draft XCAPJuneOctober 2003 1. IntroductionThe Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions (SIMPLE) working group has been developing specifications for subscribing to,In many communications applications, such as Voice over IP, instant messaging, andreceiving notifications of, user presence [10]. An important aspect of user presencepresence, it isauthorization policy. Indeed, the presence specification requires a Presence Agent (PA)necessary for network servers toboth authenticate and authorize all subscriptions before accepting them. However, it does not define how the server determinesaccess per-user information in theauthorization statusprocess of servicing asubscriber. Users can set their authorization policy through web pages or voice response systems. However, there is currently no protocol specified for setting this policy. A protocol for this purposerequest. This per-user information resides within the network, but iscalled an authorization manipulation protocol. Mechanisms have also been defined to support reactive authorization [11][12]. Reactive authorization allowsmanaged by the end usertothemselves. Its management can beinformed when someone has attempted to subscribe to their presence whendone through a multiplicity of access points, including theserver is unable to determine an authorization policy. The user can then go and set anweb, a wireless handset, or a PC application. Examples of per-user information are presence [12] authorization policyfor the subscriber, using the same unspecified mechanism for setting the policy. Another important aspect ofand presencesystems is the buddy list, also known as thelists. Presence lists are lists of users whose presencelist. Thisis desired by a watcher. Presence information for the list of usersthat a watcher wishes to learn presence state for. This list can be stored in the client, or itcan bestored inobtained by subscribing to acentralized server.resource which represents that list [15]. Inthe latterthis case, theclient would subscribeResource List Server (RLS) requires access tothe list as a whole [13]. The presencethis listcan be set by using a web page or voice response application. However, there is no protocol mechanism currently specifiedin order tomanage the presence list. Such a protocol is calledprocess apresence list manipulation protocol. The SIMPLE group has defined requirementsSIP [11]SUBSCRIBE [20] request for it. Requirements foran authorizationmanipulationprotocol and aof presencelist manipulation protocol. These protocols have similar requirements,lists andare captured in [14].authorization policies have been specified by the SIMPLE working group [16]. Thisdocument proposesspecification describes acandidate for the authorization and presence manipulation protocol,protocol that can be used to manipulate this per-user data. It is called the Extensible Markup Language (XML) Configuration Access Protocol (XCAP). XCAP is notactuallya new protocol.XCAPRather, it is a set of conventions forusingmapping XML documents and document components into HTTPto read, writeURIs, rules for how the modification of one resource affects another, data validation constraints, andmodify XML configurationauthorization policies associated with access to those resources. Because of this structure, normal HTTP primitives can be used to manipulate the data. XCAP is based heavily on ideas borrowed from the Application Configuration Access Protocol (ACAP)[15],[18], but it is not an extension of it, nor does it have any dependencies on it. Like ACAP, XCAP is meant to support the configuration needs for a multiplicity of applications, rather than just a single one. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 3] Internet-Draft XCAPJuneOctober 2003 2. Overview of OperationXCAP supports the needs of any application that needs access to data defined by clients of the application.Each application that makes use of XCAP specifies an application usage (Section 4). This application usage defines the XML schema [1] for the data used by the application, along with other key pieces of information. The principal task of XCAP is to allow clients to read, write, modify, create and delete pieces of that data. These operations are supported using HTTP 1.1 [2]. An XCAP server acts as a repository for collections of XML documents. There will be documents stored for each application. Within each application, there are documents stored for each user. Each user can have a multiplicity of documents for a particular application. To access some component of one of those documents, XCAP defines an algorithm for constructing a URI that can be used to reference that component. Components refer to any subtree of the document, or any attribute for any element within the document. Thus, the HTTP URIs used by XCAP point to pieces of information that are finer grained than the XML document itself. With a standardized naming convention for mapping components of XMLdocuments,documents to HTTP URIs, the basic operations for accessing the data aresimple.provided by existing HTTP primitives. Reading one of the components isjust a standardaccomplished with HTTPGET operation. Writing,GET, creating or modifying one of the components isa standarddone with an HTTPPOST or PUT operation. Deleting a componentPUT, and removing one of the components isjust a standard DELETE operation. For example, to add a friend to a presence list, a client would constructdone with anXML document fragment which contains the information on that friend. The client would then construct a URI that refers to the location in the presence list document where this new fragment is to be added. The client then performs a POST operation against the URI, placing the document fragment into the body of the POST request.HTTP DELETE. To provide atomicread/modify/writeread/ modify/write operations,theHTTPIf-Unmodified-Since header field isentity tags are used.The HTTP POST operation used by the client would contain the date obtained in the Last-Modified header field from the GET used to read the data.Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 4] Internet-Draft XCAPJuneOctober 2003 3. Terminology 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 [3] and indicate requirement levels for compliant implementations. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 5] Internet-Draft XCAPJuneOctober 2003 4. Application Usages A central concept in XCAP is that of an application usage. An application usage defines the way in which a specific application makes use of XCAP. This definition is composed of several pieces of information, such as an XML schema and constraints on values of one element given values in another. Application usages are documented in specifications which convey this information. In particular, an application usage specification MUST provide the following information: Application Usage ID (AUID): Each application usage is associated with a name, called an AUID. This name uniquely identifies the application usage, and is different from all other AUIDs. AUIDs exist in one of two namespaces. The first namespace is the IETF namespace. This namespace contains a set of tokens, each of which is registered with IANA. These registrations occur with the publication of standards track RFCs[16][19] based on the guidelines in Section 10. The second namespace is the vendor-proprietary namespace. Each AUID in that namespace is prefixed with thetoken "vnd", followed by a period ("."),reverse domain name name of the organization creating the AUID, followed by avalid DNS name, followed by anotherperiod, followed by any vendor defined token.A vendor creating such an AUID MUST only create one using domain names for which it is an administrator.As an example, the example.com domain can create an AUID with the value"vnd.example.com.foo""com.example.foo" but cannot create one with the value"vnd.example.org.bar"."org.example.foo". AUIDs within the vendor namespace do not need to be registered with IANA. The vendor namespace is also meant to be used in lab environments where no central registry is needed. The syntax for AUIDs, expressed in ABNF [7] (and using some of the BNF defined in RFC 2396 [8]) is: AUID = global-auid / vendor-auid global-auid = auid auid = alphanum / mark vendor-auid = rev-hostname "." auid rev-hostname = toplabel *( "." domainlabel ) domainlabel = alphanum / alphanum *( alphanum / "-" ) alphanum toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum MIME Type: Each application usage MUST register a MIME type for its XML documents. This is done based on the procedures of RFC 3023 [4]. XML Schema: Each application will have a unique schema which defines the data needed by the application. In XCAP, this schema is represented using XMLschema. As an example, presence list data is composed of a list of URIs, each of which represends a member of presence list. [17] defines the XMLschemafor this data.[1]. Rosenberg Expires April 26, 2004 [Page 6] Internet-Draft XCAP October 2003 Additional Constraints: XML schemas can represent a variety of constraints about data, such as ranges and types. However, schemas cannot cover all types of data constraints, including constraints introduced by data interdependencies. For example, one XML element may contain an integer which defines the maximum number of instances of another element. The application usage defines theseRosenberg Expires December 22, 2003 [Page 6] Internet-Draft XCAP June 2003additional constraints. Data Semantics: The application usage needs to define detailed semantics for each piece of data in the schema. Naming Conventions: The data defined by the XML schema will be used by any number of entities participating in the application. In the case of presence list, the data is used by the Resource List Server (RLS), which reads the data, and by the clients, which write it. During the execution of the application (i.e., the processing of the list subscription), specific documents will need to be read or written. In order for the application to function properly, there needs to be agreement on exactly which documents are read or written by the application. This is an issue of naming conventions; agreeing on how an application constructs the URI representing the document that is to be read or written. The application usage spells out this information.Computed Data: Frequently, some of the data defined in the schema is not independent; that is, its value depends on the values of other elements in the document. As a result,Resource Interdependencies: In many cases, when aclient usesuser modifies an XCAP resource, many other resources need tomodify the independent pieces of the document, the server needs to compute the dependent ones in order to fully populate the document. Thechange as well. Such interdependencies are application usageneeds to define which data components are dependent, and how they are computed.dependent. As an example, whenthe URI forapresence list is not specified byuser performs aclient,PUT operation to create aURI is chosen bynew presence list, the serverand filled in. This needsmay need to fill in the URI associated with that list. These interdependencies need to be specified by the application usage. Note that, if a server needs to modify data within a document just PUT by the client, this modification is effectively accomplished as a separate transaction. Concretely, this means that, after the server modifies the data, the entity tags are updated as if the client had made the change itself. Authorization Policies: By default, an XCAP server will only allow a user to access (read, write, delete or modify) their own documents. The application usage can specify differing default authorization policies.Of course,An application usage can also specify whether another application usage is used to define thedefaultauthorization policies. An application usage for setting authorization policies canalwaysalso beoverriden by operator or user-specified policies.defined subsequent to the definition of the the main application usage. In such a case, the main application usage needs only to specify that such a usage will be defined in the future. Application usages are similar to dataset classes in ACAP. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 7] Internet-Draft XCAPJuneOctober 2003 5. URI Construction In order to manipulate a piece of configuration data, the data must be represented by an HTTP URI. XCAP defines a specific naming convention for constructing these URIs.This convention is very similar toIn particular, thenaming conventions used for dataset classes in ACAP, and makes usehost part identifies theXPath [5] specification for identifying nodes of an XML document.XCAP server. The abs_path component of the HTTP URIconsists of two parts: XCAP-URI = Document-URI ["?" Node-Selector] Document-URI = http_URL ;from RFC2616 Node-Selector = *uric ;Escape coded LocationPath from XPath The first part,identifies theDocument-URI, selects aspecific XMLdocument. It is a valid HTTP URL, subjectdocument tothe constraintsbe modified. XCAP servers organize XML documents in a specific hierarchical fashion, as describedhere. The constraints for constructing this URI are discussed belowin Section 5.1.OnceThe URI MAY contain adocumentquery. This query isselected,called a node selector. When present, it contains an XML component identifier formatted according to Section 5.2. The node selector identifies theremainderspecific component of the XML document. The HTTP URI(the Node-Selector) identifies which components ofwithout thedocument are being addressed. The Node-Selectorquery isan XPath [5] LocationPath expression, subject to constraints described below.called the document URI. , and makes use the specification for identifying nodes of an XML document. 5.1 Identifying the XML Document XCAP mandates that a server organizes documents according to a defined hierarchy. The root of this hierarchy is an HTTP URI called the XCAP services root URI. This URI identifies the root of the tree within the domain where all XCAP documents are stored. It can be any valid HTTP URL, but MUST NOT contain a query string. As an example, http://xcap.example.com/services might be used as the XCAP services root URI within the example.com domain. Typically, the XCAP services root URI is provisioned into client devices for bootstrapping purposes. Beneath the XCAP services root URI is a tree structure for organizing documents. The first level of this tree consists of the XCAP AUID. So, continuing the example above, all of the documents used by the presence list application would be under http://xcap.example.com/ services/presence-lists. It is assumed that each application will have data that is set by users, and/or it will have global data that applies to all users. As a result, within the directory structure for each application usage, there are two sub-trees. One, called "users", holds the documents that are applicable toonlyspecific users, and the other, called "global", holds documents applicable to all users.Rosenberg Expires December 22, 2003 [Page 8] Internet-Draft XCAP June 2003Within the "users" tree are zero or more sub-trees, each of which identifies a documents that apply to a specific user. XCAP does not itself define what it means for documents to "apply" to a user, beyond specification of a baseline authorization policy. Specifically, the default authorization policy is that only a user who authenticates themself as user X can read, write, or otherwise access in any way the documents within sub-tree X. Each application usage can specify additional authorization policies which depend on Rosenberg Expires April 26, 2004 [Page 8] Internet-Draft XCAP October 2003 data used by the application itself. The remainder of the URI (the path following "global" or the specific user) is not constrained by this specification. The application usage MAY introduce constraints, or may allow any structure to be used. 5.2 Identifying the XML Nodes The second component of the XCAP URI specifies specific nodes of the XML document which are to be accessed.Nodes, in this context,A node refers tothe definition provided in the XPath specification, and therefore includeseither an XMLelements, attributes, text, namespaces, processing instructions, comments, and roots. These nodes are identified by a LocationPath expression, as defined in XPath. Either the abbreviatedelement orunabbreviated form MAY be used. Contraints are imposed on the XPathan attribute of an element. The node selector is an expression which identifies an element or attribute. Its grammar is: node-selector = element-selector ["/" attribute-selector] element-selector = step *( "/" step) step = by-name / by-pos / by-attr by-name = QName ; from XML Namespaces by-pos = QName "[" position "]" position = 1*DIGIT by-attr = QName "[" "@" att-name "=" <"> att-value <"> "]" att-name = QName att-value = AttValue ; from XML specification by-pos = QName "[" position "]" position = *DIGIT attribute-selector = "@" att-name The node selector is based on theoperation being performed. These do not constrain the functions or axes that can be usedconcepts intheXPathexpression, but rather constrain[5]. Indeed, theresultingnodeset. See Section 6 for details. Rosenberg Expires December 22, 2003 [Page 9] Internet-Draft XCAP June 2003 6. Client Operations An XCAP client is an HTTP 1.1 compliant client. An XCAP client performsselector expression happens to be a valid XPath expression. However, XPath provides a set ofprimitive operationsfunctionality far richer than is needed here, and its breadth would introduce complexity into XCAP. To determne the XML element or attribute selected byinvoking specific methods againsttheserver, using specific URIs, wherenode selector, processing begins at therequests contain bodies and headers subject to specific constraints. The setroot ofprimitive operations, the methods used to accomplish them, andtheheader and body constraints are described here. 6.1 Creating a New Document To create a new document,XML document. The first step in theclient constructselement selector is then taken. Each step chooses aURI that references the location wherespecific XML element within the current document context. The document context isto be placed. This URI MUST NOT contain a NodeSelector component, and MUST meettheconstraints described in Section 5.1.point within the XML document from which a specific step is evaluated. Theclient then invokesdocument context begins at the root of the document. When aPUT method onstep determines an element within thatURI. The content incontext, that element becomes therequest MUST benew context for evaluation of the next step. Each step can select anXML document compliant toelement by its name, by a combination of name and attribute value, or by name and position. If theschema associatedstep is attempting selection by name, the server looks for all elements within the current context with that name. Name matching is performed as described below. If there is more than one element with theapplication usage definedspecified name, the result is considered a no-match. Rosenberg Expires April 26, 2004 [Page 9] Internet-Draft XCAP October 2003 If the step is attempting selection by name and attribute, theURI. For example,server looks for all elements within the current document context with that name. Of those that match, it looks for ones that have the given attribute name, where that attribute has the given value. If there is no match, or if more than one element matches, theclient performs a PUT operation to http:// xcap.example.com/services/presence-lists/users/joe/mybuddies, presence-listsresult is considered a no-match. If theapplication unique ID,step is attempting selection by name and position, theschemaserver looks for all elements within the current document context with that name. These are then sorted in document order, as defined byit would dictate the bodyXpath. The position-th element is then selected. If there are fewer than position number ofthe request. 6.2 Replace an Existing Document To replace an existing documentelements with that name, the result is considered anew one,no-match. Once theprocedureslast step is executed, if there is no attribute selector, the result ofSection 6.1 are followed;theRequest-URI merely refers to an existing document whichnode selection is the last selected element. If there is an attribute selector, the server checks tobe replacedsee if there is an attribute with that name within thecontent of the request. 6.3 Deleting a Document To delete a document,currently selectoed element. If there is not, theclient constructsresult is considered aURIno-match. Otherwise, thatreferencesattribute is selected. Matching of element names and attributes is performed by expanding them into thedocument to be deleted. By definition this URI will not contain a NodeSelector component. The clientexpanded name form, as described in XML Namespaces, and theninvokes a DELETE operation onperforming theURI to deletecomparison of thedocument. 6.4 Fetching a Documentresults. When evaluating the QNames in the node selector, the default namespace and namespace definitions from the document URI apply. Asonean example, consider the following XML document: <?xml version="1.0"?> <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" version="0" state="full"> <watcher-list resource="sip:professor@example.net" package="presence"> <watcher status="active" id="8ajksjda7s" duration-subscribed="509" event="approved" >sip:userA@example.net</watcher> <watcher status="pending" id="hh8juja87s997-ass7" display-name="Mr. Subscriber" event="subscribe">sip:userB@example.org</watcher> </watcher-list> </watcherinfo> The node selector "watcherinfo/watcher-list/ watcher[@id="8ajksjda7s"]" wouldexpect, fetching a documentselect the following XML element: Rosenberg Expires April 26, 2004 [Page 10] Internet-Draft XCAP October 2003 <watcher status="active" id="8ajksjda7s" duration-subscribed="509" event="approved" >sip:userA@example.net</watcher> Rosenberg Expires April 26, 2004 [Page 11] Internet-Draft XCAP October 2003 6. Client Operations An XCAP client istriviallyan HTTP 1.1 compliant client. Specific data manipulation tasks are accomplished byperforming aninvoking the right set of HTTPGET requestmethods with theRequest URIright setto the document to be fetched. It is useful for clients to perform conditional GETs using the If-Modified-Since header field, in order to check if a locally cached copyof headers on thedocument is still valid. 6.5server. This section describes those in detail 6.1 Creating a NewElement Rosenberg Expires December 22, 2003 [Page 10] Internet-Draft XCAP June 2003Document To create a newXML element within an existingdocument, the client constructs a URIwhose Document-URI points to the document to be modified. The Node-Selector MUST be present, containing an expression identifying the point inthat references thedocumentlocation where thenew elementdocument is tobe added. The node-set selected by the expressionbe placed. This URI MUST NOT containonlyasingle XML element.NodeSelector component. The client then invokesthe HTTP POST method.a PUT method on that URI. The content in the request MUST be an XMLdocument. That XMLdocumentMUST be conformantcompliant to the schema associated with the application usage defined by the URI.The server will insert the document such that the first element of the document becomes the next sibling immediately following the element specified byFor example, if theRequest-URI. TheclientSHOULD be certain, before making the request, that the resulting modified document will also be conformant to the schema. 6.6 Replacing an Element in the Document Replacing an element of the document constitutes storage ofperforms asupplied entity under the specified URI, and is therefore accomplished with thePUTmethod (as opposed to POST, which will insert). The client constructs a URI whose Document-URI points to the documentoperation tobe modified. The Node-Selector MUST be present, containing an expression identifying the element whose valuehttp:// xcap.example.com/services/presence-lists/users/joe/mybuddies, presence-lists isto be replaced. The node-set selected by the expression MUST contain only a single XML element. The client then invokes the PUT method. The entity of the request MUST be of type text/plain. The server will takethevalue ofapplication unique ID, and theelement specifiedschema defined bythe request URI, and replaceitwithwould dictate thecontentbody of thePUTrequest.Here, value refers to the binary contents of6.2 Replace anXML document, startingExisting Document To replace an existing document with a new one, thebeginning tagprocedures of Section 6.1 are followed; theelement, and ending with the end tag. This differs from the "string value" defined in XPath, whichRequest-URI merely refersonlyto an existing document which is to be replaced with thevaluescontent of thetext element descendants of an element. The client SHOULD be certain, before makingrequest. 6.3 Deleting a Document To delete a document, therequest,client constructs a URI that references theresulting modifieddocumentwill be conformanttothe schema.be deleted. By definition this URI will not contain a NodeSelector component. Thebody ofclient then invokes a DELETE operation on therequest here is of type text/plain becauseURI to delete thevalue of an element need not bedocument. 6.4 Fetching avalid XML document; frequently, it will be text or CDATA. Of course, the value ofDocument As one would expect, fetching a document is trivially accomplished by performing anXML element may be other XML elements, in which caseHTTP GET request with thebody ofRequest URI set to therequest will be an XMLdocumentfragment, and by itself not complianttoany schema. Note that this operation only modifies the value of an element.be fetched. Itcannot modifyis useful for clients to perform conditional GETs using theattributesIf-Match header field, in order to check if a locally cached copy of theelement.document is still valid. An HTTP server MUST return Etags for entities that represent resources managed by XCAP. 6.5 Creating a New Element Todo that,create a new XML element within an existing document, thereplace attribute operation is performed.client Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page11]12] Internet-Draft XCAPJuneOctober 20036.7 Delete an Element To delete elements from a document, the clientconstructs a URI whoseDocument-URIdocument URI points to the documentcontaining the elementsto bedeleted.modified. TheNode-Selectornode selector MUST bepresent, containing an expression identifyingpresent in theelements to be deleted. Unlike most ofURI. The node selector is constructed such that it meets two constraints. First, if evaluated against theother operations,current document, thenode-set selectedresult is a no-match. Secondly, if the element was added to the document as desired by theexpression MAY contain multiple elements.client, the node selector would select that element. The client then invokes the HTTPDELETE method. All ofPUT method [[OPEN ISSUE: what is theelements specified bycontent type?]]. The content in thenode set willrequest MUST bedeletedan XML element. The server will insert the element into the document such that the node selector, if evaluated by theserver. The body ofserver, would return therequest SHOULD be empty.content present in the request. The client SHOULD be certain, before making the request, that the resulting modified document will also be conformant to the schema.6.8 Fetch an Element To fetch an element of a document, the client constructs a URI whose Document-URI pointsIt is important tothe document containingnote that the elementto be fetched. The Node-Selector MUSTmight potentially bepresent, containing an expression identifyinginserted in theelement whose valuedocument in several different ways, and still meet the constraints defined above. This is analagous tobe fetched. The node-set selected bytheexpression MUST contain onlycase when asingle XML element. The client then invokesnew file is PUT into a directory on a server; theGET method.location of that file within the directory is not specified, and is up the local file system to decide. Theresponse will contain an XMLonly guarantee is that GET(PUT(x)) returns documentwithx. 6.6 Replacing an Element in thespecifiedDocument Replacing an elementas the one and only childof the documentroot. OPEN ISSUE: Thisis also accomplished with PUT. The onlyallows you to get one element at a time. We could allow the XPath expression to specify multiple elements, and then the response contains a documentdifference witheach of those elements as a child ofthedocument root. However,behavior above for insertion is thatdocument might not be compliant totheschema,node selector, when evaluated against the current document, is a match for an element in the current document. That element is removed, andworse,replaced with thedocument doesnt actually reflect any specific sub-treecontent of theactual document. 6.9 CreatePUT request. 6.7 Delete anAttributeElement Tocreate an attribute in an existing element ofdelete elements from a document, the client constructs a URI whoseDocument-URIdocument URI points to the document containing the elements to bemodified.deleted. TheNode-Selectornode selector MUST be present,containing an expression identifying an attribute that is to created. Specifically, the last location step of the expression MUST specify an attribute axis,and identify thecontext MUST specify a singlespecific elementthat exists within the document.to be deleted. The client then invokes the HTTPPOSTDELETE method. Thecontent defined by the request MUST be of type text/plain. A new attribute is added toserver will remove the elementdefined by the context, with the name specified by the Rosenberg Expires December 22, 2003 [Page 12] Internet-Draft XCAP June 2003 node test in the last location step, with a value specified by the body offrom therequest. If an attribute of this name already exists, it is replaced.document. The client SHOULD be certain, before making the request, that the resulting modified document will also be conformant to the schema.6.10 Replacing Attributes6.8 Fetch an Element Toreplacefetch an element of a document, the client constructs a URI whose document URI points to the document containing the element to be fetched. The node selector MUST be present, and must identify the Rosenberg Expires April 26, 2004 [Page 13] Internet-Draft XCAP October 2003 element to be fetched. The client then invokes the GET method. The response will contain that XML element. Specifically, it contains the content of the XML document, starting with the opening bracket for the begin tag for that element, and ending with the closing bracket for the end tag for that element. 6.9 Create an Attribute To create an attribute in an existing element of a document, the client constructs a URI whoseDocument-URIdocument URI points to the document to be modified. TheNode-Selectornode selector MUST bepresent, containing an expression identifying an attributepresent. The node selector is constructed such that it meets two constraints. First, if evaluated against the current document, the result is a no-match. Secondly, if the attribute was added tobe replaced.the document as desired by the client, the node selector would select that attribute. The client then invokes the HTTP PUT method. The content defined by the request MUST beof type text/plain. The value ofcompliant to theattributegrammar for Attribute as definedbyin XML 1.0 [[OPEN ISSUE: content type?]]. The server will add that attribute such that, if theNode-Selectornode selector isreplaced byevaluated on thebody ofresulting document, it returns the attribute present in the request. The client SHOULD be certain, before making the request, that the resulting modified document will also be conformant to the schema. 6.10 Replacing Attributes Replacing an attribute of the document is also accomplished with PUT. The only difference with the behavior above for insertion is that the node selector, when evaluated against the current document, is a match for an attribute in the current document. That attribute is removed, and replaced with the content of the PUT request. 6.11 Deleting Attributes To delete attributes from the document, the client constructs a URI whoseDocument-URIdocument URI points to the document containing the attributes to be deleted. TheNode-Selectornode selector MUST be present,containingand evaluate to anexpression identifyingattribute in theattributesdocument to be deleted.Unlike most of the other operations, the node-set selected by the expression MAY contain multiple attributes.The client then invokes the HTTP DELETE method.All of the attributes specified by the node setThe server willbe deleted byremove theserver. The body ofattribute from therequest SHOULD be empty.document. The client SHOULD be certain, before making the request, that the resulting modified document will also be conformant to the schema. 6.12 Fetching Attributes Rosenberg Expires April 26, 2004 [Page 14] Internet-Draft XCAP October 2003 To fetch an attribute of a document, the client constructs a URI whose Document-URI points to the document containing the attribute to be fetched. TheNode-Selectornode selector MUST be present, containing an expression identifying the attribute whose value is to be fetched. Thenode-set selected by the expression MUST contain only a single XML attribute. Theclient then invokes the GET method. The responsewill contain an text/plain document with the value of the specified attribute. 6.13 Fetching Metadata Rosenberg Expires December 22, 2003 [Page 13] Internet-Draft XCAP June 2003 Elements and attributes in an XML document have various meta-data associated with them. For example, and XML element has a certain number of child elements. That number is a piece of meta-data that describes the element. Currently, there is no way to fetch meta-data for XML elements or attributes. OPEN ISSUE: Is this restriction OK? XPath does specify functions for computing meta-data about node sets. We can't use them since XCAP mandates thatwill contain document with therequest URI be a location set, which does not include these other functions. We could relaxspecified attribute, formatted according to theconstraint if this is deemed important. 6.14grammar of Attribute as defined in the XML 1.0 specifications. 6.13 Read/Modify/Write Transactions It is anticipated that a common operation will be to read the current version of a document or element, modify it on the client, and then write the change back to the server. In order for the results to be consistent with the client's expectations, the operation must be atomic. To accomplish this, the clientstores the valuemakes use of entity tags returned by theLast-Modified header field from the response to itsserver in a GET operation used to read the element, attribute, or document that is to be modified. To guarantee atomicity, the PUTor POSToperation used to write the changes back to the server MUST contain anIf-Unmodified-SinceIf-Match header field, whose value is equal to thevalueentity tag from the prior GET response. If the request fails with a 412 response, the client knows that another update of the data has occurred before it was able to write the results back. The client can then fetch the most recent version, and attempt its modification again. Because there are no batching operations defined in HTTP, that would allow for a number of separate create, modify or delete operations to be performed atomically, designers of application usages should take care to structure their schemas so that operations that need to be performed atomically can be done in a single operation. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page14]15] Internet-Draft XCAPJuneOctober 2003 7. Server BehaviorTODO: Specify an XML body type for the responses that contains error conditions or success results.An XCAP server is an HTTP 1.1 compliant origin server. The behaviors mandated by this specification relate to the way in which the HTTP URI is interpreted and the content is constructed. An XCAP server MUST be explicitly aware of the application usage against which requests are being made. That is, the server must be explicitly configured to handle URIs for each specific application usage, and must be aware of the constraints imposed by that application usage.OPEN ISSUE: It mayFurthermore, an XCAP server MUST bepossibleaware of all of the XML namespaces present in any documents it manages. This is toremove this restrictionensure that any data constraints or data interdependencies imposed byallowing ana future application usageto define operation in a server that doesnt understandare properly supported by theusage. That may require some capabilities discoveryserver. It is also required tobe introduced, this constraint didnt seemensure thatproblematic.authorization policies are properly implemented. When the server receives a request, the treatment depends on the URI. If the URI refers to an application usage not understood by the server, the server MUST reject the request with a 404 (Not Found) response. If the URI refers to a user that is not recognized by the server, it MUST reject the request with a 404 (Not Found). Next, the server authenticates the request. All XCAP servers MUST support HTTP Digest [6]. Furthermore, servers MUST support HTTP over TLS, RFC 2818[7].[9]. It is RECOMMENDED that administrators use an HTTPS URI as the XCAP root services URI, so that the digest client authentication occurs over TLS. Next, the server determines if the client has authorization to perform the requested operation on the resource. The default authorization policy is that only client X can access (create, read, write, modify or delete) resources under the "users/X" directory. An application usage can specify an alternate default authorization policy specific to that usage. The server may also know of an application usage that itself defines authorization policies for another application usage. Of course, an administrator or privileged user can override the default authorization policy, although this specification provides no meansfor doing that. Generally, if users need to be able to control authorization for access to XCAP data, an XCAP application usage should be specified which allows the user to set the policies as needed. OPEN ISSUE: This is different from ACAP, where authorization policies are built into the protocol. I think the default generally will suffice, so I would rather not burden the baseline Rosenberg Expires December 22, 2003 [Page 15] Internet-Draft XCAP June 2003 protocol with it.for doing that. Once authorized, the specific behavior depends on the method and what the URI refers to. 7.1 POST HandlingIf the URI contains only a Document-URI, the server examines the entity body of the request. If there is no entity in the body, the server MUST reject the request with a 409 response. If there is an entity, but it is not well-formed, the server MUST reject the request with a 409 response. If it is well-formed, butResources managed by XCAP do notcompliant to the schema associated with the application usage, the server MUST reject the request withrepresent processing scripts. As a409 response. If it is compliantresult, POST operations tothe schema, the server MUST store the document at the requested URI. If thereXCAP URIs is notalready a document stored at that URI,defined. A server receiving such a201 (Created) response code MUST be sent, and it MUST includerequest SHOULD return aLocation header field containing the value405. Rosenberg Expires April 26, 2004 [Page 16] Internet-Draft XCAP October 2003 7.2 PUT Handling The behavior ofthe URI for the document (which will be the same as the one in the Request-URI). Otherwise, a 200 OK response is returned, and the document in the body replaces the existing one at that URI. For eithera200 or 201 response, the new document is returnedserver inthe bodyreceipt ofthe response, withaContent-Type equal to the MIME type defined by the application usage. If the Request URI contains a Node-Selector, the server MUST verify that the document defined by the Document-URI exists. If no such document exists on the server, the server MUST reject thePUT requestwith a 409 response code. If the document does exist, the server evaluates the Node-Selectoris asan XPath RelativeLocationPath, relative tospecified in HTTP 1.1 Section 9.6 - therootcontent of thedocument. Ifrequest is placed at theNode-Selector does not complyspecified location. This section serves to define thegrammar for RelativeLocationPath, the server MUST rejectnotion of "placement" and "specified location" within therequest with a 400 response code.context of XCAP resources. If theNode-Selector does comply, and it evaluates to anything other than the empty set,request URI represents asingle attributedocument (i.e., there is no nodeor single element node,selector component), theserver MUST rejectcontent of the requestwithMUST be a409 response code. If the Node-Selector evaluates to the empty set, and the last location step is on the attribute axis,valid XML document, andthe expression without the last location step evaluatesMUST be compliant toa single element node,theserver adds an attribute to that element. Its name isschema associated with thename givenapplication usage in thenode test of the last location step, and its valueURI. If it istaken from the body of the request. The server then generates a 200 OK response, whose body contains the value ofnot, theattribute,request MUST be rejected with aContent-Type of text/plain.409 response. If theNode-Selector evaluates torequest URI matches asingle element node, the server takes the content of the request, and inserts it into thedocumentspecified by the URI suchthat exists on theselected elementserver, that document isthe immediate Rosenberg Expires December 22, 2003 [Page 16] Internet-Draft XCAP June 2003 sibling of the nodes definedreplaced by the content of the request.The server then generates a 200 OK response, whose body containsIf theparent element ofrequest URI does not match a document that exists on thenew elements just inserted. The parent element is represented by extractingserver, thecontents ofserver adds theXML document, starting with,document to its repository, andincluding, the begin tag ofassociates it with theelement, up to, and including,URI in theend tag forrequest URI. Note that this may require theelement. The Content-Typecreation of one or more "directories" on theresponse is set to application/xml. OPEN ISSUE: We can't use the MIME type forserver. If theapplication usage, sinceRequest URI represents an XML element (i.e., it contains a node selector, but no attribute selector) theschema may not allow forserver MUST verify that the documentto start with any elementdefined by theschema. Is that OK? I think so.document URI exists. If no such document exists on theNode-Selector evaluates to a single attribute node,server, the servertakesMUST reject the request with a 409 response code. The content of therequest,request MUST be a single XML element andsets it asassociated content (including children elements). If thevalue ofrequest URI matches an element within theattribute specified bydocument, that element is removed, and replaced with thebodycontent of the request.TheIf the request URI does not match an element in the document, the serverthen generates a 200 OK response, whose body containsinserts thevaluecontent of theattribute, withrequest as aContent-Type of text/plain. Ifnew element in theresult ofdocument, such that thePOST is aresulting documentwhich does not comply withis compliant to theXML schema forschema, and such that theapplication usage,request URI, when evaluated, would now point to theserver MUST NOTelement which was inserted. There may be more than one way to perform such an insertion; in that case, it is thePOST, and MUST rejectdiscretion of therequest with a 409 (Conflict). 7.2 PUT Handling Whenimplementor as to how it is done. It may also be possible that theRequest URI contains onlyinsertion cannot be done without other additional elements being inserted, or cannot be done because theDocument-URI,new element is not compliant to thesemantics of PUT are as defined in HTTP 1.1 Section 9.6 -schema. In such a case, thecontent ofserver MUST return a 409 response code. In all cases, therequest is placed atresulting document MUST be compliant to thespecified location.schema. If the Request URI represents an XML attribute (i.e., it contains aNode-Selector,node selector and an attribute selector) the server MUST verify that the document defined by theDocument-URIdocument URI exists. If no such document exists on the server, the server MUST reject the request with a 409 response code.If the document does exist, the server evaluates the Node-Selector as an XPath RelativeLocationPath, relative to the rootThe content of thedocument. If the Node-Selector does not comply to the grammar for RelativeLocationPath, the server MUST reject therequestwith a 400 response code. If the Node-Selector does comply, and it evaluates to anything other than the a single element node or attribute node, the serverMUSTreject the request with a 409 response code. If the Node-Selector evaluates to a single element node, the server takes the content of the request, and replaces the value of that element (where value is defined as all of the content - elements, text, or CDATA - between the begin and end tags of the element) with that content. The server then returns a 200 OK response. OPEN ISSUE: PUT is not quite right here, since a subsequent GET on the same URI will not return exactly the same thing - the begin Rosenberg Expires December 22, 2003 [Page 17] Internet-Draft XCAP June 2003 and end tags will be present. This may need tobePOST, but then, how to differentiate a replace with an append operation? If the Node-Selector evaluates toa singleattribute node, the server takes the content of the request, and sets it as the value of the attribute. It then returns a 200 OK response. If the result of the PUT is a document which does not comply with theXMLschema for the application usage, the server MUST NOT performattribute, compliant to thePUT, and MUST rejectgrammar for Attribute as defined in XML 1.0 (i.e., name=value). If the request URI matches an ent within the document, that attribute is removed, and replaced witha 409 (Conflict). 7.3 GET Handlingthe content of the request. If the request URIcontains only a Document-URI,does not match an attribute in theserver returnsRosenberg Expires April 26, 2004 [Page 17] Internet-Draft XCAP October 2003 document, thedocument specified byserver inserts theURI if it exists, else returns a 404 response. Ifcontent of the requestURI specifiesas aNode-Selector,new attribute in theserver verifiesdocument, such that the resulting documentspecified byis compliant to theDocument-URI exists. If it does not exist,schema, and such that theserver returns a 404 (Not Found) response. Ifrequest URI, when evaluated, would now point to thedocument does exist,attribute which was inserted. There may be more than one way to perform such an insertion; in that case, it is theserver evaluatesdiscretion of theNode-Selectorimplementor asan XPath RelativeLocationPath, relativeto how it is done. It may also be possible that theroot of the document. Ifinsertion cannot be done without other additional content being inserted, or cannot be done because theNode-Selector doesnew attribute is notcomplycompliant to thegrammar for RelativeLocationPath,schema. In such a case, the server MUSTreject the request withreturn a400409 response code.IfIn all cases, theNode-Selector does comply, and it evaluatesresulting document MUST be compliant toanything other thanthea single element nodeschema. If the creation orattribute node,insertion was successful, the serverMUST rejectreturns a 200 OK or 201 Created, as appropriate. 7.3 GET Handling The semantics of GET are as specified in RFC 2616. This section clarifies the specific content to be returned for a particular URI that represents an XCAP resource. If the requestwithURI contains only a document URI, the server returns the document specified by the URI if it exists, else returns a409 response code.404 response. If theNode-Selector evaluates torequest URI contains asinglenode selector, and that node selector identifies an XML element in an existing document, that elementnode,is returned in theserver takes200 response. The content of the response is the portion of the XML documenttext,startingwith, and including,with the left bracket of the begin tag of the element,up to, and including,ending with the right bracket of the end tagfor the element, and places it into the bodyofa 200 OK response, settingtheContent-Type to application/xml.element. If theNode-Selector evaluates torequest URI contains asinglenode selector, and that node selector contains an attributenode, the server takesselector, and that attribute exists in thevalue ofspecified document, theattribute andserver returnsitthat attribute, formatted as Attribute in thecontent of the 200 OK response, settingXML 1.0 specifications. In all cases, if theContent-Type to text/plain. OPEN ISSUE: Do we need to say anything about HEAD? We havent said anything about meta-data so far; most of thatreferenced resource does not exist, a 404 isjust regular HTTP usage, I think.returned. 7.4 DELETE Handling The semantics of DELETE are as specified in RFC 2616. This section clarifies the specific content to be deleted for a particular URI that represents an XCAP resource. If the request URI contains only a Document-URI, the server deletes the document specified by the URI if it exists and returns a 200 OK response, else returns a 404 response.Rosenberg Expires December 22, 2003 [Page 18] Internet-Draft XCAP June 2003If the request URI specifies a Node-Selector, the server verifies that the document specified by the Document-URI exists. If it does not exist, the server returns a 404 (Not Found) response. If the document does exist, and theserver evaluates the Node-Selector asnode selector specifies anXPath RelativeLocationPath, relative to the root ofXML element that exists, that element is Rosenberg Expires April 26, 2004 [Page 18] Internet-Draft XCAP October 2003 removed from the document. If theNode-Selector does not comply to the grammar for RelativeLocationPath, the server MUST reject the request with a 400 response code. If the Node-Selectordocument doescomply, and it evaluates to the empty set, the server MUST reject the request with a 404 (Not Found). Otherwise, the server removes all of the data defined by the node-set. Specifically, any elements in the node set are removed from the document, and any attributes inexist, and the nodeset areselector specifies an XML attribute that exists in the document, that attribute is removed from the document.It then returns a 200 OK response.If theresultnode selector returns a no-match, a 404 (Not Found) is returned. However, if removal of thedeletion iselement or attribute would result in a document which does not comply with the XML schema for the application usage, the server MUST NOT perform the deletion, and MUST reject the request with a 409 (Conflict). 7.5 ManagingModification TimesEtags An XCAP server MUST maintainmodification timesentity tags for all resources that can be referenced by a URI. Specifically, this means that each document, and within the document, each element and attribute, MUST be associated witha modification timean entity tag maintained by the server. Thesemodification timesentity tags are needed to supportcondition GET, POST andconditional PUT and DELETE requests. When a PUTor POSTrequest is made that creates or replaces a document, themodification timeentity tag of that document and all elements and attributes within isset to the current time.updated. When a PUT request is made to a URI referencing an XML element, themodification timeentity tag of thatelementelement, its attributes, and all of its enclosed children and their attributes isset to the current time. Furthermore,updated. For a PUT or DELETE request for an XML element, themodification timeentity tag of all elements which are ancestors of that elementhave their modification time set to the current time.are updated. However, themodification timesentity tags of attributesbelongbelonging to elements that are ancestors of the modified element do not have theirmodification times changed. When a POST request is made to a URI referencing an XML element, the modification time of all of the elements and their attributes within the document in the body of the request is set to the current time. Furthermore, the modification time of the element which is the new parent of the elements in the request, and all of its ancestors,entity tags changed, because those resources havetheir modification time set to the current time. However, the modification times of their attributes are unchanged. Rosenberg Expires December 22, 2003 [Page 19] Internet-Draft XCAP June 2003 When a POST request is made to a URI referencing an XML attribute, the modification time of that attribute, its element, and all elements that are ancestors of that element is set to the current time. When a DELETE request is made to a URI referencing an element, the modification time of all ancestors of that element is set to the current time.not actually changed. When aDELETEPUT request is made to a URI referencing an XML attribute, themodification timeentity of that attribute is updated. For a PUT or DELETE request for an attribute, the entity tags for its element, and all elements that are ancestors of thatelement, is set to the current time.element are updated. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page20]19] Internet-Draft XCAPJuneOctober 2003 8. Examples This section goes through several examples, making use of thepresence-listsresource-lists [17] XCAP application usage. First, a user Bill creates a newpresence-list,resource-list, initially with no users in it: PUT http://xcap.example.com/services/presence-lists/users/bill/fr.xml HTTP/1.1 Content-Type:application/presence-lists+xml <?xml version="1.0" encoding="UTF-8"?><presence-lists<resource-lists xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <list name="friends" uri="sip:friends@example.com"subscribable="true">subscribeable="true"> </list></presence-lists></resource-lists> Next, Bill adds an entry to the list: PUT http://xcap.example.com/services/presence-lists/users/bill/fr.xml?presence-lists/list[@name="friends"]resource-lists/list[@name="friends"]/entry HTTP/1.1 Content-Type:text/plain <entryname="Bill" uri="sip:bill@example.com"> <display-name>Bill Doe</display-name>name="Bob" uri="sip:bob@example.com"> <display-name>Bob Jones</display-name> </entry>Note how the URI in the PUT request selectsNext, Bill fetches thelist element whose name attribute is "friends". The body of that request replaceslist: GET http://xcap.example.com/services/presence-lists/users/bill/fr.xml HTTP/1.1 And theexisting value of that element, which was empty.result is: Rosenberg Expires April 26, 2004 [Page 20] Internet-Draft XCAP October 2003 HTTP/1.1 200 OK Etag: "wwhha" Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <resource-lists xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <list name="friends" uri="sip:friends@example.com" subscribeable="true"> <entry name="Bob" uri="sip:bob@example.com"> <display-name>Bob Jones</display-name> </entry> </list> </resource-lists> Next, Bill adds another entry to the list, which is another list that has three entries:Rosenberg Expires December 22, 2003 [Page 21] Internet-Draft XCAP June 2003 POSTPUT http://xcap.example.com/services/presence-lists/users/bill/fr.xml?presence-lists/list[@name="friends"]/entry[@name="Bill"]presence-lists/list[@name="friends"]/list[@name="close-friends"] HTTP/1.1 Content-Type:text/plain <list name="close-friends" uri="sip:close-friends@example.com"subscribable="true">subscribeable="true"> <entry name="Joe" uri="sip:joe@example.com"> <display-name>Joe Smith</display-name> </entry> <entry name="Nancy" uri="sip:nancy@example.com"> <display-name>Nancy Gross</display-name> </entry> <entry name="Petri" uri="sip:petri@example.com"> <display-name>Petri Aukia</display-name> </entry> </list> Then, Bill decides he doesnt want Petri on the list, so he deletes the entry: DELETE http://xcap.example.com/services/presence-lists/users/bill/fr.xml? presence-lists/list/list/entry[@name="Petri"] HTTP/1.1 Bill decides to check on the URI for Nancy: Rosenberg Expires April 26, 2004 [Page 21] Internet-Draft XCAP October 2003 GET http://xcap.example.com/services/presence-lists/users/bill/fr.xml? presence-lists/list/list/entry[@name="Nancy"]/@uri HTTP/1.1 and the server responds: HTTP/1.1 200 OK Etag: "ad88" Content-Type:text/plainsip:nancy@example.comuri="sip:nancy@example.com" Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 22] Internet-Draft XCAPJuneOctober 2003 9. Security Considerations Frequently, the data manipulated by XCAP contains sensitive information. To avoid eavesdroppers from seeing this information,XCAP RECOMMENDSit is RECOMMENDED that an admistrator hand out an https URI as the XCAP root services URI. This will result in TLS-encrypted communications between the client and server, preventing any eavesdropping. Client and server authentication are also important. A client needs to be sure it is talking to the server it believes it is contacting. Otherwise, it may be given false information, which can lead to denial of service attacks against a client. To prevent this, a client SHOULD attempt to upgrade[8][10] any connections to TLS. Similarly, authorization of read and write operations against the data is important, and this requires client authentication. As a result, a server SHOULD challenge a client using HTTP Digest [6] to establish its identity, and this SHOULD be done over a TLS connection. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 23] Internet-Draft XCAPJuneOctober 2003 10. IANA Considerations This specification instructs IANA to create a new registry for XCAP application usage IDs (AUIDs). XCAP AUIDs are registered by the IANA when they are published in standards track RFCs. The IANA Considerations section of the RFC must include the following information, which appears in the IANA registry along with the RFC number of the publication. Name of the AUID. The name MAY be of any length, but SHOULD be no more than twenty characters long. The name MUST consist of alphanum[9][11] characters only. Descriptive text that describes the application usage. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 24] Internet-Draft XCAPJuneOctober 2003 Normative References [1] Thompson, H., Beech, D., Maloney, M. and N. Mendelsohn, "XML Schema Part 1: Structures", W3C REC REC-xmlschema-1-20010502, May 2001. [2] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [3] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [4] Murata, M., St. Laurent, S. and D. Kohn, "XML Media Types", RFC 3023, January 2001. [5] Clark, J. and S. DeRose, "XML Path Language (XPath) Version 1.0", W3C REC REC-xpath-19991116, November 1999. [6] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [7] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. [8] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [9] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.[8][10] Khare, R. and S. Lawrence, "Upgrading to TLS Within HTTP/1.1", RFC 2817, May 2000.[9][11] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 25] Internet-Draft XCAPJuneOctober 2003 Informative References[10][12] Rosenberg, J., "A Presence Event Package for the Session Initiation Protocol (SIP)", draft-ietf-simple-presence-10 (work in progress), January 2003.[11][13] Rosenberg, J., "A Watcher Information Event Template-Package for the Session Initiation Protocol (SIP)", draft-ietf-simple-winfo-package-05 (work in progress), January 2003.[12][14] Rosenberg, J., "An Extensible Markup Language (XML) Based Format for Watcher Information", draft-ietf-simple-winfo-format-04 (work in progress), January 2003.[13] Rosenberg, J.,[15] Roach,A.A., Rosenberg, J. and B. Campbell, "A Session Initiation Protocol (SIP) Event Notification Extension for Resource Lists", draft-ietf-simple-event-list-04 (work in progress), June 2003.[14][16] Rosenberg, J. and M. Isomaki, "Requirements for Manipulation of Data Elements in Session Initiation Protocol (SIP) for Instant Messaging and Presence Leveraging Extensions (SIMPLE) Systems",draft-ietf-simple-data-req-02draft-ietf-simple-data-req-03 (work in progress),AprilJune 2003.[15][17] Rosenberg, J., "An Extensible Markup Language (XML) Configuration Access Protocol (XCAP) Usage for Presence Lists", draft-ietf-simple-xcap-list-usage-00 (work in progress), June 2003. [18] Newman, C. and J. Myers, "ACAP -- Application Configuration Access Protocol", RFC 2244, November 1997.[16][19] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.[17] Rosenberg, J., "An Extensible Markup Language (XML) Configuration Access[20] Roach, A., "Session Initiation Protocol(XCAP) Usage for Presence Lists", draft-rosenberg-simple-xcap-list-usage-00 (work in progress), May 2003.(SIP)-Specific Event Notification", RFC 3265, June 2002. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 26] Internet-Draft XCAPJuneOctober 2003 Author's Address Jonathan Rosenberg dynamicsoft 600 Lanidex Plaza Parsippany, NJ 07054 US Phone: +1 973 952-5000 EMail: jdrosen@dynamicsoft.com URI: http://www.jdrosen.net Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 27] Internet-Draft XCAPJuneOctober 2003 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any intellectual property 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; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication 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 implementors or users of this specification can be obtained from the IETF Secretariat. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director. Full Copyright Statement Copyright (C) The Internet Society (2003). All Rights Reserved. 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 assignees. 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 Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 28] Internet-Draft XCAPJuneOctober 2003 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. Rosenberg ExpiresDecember 22, 2003April 26, 2004 [Page 29] ----