NOTES relative to the implementation ==================================== xsl:stylesheet: all children except xsl:import can be in any order, so this can be stored as one big structure. xsl:include: this is really similar to XInclude, can be implemented as a nearly separate processing just after the XML stylesheet has been parsed. Detect loops using a limited stack ... xsl:import: seems this should be really implemented as having a stylesheet sublist being itself an import list add the list at the end when doing a resolution explore child before siblings in the list 3 Data Model, we should operate on parsed trees 3.1 No problem 3.2 use the XML Base call, XSLT-1.1 references it 3.4 Whitespace Stripping Seems one may have to do a bit of preprocessing on both the stylesheet trees and the source trees. 4 Expressions looks okay, wondering about variable bindings though... default namespace not in scope 5.1 Processing Model look in Michael Kay's book about how to efficiently find the template applying to a node. Might influence the in-memory stylesheet representation 5.2 Patterns the end of that section suggest that the expression could be computed in a simpler way. Maybe templates needs to be evaluated differently than through the normal XPath processing. This can be implemented separately or build an expression tree in the XPath module and use a different evaluation mechanism. Not sure this is best. 5.4 Applying Template Rules xsl:apply-templates is the recurstion mechanism, note the select mechanism. detection of loop: once the applied nodeset has been computed, check that none of the elements is part of the existing set in use, this may be costly and should be triggered only at a certain depth. 5.5 Conflict Resolution for Template Rules Sounds again that evaluation of a pattern rule should provide one more information not provided by the standard XPath evaluation 5.6 Overriding Template Rules another recursion mechanism, confirm that it is needed to separate the imported stylesheets. 5.7 Modes Confusing ??? need an example. 6 Named Templates No big deal it seems 7.1.1 Literal Result Elements cleanup of the namespace template should be done initially at stylesheet parsing. 7.1.2 Creating Elements with xsl:element okay, I bet it's usually used with { } expression computations 7.1.3 Creating Attributes with xsl:attribute need some running code to better understand all the subtilties 7.1.4 Named Attribute Sets Okay just a way to mimick param entities use fo attrib groups in Dtd's 7.2 Creating Text adjacent text nodes are merged ... okay output escapeing might need a libxml API extension 7.3 Creating Processing Instructions 7.4 Creating Comments RAS, one just need to make a couple of trivial checks 7.5 Copying Okay will need some testing 7.6.1 Generating Text with xsl:value-of will be a good test for XPath string() function note in the example that the text nodes are coalesced 7.6.2 Attribute Value Templates hum, this is - contextual - uses XPath best seems to parse, generate an evaluation tree then evaluate when accessed. Note that multipe expressions can be associated to a single attribute. Sounds like i will have to introduce a new element type inserted in the attribute nodelist. dohh ... 7.7 Numbering sounds interesting for users but might be costly, we will see ... 7.7.1 Number to String Conversion Attributes format="..." :-( it's gonna be painful ... 8 Repetition 9 Conditional Processing doesn't sounds hard to implement since we are at an interpreter level but really useful in practice. Will be simple once the overall framework is set-up. 10 Sorting Okay applied to the node list of an xsl:apply-templates or xsl:for-each The NOTEs are a bit scary ... 11 Variables and Parameters Variables can only be afttected at the top level, so it seems they act only as global variables ... But this is by regions .... so some of the statements within a stylesheet my use a different set than others ... in practice it turns to be nearly like loacal variables .... Need more thinking on this to handle it properly. Might explain on of TOM's requests w.r.t. variable resolution 11.1 Result Tree Fragments Dohhh a new type ... actually it's just a node set restricted type 11.2 Values of Variables and Parameters okay, real problem is scoping ... 11.3 Using Values of Variables and Parameters with xsl:copy-of No surprize 11.4 Top-level Variables and Parameters It is an error if a stylesheet contains more than one binding of a top-level variable with the same name and same import precedence => ah ah, so it seems one can associate the variable bindings to a stylesheet and if needed recurse down the import list if not found, would simplify things a lot ! If the template or expression specifying the value of a global variable x references a global variable y, then the value for y must be computed before the value of x. => Values can probably be computed dynamically at reference time, if this generate a loop, then it's an error. Lazy computations are great ... 11.5 Variables and Parameters within Templates xsl:variable is allowed anywhere within a template that an instruction is allowed. In this case, the binding is visible for all following siblings and their descendants. It is an error if a binding established by an xsl:variable or xsl:param element within a template shadows another binding established by an xsl:variable or xsl:param element also within the template. => the example seems to imply that we can simply keep a list of local variable binding to a template ... sounds fine. 11.6 Passing Parameters to Templates => Okay the parameter overrides the local binding 12.1 Multiple Source Documents 12.2 Keys skipped for now 12.3 Number Formatting reimplementing Java formatting in C is gonna be a pain ! 12.4 Miscellaneous Additional Functions current() => trivial unparsed-entity-uri() => support in uri.c should do generate-id() => use the in-memory address of the node ??? system-property() => sounds simple 13 Messages trivial I/Os 14 Extensions 15 Fallback skipped for now 16 Output 16.1 XML Output Method sounds that calling directly libxml output on the result tree should do it with a few caveats, for example one need to be able to parametrize the output 16.2 HTML Output Method sounds that calling libxml HTML output should do it too 16.3 Text Output Method doesn't sounds too hard ... 16.4 Disabling Output Escaping hum ... might be a bit painful to implement with the current framework.