Subject: Re: [xsl] id attribution in template match From: Andrew Welch <andrew.j.welch@xxxxxxxxx> Date: Tue, 29 Sep 2009 09:49:22 +0100 |
> The schema correctly identifies all id attributes as type xs:ID, and all > idref attributes as type xs:IDREF. > > So that's question 1, is there a hidden trap with id(@idref) type > expressions here? Are you transforming the validated input? It sounds like the problem you were having before - your transform relies on the input being validated for the processing to succeed, but instead you are validating the input then discarding the "output" of the validation, and continuing to process the original input. I guess that's a big difference that might not be obvious - if the XML references a DTD, when you process that XML you will (nearly) always process it after validation, with all ids created, defaults inserted, entities expanded etc. If the XML references an XSD, you will (nearly) always process it without it being modified by the validation process. So with DTDs unless you explicitly "turn it off" you will get the post validation input, and with XML Schema unless you explicitly "turn it on" you will get the pre validation input. My own view is that the validation process should not modify the input in any way, it just creates a coupling that causes problems for all consumers of that XML. I would rewrite out the validation dependent parts of your transform.. > Question 2 follows from my using the above workaround, because it isn't > obvious how to apply it in template matches. > > For example I have a template declared like so: > ---- > <xsl:template match="jump[@idref][local-name(id(@idref))='footnote']"> > .. > </xsl:template> > ---- > > This is no longer matching jumps which point to footnotes, so I tried the > same technique as above: > ---- > <xsl:template match="jump[@idref][local-name(//*[@id = > ./@idref])='footnote']"> > .. > </xsl:template> > ---- > > I know this won't work because the . in the last predicate matches the wrong > element. I can't put the idref in a variable and use that because I would > have to do that outside the template. Is there a particular technique that > would allow me to evaluate this test properly Use current() instead of . -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] id attribution in templat, David Carlisle | Thread | RE: [xsl] id attribution in templat, Michael Kay |
Re: [xsl] id attribution in templat, David Carlisle | Date | RE: [xsl] id attribution in templat, Michael Kay |
Month |