Saxon finding extra data.

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Saxon finding extra data.

Ron Wheeler
I am trying to report on a Spring configuration:
Of course the XML has a lot of depth and the important pieces are pretty
deep.
The interesting flow can be summarized as follows with multiple property
elements omitted
bean
-property
--list
---bean
----property name="phaseName"
----property name="pluginID
----property name="fileSpecifications"
-----set
-------bean
--------property name="dataStoreName" value="courses"
--------property name="columnNames"
---------list
----------value
----------value

In the xsl, I get to the second bean level and extract the pluginID and
then find the "fileSpecifications" where I get the "dataStoreName".
For no reason that I can see, Saxon also extracts the list of values
with a lot of empty line and extra tabs.

The extra text is from a property called "columnNames" which is not
referenced in the XSL file anywhere.
In debugging by adding xsl:message , I have not been able to determine
which template is doing this extraction.

In case that this is hard to read in the mailing list, I have created a
blog entry http://blog.artifact-software.com/tech/?p=296 describing the
files that can be downloaded.
I can provide more sample phase files if required.

There is a higher level bit of processing in the xsl that reads a master
configuration and finds all of the files that are imported.
It matches the file with the phase so that the phases can be reported in
the same sequence that the phases will be processed.
The xsl builds the list and then processes each file in turn.

Even if I remove the code that extracts the dataStoreName value
attribute, I still get the columnNames list of values.

Is this a know bug or have I done something silly?

Extract from the output

<tr>
             <td class="header">Bean Name</td>
             <td class="header">Plugin Name</td>
             <td class="header">DataStore Name</td>
          </tr>

          <tr>
             <td class="id">CourseWriterOutputting a row</td>
             <td class="pluginId">Plugin ID:CourseFileWriter<br>Usage
Description
             </td>
             <td class="dataStoreName"></td>
             <td>


                                                courses







                                                        TITLE
PMI_REPORTING_NUMBER
IIBA_REPORTING_NUMBER
DEFAULT_CURRENCY
                                                        PRICE
OFFERING_TEMPLATE_NO
                                                        ABSTRACT
                                                        DOMAIN
                                                        VERSION
                                                        DESCRIPTION
                                                        WAITLIST_MAX
                                                        MAX_COUNT
                                                        MIN_COUNT
                                                        TARGET_DAYS
DISCONTINUED_FROM
                                                        AVAIL_FROM
MULTICURRENCY_PREF
GROUP_OWNER_NAME
CERTIFICATE_TEMPLATE1
TRAINING_UNITS
                                                        FOLDER1
                                                        FOLDER2
                                                        FOLDER3
-----------------------------------
The xsl is
<xsl:template match="sb:ref">
         <xsl:message terminate="no">Outputting a table</xsl:message>
<table>
table
<xsl:variable name="phaseName"><xsl:value-of select="@bean"
/></xsl:variable>
<xsl:variable name="fileName"><xsl:value-of
select="document($tempFileName)/phases/phase[@phaseName=$phaseName]"
/></xsl:variable>
<xsl:variable name="resourceName"><xsl:value-of
select="document($tempFileName)/phases/phase[@phaseName=$phaseName]/@resourceName"
/></xsl:variable>

<caption><xsl:value-of select="$phaseName" /> from <xsl:value-of
select="$resourceName" /></caption>
<tr>
<td class="header">Bean Name</td><td class="header">Plugin Name</td><td
class="header">DataStore Name</td>
</tr>
<!-- <xsl:apply-templates select="document($fileName)/sb:beans/sb:bean"
/> -->
  <xsl:apply-templates
select="document($fileName)/sb:beans/sb:bean/sb:property[@name='plugins']/sb:list"
mode="plug-in"/>

</table>
</xsl:template>




--
Ron Wheeler
President
Artifact Software Inc
email: [hidden email]
skype: ronaldmwheeler
phone: 866-970-2435, ext 102


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help 
Reply | Threaded
Open this post in threaded view
|

Re: Saxon finding extra data.

Michael Kay
You have asked the same question on StackOverflow: double posting is generally disapproved of.

