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

AW: AW: Refinement: creating namespaces in a generated

Subject: AW: AW: Refinement: creating namespaces in a generated script
From: "Fries, Markus, fiscus GmbH, Bonn" <M.Fries@xxxxxxxxxxx>
Date: Wed, 18 Sep 2002 17:03:47 +0200
xslt apply templates variable
Hi again,

close guess ;)

I get along somehow, it does not have to be a pure xsl solution. If you are
interested in what I'm doing, you can have a look at the whole stuff... some
comments are in German though.

I take an OpenOffice/StarOffice (content.xml) file as input. In the
userfield U1 I reference both a xsl-template T1 and the data D which should
be transformed. My first script generates a new script (generated.xsl). 

The second script takes the same input file. It includes the referenced
xsl-template T1, and contains a template T2 which matches the userfield U1.
The template T2 shall replace the userfield by applying T1 on D. The
references are text in the content.xml file, but they are pathes with
namespaces in this script. Thats the problem.

Better do not start reading below this line.



<!-- generateTemplate.xsl -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xslt="xslt.xsl"
  xmlns:text="http://openoffice.org/2000/text"
  version="1.0">
  <xsl:output method="xml"/>
  <xsl:namespace-alias stylesheet-prefix="xslt" result-prefix="xsl"/>
  
  <xsl:template match="/">
    <xslt:stylesheet version="1.0">
      <xslt:include href="insertVariables.xsl"/>  <!-- contains recursive
copy -->


      <!-- include module referenced in input (start with two underscores
__script1, __script2) -->
      <xsl:for-each select="//text:variable-set[substring(@text:name, 1,
2)='__']">
        <xslt:include>
          <xsl:attribute name="href"><xsl:value-of
select="@text:name"/>.xsl</xsl:attribute>
        </xslt:include>
      </xsl:for-each>    

      <xsl:for-each select="//text:variable-set[substring(@text:name, 1,
2)='__']">
        <xslt:template>
          <xsl:variable
name="s">text:variable-set[@text:name='</xsl:variable>
          <xsl:variable name="t">'</xsl:variable>
          <xsl:variable name="u"><xsl:value-of select="."/></xsl:variable>
<!-- Path -->


          <xsl:attribute name="match"><xsl:value-of select="concat($s,
@text:name, $t, ' and text()=', $t , $u, $t, ']')"
              /></xsl:attribute>

          <xslt:apply-templates>
            <xsl:attribute name="select">
              <xsl:value-of select="concat('$variables', $u)"/> 
            </xsl:attribute>
            <xsl:attribute name="mode"> <xsl:value-of select="@text:name"/>
</xsl:attribute>
          </xslt:apply-templates>
        </xslt:template>
      </xsl:for-each>    


    </xslt:stylesheet>
  </xsl:template>


<!-- =========================

  <xsl:template name="add-namespaces">
    <xsl:param name="pfad"/>
    <xsl:param name="current-namespace"/>
    <xsl:if test="$pfad != ''"> 
    <xsl:if test="$current-namespace != substring-before($pfad, ':')">
      <token><xsl:value-of select="substring-before($pfad, ':')"/></token>

    </xsl:if>
    <xsl:call-template name="add-namespaces">
      <xsl:with-param name="pfad" select="substring-after($pfad, '/')"/>
      <xsl:with-param name="current-namespace"
select="substring-before($pfad, ':')"/>
    </xsl:call-template>

  </xsl:if>
  </xsl:template>
</xsl:stylesheet>

 ============================== -->

<!-- generated -->

<?xml version="1.0" encoding="UTF-8"?>
<xslt:stylesheet xmlns:xslt="http://www.w3.org/1999/XSL/Transform"
xmlns:text="http://openoffice.org/2000/text" version="1.0">
<xslt:apply-templates select="$namespaces"/>
<xslt:include href="insertVariables.xsl"/>
<xslt:include href="__Adressen_jeweilsInZeile.xsl"/>

  
<xslt:template
match="text:variable-set[@text:name='__Adressen_jeweilsInZeile' and 
text()='/TOFalladressbuch:TOFalladressbuch/TOFalladressbuch:BeteiligteBehoer
den[1]
/TOFABeteiligteBehoerde:TOFABeteiligteBehoerde/TOFABeteiligteBehoerde:Adress
en']">

  <xslt:apply-templates
