- From: Ulrich Nicolas Lissé <u.n.l@gmx.net>
- Date: Fri, 25 Aug 2006 23:45:43 +0200
- To: mark.birbeck@x-port.net
- CC: www-forms@w3.org
Mark,
while I go with most of what you say, I don't see any use case for AVTs
within @ref, @nodeset or MIP attributes. These are XPath expressions by
nature, so anything expressible with AVTs is expressible without them,
e.g. ref="{/myexpr}" can be written as ref="*[name()=/myexpr]".
Is it just to late for me and I'm missing sth obvious ?
Regards,
Uli.
Mark Birbeck wrote:
>
> Hi Keigh,
>
> Very thorough work! I'd like to suggest though, that the dividing line
> is not actually between whether an attribute takes an XPath expression
> or not, but is in fact determined by the point at which an expression
> is evaluated, and what happens to the results of the evaluation. As
> I'll try to show, I believe that the only place where the design of
> XForms *prevents* us from using AVTs is in model item properties--all
> other places are pretty easy.
>
>
> EVALUATING AT THE POINT OF USE
>
> Let's say we agree that xf:setvalue evaluates any @ref and @value
> attributes at the point at which the action is performed. That may
> seem obvious, but I'm not sure it's clear in the spec--but let's
> pretend it is. :) If the XPath expressions are evaluated only at the
> point of use, then you could have AVTs in xf:setvalue with absolutely
> no problems. You could even have *nested* AVTs to whatever level you
> like, since its just a case of repeatedly parsing until you are left
> with no more squiggly brackets.
>
> If we take this idea of 'evaluating at the point of use' concept, and
> regard it as a 'safe' use of AVTs, then we can see that there is
> actually no difference between these kinds of uses of AVTs:
>
> <xf:setvalue ref="{/myexpr}">3</xf:setvalue>
>
> <xf:load ref="{/myexpr}" />
>
> and these kind:
>
> <xf:toggle case="{/mycase}" />
>
> <xf:dispatch target="{/mynode}" name="{/mytask}" />
>
> <xf:submission action="{/myurl}" ... />
>
>
> REWIRING
>
> If we take as another example an xf:input with @ref:
>
> <xf:input ref="{/myexpr}">
> <xf:label>Data</xf:label>
> </xf:input>
>
> things might seem to be a little trickier. However, I would argue that
> now that we have a bit more clarity in the notion of rewiring, it's
> not actually that difficult to implement--it's not much different to
> the xf:setvalue example above, since the evaluation takes place once
> and then won't change until the next rewiring. (And it's actually not
> much different to something like @ref="a[position()=../b]".)
>
>
> MASTER DEPENDENCY GRAPH
>
> In fact, the only place things get tricky is when you use an AVT in
> the master dependency graph:
>
> <xf:bind nodeset="a" relevant="{../b} > 7" />
>
> The problem here is that if you simply store a dependent relationship
> between 'a' and 'b', you miss the fact that 'a' could also be
> dependent on 'c' or 'd'. You'd either have to say that all changes to
> 'b' cause a rebuild (not nice), or you'd have to say that the
> functionality defined in the XForms MDG needs to be extended to cope
> with rebuilding part of the graph, rather than the whole graph.
>
> (In other words, the solution is not as simple as just adding an extra
> (intermediate) vertex, since that vertex itself needs to be
> 'reconstructed' when 'b' changes.)
>
>
> SUMMARY
>
> The reason most stuff is easy is in fact because AVTs themselves are
> not difficult to implement! If you can create an XPath parser then
> what else is there to do? In terms of evaluating an expression that
> contains an AVT it's extremely easy, so provided that an expression is
> 'fire and forget' (or at least 'evaluate for now') then an AVT can be
> used.
>
> It's only the MDG that's difficult, and as it happens that's not
> really to do with AVTs per se--it's to do with intoducing a vertex
> that needs to change as the result of a changed value, when there is
> no clear notion in the current graph functionality as to how the
> vertex should change. In other words, it's to do with the fact that
> expressions are not 'fire and forget', and dependent relationships are
> established. We'd have a similar problem if we wanted to get smarter
> about the values some functions return, like a clock, for example--the
> current MDG model wouldn't provide us with a way to do this.
>
>
> CONCLUSION
>
> My conclusion would therefore be to suggest that everyone just has a
> go at implementing AVTs wherever they want! Obviously @action on
> xf:submission is one of the most useful, but I don't see any reason
> why people don't just give it a go on any attribute they feel like,
> and feed back their experiences. My feeling is that whereever there
> are problems, it won't actually be because of AVTs, but because there
> is no clear definition of when some attribute is 'used'. (For example,
> XML Events doesn't define properly when event listeners are attached,
> and that would need to be done before we could know whether AVTs are
> usable in @ev:event or not. @ev:handler would in most cases be ok,
> though.)
>
> So, since nearly every situation in which AVTs might be used is
> actually pretty easy, I think the most useful experiences we'll get
> will be to do with the problem of xf:bind.
>
> Regards,
>
> Mark
>
>
>
> On 25/08/06, Klotz, Leigh <Leigh.Klotz@xerox.com> wrote:
>>
>>
>>
>> I think many implementations have AVT-like strings already, and we're
>> already getting experience with them outside of the XForms 1.1
>> recommendation draft.
>> This message is an effort to herd them without going to ether extreme
>> of putting it into the WD today or "asking" the implementations to
>> take them out.
>>
>> I believe that XSLT 2.0 is a good place to start looking and
>> personally I'd like to encourage vendors to look there.
>>
>> Nesting:
>> Nesting is prohibited in XSLT 2.0, and I think the XForms vendors
>> should do the same.
>>
>> Quoting:
>> Another point related to nesting is quoting.
>> It appears that XSLT 2.0 does this with double braces; so you use
>> "{{" instead of "{" to quote them, not backslash or entity
>> definitions (which wouldn't work of course).
>> The main use case for quoting mentioned in Kay's book is regular
>> expressions, but as XForms doesn't have bind/@pattern anyway, that one
>> won't be encountered.
>>
>> bind attributes:
>> If vendors follow XSLT 2.0's rules, then there won't be any in bind
>> nodeset or calculate, because those are XPath expressions, and they
>> aren't allowed there.
>> I don't know if the vendors who have implemented AVT or AVT-like
>> constructs already agree on this point, but now would be a good time
>> to speak up.
>>
>> So, if we apply Kay's description of XSLT 2.0's rules, here's the
>> attributes from the recently-posted XForms 1.1 Schema that I find
>> make the first and second cut.
>> Second cut applies the first rule (i.e., attributes must be
>> explicltly listed in the spec) and is noted after the attribute.
>>
>> First cut: XForms 1.1 attributes that aren't XPath or IDREF
>> Second cut: attributes that appear problematic for structral reasons,
>> a criterion mention in Kay's book and in John's message as well.
>> Third cut: Ones I'm not sure about; this is just the repeat
>> attributes, which I don't understand anyway.
>>
>> I'm sure we can whittle this list down more if necesssary and still
>> have something valuable.
>>
>> - model/@functions [cut]
>> - model/@schema
>> - submission/@action
>> - submission/@method
>> - submission/@version [XSLT allows it on output attributes and these
>> attributes are based on XSLT output]
>> - submission/@indent
>> - submission/@encoding
>> - submission/@omit-xml-declaration
>> - submission/@cdata-section-elements
>> - submission/@replace
>> - submission/@separator
>> - submission/@includenamespaceprefixes
>> - submission/@mediatype
>> - bind/@type [cut]
>> - bind/@p3ptype [cut]
>> - xf:*/@src (not quote * but I mean everywhere it's used)
>> - xf:*/@appearance
>> - xf:*/@inputmode
>> - xf:*/@incremental
>> - upload/@mediatype
>> - select1/@selection
>> - select/@selection
>> - repeat/@start
>> - repeat/@end
>> - repeat/@step
>> - @ev:event [cut]
>> - @ev:phase [cut]
>> - @ev:propagate [cut]
>> - (other ev:event attributes are IDREF and are cut anyway)
>> - dispatch/@name
>> - dispatch/@bubbles
>> - dispatch/@cancelable
>> - load/@resource
>> - load/@show
>> - insert/@position
>> - message/@level
>> - */@xf:repeat-startindex [cut?]
>> - */@xf:repeat-number [cut?]
>> - repeat/@startindex
>> - repeat/@number
>> - case/@selected
>>
>>
>> Leigh.
>>
>>
>>
>>
>> ________________________________
> From: John Boyer [mailto:boyerj@ca.ibm.com]
>> Sent: Friday, August 25, 2006 10:47 AM
>> To: Klotz, Leigh
>> Cc: Francisco Monteiro; T.V Raman; www-forms@w3.org;
>> www-forms-request@w3.org
>>
>> Subject: RE: url params et al
>>
>>
>>
>>
>>
>> That's good. One of the questions I felt we needed someone to
>> research before going with AVTs was the question of iteration, i.e.
>> if the result contains braces, do you reevaluate? Seems like one
>> could create all kinds of Lisp-like constructs if so, but despite
>> that was a minefield of complexity I was hoping we could avoid.
>> Based on not even being able to nest them, I would say that iteration
>> is out.
>>
>> That still leaves lots of process questions regarding their general
>> availability. We do need experience over time with the feature
>> because the common use cases are unlikely to break (which explains
>> why "no one seems to be having a problem with them"). Aside from the
>> spec work we would need in the form of schema changes, it would be
>> very helpful to have an explanation of why AVTs would pose no problem
>> when use in the attributes of a bind element, like nodeset or
>> calculate, for example. Would they be problematic when used in single
>> node binding, nodeset binding attributes, and the special attributes
>> of each element?
>>
>> A good example would be upload with a filename child element. If
>> upload or filename ref contains an AVT that is dependent somehow on a
>> change that would be made by the other element, , what happens?
>>
>> Based on these, I'm sure there are issues that must be worked out
>> through full analysis of the language that may take a while to come
>> up otherwise. It may not take tons of time to do the analysis, we
>> just need someone to do it because it's not really a feature but
>> rather an enhancement to pretty much all the features of the language.
>>
>> John M. Boyer, Ph.D.
>> Senior Product Architect/Research Scientist
>> Co-Chair, W3C XForms Working Group
>> Workplace, Portal and Collaboration Software
>> IBM Victoria Software Lab
>> E-Mail: boyerj@ca.ibm.com http://www.ibm.com/software/
>>
>> Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer
>>
>>
>>
>>
>>
>> "Klotz, Leigh" <Leigh.Klotz@xerox.com>
>> Sent by: www-forms-request@w3.org
>>
>> 08/25/2006 09:42 AM
>>
>> To "T.V Raman" <raman@google.com>
>>
>> cc <www-forms@w3.org>, "Francisco Monteiro"
>> <monterro2004@tiscali.co.uk>
>>
>> Subject RE: url params et al
>>
>>
>>
>>
>>
>>
>>
>>
>> I looked at XSLT 2.0 in Michael Kay's book, and the the decision critera
>> for where AVTs work in XSLT 2.0.
>> As I remember it, the decision critera were as follows:
>> - attributes must be specifically identified
>> - must not be of type IDREF
>> - must not not be XPath expressions
>>
>> For the full text, which is about a page, please see ISBN: 0-7645-6909-0
>>
>> Also, rather than using a first-nodeset rule, they use concatenation
>> with a single space between, though if you set compatibility mode to
>> XSLT 1.0, they use a single node.
>>
>> AVTs cannot be nested, but Kay's book gives an example using concat of
>> how to achieve certain desired effects.
>>
>> There also appears to be some hair associated with call-template, as
>> Kay's Saxon processor provides a saxon:allow-avt attribute as an
>> extension.
>> (Reference page http://saxon.sourceforge.net/saxon7.3/changes.html).
>>
>>
>>
>>
>>
>
>
>
--
Ulrich Nicolas Lissé
Received on Friday, 25 August 2006 21:46:24 UTC