[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Why doesn't this simple XSLT (Identity transform)

Subject: Re: Why doesn't this simple XSLT (Identity transform) work?
From: <ohaya@xxxxxxx>
Date: Tue, 1 Dec 2009 21:48:18 -0500
Re:  Why doesn't this simple XSLT (Identity transform)
Hi Ken,

Also, I think that what was 'throwing me off' was that the "sig:" namespace was implicit.  That was why I was using just "Signature" instead of "sig:Signature".

Thanks again,
Jim


---- ohaya@xxxxxxx wrote: 
> Hi Ken,
> 
> Thanks, not just for the solution, but for the VERY detailed explanation.  I know that I'll have to re-re-read your post, probably several more times, but if I'm understanding, basically the problem was that the match I was using was not matching anything, so that xsl:template was not "catching", and the reason for not matching was because of the namespace.
> 
> Is that right?
> 
> Thanks again,
> Jim
> 
>  
> 
> 
> ---- "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote: 
> > At 2009-12-01 19:43 -0500, ohaya@xxxxxxx wrote:
> > >It's been awhile since I've worked with XSLT, but I'm having to 
> > >implement one that removes an element (<Signature>) from the 
> > >incoming (SOAP) message.
> > 
> > Actually, you want to remove the element:
> > 
> >   {http://www.w3.org/2000/09/xmldsig#}Signature
> > 
> > ... regardless of the prefix used in the syntax of the input XML.
> > 
> > >I know that this should be simple, and I know that I have written 
> > >similar XSLT before, but for some reason, I can get this to work.
> > 
> > You are forgetting that XSLT matches on the expanded name of a node 
> > and not the specified name of the node.  Prefixes are irrelevant 
> > (other than playing the role of associating the namespace URI string 
> > for the expanded name).
> > 
> > >Here's an example SOAP message:
> > >...
> > >And, here's the XSLT that I'm using:
> > >...
> > 
> > Thank you for providing the plug-and-play.
> > 
> > >What the XSLT seems to be doing is just doing the Identity 
> > >transform, and copying everything from the input message to the 
> > >output, i.e., the "<xsl:template match="//Signature">" is not 
> > >getting processed at all.
> > 
> > Right.  And, BTW, the "//" isn't needed, but that isn't what is wrong.
> > 
> > >I've tried different things for that template match, including just 
> > >"Signature", a "fully-qualified" match term, etc.
> > 
> > You didn't try a qualified name match.  A qualified name has as its 
> > lexical space the specified name for the element and as its value 
> > space the expanded name for the element.  Two qualified names are 
> > compared by their expanded names.  A qualified name is exposed and 
> > written using the specified name and the in-scope namespaces for the 
> > prefix used or not by the specified name.
> > 
> > >I have the impression that the XSLT processing should always use the 
> > >more specific match (i.e., the one above, and not the Identity 
> > >transform), but it doesn't seem to be working :(...
> > 
> > That isn't true in general but happens to be true in this case, you 
> > just haven't named the element properly.
> > 
> > Some of the detail relevant to your situation is that every match 
> > pattern that is more complex than a simple name has the same inferred 
> > priority of 0.5, without any kind of "increasing level of complexity 
> > based on length", just 0.5 full stop.  A simple name has the inferred 
> > priority of 0.  A wild card has the inferred priority of 
> > -0.5.  (There are a couple others not in play here)  Since all of 
> > your template rules that match the Signature element have different 
> > priorities, the one that is highest (the simple name) trumps the 
> > lower one (the element wild card).
> > 
> > >I'm sure that I am missing something really obvious here,
> > 
> > The qualified element name in your XSLT has to match the qualified 
> > element name in the XML (in the value space, not in the lexical 
> > space, thus the expanded names must be equal).
> > 
> > The specified element name in your XSLT has no relation to the 
> > specified element name in the XML (the lexical space).
> > 
> > I hope the solution below illustrates this for you.
> > 
> > . . . . . . . . . . Ken
> > 
> > t:\ftemp>type ohaya.xml
> > <SOAP:Envelope xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" 
> > xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" 
> > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" 
> > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> >      <SOAP:Header>
> >          <wsse:Security SOAP:mustUnderstand="1">
> >              <saml:Assertion MajorVersion="1" MinorVersion="1" 
> > AssertionID="ID46a342be-9d3a-437a-8a26-85fcd72a723d" 
> > Issuer="http://foo.com" IssueInstant="2009-12-01T21:55:13Z">
> >                  <saml:Conditions NotBefore="2009-12-01T21:54:58Z" 
> > NotOnOrAfter="2009-12-01T22:10:28Z"/>
> >                  <saml:AuthenticationStatement 
> > AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified" 
> > AuthenticationInstant="2009-12-01T21:55:13Z">
> >                  .....
> >                  </saml:AuthenticationStatement>
> >               <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
> >                    ...
> >               </Signature></saml:Assertion></wsse:Security>
> > </SOAP:Header>
> > <env:Body>
> >          <m:hello xmlns:m="http://services">
> >              <m:x>123</m:x></m:hello>
> > </env:Body>
> > </SOAP:Envelope>
> > 
> > t:\ftemp>call xslt ohaya.xml ohaya.xsl
> > <?xml version="1.0" encoding="utf-8"?><SOAP:Envelope 
> > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" 
> > xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" 
> > xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" 
> > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> >      <SOAP:Header>
> >          <wsse:Security SOAP:mustUnderstand="1">
> >              <saml:Assertion MajorVersion="1" MinorVersion="1" 
> > AssertionID="ID46a342be-9d3a-437a-8a26-85fcd72a723d" 
> > Issuer="http://foo.com" IssueInstant="2009-12-01T21:55:13Z">
> >                  <saml:Conditions NotBefore="2009-12-01T21:54:58Z" 
> > NotOnOrAfter="2009-12-01T22:10:28Z"/>
> >                  <saml:AuthenticationStatement 
> > AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified" 
> > AuthenticationInstant="2009-12-01T21:55:13Z">
> >                  .....
> >                  </saml:AuthenticationStatement>
> >               </saml:Assertion></wsse:Security>
> > </SOAP:Header>
> > <env:Body>
> >          <m:hello xmlns:m="http://services">
> >              <m:x>123</m:x></m:hello>
> > </env:Body>
> > </SOAP:Envelope>
> > t:\ftemp>type ohaya.xsl
> > <?xml version="1.0" encoding="utf-8"?>
> > <xsl:stylesheet version="1.0" 
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
> > xmlns:dp="http://www.datapower.com/extensions"
> >      xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
> >      xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
> >      xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
> >      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
> >      xmlns:sig="http://www.w3.org/2000/09/xmldsig#"
> >  >
> >      <xsl:output method="xml"/>
> > 
> >      <xsl:template match="node()|@*">
> >          <xsl:copy>
> >              <xsl:apply-templates select="node()|@*"/>
> >          </xsl:copy>
> >      </xsl:template>
> > 
> >      <xsl:template match="sig:Signature">
> >      </xsl:template>
> > 
> > </xsl:stylesheet>
> > 
> > t:\ftemp>rem Done!
> > 
> > 
> > 
> > --
> > Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
> > Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
> > Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> > Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
> > Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
> > G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
> > Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
> > Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.