- From: Mark Birbeck <mark.birbeck@x-port.net>
- Date: Sun, 2 Apr 2006 13:58:51 +0100
- To: <www-forms@w3.org>
Hi everyone, Continuing the idea of supporting other submission methods, there are a number of submission use cases that require extra header information to be present beyond that which is referred to in XForms, such as; * WebDAV and SOAP--which build on HTTP--require headers to indicate their presence; * WebDAV requires headers to indicate some of the parameters to its methods, such as COPY; * HTTP requires headers for security-related features; * some 'web services' such as Basecamp require additional headers. And so on. To allow XForms to interact with the increasing diversity of services on the web I'd suggest we add an attribute to submission that indicates where to get header information from. It would be an XPath expression, and would encode headers in much the same way that 'get' currently encodes name/value pairs for URLs. (I would think that the behaviour of the attribute would also honour relevance and validity.) The general architecture would then be that you end up with two sets of nodes, one to define the body and the other (optional) to define a header. Once these have been created (in section 11.1 step 1) then submission proceeds as normal, except that in step 3 (detailed in section 11.2) we need to also serialise the header information. --- STARTS --- 11.1 The xforms-submit Event ... 1. One or two nodes from the instance data are selected, based on attributes on the submission element (one for the submission body, and an optional node for the header). The indicated node or nodes, and all nodes for which they are ancestors ... Etc. 11.2 Submission Options ... * headers (XPath expression) ... The headers attribute is used to indicate instance data that will provide one or more headers to be serialized for submission. Exactly how the headers are serialized is protocol specific. There is no default value. The steps for serialization of headers is as follows: 1. Each element node is visited in document order. Each element that has one text node child is selected for inclusion. Note that attribute information is not preserved. 2. Element nodes selected for inclusion are encoded in a manner specific to the specific protocol. (See 11.x below). Note that contextual path information is not preserved, nor are namespaces or namespace prefixes. As a result, different elements might serialize to the same name. * The encoding of EltName and value are as follows: space characters are replaced by +, and then non-ASCII and reserved characters (as defined by [RFC 2396] as amended by subsequent documents in the IETF track) are escaped by replacing the character with one or more octets of the UTF-8 representation of the character, with each octet in turn replaced by %HH, where HH represents the uppercase hexadecimal notation for the octet value and % is a literal character. Line breaks are represented as "CR LF" pairs (i.e., %0D%0A). 3. All such encodings are concatenated, maintaining document order. 11.x Encoding serialised headers for HTTP When serialising headers for use in an HTTP submission, element nodes are encoded as EltName: value, where : is a literal character, EltName represents the element local name, and value represents the contents of the text node. The separator character used between pairs of encoded name/value pairs is a newline character (\n), e.g. EltName1:value1\nEltName2:value2\nEltName3:value3. If the same element appears Duplicate headers will be created Example: The following shows how to encode a WebDAV request that will COPY a collection, and is based on the example at [1]: <instance id="inst-copy-headers"> <headers xmlns=""> <Destination> http://www.foo.bar/othercontainer/ </Destination> <Depth>infinity</Depth> </headers> </instance> <instance id="inst-data"> <d:propertybehavior xmlns:d="DAV:"> <d:keepalive>*</d:keepalive> </d:propertybehavior> </instance> <submission action="http://www.foo.bar/container/" method="copy" headers="instance('inst-copy-headers') ref="instance('inst-data') replace="instance" /> This would result in the following request: COPY /container/ HTTP/1.1 Host: www.foo.bar Destination: http://www.foo.bar/othercontainer/ Depth: infinity Content-Type: text/xml; charset="utf-8" Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <d:propertybehavior xmlns:d="DAV:"> <d:keepalive>*</d:keepalive> </d:propertybehavior> [1] http://www.webdav.org/specs/rfc2518.html#rfc.section.8.8.8 --- ENDS --- Regards, Mark Mark Birbeck CEO x-port.net Ltd. e: Mark.Birbeck@x-port.net t: +44 (0) 20 7689 9232 b: http://internet-apps.blogspot.com/ w: http://www.formsPlayer.com/ Download our XForms processor from http://www.formsPlayer.com/
Received on Sunday, 2 April 2006 12:59:45 UTC