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

Re: is it possible to simulate <xsl:import> precedence

Subject: Re: is it possible to simulate <xsl:import> precedence within a single stylesheet file?
From: "Chris Papademetrious christopher.papademetrious@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 25 Apr 2023 20:19:16 -0000
Re:  is it possible to simulate <xsl:import> precedence
Hi Martin,

Thanks for trying the SEF experiment! It sounds like I would lose the ability
to interactively fiddle with the code, which would defeat the purpose of my
exercise. Still, I learned something new today!


Hi Michael,

Thatbs pretty cool how Saxon constructs the global sorted list of templates.
I think the hard part for me to emulate this is parsing the match expressions
in XSLT to compute implicit priority values. But then I thought perhaps the
<xsl:import> precedence might not actually matter much for plugin development,
since (1) later overrides earlier for the same priority, and (2) I typically
specify an explicit higher priority when I override something in the base
processing. So, I decided to punt on precedence emulation now and see what the
next hurdle to fiddling with DiTA-OT processing is.

I wrote a simple stylesheet to inline imported/included XSLT files:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform
exclude-result-prefixes="#all" version="3.0">

  <!-- apply multiple processing modes ("inline", "flatten") -->
  <xsl:template match="/">
    <xsl:variable name="result" as="document-node()" select="."/>
    <xsl:variable name="result" as="document-node()">
      <xsl:apply-templates select="$result" mode="inline"/>
    </xsl:variable>
    <xsl:variable name="result" as="document-node()">
      <xsl:apply-templates select="$result" mode="flatten"/>
    </xsl:variable>
    <xsl:sequence select="$result"/>
  </xsl:template>

  <!-- inline imported/included stylesheets -->
  <xsl:mode name="inline" on-no-match="shallow-copy"/>
  <xsl:template match="(xsl:import|xsl:include)[@href]" mode="inline">
    <xsl:variable name="doc" as="document-node()"
select="document(resolve-uri(@href, .))"/>
    <xsl:apply-templates select="$doc" mode="#current"/>
  </xsl:template>

  <!-- flatten nested stylesheets -->
  <xsl:mode name="flatten" on-no-match="shallow-copy"/>
  <xsl:template match="/*//xsl:stylesheet" mode="flatten">
    <xsl:apply-templates select="node()" mode="#current"/>  <!-- unwrap nested
stylesheet elements -->
  </xsl:template>
  <xsl:template match="/xsl:stylesheet" mode="flatten">
    <xsl:copy>
      <xsl:apply-templates select="namespace::*|//xsl:stylesheet/namespace::*"
mode="#current"/>  <!-- pull nested stylesheet namespaces to the top -->
      <xsl:apply-templates select="@*|//xsl:stylesheet/@*" mode="#current"/>
<!-- pull nested stylesheet attributes to the top -->
      <xsl:apply-templates select="node()" mode="#current"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

This created a single stylesheet b hooray! But I could not use it in an
XSLT-fiddle because document() calls did not resolve. For example,

<xsl:variable name="variableFiles"
select="document($variableFiles.url)/langlist/lang" as="element(lang)*"/>
<xsl:sequence select="document(., $variableFiles[1])/*/*[@name = $id or @id =
$id]"/>
<xsl:variable name="msgdoc" select="document('platform:/config/messages.xml')"
as="document-node()?"/>
<xsl:variable name="targetDoc" as="document-node()?"
select="document($resourcePart, root(if(exists($baseContextElement)) then
$baseContextElement else $linkElement))"/>

I think this could be handled with some more work in the inliner stylesheet,
but that is a project for a later day. If I get something working, Ibll
reply back here to share it!


  *   Chris


XSL-List info and
archive<https://urldefense.com/v3/__http:/www.mulberrytech.com/xsl/xsl-list__
;!!A4F2R9G_pg!cEQO8g7FjKoj1kmYZuy-ZeKAp3yRgu6rpg-LTWD53jV984zbLhdtWFPghAPkocn
Q-ZHlK05gSwpX-GJ2D1SDojR9prlJH25FzdiZsUVct4mJvEEUOA9-$>
EasyUnsubscribe<https://urldefense.com/v3/__http:/lists.mulberrytech.com/unsu
b/xsl-list/3380743__;!!A4F2R9G_pg!cEQO8g7FjKoj1kmYZuy-ZeKAp3yRgu6rpg-LTWD53jV
984zbLhdtWFPghAPkocnQ-ZHlK05gSwpX-GJ2D1SDojR9prlJH25FzdiZsUVct4mJvPZ0yIXb$>
(by email<>)

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.