- From: Cameron McCormack <cam-www-svg@aka.mcc.id.au>
- Date: Fri, 5 Mar 2004 14:53:47 +1100
- To: www-svg@w3.org
I think that the transformer element, along with XSLT transformations, should be left in SVG 1.2. From my experience adding this support to Batik, it wasn't a great implementation burden at all. The code specific to handling XSLT transformers for a custom element was only a couple of hundred lines. I used Apache's Xalan libraries to perform the transformation. I know this won't be the case for all platforms, but Java is distributed with an XSLT library (a slightly older version of Xalan) and thus wouldn't require shipping additional libraries at all. The point, though, is that the use of XSLT itself shouldn't be an obstacle to including it in SVG 1.2 since there exist libraries that implementors can use. Implementors needn't rewrite an XSLT processor! By "difficulty in optimization" I assume you're talking about the issue of shadow tree regeneration. I can understand that the dependency tracking in XSLT is not trivial, but it is easier than tracking the dependencies set up by RCC script. Since it's OK for script to have to set up event handlers manually to handle custom element mutations, why should it not be OK for shadow trees generated by XSLT as well? Surely for a custom element that has an XSLT transformer one could add an SVGBindEnd event handler that sets up DOMAttrModified events (just like non-XSLT RCC elements) which could force the rerunning of the transformation if the author decides it is not too costly, or manually minimally modify the shadow tree with script. Of course this sidesteps the main problem I have with RCC and that's that one has to handle all of these dependency problems oneself, setting up event handles and so forth. With pure script based RCC elements this is of course difficult, since analysing the author's script to determine which elements and attributes are inspected (what dependencies exist) is impossible without executing the script itself. As I said earlier, tracking XSLT dependencies would not be impossible, but is still hard. In my implementation, constraints can be used to solve the problem of propagation into the shadow tree for common cases. In 4.1.8 you talk about a "declarative syntax for specifying the set of events that cause a particular element's shadow tree to be regenerated". This sounds like a great idea to help authors avoid writing the same DOM mutation event handlers again and again. It would be nice if there were some way of specifying the valid attributes for custom elements, their types, the element content models, etc. In document XML Schema or RelaxNG would be good for this, and perhaps somehow be integrated with the declarative shadow tree regeneration specifications. So here are my responses to the 4.5 Open Issues for which I have an opinion that differs with those given in the working draft comments. 2. [What events trigger shadow tree regeneration] While adding event listeners manually with script is workable, I think a declarative syntax for specifying which mutations cause a shadow tree regeneration is better. This declarative syntax should allow specifying that these events cause either a complete shadow tree regeneration (equivalent to calling rebind) or some script function which performs a smaller, specific modification to the shadow tree (preferable with XML Events syntax). 6. [One way or two way] I'm unsure what you mean here. Do you mean should changes to shadow trees cause changes to corresponding parts of the prototype or subtree of the custom element? I think if an element, which was generated because it was copied from the prototype, is modified then these changes should not be reflected in the prototype. The shadow tree should initially just be a copy of the prototype. If an element from the subtree of the custom element is inserted into the shadow tree by means of refContent, then I think changes on it should be reflected in the custom element's tree, just as if this were a use element. 7. [RCC minimizing scripting] I believe that RCC should go to reasonable lengths to help the author avoid writing script. There seems to be a lot of worry about burdening implementors, but this results in burdening the author. This is the wrong way of doing things. The SVG specification should be written to ease the burden of authors. As to this particular issue: by what do you mean "event mapping"? How events on shadow tree elements get mapped to events on the custom elements? I haven't thought much about this, and I'm not sure if there are common event mappings that would benefit from a declarative syntax. If there are, though, declarative syntaxes are the way to go (in my opinion). 8. [Dependency mapping] I'm unfamiliar with XForms and its instance data model and how that relates to dependencies. I agree however that dependency mapping is highly desireable as it would take a lot of burden off RCC element authors. As I said above, though, it's not an easy task. A declarative syntax for specifying dependencies (which is pretty much was 2. is about) should be investigated. 9. [Styling system] If by "styling system" you mean XSLT, then yes, I'm for it. If you mean CSS, then I really don't know how this could be achieved. 11. [XPath and XSLT burden] It seems to have been decided that XPath support will be required in SVG 1.2 due to the DOM Level 3 support. From my experience, supporting XSLT was not a huge burden at all since I could just use an existing XSLT library and plug it straight in to Batik. 14. [Script context for external extensionDefs scripts] How are scripts in external documents handled when a use element is used? However this is handled should be how extensionDefs scripts are handled. 15. [Animating custom element attributes] Animating custom element attributes is vital, I believe. It seems that the DOM traits are to be used to handle animation. This would work but would require the modification of actual attributes of shadow tree elements in response to the animation of custom element attributes. Thus the shadow tree elements aren't actually being animated in the sense of having their SVGAnimated*.animVal values being updated. Sometimes it is necessary to distinguish between animation in this respect, and modification of the base value. Perhaps for simple cases some declarative syntax could be used to map the animations of custom element attributes to the attributes of the shadow tree elements. If we take this idea further and allow expressions for mapping the animations to the shadow tree elements, we come back to my constraints project which would solve this problem. 21. [Disallowing SVG namespace for extensionDefs] I think it should be disallowed. 22. [DOM 3 XPath] Having the ability to evaluate XPath expressions from script would be a boon to script authors. It would eliminate the drudgerous walking of the DOM. I don't think this would be sufficient to implement attribute expressions (as in CSVG), however, as handling extension functions and SVG types could not be used without some modification to the XPath engine. -- Cameron McCormack | Web: http://mcc.id.au/ | ICQ: 26955922
Received on Thursday, 4 March 2004 22:53:49 UTC