Since your question is about XSLT generally and not Saxon in particular, StackOverflow is a more appropriate forum.

Whichever forum you use, you need to post enough code, but only enough code, so that people can run it and debug it themselves.

Michael Kay
Saxonica

> On 19 Feb 2016, at 01:29, Ron Wheeler <[hidden email]> wrote:
>
> I am trying to report on a Spring configuration:
> Of course the XML has a lot of depth and the important pieces are pretty
> deep.
> The interesting flow can be summarized as follows with multiple property
> elements omitted
> bean
> -property
> --list
> ---bean
> ----property name="phaseName"
> ----property name="pluginID
> ----property name="fileSpecifications"
> -----set
> -------bean
> --------property name="dataStoreName" value="courses"
> --------property name="columnNames"
> ---------list
> ----------value
> ----------value
>
> In the xsl, I get to the second bean level and extract the pluginID and
> then find the "fileSpecifications" where I get the "dataStoreName".
> For no reason that I can see, Saxon also extracts the list of values
> with a lot of empty line and extra tabs.
>
> The extra text is from a property called "columnNames" which is not
> referenced in the XSL file anywhere.
> In debugging by adding xsl:message , I have not been able to determine
> which template is doing this extraction.
>
> In case that this is hard to read in the mailing list, I have created a
> blog entry http://blog.artifact-software.com/tech/?p=296 describing the
> files that can be downloaded.
> I can provide more sample phase files if required.
>
> There is a higher level bit of processing in the xsl that reads a master
> configuration and finds all of the files that are imported.
> It matches the file with the phase so that the phases can be reported in
> the same sequence that the phases will be processed.
> The xsl builds the list and then processes each file in turn.
>
> Even if I remove the code that extracts the dataStoreName value
> attribute, I still get the columnNames list of values.
>
> Is this a know bug or have I done something silly?
>
> Extract from the output
>
> <tr>
>             <td class="header">Bean Name</td>
>             <td class="header">Plugin Name</td>
>             <td class="header">DataStore Name</td>
>          </tr>
>
>          <tr>
>             <td class="id">CourseWriterOutputting a row</td>
>             <td class="pluginId">Plugin ID:CourseFileWriter<br>Usage
> Description
>             </td>
>             <td class="dataStoreName"></td>
>             <td>
>
>
>                                                courses
>
>
>
>
>
>
>
>                                                        TITLE
> PMI_REPORTING_NUMBER
> IIBA_REPORTING_NUMBER
> DEFAULT_CURRENCY
>                                                        PRICE
> OFFERING_TEMPLATE_NO
>                                                        ABSTRACT
>                                                        DOMAIN
>                                                        VERSION
>                                                        DESCRIPTION
>                                                        WAITLIST_MAX
>                                                        MAX_COUNT
>                                                        MIN_COUNT
>                                                        TARGET_DAYS
> DISCONTINUED_FROM
>                                                        AVAIL_FROM
> MULTICURRENCY_PREF
> GROUP_OWNER_NAME
> CERTIFICATE_TEMPLATE1
> TRAINING_UNITS
>                                                        FOLDER1
>                                                        FOLDER2
>                                                        FOLDER3
> -----------------------------------
> The xsl is
> <xsl:template match="sb:ref">
>         <xsl:message terminate="no">Outputting a table</xsl:message>
> <table>
> table
> <xsl:variable name="phaseName"><xsl:value-of select="@bean"
> /></xsl:variable>
> <xsl:variable name="fileName"><xsl:value-of
> select="document($tempFileName)/phases/phase[@phaseName=$phaseName]"
> /></xsl:variable>
> <xsl:variable name="resourceName"><xsl:value-of
> select="document($tempFileName)/phases/phase[@phaseName=$phaseName]/@resourceName"
> /></xsl:variable>
>
> <caption><xsl:value-of select="$phaseName" /> from <xsl:value-of
> select="$resourceName" /></caption>
> <tr>
> <td class="header">Bean Name</td><td class="header">Plugin Name</td><td
> class="header">DataStore Name</td>
> </tr>
> <!-- <xsl:apply-templates select="document($fileName)/sb:beans/sb:bean"
> /> -->
>  <xsl:apply-templates
> select="document($fileName)/sb:beans/sb:bean/sb:property[@name='plugins']/sb:list"
> mode="plug-in"/>
>
> </table>
> </xsl:template>
>
>
>
>
> --
> Ron Wheeler
> President
> Artifact Software Inc
> email: [hidden email]
> skype: ronaldmwheeler
> phone: 866-970-2435, ext 102
>
>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> _______________________________________________
> saxon-help mailing list archived at http://saxon.markmail.org/
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/saxon-help 



