OLD | NEW |
| (Empty) |
1 | |
2 NOTES relative to the implementation | |
3 ==================================== | |
4 | |
5 xsl:stylesheet: | |
6 | |
7 all children except xsl:import can be in any order, so this | |
8 can be stored as one big structure. | |
9 | |
10 xsl:include: | |
11 | |
12 this is really similar to XInclude, can be implemented as a | |
13 nearly separate processing just after the XML stylesheet has been | |
14 parsed. | |
15 Detect loops using a limited stack ... | |
16 | |
17 xsl:import: | |
18 | |
19 seems this should be really implemented as having a stylesheet | |
20 sublist being itself an import list | |
21 | |
22 add the list at the end | |
23 when doing a resolution explore child before siblings in the list | |
24 | |
25 3 Data Model, we should operate on parsed trees | |
26 | |
27 3.1 No problem | |
28 | |
29 3.2 use the XML Base call, XSLT-1.1 references it | |
30 | |
31 3.4 Whitespace Stripping | |
32 | |
33 Seems one may have to do a bit of preprocessing on both the | |
34 stylesheet trees and the source trees. | |
35 | |
36 4 Expressions | |
37 | |
38 looks okay, wondering about variable bindings though... | |
39 default namespace not in scope | |
40 | |
41 5.1 Processing Model | |
42 | |
43 look in Michael Kay's book about how to efficiently find the | |
44 template applying to a node. Might influence the in-memory stylesheet | |
45 representation | |
46 | |
47 5.2 Patterns | |
48 | |
49 the end of that section suggest that the expression could be computed in | |
50 a simpler way. Maybe templates needs to be evaluated differently than | |
51 through the normal XPath processing. This can be implemented separately | |
52 or build an expression tree in the XPath module and use a different | |
53 evaluation mechanism. Not sure this is best. | |
54 | |
55 5.4 Applying Template Rules | |
56 | |
57 xsl:apply-templates is the recurstion mechanism, note the select | |
58 mechanism. | |
59 | |
60 detection of loop: once the applied nodeset has been computed, | |
61 check that none of the elements is part of the existing set in use, this | |
62 may be costly and should be triggered only at a certain depth. | |
63 | |
64 5.5 Conflict Resolution for Template Rules | |
65 | |
66 Sounds again that evaluation of a pattern rule should provide one | |
67 more information not provided by the standard XPath evaluation | |
68 | |
69 5.6 Overriding Template Rules | |
70 | |
71 another recursion mechanism, confirm that it is needed to separate | |
72 the imported stylesheets. | |
73 | |
74 5.7 Modes | |
75 | |
76 Confusing ??? need an example. | |
77 | |
78 6 Named Templates | |
79 | |
80 No big deal it seems | |
81 | |
82 7.1.1 Literal Result Elements | |
83 | |
84 cleanup of the namespace template should be done initially at stylesheet | |
85 parsing. | |
86 | |
87 7.1.2 Creating Elements with xsl:element | |
88 | |
89 okay, I bet it's usually used with { } expression computations | |
90 | |
91 7.1.3 Creating Attributes with xsl:attribute | |
92 | |
93 need some running code to better understand all the subtilties | |
94 | |
95 7.1.4 Named Attribute Sets | |
96 | |
97 Okay just a way to mimick param entities use fo attrib groups in Dtd's | |
98 | |
99 7.2 Creating Text | |
100 | |
101 adjacent text nodes are merged ... okay | |
102 output escapeing might need a libxml API extension | |
103 | |
104 7.3 Creating Processing Instructions | |
105 7.4 Creating Comments | |
106 | |
107 RAS, one just need to make a couple of trivial checks | |
108 | |
109 7.5 Copying | |
110 | |
111 Okay will need some testing | |
112 | |
113 7.6.1 Generating Text with xsl:value-of | |
114 | |
115 will be a good test for XPath string() function | |
116 note in the example that the text nodes are coalesced | |
117 | |
118 7.6.2 Attribute Value Templates | |
119 | |
120 hum, this is | |
121 - contextual | |
122 - uses XPath | |
123 | |
124 best seems to parse, generate an evaluation tree then evaluate | |
125 when accessed. Note that multipe expressions can be associated to | |
126 a single attribute. Sounds like i will have to introduce a new | |
127 element type inserted in the attribute nodelist. dohh ... | |
128 | |
129 7.7 Numbering | |
130 | |
131 sounds interesting for users but might be costly, we will see ... | |
132 | |
133 7.7.1 Number to String Conversion Attributes | |
134 | |
135 format="..." :-( it's gonna be painful ... | |
136 | |
137 8 Repetition | |
138 9 Conditional Processing | |
139 | |
140 doesn't sounds hard to implement since we are at an interpreter | |
141 level but really useful in practice. Will be simple once the overall | |
142 framework is set-up. | |
143 | |
144 10 Sorting | |
145 | |
146 Okay applied to the node list of an xsl:apply-templates or xsl:for-each | |
147 | |
148 The NOTEs are a bit scary ... | |
149 | |
150 11 Variables and Parameters | |
151 | |
152 Variables can only be afttected at the top level, so it | |
153 seems they act only as global variables ... | |
154 But this is by regions .... so some of the statements within | |
155 a stylesheet my use a different set than others ... in practice | |
156 it turns to be nearly like loacal variables .... | |
157 Need more thinking on this to handle it properly. | |
158 Might explain on of TOM's requests w.r.t. variable resolution | |
159 | |
160 11.1 Result Tree Fragments | |
161 | |
162 Dohhh a new type ... | |
163 actually it's just a node set restricted type | |
164 | |
165 11.2 Values of Variables and Parameters | |
166 | |
167 okay, real problem is scoping ... | |
168 | |
169 11.3 Using Values of Variables and Parameters with xsl:copy-of | |
170 | |
171 No surprize | |
172 | |
173 11.4 Top-level Variables and Parameters | |
174 | |
175 It is an error if a stylesheet contains more than one binding | |
176 of a top-level variable with the same name and same import precedence | |
177 | |
178 => ah ah, so it seems one can associate the variable bindings | |
179 to a stylesheet and if needed recurse down the import list if not | |
180 found, would simplify things a lot ! | |
181 | |
182 If the template or expression specifying the value of a global variable | |
183 x references a global variable y, then the value for y must be computed | |
184 before the value of x. | |
185 | |
186 => Values can probably be computed dynamically at reference | |
187 time, if this generate a loop, then it's an error. Lazy computations | |
188 are great ... | |
189 | |
190 11.5 Variables and Parameters within Templates | |
191 | |
192 | |
193 xsl:variable is allowed anywhere within a template that an instruction | |
194 is allowed. In this case, the binding is visible for all following siblings | |
195 and their descendants. | |
196 It is an error if a binding established by an xsl:variable or xsl:param | |
197 element within a template shadows another binding established by an | |
198 xsl:variable or xsl:param element also within the template. | |
199 | |
200 => the example seems to imply that we can simply keep a list of | |
201 local variable binding to a template ... sounds fine. | |
202 | |
203 11.6 Passing Parameters to Templates | |
204 | |
205 => Okay the parameter overrides the local binding | |
206 | |
207 12.1 Multiple Source Documents | |
208 12.2 Keys | |
209 | |
210 skipped for now | |
211 | |
212 12.3 Number Formatting | |
213 | |
214 reimplementing Java formatting in C is gonna be a pain ! | |
215 | |
216 12.4 Miscellaneous Additional Functions | |
217 | |
218 current() => trivial | |
219 | |
220 unparsed-entity-uri() => support in uri.c should do | |
221 | |
222 generate-id() => use the in-memory address of the node ??? | |
223 | |
224 system-property() => sounds simple | |
225 | |
226 13 Messages | |
227 | |
228 trivial I/Os | |
229 | |
230 14 Extensions | |
231 15 Fallback | |
232 | |
233 skipped for now | |
234 | |
235 16 Output | |
236 | |
237 16.1 XML Output Method | |
238 | |
239 sounds that calling directly libxml output on the result tree | |
240 should do it with a few caveats, for example one need to be | |
241 able to parametrize the output | |
242 | |
243 16.2 HTML Output Method | |
244 | |
245 sounds that calling libxml HTML output should do it too | |
246 | |
247 16.3 Text Output Method | |
248 | |
249 doesn't sounds too hard ... | |
250 | |
251 16.4 Disabling Output Escaping | |
252 | |
253 hum ... might be a bit painful to implement with the current framework. | |
OLD | NEW |