select="$variables/TOFalladressbuch:TOFalladressbuch/TOFalladressbuch:Beteil
igteBehoerden[1]
/TOFABeteiligteBehoerde:TOFABeteiligteBehoerde/TOFABeteiligteBehoerde:Adress
en" mode="__Adressen_jeweilsInZeile"/>
</xslt:template>
</xslt:stylesheet>



<!-- content.xml -->
...
<text:variable-set text:name="__Adressen_jeweilsInZeile"
text:value-type="string">/TOFalladressbuch:TOFalladressbuch/TOFalladressbuch
:BeteiligteBehoerden[1]/TOFABeteiligteBehoerde:TOFABeteiligteBehoerde/TOFABe
teiligteBehoerde:Adressen</text:variable-set>
...


<!-- insertVariables -->

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:text="http://openoffice.org/2000/text"
  xmlns:variables="http://de.fiscus.sfs.druck.variables"
  version="1.0">

  <xsl:output method="xml"/>

  <!-- Dieses Skript benötigt zwei Eingaben:
       - Das StarOffice Dokument, in dem die Ersetzungen vorgenommen werden.
Dieses wird als das normale Eingabedokument behandelt.
       - Die Variablen, die eingesetzt werden bzw. Textbausteine steuern.
Diese werden mit der document() eingelesen und in der 
         globalen Variable 'variables' gespeichert. Im Umwandler wird
Transformer mit setURIResolver ein eigener Resolver übergeben,
         der die URI 'variables' abfängt, und die benötigten xml-Daten
übergibt.  
       -->       
  <xsl:variable name="variables" select="document('variables')"/>


  <xsl:template match="/">
    <xsl:message>processing content.xml</xsl:message>
    <xsl:apply-templates/>    
  </xsl:template>

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

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

  <xsl:template match="text()">
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="text:variable-set">
    <xsl:copy>
      <!-- kopiere alle Attribute -->
      <xsl:apply-templates select="@*"/>      
      <!-- wenn nicht genau ein enthaltener text node, Abbruch mit
Fehlermeldung -->
      <!--
      <xsl:if test="not text()">
        <xsl:message terminate="yes">
          Mehr als ein Textknoten in Variablendeklaration: <xsl:value-of
select=""/>
        </xsl:message>
      </xsl:if>
      -->
      <!-- wenn sonstige nodes enthalten, Abbruch mit Fehlermeldung -->
      <xsl:if test="count(*) > 1">
        <xsl:message terminate="yes">
          Mehr als ein Knoten in Variablendeklaration: <xsl:value-of
select="."/>
        </xsl:message>        
      </xsl:if>

      <!-- Ersetzung des Namens mit Wert aus variables -->
      <xsl:choose> 
        <xsl:when
test="$variables/variables:variables/@*[local-name(.)=current()/@text:name]"
>
          <xsl:message>when</xsl:message>
          <xsl:value-of
select="$variables/variables:variables/@*[local-name(.)=current()/@text:name
]"/> 
        </xsl:when>
        <xsl:otherwise>
          <xsl:message>otherwise</xsl:message>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
-----Ursprüngliche Nachricht-----
Von: bryan [mailto:bry@xxxxxxxxxx]
Gesendet: Mittwoch, 18. September 2002 16:16
An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Betreff: RE: AW: Refinement:  creating namespaces in a generated
script


>> So the namespace declaration is not needed in content.xml 
>Well I don't understand your problem at all then.
>I thought the idea was to run your generated XSLT over this file.
>If so, it'll need to be namespace well formed. If not, what's it got to
>do with your problem at hand?

I got the impression what he wants to do is to generate an open office
file and to put his own namespaced elements in there, i.e that the
namespaces he was worried about where not namespaces found inside open
office's xml format, hence the ns1:foo | ns2:foo and so forth example.


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.