------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help 
Reply | Threaded
Open this post in threaded view
|

Re: Saxon finding extra data.

Ron Wheeler
Sorry.

After I posted it here, I was told (in a private e-mail rather than on
the list) that it was more appropriate to post it on StackOverflow, so I
did which, of course, resulted in double posting.
Following your advice would result in the same thing, so you may want to
consider this when looking at cases of double posting.

I am not sure if my question is about Saxon or XSLT but I am certainly
open to any suggest about why you think my code might pick up a random
bits of unrelated XML from elements parallel to what I expected.

I am getting lots of advice about where to post but not many suggestions
about where to look but it is encouraging to hear that it is most likely
something that I have done or not done.

I have already extracted what I think is the minimal section of the XSLT
but if you can suggest the parts that you think are essential, that
might give me some more ideas about more tests to run.
The whole stylesheet has 135 lines out of which I have shown 23 which I
think includes the templates that might be activated in this part of the
code.
Using <xsl:message> I have not been able to identify the template that
is finding the extra values.

Unfortunately, I use <xsl:result-document> since my XML input consists
of 14 separate files which the XSL discovers by parsing a master XML
file seems to limit my choice to Saxon so I have to build a separate xsl
sheet to test using XALAN which has debugging as well.

Thanks for taking the time to respond and if you have any other advice,
I would be grateful for any assistance - stupid mistakes I made, where
to debug, tests to try, anything to move forward.

Ron




On 19/02/2016 4:02 AM, Michael Kay wrote:

