xsl-list
[Top] [All Lists]

RE: NAMESPACES - Part 2 of (Moving an element to a new location in the Result-tree)

2005-09-10 00:38:38
When you say match="Transfer", that's a shorthand for "match elements whose
local name is Transfer and whose namespace URI is null". It won't match a
Transfer element in a non-null namespace, even if that namespace is the
default namespace in the source document and/or in the stylesheet.

My usual advice to people handling two variants of a vocabulary, one with
namespaces and one without, is: don't try and write a stylesheet that
handles both. Instead, write a stylesheet that converts from one variant to
the other, and run this as a preprocessor when necessary before running your
main stylesheet.

Michael Kay
http://www.saxonica.com/

 

-----Original Message-----
From: Graves, Jim (CONTR) [mailto:jim(_dot_)graves(_at_)ngc(_dot_)com] 
Sent: 10 September 2005 04:30
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Cc: swguild(_at_)mindspring(_dot_)com
Subject: [xsl] NAMESPACES - Part 2 of (Moving an element to a 
new location in the Result-tree)


This is a follow-on question related to my earlier one about: 
"Moving an element to a new location in the Result-tree." 
(my new QUESTION is stated below) -- (And thanks for your 
prior help!!)

Please Cc: my home e-mail, so I can see your reply from home this
weekend?)
'swguild(_at_)mindspring(_dot_)com'

Essentially I have two version of input data one with and one without
namespaces, so my XSLT works on the latter, not former (the namespaces
are causing problems).

My 'toy version' of the input data file works just fine w.r.t. its
intent,
namely creating a new file (containing the newly formed 'result-tree')
in which the <INDIVIDUAL_ALIAS> elements have been 'herded down,' to
their new home in the tree, (as I refer to moving my 'data elephants'
sometimes) (;>}
(Forgive my levity, but it's Friday night -- and I should be home by
now).

However, now I have to resolve why my XSLT, shown below, is processing
differently on the files that only differ with respect to the presence
or absence of namespaces: (I'm using XMLSpy version 2005 
release 3 (for
development/debugging), of Ent. Edn. and the (nearly latest) .NET XSLT
1.1, but not 2.0, (it's used for production) -- (BTW, how can 
I get XSLT
2.0 in there, if it's possible?)).

As I see it, when debugging down through the code in XMLSpy, 
without the
namespaces, everything flows perfectly and life is good, (:>}.
Then, when I introduce the 'real data,' with namespaces and prefixes,
etc, the XSLT process chooses to follow a different sequence; see data
versions. 

Specifically, it avoids my template named "Transfer" (-- apparently
disregarding the 'optional' priority value): (without the 
namespaces in
the data, it uses this template and all is well).

<xsl:template match="Transfer" priority="5.0">
 <Transfer>
 <IND>
                <xsl:apply-templates select="IND"/>
 </IND>       
</Transfer>


and then consumes the entire file with the 'node-eater' (via 
<xsl:copy):


<xsl:template match="@*|node()" >
         <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>  
</xsl:template>


In this case, having the disastrous result of omitting my key 
template:
(the 'Good Shepard template' ("IND") who herds my data elephants down
the tree..)

<xsl:template match="IND" priority="4.0">
            <xsl:apply-templates
select="*[not(self::INDIVIDUAL_ALIAS)]"/>    
            <xsl:apply-templates select="INDIVIDUAL_ALIAS" />

</xsl:template>

Without this execution, I fail to obtain my desired result and life is
bad.

MY QUESTION: since I need to have these (and several other
namespaces/prefixes, such as: 
xmlns:ABC="http://www.abc.xyz.pdq/ABC"; and
several others (must haves)), so then, what can I do to mitigate the
effect of their presence in the input data tree? 

This problem happens immediately, prior to when it gets to my first
element, since it's not shown as highlighted in XMLSpy, if namespaces
are present, yet if they are not present, then the tag is highlighted
and all flows well).  (Something happening behind the scenes 
in the XSLT
process (what?). 

Again:

"<Transfer>" (is OK), however, 


"<Transfer xmlns:xs="http://www.w3.org/2001/XMLSchema"; (is 
not OK; skips
the special template, "IND").



INPUT DATA

Less Complex Input (without namespaces):
<Transfer>
<IND> 
<NAME_LAST>PEITER</NAME_LAST>
<NAME_FIRST>ED</NAME_FIRST>
<NAME_MIDDLE>WARECO</NAME_MIDDLE>

<INDIVIDUAL_ALIAS>
<IND_ALIAS_TYPE>UNKNOWN</IND_ALIAS_TYPE>
<Name>DASTEFANO,ALEX</Name>
</INDIVIDUAL_ALIAS>

<INDIVIDUAL_ALIAS>
<IND_ALIAS_TYPE>UNKNOWN</IND_ALIAS_TYPE>
<Name>PURSA, NILLIAM, JR</Name>
</INDIVIDUAL_ALIAS>

<BIRTH_DATE>19510515</BIRTH_DATE>
<GENDER>M</GENDER>
<IND_HEIGHT>67"</IND_HEIGHT>
<IND_WEIGHT>150</IND_WEIGHT>
<EYE_COLOR>Brown</EYE_COLOR>
<HAIR_COLOR>Brown</HAIR_COLOR>

</IND>
</Transfer>


More Complex Input (with namespaces, causing problems):

<Transfer 
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:fn="http://www.w3.org/2005/02/xpath-functions";
xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes";> 

<IND> NAME_LAST>PEITER</NAME_LAST>
<NAME_FIRST>ED</NAME_FIRST>
<NAME_MIDDLE>WARECO</NAME_MIDDLE>

<INDIVIDUAL_ALIAS>
<IND_ALIAS_TYPE>UNKNOWN</IND_ALIAS_TYPE>
<Name>DASTEFANO,ALEX</Name>
</INDIVIDUAL_ALIAS>

<INDIVIDUAL_ALIAS>
<IND_ALIAS_TYPE>UNKNOWN</IND_ALIAS_TYPE>
<Name>PURSA, NILLIAM, JR</Name>
</INDIVIDUAL_ALIAS>

<BIRTH_DATE>19510515</BIRTH_DATE>
<GENDER>M</GENDER>
<IND_HEIGHT>67"</IND_HEIGHT>
<IND_WEIGHT>150</IND_WEIGHT>
<EYE_COLOR>Brown</EYE_COLOR>
<HAIR_COLOR>Brown</HAIR_COLOR>

</IND>
</Transfer> 


XSLT:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >
<xsl:output version="1.0" method="xml" omit-xml-declaration="no"
encoding="UTF-8" indent="yes"/>

<xsl:strip-space elements="*"/>

<xsl:template match="/">
             <xsl:copy>
                 <xsl:apply-templates select="*"/>
               </xsl:copy>            
</xsl:template> 

<xsl:template match="Transfer" priority="5.0">
   <Transfer>
     <IND>
                <xsl:apply-templates select="IND"/>
     </IND>   
   </Transfer>
           
</xsl:template>

<xsl:template match="IND" priority="4.0">
  
            <xsl:apply-templates
select="*[not(self::INDIVIDUAL_ALIAS)]"/>    
            <xsl:apply-templates select="INDIVIDUAL_ALIAS" />

</xsl:template>

 <xsl:template match="@*|node()" >
               <xsl:copy>
                    <xsl:apply-templates select="@*|node()"/>
             </xsl:copy>  
 </xsl:template>

</xsl:stylesheet>


  


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>