Subject: [xsl] Re: [saxon] Use of QName forcing declaration "Unused" namespaces From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 22 Jul 2020 06:27:15 -0000 |
Well, passing lexical QNames across interfaces is definitely a bad idea unless you can be sure that both sides of the interface know the namespace context (that is, the set of prefix-URI bindings). Without a namespace context, a lexical QName is meaningless. Michael Kay Saxonica > On 22 Jul 2020, at 01:23, Ihe Onwuka <ihe.onwuka@xxxxxxxxx> wrote: > > > > On Tue, Jul 21, 2020 at 7:48 PM Michael Kay <mike@xxxxxxxxxxxx <mailto:mike@xxxxxxxxxxxx>> wrote: > If the QNames are names of elements in the source document, then you shouldn't be calling name() to get the lexical QName, and then calling xs:QName to turn it back into an xs:QName value, because that loses information (specifically, the namespace bindings that were in scope in the source document). Instead, you should use the node-name() function to get the name as an xs:QName value in the first place. > > > You may have mistook $name for the name(), I am not calling the name() function however that is useful information. > > I may have misunderstood what's going on here, > > All that function does is get the local name from a parameter which is either already an xs:QName or a string that will be cast to an xs:QName. There is not much to it beyond wanting to use XPath name functions rather than string hacking on names. > > but I think this is the heart of the issue: if you're going to manipulate QNames, then you need to get them out of lexical format and into structured xs:QName format as early as possible, while the original namespace bindings are still known. > > Michael Kay > Saxonica > >> On 21 Jul 2020, at 15:02, Ihe Onwuka <ihe.onwuka@xxxxxxxxx <mailto:ihe.onwuka@xxxxxxxxx>> wrote: >> >> Every element in my input doc is in one of 5 namespaces that I have declared globally in the stylesheet. However the stylesheet as written never explicitly references any of the 5 namespaces so I would like to genericize it by doing away with the namespace declarations. >> >> However if I remove any one of the namespaces I get this error. >> >> Error at char 79 in expression in xsl:sequence/@select on line 14 column 118 of ***.xsl: >> FONS0004 Namespace prefix {jx} has not been declared >> at function local:localizedName on line 12 of ***.xsl: >> >> Here is the function local:localizedName which is designed to return a local name from a QName or a string. >> >> <xsl:function name="local:localizedName" as="xs:string?"> >> <xsl:param name="name"/> >> <xsl:sequence select="local-name-from-QName(if ($name instance of xs:QName) then $name else xs:QName($name))"/> >> </xsl:function> >> >> It seems that casting anything as QName mandates that the namespace prefix in whatever is being cast must be declared , even if it's not explicitly referenced. >> >> e.g xs:string(xs:QName($someName)) will fail if $someName contains 'ab:cde' and you haven't declared the ab prefix anywhere (even if you don't otherwise use it). >> >> In which case my goal is better achieved by eradicating the QNames and resorting to string manipulation to extract the local part of the name. >> >> Comments, observations, corrections please. >> _______________________________________________ >> saxon-help mailing list archived at http://saxon.markmail.org/ <http://saxon.markmail.org/> >> saxon-help@xxxxxxxxxxxxxxxxxxxxx <mailto:saxon-help@xxxxxxxxxxxxxxxxxxxxx> >> https://lists.sourceforge.net/lists/listinfo/saxon-help <https://lists.sourceforge.net/lists/listinfo/saxon-help>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: [saxon] Use of QName forc, Michael Kay mike@xxx | Thread | [xsl] Performance results of an XML, Dr. Roger L Costello |
[xsl] Re: [saxon] Use of QName forc, Michael Kay mike@xxx | Date | [xsl] Performance results of an XML, Dr. Roger L Costello |
Month |