> You have asked the same question on StackOverflow: double posting is generally disapproved of.
>
> Since your question is about XSLT generally and not Saxon in particular, StackOverflow is a more appropriate forum.
>
> Whichever forum you use, you need to post enough code, but only enough code, so that people can run it and debug it themselves.
>
> Michael Kay
> Saxonica
>
>> On 19 Feb 2016, at 01:29, Ron Wheeler <[hidden email]> wrote:
>>
>> I am trying to report on a Spring configuration:
>> Of course the XML has a lot of depth and the important pieces are pretty
>> deep.
>> The interesting flow can be summarized as follows with multiple property
>> elements omitted
>> bean
>> -property
>> --list
>> ---bean
>> ----property name="phaseName"
>> ----property name="pluginID
>> ----property name="fileSpecifications"
>> -----set
>> -------bean
>> --------property name="dataStoreName" value="courses"
>> --------property name="columnNames"
>> ---------list
>> ----------value
>> ----------value
>>
>> In the xsl, I get to the second bean level and extract the pluginID and
>> then find the "fileSpecifications" where I get the "dataStoreName".
>> For no reason that I can see, Saxon also extracts the list of values
>> with a lot of empty line and extra tabs.
>>
>> The extra text is from a property called "columnNames" which is not
>> referenced in the XSL file anywhere.
>> In debugging by adding xsl:message , I have not been able to determine
>> which template is doing this extraction.
>>
>> In case that this is hard to read in the mailing list, I have created a
>> blog entry http://blog.artifact-software.com/tech/?p=296 describing the
>> files that can be downloaded.
>> I can provide more sample phase files if required.
>>
>> There is a higher level bit of processing in the xsl that reads a master
>> configuration and finds all of the files that are imported.
>> It matches the file with the phase so that the phases can be reported in
>> the same sequence that the phases will be processed.
>> The xsl builds the list and then processes each file in turn.
>>
>> Even if I remove the code that extracts the dataStoreName value
>> attribute, I still get the columnNames list of values.
>>
>> Is this a know bug or have I done something silly?
>>
>> Extract from the output
>>
>> <tr>
>>              <td class="header">Bean Name</td>
>>              <td class="header">Plugin Name</td>
>>              <td class="header">DataStore Name</td>
>>           </tr>
>>
>>           <tr>
>>              <td class="id">CourseWriterOutputting a row</td>
>>              <td class="pluginId">Plugin ID:CourseFileWriter<br>Usage
>> Description
>>              </td>
>>              <td class="dataStoreName"></td>
>>              <td>
>>
>>
>>                                                 courses
>>
>>
>>
>>
>>
>>
>>
>>                                                         TITLE
>> PMI_REPORTING_NUMBER
>> IIBA_REPORTING_NUMBER
>> DEFAULT_CURRENCY
>>                                                         PRICE
>> OFFERING_TEMPLATE_NO
>>                                                         ABSTRACT
>>                                                         DOMAIN
>>                                                         VERSION
>>                                                         DESCRIPTION
>>                                                         WAITLIST_MAX
>>                                                         MAX_COUNT
>>                                                         MIN_COUNT
>>                                                         TARGET_DAYS
>> DISCONTINUED_FROM
>>                                                         AVAIL_FROM
>> MULTICURRENCY_PREF
>> GROUP_OWNER_NAME
>> CERTIFICATE_TEMPLATE1
>> TRAINING_UNITS
>>                                                         FOLDER1
>>                                                         FOLDER2
>>                                                         FOLDER3
>> -----------------------------------
>> The xsl is
>> <xsl:template match="sb:ref">
>>          <xsl:message terminate="no">Outputting a table</xsl:message>
>> <table>
>> table
>> <xsl:variable name="phaseName"><xsl:value-of select="@bean"
>> /></xsl:variable>
>> <xsl:variable name="fileName"><xsl:value-of
>> select="document($tempFileName)/phases/phase[@phaseName=$phaseName]"
>> /></xsl:variable>
>> <xsl:variable name="resourceName"><xsl:value-of
>> select="document($tempFileName)/phases/phase[@phaseName=$phaseName]/@resourceName"
>> /></xsl:variable>
>>
>> <caption><xsl:value-of select="$phaseName" /> from <xsl:value-of
>> select="$resourceName" /></caption>
>> <tr>
>> <td class="header">Bean Name</td><td class="header">Plugin Name</td><td
>> class="header">DataStore Name</td>
>> </tr>
>> <!-- <xsl:apply-templates select="document($fileName)/sb:beans/sb:bean"
>> /> -->
>>   <xsl:apply-templates
>> select="document($fileName)/sb:beans/sb:bean/sb:property[@name='plugins']/sb:list"
>> mode="plug-in"/>
>>
>> </table>
>> </xsl:template>
>>
>>
>>
>>
>> --
>> Ron Wheeler
>> President
>> Artifact Software Inc
>> email: [hidden email]
>> skype: ronaldmwheeler
>> phone: 866-970-2435, ext 102
>>
>>
>> ------------------------------------------------------------------------------
>> Site24x7 APM Insight: Get Deep Visibility into Application Performance
>> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
>> Monitor end-to-end web transactions and take corrective actions now
>> Troubleshoot faster and improve end-user experience. Signup Now!
>> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
>> _______________________________________________
>> saxon-help mailing list archived at http://saxon.markmail.org/
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/saxon-help
>
>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> _______________________________________________
> saxon-help mailing list archived at http://saxon.markmail.org/
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/saxon-help
>


--
Ron Wheeler
President
Artifact Software Inc
email: [hidden email]
skype: ronaldmwheeler
phone: 866-970-2435, ext 102


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help 
Reply | Threaded
Open this post in threaded view
|

Re: Saxon finding extra data.

Michael Kay
>
> After I posted it here, I was told (in a private e-mail rather than on
> the list) that it was more appropriate to post it on StackOverflow, so I
> did which, of course, resulted in double posting.

I saw it on SO before I saw it here.
>
> I am not sure if my question is about Saxon or XSLT but I am certainly
> open to any suggest about why you think my code might pick up a random
> bits of unrelated XML from elements parallel to what I expected.

