This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: how to reflect on the namexpaces URIs and prefixes in XSLT?
- From: "Aaron Skonnard" <aarons at develop dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Mon, 11 Feb 2002 10:21:29 -0700
- Subject: RE: [xsl] how to reflect on the namexpaces URIs and prefixes in XSLT?
- Organization: DevelopMentor
- Reply-to: xsl-list at lists dot mulberrytech dot com
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@develop.com)
http://www.develop.com http://www.develop.com/xml
............. http://skonnard.com ................
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com [mailto:owner-xsl-
> list@lists.mulberrytech.com] On Behalf Of Gunther Schadow
> Sent: Monday, February 11, 2002 9:44 AM
> To: xsl-list@lists.mulberrytech.com
> 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@regenstrief.org
> 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