- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Mon, 29 May 2006 08:37:37 +0100
- To: public-xml-processing-model-wg@w3.org
- Message-ID: <447AA4C1.3000501@jenitennison.com>
Hi Mohamed, Innovimax SARL wrote: > On 5/28/06, *Jeni Tennison* <jeni@jenitennison.com > <mailto:jeni@jenitennison.com>> wrote: > Innovimax SARL wrote: > > Ok, you're right, it is an valid XPath 1.0 expression, but not a > *usual* > > XPath 1.0/XSLT 1.0 construction, because the variable is a > "result tree > > fragment" and cannot be bound to a nodeset in XSLT 1.0 (but in > XSLT 1.1 > > and later). > > Again, I wrote it too fast > I wanted too say << because the variable COULD be a "result tree > fragment" >> > in the case of an inline document like this as already been proposed by > Norm in [1] > > <p:step name="p:xslt"> > <p:input name="document"> > <doc> > <p>Some data</p> > </doc> > </p:input> This would only result in a result tree fragment if that's how we defined <p:input> to work. I'd strongly suggest that we said that if there was (an element) content to <p:input> then the input was set to a new document with a copy of the content of <p:input> as the content of the document. We don't have any need for the concept of "result tree fragments" (which are a purely XSLT 1.0 invention). > And another problem for me is that, it was said that variable in Xproc > could be only Strings....so I cannot understand how they could be bound > to NodeSet !! > > [1] > http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2006Apr/0067.html [I think that you've referenced the wrong mail here: I can't see anything in this mail that talks about the values of variables (it's a mail about directed vs. generic syntax).] I think that we've agreed that *parameters* should only take string values, but have said nothing about the values that XProc variables can be set to. I think it would be a mistake to allow them to only be bound to strings, because it's quite common to want to set a variable to an element and set other variables (or parameters) based on information about that element. For example [here using your favoured syntax]: <p:variable name="glyphInfo" context="manifest" select="/glyphs_manifest/glyph[@filename = $filename]" /> <p:variable name="glyphMnemonic" select="$glyphInfo/@mnemonic_string" /> <p:variable name="glyphHeight" select="$glyphInfo/@height" /> It would be a lot more tedious to have to write: <p:variable name="glyphMnemonic" context="manifest" select="/glyphs_manifest /glyph[@filename = $filename] /@mnemonic_string" /> <p:variable name="glyphHeight" context="manifest" select="/glyphs_manifest /glyph[@filename = $filename] /@height" /> In any case, even if the values of XProc variables (defined with <p:variable>) elements can only be set to strings, this has no bearing on whether we use <p:input> to bind XPath variables to node-sets (of root nodes). > In fact that's why i'm againt use of $var construct > > because instead of making a $var and using it a lot latter > > I would wrote it, without variable, > <p:step name="my:process"> > ... > <p:param name="stylesheet-pi" context="doc" > select="/processing-instruction('xsl-stylesheet')" /> > ... > </p:step> > > which is for me a lot clearer (as user and as implementor) OK, here's a more realistic example in your favoured syntax: <p:choose> <p:input name="input" ref="document" /> <p:output name="output" ref="result" /> <p:variable name="xsl-stylesheet-pi" uses="input" select="/processing-instruction('xsl-stylesheet-pi')" /> <p:variable name="stylesheet-type-data" uses="xsl-stylesheet-pi" select="substring-after($xsl-stylesheet-pi, 'type=')" /> <p:variable name="stylesheet-type-quote" uses="stylesheet-type-data" select="substring($stylesheet-type-data, 1, 1)" /> <p:variable name="stylesheet-type" uses="stylesheet-type-data stylesheet-type-quote" select="substring-before( substring($stylesheet-type-data, 2), $stylesheet-type-quote" /> <p:when uses="stylesheet-type" test="$stylesheet-type = 'text/xsl'"> <p:variable name="stylesheet-href-data" uses="xsl-stylesheet-pi" select="substring-after($xsl-stylesheet-pi, 'href=')" /> <p:variable name="stylesheet-href-quote" uses="stylesheet-href-data" select="substring($stylesheet-href-data, 1, 1)" /> <p:variable name="stylesheet-href" uses="stylesheet-href-data stylesheet-href-quote" select="substring-before( substring($stylesheet-href-data, 2), $stylesheet-href-quote)" /> <p:step name="p:load"> <p:param name="href" uses="stylesheet-href" select="$stylesheet-href" /> <p:output name="output" label="stylesheet" /> </p:step> <p:step name="p:xslt"> <p:input name="input" ref="input" /> <p:input name="stylesheet" ref="stylesheet" /> <p:output name="output" label="result" /> </p:step> </p:when> <p:otherwise> <p:step name="p:xslt"> <p:input name="input" ref="input" /> <p:input name="stylesheet" href="default.xsl" /> <p:output name="output" label="result" /> </p:step> </p:otherwise> </p:choose> If you really don't think that the uses attributes in the above are an unnecessary burden on users then we'll have to agree to differ. > I understand that we want to make things simple for the implementation, > but I think forcing the user to make the dependencies explicit is a > real > burden on the user for something that's relatively easy for the > implementation to work out for itself (all the implementation needs to > do is match the XPath expression with the regular expression > > ([^$'"]|('[^']*')|("[^"]*"))*\$(\i\c*) > > and get the values of the fourth subexpression of each of the matches). > Generally, I am against forcing the user to make explicit things that > the implementation can work out for itself. > > > I'm not sure a simple regex will be sufficient and what about case like > $a/b[@d=$b/@d and @e=$c/@e] Please see the attached XSLT 2.0 stylesheet, which takes an XPath expression as a 'xpath' parameter and gives you a list of the variables on which the XPath depends. It uses the regular expression that I gave above to identify the variable references in the XPath expression. Cheers, Jeni -- Jeni Tennison http://www.jenitennison.com
Attachments
- text/xml attachment: xpath-dependencies.xsl
Received on Monday, 29 May 2006 07:37:53 UTC