By far the most common cause is that the built-in templates are being activated.
>
>
> I have already extracted what I think is the minimal section of the XSLT

It's minimal if we can run it and it demonstrates the problem. If it's a fragment that we can't run, then it's too small, and we can't debug it in isolation because you can't tell what XSLT will do unless you can see all the template rules.
>  
>

Regards and welcome to the world of XSLT!

Michael Kay
Saxonica

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help 
Reply | Threaded
Open this post in threaded view
|

Re: Saxon finding extra data.

Ron Wheeler
Thanks
I think that you are right.
I did post the whole files on the blog reference in case anyone wanted
to give it a try.

I think that you are right about the built-in templates.
I made a "more minimal" version that just handles 1 Spring configuration
file so I could remove the <xsl:result-document and use XALAN to debug.

The error happens in XALAN as well but it says that it ran a template at
line 0 so that points to the built-in templates.

So it is not a Saxon problem!

Thanks for all the help.
It pointed me in the right direction which I am sure will be the key to
solving this.

Ron


On 19/02/2016 9:50 AM, Michael Kay wrote:

>> After I posted it here, I was told (in a private e-mail rather than on
>> the list) that it was more appropriate to post it on StackOverflow, so I
>> did which, of course, resulted in double posting.
> I saw it on SO before I saw it here.
>> I am not sure if my question is about Saxon or XSLT but I am certainly
>> open to any suggest about why you think my code might pick up a random
>> bits of unrelated XML from elements parallel to what I expected.
> By far the most common cause is that the built-in templates are being activated.
>>
>> I have already extracted what I think is the minimal section of the XSLT
> It's minimal if we can run it and it demonstrates the problem. If it's a fragment that we can't run, then it's too small, and we can't debug it in isolation because you can't tell what XSLT will do unless you can see all the template rules.
>>  
>>
> Regards and welcome to the world of XSLT!
>
> Michael Kay
> Saxonica
>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> _______________________________________________
> saxon-help mailing list archived at http://saxon.markmail.org/
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/saxon-help
>


--
Ron Wheeler
President
Artifact Software Inc
email: [hidden email]
skype: ronaldmwheeler
phone: 866-970-2435, ext 102


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help 
Reply | Threaded
Open this post in threaded view
|

Re: Saxon finding extra data.

Ron Wheeler
In reply to this post by Michael Kay
Thanks for the push in the right direction.
I made a report that just lists just one Spring configuration file and
looked for information about built-in templates

I found the leaking elements following the hint at
http://stackoverflow.com/questions/3360017/why-does-xslt-output-all-text-by-default
I added a catchall template to find out if it was a leak.
That enabled me to identify and cut off the source of the leak.

In spite of your good guidance, I will start my next quest on
StackOverflow and post here only if it turns out to be a Saxon-specific
issue.

Thanks for everyone's patience.

Ron
On 19/02/2016 9:50 AM, Michael Kay wrote:

>> After I posted it here, I was told (in a private e-mail rather than on
>> the list) that it was more appropriate to post it on StackOverflow, so I
>> did which, of course, resulted in double posting.
> I saw it on SO before I saw it here.
>> I am not sure if my question is about Saxon or XSLT but I am certainly
>> open to any suggest about why you think my code might pick up a random
>> bits of unrelated XML from elements parallel to what I expected.
> By far the most common cause is that the built-in templates are being activated.
>>
>> I have already extracted what I think is the minimal section of the XSLT
> It's minimal if we can run it and it demonstrates the problem. If it's a fragment that we can't run, then it's too small, and we can't debug it in isolation because you can't tell what XSLT will do unless you can see all the template rules.
>>  
>>
> Regards and welcome to the world of XSLT!
>
> Michael Kay
> Saxonica
>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> _______________________________________________
> saxon-help mailing list archived at http://saxon.markmail.org/
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/saxon-help
>


--
Ron Wheeler
President
Artifact Software Inc
email: [hidden email]
skype: ronaldmwheeler
phone: 866-970-2435, ext 102


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
saxon-help mailing list archived at http://saxon.markmail.org/
[hidden email]
https://lists.sourceforge.net/lists/listinfo/saxon-help