W3C home > Mailing lists > Public > www-svg@w3.org > November 2003

Re: Using templates instead of script to render custom content

From: Antoine Quint <ml@graougraou.com>
Date: Mon, 3 Nov 2003 11:17:39 +0100
Message-Id: <F3FE67D0-0DE6-11D8-813C-000393D124C4@graougraou.com>
Cc: www-svg@w3.org, Kim.Marriott@infotech.monash.edu.au, bernd.meyer@acm.org, SVG WG <w3c-svg-wg@w3.org>
To: Cameron McCormack <cam-www-svg@aka.mcc.id.au>

Hi Cameron,

> Arguments for the use of declarative templates as opposed to script for
> the implementation of RCC include:
>
>   - XSLT is a proven XML transformation language.

Indeed. However, I would add it has been especially proven in a 
different context, more oriented around batch-process, run-once 
transformations, just to make things clearer. I like XSLT, I'm just not 
used to it being used in dynamic environments and I'm not sure it's 
that that proven in that context.

>   - animation could be specified on attributes of custom elements and
>     the "right thing" would happen.

That's interesting. This is a problem I have been thinking about for a 
while in the RCC context and it's not easy to solve. The SMIL Animation 
specification does not specify a way to interact with a SMIL engine and 
feed it information on what a custom attribute's data type is and how 
it should behave during an animation. In fact, you can't even tell a 
SMIL engine what attributes can or cannot be animated. This all has to 
be hard-coded in a host engine, as in an SVG implementation in 
conformance with the SVG implementation which says what is and what 
isn't animatable. Say I have this SVG fragmentt:

<ui:button width="200">
   <animate attributeName="width" by="50" dur="1s" begin="mousedown" 
fill="freeze" />
</ui:button>

Technically, the "begin" value can be defined since RCC/LiveTemplates 
define how a shadow tree's events are routed back to the custom element 
instance. However, go figure how your SVG implementation will know how 
to animate your button's width, how is it supposed to know that your 
button's width is expressed as a float value?!?  You could argue that 
in this case your implementation could "guess" it, but there are a 
variety of data types that can't be guessed and there has to be a way 
to define how incrementation would work on such and such data types.

Additionally, animation (including those done with the <set/> element) 
do not work on the DOM values of attributes but on their animated 
values, there would have to be specific directions in the SVG 
specification to say that the same kind of refreshes happen for DOM and 
animated value changes.

There is no way an XSLT-based mechanism makes it any easier to 
accomplish this than any other mechanism as there is no way to animate 
non-SVG attributes today. If you have proposals on how to accomplish 
this, I'd be happy to read it.

> Examples of what can be achieved with templates have been developed,
> including some user interface widgets and general layout elements.

I took a look at your examples. I think your mechanism would be fit for 
simple standalone widgets, but this approach has some limitations for 
larger-scale projects. Part of what makes RCC "popular" so far (besides 
an implementation :) is that it fits in a DOM-based environment that's 
very good for scripting integration. A popular and well-proven approach 
to designing custom widgets, back from pre-RCC days and greatly 
simplified by RCC, is to have an ECMAScript (or whatever other 
scripting language) class that handles a particular custom XML element. 
Of course, this class architecture can help having some inheritance and 
cleanly share functionalities between different custom elements. 
Additionally, using a controller object, a context can be easily 
maintained for complex widgets that involve state tracking etc without 
having to store data in the XML tree.

Also, there is clean integration with DOM Events, so that custom events 
can be triggered from the DOM implementation, and SVG 1.2 should 
closely integrate with DOM Level 3 Events so that custom and namespaced 
events can be created and dispatched. Your button example relies 
exclusively on attribute-based event listeners, which are implicitly 
deprecated by the XML Events specification and the current efforts of 
its SVG 1.2 integration, although I suspect your samples could be 
reworked to use XML Events. Anyway, not using XML Events you are forced 
to use methods that imply usage of eval(), which is bound to attract 
flames from a good part of the community (I'll let Jim Ley comment 
further) including Java folks who are not necessary "blessed" with this 
functionality.

Additionally, and for what it's worth, note that the RCC approach 
involves a lot less specification work than your approach as there is 
no need to defined additional XPath functions for things like bbox() 
and the likes that I see you use in your samples. RCC leverages the DOM 
specification further.

The good news is that there has been considerable work from within the 
working group to try and concialiate the RCC and LT approach, and all 
of this should be detailed in the next working draft.

Antoine
-- 
Antoine Quint <aq@fuchsia-design.com>
W3C SVG Working Group Invited Expert
SVG Consulting, Teaching and Outsourcing
Fuchsia Design <http://www.fuchsia-design.com/>
Received on Monday, 3 November 2003 05:19:18 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:26 GMT