Hi, > -----Ursprüngliche Nachricht----- > Im Auftrag von Daniel Veillard > On Wed, May 03, 2006 at 07:56:58AM +0400, Oleg A. Paraschenko wrote: > > Hello, > > > > On Tue, 2 May 2006 17:18:59 -0400 > > Daniel Veillard <[EMAIL PROTECTED]> wrote: > > > > > On Tue, May 02, 2006 at 09:31:40PM +0200, Buchcik, Kasimier wrote: > > > > Hi, > > > > > > > > Extension module initialization functions will be called > > > > once for every imported stylesheet (plus the main stylesheet). > > > > The initialization function is the "xsltStyleExtInitFunction" > > > > argument of the xsltRegisterExtModuleFull() function. > > > > Is this the intended design? I.e., is the initialization > > > > expected to be called for *every* imported stylehsheet and not > > > > only once for a whole stylesheet compilation episode? > > > > As far as I remember, more precise behaviour is the following. > > Initialization is expected for every (imported or main) > stylesheet which > > has the corresponding "extension-element-prefixes".
What is the reason of this expectation? > > > > > > It's probably an oversight, once per stylesheet should > be sufficient. > > > > Do you mean "once per the whole stylesheet"? I think it is > not sufficient. > > > > I have a chain of imported xslt-files that looks like: > > > > -- [code] > > <x:stylesheet extension-element-prefixes="myx" ...> > > > > <myx:init>...</myx:init> <myx:init> is not an extension element, so actually there should be no need to use "extension-element-prefixes" here. > > ... > > > > </x:stylesheet> > > --- [/code] > > > > When my xsltStyleExtInitFunction is activated, it looks for > "myx:init" and > > performs additional initialization for the corresponding > xslt file. If the > > function were called only once, I'd have problems to locate > all "myx:init" > > in all xslt files. I am in doubt about the correctness of this approach; or, if we want to avoid the word "correct": I think this is more a hack than a solution following the semantics of XSLT. You are using the "extension-element-prefixes" mechanism (which, I think, should not fire an initialization at all), to process the user-defined data element <myx:init>. "User-defined data" elements (this is a term which was introduced in XSLT 2.0) and the definition of namespaces of extension elements are not related. With xsltRegisterExtModuleTopLevel() you can register such top-level user-defined data elements to be processed. I tried to test this with EXSLT's "function": "func-2.xsl" ------------ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://exslt.org/functions" xmlns:foo="urn:test:foo"> <func:function name="foo:func-2"/> </xsl:stylesheet> "func-2-imp.xsl" ---------------- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://exslt.org/functions" xmlns:foo="urn:test:foo"> <xsl:import href="func-2-imp.xsl"/> <func:function name="foo:func-1"/> </xsl:stylesheet> Both function definitions will be processed via the following call-chain: ... --> xsltParseStylesheetTop() --> xsltExtModuleTopLevelLookup() --> exsltFuncFunctionComp(): Here the content of func:function will be processed. I think the correct way would be to register your top-level elements with: xsltRegisterExtModuleTopLevel ((const xmlChar *) "init", (const xmlChar *) "urn:test:init", myInitCompilation); > okay, then Kasimier has his answer, ignore mine :-) > > Daniel Quite to the contrary; I fear the explanation of Oleg has opened even more issues on my side. I'll start a new thread for the issues I see. Regards, Kasimier _______________________________________________ xslt mailing list, project page http://xmlsoft.org/XSLT/ [email protected] http://mail.gnome.org/mailman/listinfo/xslt
