BetweenPageBreaks
Jump to navigation
Jump to search
This stylesheet iteratively transforms the content between two page breaks in TEI to generate an HTML output that is put in a specific file (one output per page), with the purpose of creating a navigation allowing one to browse through pages.
The work has been done under my supervision by Solenne Coutagne, Master student at Ecole Naitonal des Chartes.
Laurent Romary
Input: a TEI document with all pages numbered (@n) and pointing to a scan (@facs).
Output: a series of HTML documents
Note: one of the outputs is a verbatim transform of the source, which is made by means of the xmlverbatimwrapper.xsl stylesheet, easy to find online.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xsl:stylesheet [<!ENTITY nbsp " ">]> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:tei="http://www.tei-c.org/ns/1.0" exclude-result-prefixes="tei"> <!-- I import the xslt who is usefull for the XML-Datei --> <xsl:import href="xmlverbatimwrapper.xsl"/> <xsl:output indent="yes" method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <!-- a template who creates the html structure of the menu --> <xsl:template name="menu"> <!-- the header of the html page --> <div id="header"> <!-- the first part of the header --> <div id="bandeau"> <!-- link to the homepage on the picture "Nachwuchsgruppe Berliner Intellektuelle" --> <a href="../../accueil3.html"> <img id="image_bandeau" src="../../bandeau_petit.jpg" alt="bandeau"/> </a> <!-- choice between the languages --> <div id="links"> <a>Deutsch</a> <a> English</a> <!-- the pictures to the partnerships : emmy noerther, humboldt...--> <a href="http://www.dfg.de/foerderung/faq/emmy_noether_faq/index.html"> <img src="../../emmy_noether.jpg" alt="Emmy Noether Program"/> </a> <a href="http://www.hu-berlin.de/"> <img src="../../humboldt.jpg" alt="Humboldt Universität zu Berlin"/> </a> </div> </div> <!-- the second part : the menus --> <!-- menu for the different projects --> <div id="projekte"> <ul class="menu"> <li> <a class="unter_projekt" href="../../franzosen_in_berlin/franzosen_in_berlin.html">FRANZOSEN IN BERLIN</a> </li> <li> <a class="unter_projekt" href="../../wissenchaft_und_politik/wissenchaft_und_politik.html" >WISSENCHAFT & POLITIK</a> </li> <li> <a class="unter_projekt" href="../../romantische_schluesseltexte/romantische_schluesseltexte.html" >ROMANTISCHE SCHLÜSSELTEXTE</a> </li> <li> <a class="unter_projekt" href="../../freitag_gesellschaft/freitag_gesellschaft.html" >FREITAG-GESELLSCHAFT</a> </li> <li> <a class="unter_projekt" href="../../tieckiana/tieckiana.html">TIECKIANA</a> </li> </ul> </div> <!-- the second menu --> <div id="menu"> <ul class="menu"> <li> <a class="item_menu" href="">Editorische Richtlinien</a> </li> <li> <a class="item_menu" href="">Briefe</a> <ul> <li> <a class="item_menu">nach Jahr</a> </li> <li> <a class="item_menu">nach Ort</a> </li> <li> <a class="item_menu">nach Besitzer</a> </li> <li> <a class="item_menu">nach Absender</a> </li> <li> <a class="item_menu">nach Adressat</a> </li> </ul> </li> <li> <a class="item_menu" href="">Suche</a> <ul> <li> <a href="" class="item_menu">Einfache Suche</a> </li> <li> <a href="" class="item_menu">Erweiterte Suche</a> </li> </ul> </li> <li> <a class="item_menu" href="">Kontakt</a> </li> <li> <a class="item_menu" href="">Aktuell</a> </li> </ul> </div> </div> <!-- the titel of the letter --> <div id="titel"> <a href="javascript:DivStatus( 'mondiv', '1' )"> <xsl:value-of select="normalize-space(//tei:titleStmt/tei:title)"/> </a> </div> <!-- when we click on the titel, a hidden div appears with some metadata (all the respStmt and the msIdentifier from the institution to the idno). --> <div name="mondiv1" id="mondiv1" class="cachediv"> <div id="divcache"> <xsl:for-each select="//tei:respStmt"> <xsl:value-of select="concat(tei:resp, ': ', tei:persName | tei:orgName)"/> <br/> </xsl:for-each> <!-- when one of these elements has an other element after, we scribe a comma. when there isn't any brother element : a point. --> <xsl:if test="//tei:msIdentifier/tei:institution"> <xsl:choose> <xsl:when test="//tei:institution/following-sibling::node()"> <xsl:value-of select="concat(//tei:msIdentifier/tei:institution, ',')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat(//tei:msIdentifier/tei:institution, '.')"/> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:if test="//tei:msIdentifier/tei:repository"> <xsl:choose> <xsl:when test="//tei:repository/following-sibling::node()"> <xsl:value-of select="concat(//tei:msIdentifier/tei:repository, ',')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat(//tei:msIdentifier/tei:repository, '.')"/> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:if test="//tei:msIdentifier/tei:collection"> <xsl:choose> <xsl:when test="//tei:collection/following-sibling::node()"> <xsl:value-of select="concat(//tei:msIdentifier/tei:collection, ',')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat(//tei:msIdentifier/tei:collection, '.')"/> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:if test="//tei:msIdentifier/tei:idno"> <xsl:value-of select="concat(//tei:msIdentifier/tei:idno, '.')"/> </xsl:if> </div> </div> </xsl:template> <!-- I continue with a template with a @name in order to avoid the duplication caused by the using of <xsl:result-document> (XSLT 2.0). I repeated twice the same structure of the document html while it was almost the same. the only difference was the links. I have so a template with @name=structure (for structure of the html document).--> <xsl:template name="structure"> <!-- I create a parameter in order to differenciate the two output of the transcription : the first one true to the original, the second one more readable. the third one is the source code of the tei document.--> <xsl:param name="output"/> <!-- structure of the html document. In the <head>, all the links for css/javascript documents--> <html> <head> <title> <xsl:value-of select="normalize-space(//tei:titleStmt/tei:title)"/> </title> <link rel="stylesheet" type="text/css" href="../../test.css"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script type="text/javascript" src="../../mojozoom.js"/> <script src="FancyZoom 1.1/js-global/FancyZoom.js" type="text/javascript"/> <script src="FancyZoom 1.1/js-global/FancyZoomHTML.js" type="text/javascript"/> <script src="../../cachediv.js" type="text/javascript"/> </head> <body onload="initialize()"> <!-- I call the template @name=menu--> <xsl:call-template name="menu"/> <!-- the place of the digitalised picture in a div @id="facs"--> <div id="facs"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="@facs"/> </xsl:attribute> <xsl:element name="img"> <xsl:attribute name="src"> <!-- the picture on the website is more little that the real digitalised picture. I call the little picture : the name of the big picture with a "k" at the end ("k" for "klein"). for example : 00000855k.jpg. --> <xsl:value-of select="concat(substring-before(@facs, '.jpg'), 'k', '.jpg')"/> </xsl:attribute> <!-- this attribute is defined by the mojozoom.js (a javascript file) for the zoom and put a link to the big picture.--> <xsl:attribute name="data-zoomsrc"> <xsl:value-of select="@facs"/> </xsl:attribute> <xsl:attribute name="alt"> <xsl:value-of select="bild"/> </xsl:attribute> </xsl:element> </xsl:element> </div> <div id="transkription"> <!-- menu for the choice between the three versions of the transcription. --> <div id="inhaltsverzeichnis"> <p class="type_transcription"> <!-- I define an url for the three versions.--> <a href="xml.html" class="item_menu">XML-Datei </a> </p> <p class="type_transcription"> <a href="page_{@n}_korrigiert.html" class="item_menu"> Kritisch</a> </p> <p class="type_transcription"> <a href="page_{@n}_urtext.html" class="item_menu">Diplomatisch</a> </p> </div> <br/> <br/> <div id="text"> <!-- when there is a pagebreak before the place where we are --> <!-- a variable in order to be a little more concise --> <xsl:variable name="letzte_seite" select="preceding::tei:pb[1]"/> <xsl:if test="$letzte_seite"> <!-- a choice : if the parameter is 'urtext' so I do this link to the version true to the original --> <xsl:choose> <xsl:when test="$output='urtext'"> <a href="page_{$letzte_seite/@n}_urtext.html">[Seite <xsl:value-of select="$letzte_seite/@n"/>] </a> <br/> </xsl:when> <!-- if it's 'korrigiert', I do an other link (to the previous page of the readable version). --> <xsl:when test="$output='korrigiert'"> <a href="page_{$letzte_seite/@n}_korrigiert.html">[Seite <xsl:value-of select="$letzte_seite/@n"/>] </a> <br/> </xsl:when> </xsl:choose> </xsl:if> <!-- apply-templates on the body. We can see in this apply-templates, three mentions of parameters. We know already what is output. anfang and ende : i use those parameters in order to have one html document for one page of letter. anfang : where we are ende : the next pagebreak--> <xsl:apply-templates select="//tei:body"> <xsl:with-param name="anfang" select="."/> <xsl:with-param name="ende" select="following::tei:pb[1]"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> <br/><br/><br/><br/><br/> <!-- the same thing for the next page that for the previous page. cf supra.--> <xsl:variable name="naechste_seite" select="following::tei:pb[1]"/> <xsl:if test="$naechste_seite"> <xsl:choose> <xsl:when test="$output='urtext'"> <a href="page_{$naechste_seite/@n}_urtext.html">[Seite <xsl:value-of select="$naechste_seite/@n"/>] </a> <br/> <br/> </xsl:when> <xsl:when test="$output='korrigiert'"> <a href="page_{$naechste_seite/@n}_korrigiert.html">[Seite <xsl:value-of select="$naechste_seite/@n"/>] </a> <br/> <br/> </xsl:when> </xsl:choose> </xsl:if> </div> </div> </body> </html> </xsl:template> <!-- and now, the result-document. Each time I meet an element <pb>, XSLT create a document HTML with a different parameter called "output". --> <xsl:template match="/"> <xsl:for-each select="//tei:pb"> <xsl:result-document method="html" href="page_{@n}_urtext.html"> <xsl:call-template name="structure"> <xsl:with-param name="output" select="'urtext'"/> </xsl:call-template> </xsl:result-document> </xsl:for-each> <xsl:for-each select="//tei:pb"> <xsl:result-document method="html" href="page_{@n}_korrigiert.html"> <xsl:call-template name="structure"> <xsl:with-param name="output" select="'korrigiert'"/> </xsl:call-template> </xsl:result-document> </xsl:for-each> <xsl:result-document method="html" href="xml.html"> <html> <head> <title> <xsl:value-of select="normalize-space(//tei:titleStmt/tei:title)"/> </title> <link rel="stylesheet" type="text/css" href="../../test.css"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <xsl:call-template name="menu"/> <div id="facs"> <xsl:for-each select="//tei:pb"> <img> <xsl:attribute name="src"> <xsl:value-of select="concat(substring-before(@facs, '.jpg'), 'k', '.jpg')" /> </xsl:attribute> </img> </xsl:for-each> </div> <div id="transkription"> <!-- menu for the choice between the three versions of the trancription. --> <div id="inhaltsverzeichnis"> <p class="type_transcription"> <a href="xml.html">XML-Datei</a> </p> <p class="type_transcription"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="concat('page_', //tei:div[@type='transkription']/*[1]/@n, '_korrigiert.html')" /> </xsl:attribute> <xsl:text>Kritisch</xsl:text> </xsl:element> </p> <p class="type_transcription"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="concat('page_', //tei:div[@type='transkription']/*[1]/@n, '_urtext.html')" /> </xsl:attribute> <xsl:text>Diplomatisch</xsl:text> </xsl:element> </p> </div> <div id="text"> <xsl:apply-templates select="." mode="xmlverb"/> </div> </div> </body> </html> </xsl:result-document> </xsl:template> <!-- A template for the node text. And for all the templates below, this is the same scheme. We declare the three parameters : anfang, ende and output. And then : <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> -> when we are before the pagebreak where we are (not(following::tei:pb[@n=$anfang/@n])) : no treatment. When we are after the next pagebreak on which we are (not(preceding::tei:pb[@n=$ende/@n])) : no treatment. In other words, when we are not before the pb or after the next pagebreak, we apply a treatment. In this case, value-of on all the text --> <xsl:template match="text()"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:value-of select="."/> </xsl:if> </xsl:template> <!-- I take care now of the layout elements. --> <!-- paragraphs...--> <xsl:template match="tei:p"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <p> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p> </xsl:if> </xsl:template> <!-- les linebreaks...--> <xsl:template match="tei:lb"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <br/> </xsl:if> </xsl:template> <!-- a template "rendition" that I will call for all the element who can have a @rendition attribute --> <xsl:template name="rendition"> <xsl:param name="rend"/> <xsl:if test="$rend != ''"> <xsl:attribute name="class"> <xsl:for-each select="tokenize($rend, '\s')"> <!-- pour chacun des mots obtenus, on sort la partie qui suit le caractère #--> <xsl:value-of select="concat(substring-after(., '#'), ' ')"/> <xsl:if test="position() != last()"/> </xsl:for-each> </xsl:attribute> </xsl:if> </xsl:template> <!-- additions --> <xsl:template match="//tei:add[not(ancestor::tei:subst)]"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:choose><xsl:when test="$output='urtext'"> <p> <xsl:call-template name="rendition"> <xsl:with-param name="rend" select="@rendition"/> </xsl:call-template> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p></xsl:when> <xsl:otherwise> <p> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> <xsl:template match="tei:subst/tei:add"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:if test="$output='urtext'"> <xsl:choose> <xsl:when test="@place='above'"> <sup> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </sup> </xsl:when> <xsl:when test="@place='below'"> <sub> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </sub> </xsl:when> <xsl:otherwise> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:if> <xsl:if test="$output='korrigiert'"> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </xsl:if> </xsl:if> </xsl:template> <!-- the deletions : presents only in the true to original version. In other case, they don't appears.--> <xsl:template match="tei:del"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:if test="$output='urtext'"> <del> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </del> </xsl:if> </xsl:if> </xsl:template> <!-- les underlinings : underlining only in true to original version. In the other case, we treat the element but only in order to the words appears, not the underlining. --> <xsl:template match="//tei:hi[@rend='underline']"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:choose> <xsl:when test="$output='urtext'"> <u> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </u> </xsl:when> <xsl:otherwise> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="korrigiert"/> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> <xsl:template match="tei:hi[@rend='italic']"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <i> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </i> </xsl:if> </xsl:template> <!--opener. --> <xsl:template match="tei:dateline"> <xsl:param name="output"/> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:choose> <xsl:when test="//tei:dateline[@rendition] and $output='urtext'"> <p> <xsl:call-template name="rendition"> <xsl:with-param name="rend" select="@rendition"/> </xsl:call-template> <xsl:apply-templates select="tei:settlement"> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> <xsl:apply-templates select="tei:date"> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates></p> </xsl:when> <!-- otherwise, we use only a p element --> <xsl:otherwise> <p> <xsl:apply-templates select="tei:settlement"> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> <xsl:apply-templates select="tei:date"> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates></p> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> <!-- salute and signed --> <xsl:template match="tei:salute | tei:signed"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:choose> <xsl:when test="//tei:dateline[@rendition] and $output='urtext'"> <p> <xsl:call-template name="rendition"> <xsl:with-param name="rend" select="@rendition"/> </xsl:call-template> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p> </xsl:when> <xsl:otherwise> <p> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> <!--gap und unclear--> <xsl:template match="tei:gap"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:text>[...]</xsl:text> </xsl:if> </xsl:template> <xsl:template match="tei:unclear"> <xsl:param name="output"/> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:value-of select="concat('[', normalize-space(.), ']')"/> </xsl:if> </xsl:template> <!-- abbreviations, regularisations, corrections : all the elements in TEI using <choice>.--> <xsl:template match="//tei:expan | //tei:reg | //tei:corr"> <xsl:param name="output"/> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:if test="$output='korrigiert'"> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </xsl:if> </xsl:if> </xsl:template> <xsl:template match="//tei:abbr | //tei:orig | //tei:sic"> <xsl:param name="output"/> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <xsl:if test="$output='urtext'"> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> </xsl:apply-templates> </xsl:if> </xsl:if> </xsl:template> <!-- Notes of the document, for the moment, only a <p>. --> <xsl:template match="tei:note[not(@resp)]"> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:param name="output"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <p> <xsl:apply-templates> <xsl:with-param name="anfang" select="$anfang"/> <xsl:with-param name="ende" select="$ende"/> <xsl:with-param name="output" select="$output"/> </xsl:apply-templates> </p> </xsl:if> </xsl:template> <!--Notes of the researchers. --> <!--I put an anchor a number and an "info-bulle"--> <xsl:template match="tei:note[@resp]"> <xsl:param name="output"/> <xsl:param name="anfang"/> <xsl:param name="ende"/> <xsl:if test="not(following::tei:pb[@n=$anfang/@n]) and not(preceding::tei:pb[@n=$ende/@n])"> <a class="info_anmerkung" href="#"> <sup> <xsl:value-of select="count(preceding::tei:note) + 1"/> </sup> <span> <xsl:value-of select=".[@xml:id]"/> </span> </a> </xsl:if> </xsl:template> </xsl:stylesheet>