Index: third_party/libxslt/NOTES |
diff --git a/third_party/libxslt/NOTES b/third_party/libxslt/NOTES |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1314b8d1f518a95379f4ec2f50465a08f63e50dd |
--- /dev/null |
+++ b/third_party/libxslt/NOTES |
@@ -0,0 +1,253 @@ |
+ |
+ 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. |