- From: Gilbert Pilz <gilbert.pilz@oracle.com>
- Date: Tue, 26 Jan 2010 14:12:32 -0800
- To: Yves Lafon <ylafon@w3.org>
- CC: "public-ws-resource-access@w3.org" <public-ws-resource-access@w3.org>
- Message-ID: <4B5F68D0.6010904@oracle.com>
Yves,
To be clear, are you saying that there exist known "transformations"
that do not preserve namespace prefixes?
- gp
On 1/26/2010 1:46 PM, Yves Lafon wrote:
> On Mon, 25 Jan 2010, Gilbert Pilz wrote:
>
>> To recap: in Section 6, "XPath Level 1 Expression Language", of
>> WS-Fragment it currently says the following:
>>
>> The namespace bindings are evaluated against any namespace
>> declarations that are in scope where the XPath appears within the
>> SOAP message.
>>
>> The concern is that a WS-Fragment request that was minted as:
>>
>> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
>> xmlns:wsa="http://www.w3.org/2005/08/addressing"
>> *xmlns:ex="http://www.example.com/"*>
>> <s:Header>
>> . . .
>> </s:Header>
>> <s:Body>
>> <wst:Get Dialect="http://www.w3.org/2009/09/ws-fra">
>> <wsf:Expression
>> Language="http://www.w3.org/2009/09/ws-fra/XPath-Level-1">
>> /ex:a/ex:b
>> </wsf:Expression>
>> </wst:Get>
>> </s:Body>
>> </s:Envelope>
>>
>> might, after "some amount of processing" (signature transformation,
>> storage, retrieval, etc.) look like this:
>>
>> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
>> xmlns:wsa="http://www.w3.org/2005/08/addressing"
>> *xmlns:ns1="http://www.example.com/"*>
>> <s:Header>
>> . . .
>> </s:Header>
>> <s:Body>
>> <wst:Get Dialect="http://www.w3.org/2009/09/ws-fra">
>> <wsf:Expression
>> Language="http://www.w3.org/2009/09/ws-fra/XPath-Level-1">
>> /ex:a/ex:b
>> </wsf:Expression>
>> </wst:Get>
>> </s:Body>
>> </s:Envelope>
>>
>> Obviously the above expression is not going to be evaluated correctly
>> because the mapping of the "ex" namespace prefix to the
>> "http://www.example.com" URI has been replaced by the mapping of the
>> "ns1" namespace prefix.
>>
>> The question of "which transformations do this sort of thing?" has
>> been bandied about. I assert that is the wrong question to ask. It
>> may be that, today, certain transformations that we know about (e.g.
>> Canonical XML 1.1) preserve namespace prefix mappings, but that says
>> nothing about transformations that (a) we don't know about or (b)
>> haven't been written yet.
>
> Easy:
> http://www.w3.org/TR/2009/CR-exi-20091208/#options
> [[
> [Definition:] The strict option is a Boolean used to increase
> compactness by using a strict interpretation of the schemas and
> omitting preservation of certain items, such as comments, processing
> instructions and namespace prefixes. The default value "false" is
> assumed when the "strict" element is absent in the EXI Options
> document. When set to true, those productions that have NS, CM, PI,
> ER, and SC terminal symbols are omitted from the EXI grammars, and
> schema-informed element and type grammars are restricted to only
> permit items declared in the schemas.
> ]]
>
>> From an XML perspective:
>>
>> <foo:Thing xmlns:foo="http://www.example.com"/>
>>
>> and
>>
>> <baz:Thing xmlns:baz="http://www.example.com"/>
>>
>> are equivalent. It might not occur to someone who, for example,
>> writes a piece of code that caches a frequent request in a database,
>> that they need to worry about preserving namespace prefixes. The
>> result is that WS-Frag might break as an unintended side-effect of
>> some "unrelated" technology or feature. This runs counter to the
>> composability model underlying all of WS-*.
>
> "XML" as in angle brackets level?
> Because at the infoset level, those are not exactly the same
> <<
> An element information item has the following properties:
>
> 1. [namespace name] The namespace name, if any, of the element
> type. If the element does not belong to a namespace, this property has
> no value.
> 2. [local name] The local part of the element-type name. This does
> not include any namespace prefix or following colon.
> 3. [prefix] The namespace prefix part of the element-type name. If
> the name is unprefixed, this property has no value. Note that
> namespace-aware applications should use the namespace name rather than
> the prefix to identify elements.
>>>
> Not exactly the same, but close enough for people to avoid relying on
> namespace prefixes. After all we are building namespace-aware
> applications every time we are using the WS stack.
>
>> The assumption underlying "namespace bindings are evaluated against
>> any namespace declarations . . ." is that the namespace prefixes will
>> be preserved. This assumption carries with it a certain, unknown
>> amount of risk. It is possible for WS-Fragement to isolate itself
>> from this risk by one of the two following mechanisms:
>>
>> A.) Use of the <prefixMapping> element รก la CMBDF [1]. The above,
>> transformed request would then look like the following:
>>
>> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
>> xmlns:wsa="http://www.w3.org/2005/08/addressing"
>> *xmlns:ns1="http://www.example.com/"*>
>> <s:Header>
>> . . .
>> </s:Header>
>> <s:Body>
>> <wst:Get Dialect="http://www.w3.org/2009/09/ws-fra">
>> <wsf:prefixMapping prefix="ex"
>> namespace="http://www.example.com"/>
>> <wsf:Expression
>> Language="http://www.w3.org/2009/09/ws-fra/XPath-Level-1">
>> /ex:a/ex:b
>> </wsf:Expression>
>> </wst:Get>
>> </s:Body>
>> </s:Envelope>
>>
>> CMDBF describes the <prefixMapping> element as follows:
>>
>> Each <prefixMapping> child element of the <xpathConstraint> element
>> defines a namespace declaration for the XPath evaluation. The prefix
>> for this declaration is provided by the <prefixMapping>/@prefix
>> attribute and the namespace URI is provided by the
>> <prefixMapping>/@namespace attribute. These prefix-namespace
>> pairings shall be added to the namespace declarations of the XPath
>> processor.
>>
>> B.) Specify that XPath expression SHOULD NOT use prefixes but instead
>> use fully qualified namespaces. I'm still investigating if/how to do
>> this in XML 1.0. My sense is that request would/should look something
>> like:
>>
>> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
>> xmlns:wsa="http://www.w3.org/2005/08/addressing">
>> <s:Header>
>> . . .
>> </s:Header>
>> <s:Body>
>> <wst:Get Dialect="http://www.w3.org/2009/09/ws-fra">
>> <wsf:Expression
>> Language="http://www.w3.org/2009/09/ws-fra/XPath-Level-1">
>> /{http://www.example.com}:a/{http://www.example.com}:b
>> </wsf:Expression>
>> </wst:Get>
>> </s:Body>
>> </s:Envelope>
>>
>> That seems like a lot more to type, but its likely that tools could
>> be used to automatically perform the substitution of the fully
>> qualified namespace URI.
>>
>> So this issue, like most, is about a trade off. How much risk is
>> involved in the dependence on prefix preservation and how much work
>> is involved in breaking that dependence?
>>
>> [1] http://www.dmtf.org/standards/published_documents/DSP0252_1.0.0.pdf
>>
>> - gp
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
Attachments
- application/pkcs7-signature attachment: S/MIME Cryptographic Signature
Received on Tuesday, 26 January 2010 22:13:23 UTC