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

RE: FW: Getting a flat mapping of XSLT fields for doc

Subject: RE: FW: Getting a flat mapping of XSLT fields for documentation purposes...
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 1 Jun 2007 15:36:15 +0100
RE:  FW: Getting a flat mapping of XSLT fields for  doc
The general problem is insoluble, in the sense that a sufficiently well
obfuscated stylesheet could conceal its run-time behaviour from any static
analyzer. So you'll have to confine yourself to heuristics, that is,
detecting common coding patterns and reporting on them.

It's then just a question of how far you want to go. For example, you could
probably handle 80% of all cases by looking at each element constructor
(literal result element, or xsl:element with a fixed name attribute) and
reporting what kind of element is selected by the nearest enclosing
xsl:for-each or xsl:template with a match pattern. If the element is
constructed in a named template, you could recurse to the places where that
template is called, but that's a bit more ambitious.

I don't think that knowledge of the schema is going to help you very much.
In theory it can help you do a deeper analysis, but it becomes a couple of
orders of magnitude more complex.

Since the purpose is documentation, have you considered run-time analysis
instead? For example the XML trace file that Saxon produces with the -T
option can yield a lot of information.

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


> -----Original Message-----
> From: Minas Casiou [mailto:minas@xxxxxxxxxxxxxxx] 
> Sent: 01 June 2007 15:03
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  FW: Getting a flat mapping of XSLT fields for 
> documentation purposes...
> 
> 
> 
> From: Minas Casiou [mailto:minas@xxxxxxxxxxxxxxx]
> Sent: Friday, 1 June 2007 11:57 PM
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Cc: 'Minas Casiou'
> Subject: Getting a flat mapping of XSLT fields for 
> documentation purposes...
> 
> Hi,
> I'm trying to put together an XSLT which will take an 
> arbitrary XSLT (that maps data from one XSD schema to another 
> XSD schema), and provides (on a best-effort basis) a flat 
> view of the mapping from the point of view of the XSD being 
> mapped to. 
> 
> i.e. 
> If I've got 3 files: 
>         1)XSDInput.xsd - defines input data format 
>         2)XSDOutput.xsd - defines output data format and 
>         3)XSLTmapper.xslt - maps from input data format 
> (XSDInput.xsd) to output data format (XSDOutput.xsd) 
> 
> I want to create a generic XSLT file: 
>         - -> XSLTFlatMappingForDoco.xslt 
> that takes various         
>         XSLTMapper.xslt
> files, and produces something like: 
> 
> <Maps>
> <Map>
>   <from>s1:StreetName</from>
>   <to>s0:Pda_Inf_Street_Name</to>
> </Map>
> <Map>
>   <from>s1:StreetType</from>
>   <to>s0:Pda_Inf_Street_Type</to>
> </Map>
> <Map>
>   <from>s1:StreetSuffix1</from>
>   <from>s1:StreetSuffix2</from>
>   <to>s0:Pda_Inf_Street_Suffix</to>
> </Map>
> .... 
> </Maps>
> 
> which says that field 
>         s0:Pda_Inf_Street_Name
> comes from: 
>         s2:StreetName         
> 
> and
>   <from>s1:StreetSuffix1</from>
>   <from>s1:StreetSuffix2</from>
>   <to>s0:Pda_Inf_Street_Suffix</to> 
> 
>         s0:Pda_Inf_Street_Suffix
> comes from: 
>         s1:StreetSuffix1 
>         s1:StreetSuffix2 
> 
> etc. 
> 
> Any other additional info would be a bonus, but I'm not too 
> fussed about that right now...bigger problems trying to do 
> just the above! 
> 
> I've got this so far... 
> 
> <?xml version='1.0' ?>
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> xmlns:s0="URN:AU.GOV.NSW.POLICE.XML.SERVICE.APPLICATION.COPSEV
> ENT.CAD400NWS.VERSION_1_0_0"> 
>         <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
>         
>         <xsl:template match="*"> 
>         <Maps> 
>                 <xsl:for-each 
> select="descendant-or-self::xsl:value-of"> 
>                         <Map> 
>                                 <from> 
>                                         <xsl:value-of 
> select="../../parent::xsl:for-each/@select"/> 
>                                 </from> 
>                                 <to> 
>                                         <xsl:value-of 
> select="name(../.)"/> 
>                                 </to> 
>                         </Map> 
>                 </xsl:for-each> 
>         </Maps> 
>         </xsl:template>
> </xsl:stylesheet> 
>   
> which sort of does a liiiiitle bit of the job (completely 
> useless at this point...). 
> 
> Has anyone done this sort of thing before, or know how to 
> approach it? 
> I'm completely lost for how to do it using XSLT. I don't want 
> to have to resort to code. I suspect that'll be even uglier. 
> 
> Thanks 
> 
> 
>   
> Cheers 
>   
> Minas Casiou |  ESB Technical Architect I&I | MRP -  
> Mainframe Replacement Program    |  BTS  |  New  South  Wales  Police 
> Phone: 02 9689 7610 |  Eaglenet: 79610  |  Mobile: 0431 103 
> 925  |  email: casi1min@xxxxxxxxxxxxxxxxx This message and 
> any attachment is confidential and may be privileged or 
> otherwise protected from disclosure. If you have received it 
> by mistake, please let us know by reply and then delete it 
> from your system; you should not copy the message or disclose 
> its contents to anyone.

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.