OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

wsbpel message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [wsbpel] Issue 29 - Proposal For Vote


Yaron Y. Goland wrote:

> As I mentioned previously the problem with an empty root node is that 
> it makes "/" legal but any other expression starting with "/" illegal. 
> I think that is unnecessarily confusing.

Not according to XPath. A root node is selectable with '/' regardless of 
its type or content.

Assaf


>     Yaron
>
> Assaf Arkin wrote:
>
>> Yaron Y. Goland wrote:
>>
>>  > The reference to XPATH 2.0 isn't relevant, XPATH 1.0 != XPATH 2.0.
>>
>> For future reference, my e-mails are shorter and more to the point when
>> I quote the XPath 2.0 and only the XPath 2.0 specification, since that
>> version is much better organized and better articulated.
>>
>> I assume that most members of this group will find the more
>> readable/concise text easier to follow, and that the few members who are
>> deeply interested in this subject can go and validate my statements
>> against the XPath 1.0 specification.
>>
>> I will always point out if there are differences between the two specs
>> (see below).
>>
>>
>>  >
>>  > And at the end of the letter you point out yourself that you wouldn't
>>  > want to use empty node-sets as the context but that is exactly what
>>  > your proposal requires.
>>
>> To further clarify, my proposal requires that you either pass an empty
>> root node (XPath 1.0) or an empty document node (XPath 2.0/XQuery 1.0)*
>> as the context node, in compliance with these specifications.
>>
>> If it's still not clear, can you point out where I'm being confusing?
>>
>> Assaf
>>
>> * You should note the name difference between the two specs.
>>
>>
>>  >
>>  >     Yaron
>>  >
>>  > Assaf Arkin wrote:
>>  >
>>  >> Yaron Y. Goland wrote:
>>  >>
>>  >>  > I realize I'm being thick but I don't believe the sections you 
>> quote
>>  >>  > solve the problem. The key issue is - is there such a thing as an
>>  >>  > empty node in XPATH? I believe the answer to be no.
>>  >>
>>  >> I believe the answer is found in the XPath data model specification:
>>  >>
>>  >> "Document Nodes *must* satisfy the following constraints.
>>  >>
>>  >>    1.
>>  >>
>>  >>       The *children* *must* consist exclusively of Element, 
>> Processing
>>  >>       Instruction, Comment, and Text Nodes if it is not empty.
>>  >>       Attribute, namespace, and Document Nodes can never appear as
>>  >> children
>>  >>
>>  >>    2.
>>  >>
>>  >>       If a node /N/ is among the *children* of a Document Node 
>> /D/, then
>>  >>       the *parent* of /N/ *must* be /D/.
>>  >>
>>  >>    3.
>>  >>
>>  >>       If a node /N/ has a *parent* Document Node /D/, then /N/ 
>> *must* be
>>  >>       among the *children* of /D/."
>>  >>
>>  >> http://www.w3.org/TR/xpath-datamodel/#DocumentNode
>>  >>
>>  >> You may also want to look at XPath implementations to see what they
>>  >> accept as context node as part of their formal API. I will be 
>> interested
>>  >> in hearing of an implementation that doesn't accept an empty context
>>  >> node.  For example, the Java 1.5 XPath library:
>>  >>
>>  >> 
>> http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/package-summary.html 
>>
>>  >>
>>  >>
>>  >> (you can see the example at the bottom)
>>  >>
>>  >>  > An alternative argument is - is there such a thing as an empty
>>  >>  > node-list in XPATH? There I think the answer is potentially 
>> yes. But
>>  >>  > it isn't clear to me if an empty node-list can be legally used 
>> as a
>>  >>  > context for an expression because all de-references would be 
>> illegal.
>>  >>  > E.g. /foo would be an automatic fault but "/" would NOT. That 
>> worries
>>  >>  > me alot. I think it's misleading to allow "/" to work but 
>> "/foo" not
>>  >>  > to. I think it's better for users if we just ban "/".
>>  >>
>>  >> I don't know of many implementations that support a node-set as an
>>  >> evaluation context, and I wouldn't want to rely on anything that's
>>  >> implementation specific.
>>  >>
>>  >> Assaf
>>  >>
>>  >>  >
>>  >>  >         Yaron
>>  >>  >
>>  >>  > Assaf Arkin wrote:
>>  >>  >
>>  >>  >> Yaron Y. Goland wrote:
>>  >>  >>
>>  >>  >>  > This proposal is only relevant if we don't decide to adopt a
>>  >>  >> mechanism
>>  >>  >>  > to map properties to XPATH variables.
>>  >>  >>  >
>>  >>  >>  > As for the desire to use XPATH 1.0 in a standard manner,
>>  >>  >> unfortunately
>>  >>  >>  > that is quite impossible given our semantics. It is 
>> explicitly
>>  >>  >> illegal
>>  >>  >>  > to have a null context node in XPATH 1.0. In section 1, the
>>  >>  >>  > introduction to XPATH 1.0, a series of requirements are 
>> listed
>>  >> for
>>  >>  >>  > defining the context in which a XPATH executes. List in there
>>  >> is a
>>  >>  >>  > node (explicitly referred to as the context node). This is 
>> then
>>  >>  >>  > followed by a requirement for a pair of non-zero positive
>>  >> integers
>>  >>  >>  > identifying the context position and context size. If the
>>  >> context is
>>  >>  >>  > empty or null then these two numbers would have to be 0 and
>>  >> that's
>>  >>  >>  > explicitly prohibited. Hence why we already are forced into a
>>  >>  >>  > situation where we have to require a BPEL specific XPATH
>>  >> processor.
>>  >>  >>
>>  >>  >> It is illegal to have a null context node, it is permissible to
>>  >> have an
>>  >>  >> empty context node. My suggestion takes XPath into account so it
>>  >> doesn't
>>  >>  >> violate any XPath rules. So my suggestion still stands, now 
>> let me
>>  >>  >> explain why it works.
>>  >>  >>
>>  >>  >> The context size refers to the size of the node-set which
>>  >> contains the
>>  >>  >> current context node, while the position refers to the position
>>  >> of the
>>  >>  >> current context node in that node-set. When you begin 
>> evaluating an
>>  >>  >> XPath expression - the initial values are 1 and 1, meaning one
>>  >> element
>>  >>  >> in the node-set (the context node) in the first ordinal 
>> position. It
>>  >>  >> matters not what the contents of the context node is, i.e.
>>  >> whether it's
>>  >>  >> a document, an element, a text node, or an empty node.
>>  >>  >>
>>  >>  >> The XPath 1.0 specification is easy to misread. If you try to
>>  >> implement
>>  >>  >> it, you will soon catch this subtelty when you have to implement
>>  >>  >> functions like count() and position(), but without going deep
>>  >> it's easy
>>  >>  >> to misread it. I suggest referring to the XPath 2.0
>>  >> specification, which
>>  >>  >> is not fundamentally different on this issue, just more
>>  >> expressive and
>>  >>  >> precise:
>>  >>  >>
>>  >>  >>     *
>>  >>  >>
>>  >>  >>       Definition: The *context item* is the item currently being
>>  >>  >>       processed. An item is either an atomic value or a
>>  >>  >>       node.][Definition: When the context item is a node, it can
>>  >> also be
>>  >>  >>       referred to as the *context node*.] The context item is
>>  >> returned
>>  >>  >>       by an expression consisting of a single dot (|.|). When an
>>  >>  >>       expression |E1/E2| or |E1[E2]| is evaluated, each item 
>> in the
>>  >>  >>       sequence obtained by evaluating |E1| becomes the context
>>  >> item in
>>  >>  >>       the inner focus for an evaluation of |E2|.
>>  >>  >>
>>  >>  >>     *
>>  >>  >>
>>  >>  >>       [Definition: The *context position* is the position of the
>>  >> context
>>  >>  >>       item within the sequence of items currently being
>>  >> processed.] It
>>  >>  >>       changes whenever the context item changes. Its value is
>>  >> always an
>>  >>  >>       integer greater than zero. The context position is 
>> returned
>>  >> by the
>>  >>  >>       expression |fn:position()|. When an expression |E1/E2| or
>>  >> |E1[E2]|
>>  >>  >>       is evaluated, the context position in the inner focus 
>> for an
>>  >>  >>       evaluation of |E2| is the position of the context item 
>> in the
>>  >>  >>       sequence obtained by evaluating |E1|. The position of the
>>  >> first
>>  >>  >>       item in a sequence is always 1 (one). The context 
>> position is
>>  >>  >>       always less than or equal to the context size.
>>  >>  >>
>>  >>  >>     *
>>  >>  >>
>>  >>  >>       [Definition: The *context size* is the number of items 
>> in the
>>  >>  >>       sequence of items currently being processed.] Its value is
>>  >> always
>>  >>  >>       an integer greater than zero. The context size is returned
>>  >> by the
>>  >>  >>       expression |fn:last()|. When an expression |E1/E2| or
>>  >> |E1[E2]| is
>>  >>  >>       evaluated, the context size in the inner focus for an
>>  >> evaluation
>>  >>  >>       of |E2| is the number of items in the sequence obtained by
>>  >>  >>       evaluating |E1|.
>>  >>  >>
>>  >>  >> Assaf
>>  >>  >>
>>  >>  >>  >
>>  >>  >>  >     Yaron
>>  >>  >>  >
>>  >>  >>  > Assaf Arkin wrote:
>>  >>  >>  >
>>  >>  >>  >> -1
>>  >>  >>  >>
>>  >>  >>  >> If we decide to manifest properties as independent XPath
>>  >> variables,
>>  >>  >>  >> then we have a syntax that is consistent in how variable
>>  >> values are
>>  >>  >>  >> accessed, directly (the entire variable) or indirectly (a
>>  >>  >> property of
>>  >>  >>  >> the variable). I happen to be on the side that likes
>>  >> consistency and
>>  >>  >>  >> abhors making changes to XPath implementations.
>>  >>  >>  >>
>>  >>  >>  >> "We have in the past altered XPATH in order to suit our
>>  >> needs. For
>>  >>  >>  >> example, in some BPEL expressions we have banned the use 
>> of the
>>  >>  >>  >> global context node, a node whose presence is actually
>>  >> mandated by
>>  >>  >>  >> the XPATH specification. If we are willing to change XPATH
>>  >> that much
>>  >>  >>  >> I see no reason not to change it here as well. In for a 
>> dime,
>>  >> in for
>>  >>  >>  >> a dollar."
>>  >>  >>  >>
>>  >>  >>  >> Since we have nothing to pass in the context node, wouldn't
>>  >> it be
>>  >>  >>  >> easier if we use the XPath specification to achieve that
>>  >> instead of
>>  >>  >>  >> forcing implementations to deviate from the 
>> specification, write
>>  >>  >>  >> custom XPath implementations (only for BPEL), and so 
>> forth. The
>>  >>  >> XPath
>>  >>  >>  >> specification mandates that you pass a context node, but the
>>  >> XPath
>>  >>  >>  >> specification does not require the context node to have any
>>  >> content
>>  >>  >>  >> in it. You can pass an empty root node (XPath 1.0) or an 
>> empty
>>  >>  >>  >> document node (XPath 2.0) and be in full comformance with 
>> the
>>  >> XPath
>>  >>  >>  >> specification and the BPEL model at the same time.
>>  >>  >>  >>
>>  >>  >>  >> Let's keep it simple (that's what this issue is all about).
>>  >> Get the
>>  >>  >>  >> semantics we want for expressions, but without having to 
>> change
>>  >>  >>  >> existing specifications or implementations.
>>  >>  >>  >>
>>  >>  >>  >> assaf
>>  >>  >>  >>
>>  >>  >>  >>
>>  >>  >>  >> Yaron Y. Goland wrote:
>>  >>  >>  >>
>>  >>  >>  >>> Issue 29 - Simplification of XPath expressions
>>  >>  >>  >>>
>>  >>  >>  >>> Proposal: Require that all arguments to BPEL defined XPATH
>>  >>  >> functions
>>  >>  >>  >>> must be quoted strings that are statically defined within
>>  >> the XPATH
>>  >>  >>  >>> expression.
>>  >>  >>  >>>
>>  >>  >>  >>> Note: This proposal won't be necessary if we decide to 
>> manifest
>>  >>  >>  >>> properties as independent XPATH variables since this would
>>  >> let us
>>  >>  >>  >>> get rid of getVariableProperty.
>>  >>  >>  >>>
>>  >>  >>  >>> Rationale:
>>  >>  >>  >>>
>>  >>  >>
>>  >> 
>> getVariableProperty(getVariableProperty(foo,bar),getVariableProperty(ick,bick)) 
>>
>>  >>
>>  >>  >>
>>  >>  >>  >>> is completely legal in XPATH. This is a problem because 
>> such an
>>  >>  >>  >>> expression makes it impossible to statically analyze the
>>  >> expression
>>  >>  >>  >>> that contains the function call and determine what 
>> variable is
>>  >>  >> being
>>  >>  >>  >>> referenced. This is problematic for static analysis of the
>>  >> process
>>  >>  >>  >>> because it makes it impossible to determine what 
>> variable and
>>  >>  >>  >>> property are being accessed so there is no way to check 
>> if that
>>  >>  >>  >>> variable is accessible from that point in the BPEL process
>>  >>  >>  >>> definition or if the variable has the referenced property
>>  >>  >> defined on
>>  >>  >>  >>> it. Even worse (in my mind anyway) is that the previous
>>  >> plays havoc
>>  >>  >>  >>> with optimizations for compensation handling. If the 
>> previous
>>  >>  >>  >>> function was contained within a compensation handler 
>> then there
>>  >>  >>  >>> would be no way to know what variable was being accessed 
>> and
>>  >> so the
>>  >>  >>  >>> BPEL process would have no choice but to persist all 
>> variables
>>  >>  >>  >>> visible from the compensation handler, major yuck!
>>  >>  >>  >>>     We have in the past altered XPATH in order to suit our
>>  >> needs.
>>  >>  >>  >>> For example, in some BPEL expressions we have banned the 
>> use
>>  >> of the
>>  >>  >>  >>> global context node, a node whose presence is actually
>>  >> mandated by
>>  >>  >>  >>> the XPATH specification. If we are willing to change 
>> XPATH that
>>  >>  >> much
>>  >>  >>  >>> I see no reason not to change it here as well. In for a
>>  >> dime, in
>>  >>  >> for
>>  >>  >>  >>> a dollar.
>>  >>  >>  >>>
>>  >>  >>  >>> Section 9.1 -
>>  >>  >>  >>>
>>  >>  >>  >>> Add a new paragraph after the following paragraph "Any
>>  >> qualified
>>  >>  >>  >>> names used within XPath expressions are resolved by using
>>  >> namespace
>>  >>  >>  >>> declarations currently in scope in the WS-BPEL document 
>> at the
>>  >>  >>  >>> location of the expression.":
>>  >>  >>  >>>
>>  >>  >>  >>> The arguments to all XPATH functions defined in this
>>  >> specification
>>  >>  >>  >>> MUST be given as quoted strings. The previous requirement
>>  >> MUST be
>>  >>  >>  >>> statically enforced. It is therefore illegal to pass into a
>>  >> BPEL
>>  >>  >>  >>> XPATH function any XPATH variables, the output of XPATH
>>  >>  >> functions, a
>>  >>  >>  >>> XPATH location path or any other value that is not a quoted
>>  >> string.
>>  >>  >>  >>> This means, for example, that
>>  >> getVariableProperty("varA","propB")
>>  >>  >>  >>> meets the previous requirement while
>>  >>  >>  >>>
>>  >>  >>
>>  >> 
>> getVariableProperty($varA,string(getVariableProperty("varB","propB"))
>>  >>  >>  >>> does not. Note that the previous requirement institutes a
>>  >>  >>  >>> restriction which does not exist in the XPATH standard.
>>  >>  >>  >>>
>>  >>  >>  >>>
>>  >>  >>  >>>
>>  >>  >>
>>  >> 
>> ---------------------------------------------------------------------
>>  >>  >>  >>> To unsubscribe, e-mail: 
>> wsbpel-unsubscribe@lists.oasis-open.org
>>  >>  >>  >>> For additional commands, e-mail:
>>  >> wsbpel-help@lists.oasis-open.org
>>  >>  >>  >>>
>>  >>  >>  >>>
>>  >>  >>  >>
>>  >>  >>  >
>>  >>  >>  >
>>  >>  >>
>>  >>  >
>>  >>  >
>>  >>
>>  >
>>  >
>>
>>
>
>
>

begin:vcard
fn:Assaf Arkin
n:Arkin;Assaf
org:Intalio
adr;dom:;;1000 Bridge Parkway Ste 210;Redwood City;CA;94065
email;internet:arkin@intalio.com
title:Chief Architect
tel;work:(650) 596-1800
x-mozilla-html:TRUE
url:http://www.intalio.com
version:2.1
end:vcard

S/MIME Cryptographic Signature



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]