RE: [xsl] how to reflect on the namexpaces URIs and prefixes in XSLT?

Subject: RE: [xsl] how to reflect on the namexpaces URIs and prefixes in XSLT?
From: "Aaron Skonnard" <aarons@xxxxxxxxxxx>
Date: Mon, 11 Feb 2002 10:21:29 -0700
You need to use the XPath namespace axis, which contains a namespace
node for each in-scope namespace binding. For example, the following
expression finds all element declarations that are of types from the
'urn::hl7.org/v3dt' namespace:

//*[local-name()='element'][namespace::*[.='urn::hl7.org/v3dt'][local-na
me()=substring-before(../@type,':')]]

Notice, that this works regardless of the prefix used in the type
attribute, even with default namespaces.

..................................................
Aaron Skonnard, DevelopMentor (aarons@xxxxxxxxxxx)
http://www.develop.com  http://www.develop.com/xml
............. http://skonnard.com ................

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-
> list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Gunther Schadow
> Sent: Monday, February 11, 2002 9:44 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] how to reflect on the namexpaces URIs and prefixes in
XSLT?
> 
> Hi,
>
> I am working on a XSLT dealing with XML Schemas. I generate
> certain Schema thingies, like complexType and simpleType
> and other elements. Within those, I need to deal properly
> with the XML Schema "targetNamespace". For instance, if
> the ancestor schema node of the input document has this
> 
> <xsd:schema
>    xmlns:xsd='http://www.w3.org/2001/XMLSchema'
>    xmlns:v3dt='urn::hl7.org/v3dt'
>    targetNamespace='urn::hl7.org/v3dt'>
> 
> now if I generate a xsd:complexType definition for a type
> called 'foo' I will generate:
> 
>   <xsd:complexType name='foo'/>
> 
> if I refer to such types defined in the schema, I have to
> do something like this:
> 
>   <xsd:element name='thing' type='v3dt:foo' />
> 
> Now the questions:
> 
> - how do I query for the active namespace prefix declarations
>    in the input document?
> 
>    Apparently (in saxon at least) the document that I can see
>    with <copy-of select='$root'/> where <xsl:variable name='root'
>    select='/'/> doesn't contain any xmlns:... attributes, at least
>    not at the point of my XSLT execution where I need them.
> 
> - even if I find those xmlns:... attributes (which I do, sort of,
>    in the root template of the XSLT), how do I query those? I can see
>    the xslns attributes show up when I do
> 
>    <xsl:copy-of select='$root//xsd:schema'/>
> 
>    but as soon as I'm trying to grab them specifically, e.g.,
>    using:
> 
>    <xsl:for-each select='$root//xsd:schema/@*'/>
> 
>    I'm not seeing any of the xmlns ones. They only show up if
>    anything is actually using the namespace in the output, but
>    how do I know what namespace prefix the xsd:schema/@targetNamespace
>    is bound to?
> 
> It sounds like XSLT is making namespace prefix declarations a
> special thing (which is O.K.) but it doesn't provide any special
> mechanisms by which one could dynamically work with the namespaces
> used by an input document. Are there any workarounds?
> 
> thanks,
> -Gunther
> 
> --
> Gunther Schadow, M.D., Ph.D.
gschadow@xxxxxxxxxxxxxxx
> Medical Information Scientist      Regenstrief Institute for Health
Care
> Adjunct Assistant Professor        Indiana University School of
Medicine
> tel:1(317)630-7960
http://aurora.regenstrief.org
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread