XSLT 2.0-Code zum Projekt »planX4L« (planX4L.xsl)

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3   xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="fn xs">
  4 
  5   <!-- XSL-Transformation zur Ausgabe der LAPIS-Planungsdatei im DOS-ASCII-Format by T. Meinike 06/11 … 12/11 -->
  6   
  7   <!-- Ausgabe-Kodierung "IBM437" entspricht dem LAPIS-ASCII-Format -->
  8   <xsl:output method="text" encoding="IBM437" media-type="text/plain"/>
  9 
 10   <!-- DOS/Windows-Zeilenumbruch \r\n -->
 11   <xsl:variable name="crlf" select="'&#xD;&#xA;'"/>
 12   <!-- Matrikel-Trennzeile: true() | false() -->
 13   <xsl:variable name="ma_trenner" select="false()"/>
 14 
 15   <xsl:template match="stundenplanung">
 16     <!-- Kopfzeilen -->
 17     <xsl:value-of select="fn:concat('L.A.P.I.S 2.5e', $crlf)"/>
 18     <xsl:value-of select="fn:concat('DATEN', $crlf)"/>
 19     <xsl:variable name="datum" select="fn:format-date(fn:current-date(), '[D01].[M01].[Y0001]')"/>
 20     <xsl:variable name="lz" select="fn:string-join((for $i in 1 to 46 - fn:string-length(@info) return ' '), '')"/>
 21     <xsl:value-of select="fn:concat(@info, $lz, $datum, $crlf)"/>
 22     <!-- matrikel-Verarbeitung -->
 23     <xsl:apply-templates select="matrikel"/>      
 24   </xsl:template>
 25 
 26   <xsl:template match="matrikel">
 27     <!-- planung-Verarbeitung -->
 28     <xsl:apply-templates select="planung"/>
 29     <!-- Zeilenumbruch am Matrikel-Ende -->
 30     <xsl:if test="fn:position() != fn:last() and $ma_trenner">
 31       <xsl:value-of select="$crlf"/>
 32     </xsl:if>
 33   </xsl:template>
 34 
 35   <xsl:template match="planung">
 36     <!-- nur angebotene Fächer ausgeben -->
 37     <xsl:apply-templates select="fach[@ang = 'j']"/>      
 38   </xsl:template>
 39 
 40   <xsl:template match="fach">
 41     <!-- LV-Nummer -->
 42     <xsl:value-of select="fn:concat(ancestor::matrikel/@fb, ancestor::matrikel/@stgnr, ancestor::matrikel/@semester, @plannr)"/>
 43     <xsl:text>|</xsl:text>
 44 
 45     <!-- LV-Name -->
 46     <xsl:value-of select="fn:concat(art, ' ', planname)"/>
 47     <xsl:text>|</xsl:text>
 48 
 49     <!-- Matrikel -->
 50     <xsl:value-of select="fn:concat(ancestor::matrikel/@mname, ancestor::matrikel/@semester)"/>
 51     <xsl:text>|</xsl:text>
 52 
 53     <!-- Stunden -->
 54     <xsl:value-of select="art/@plansws"/>
 55     <xsl:text>|</xsl:text>
 56 
 57     <!-- Kopplung -->
 58     <xsl:choose>
 59       <xsl:when test="kopplung/@mit"><xsl:value-of select="kopplung/@mit"/></xsl:when>
 60       <xsl:when test="kopplung/@von"><xsl:text>!!!!!</xsl:text></xsl:when>
 61     </xsl:choose>
 62     <xsl:text>|</xsl:text>      
 63 
 64     <!-- Dozent -->
 65     <xsl:value-of select="fn:concat('F', dozent/@fb, ' ', dozent)"/>
 66     <xsl:text>|</xsl:text>      
 67 
 68     <!-- Tag+Block|Raum -->
 69     <xsl:for-each select="termin[@raum != '???/?/???' and @zeit != '??-??' and @tag != '???????']">
 70       <xsl:choose>
 71         <xsl:when test="@tag = 'Montag'"><xsl:text>Mo</xsl:text></xsl:when>
 72         <xsl:when test="@tag = 'Dienstag'"><xsl:text>Di</xsl:text></xsl:when>
 73         <xsl:when test="@tag = 'Mittwoch'"><xsl:text>Mi</xsl:text></xsl:when>
 74         <xsl:when test="@tag = 'Donnerstag'"><xsl:text>Do</xsl:text></xsl:when>
 75         <xsl:when test="@tag = 'Freitag'"><xsl:text>Fr</xsl:text></xsl:when>
 76         <xsl:when test="@tag = 'Samstag'"><xsl:text>Sa</xsl:text></xsl:when>
 77       </xsl:choose>
 78       <xsl:choose>
 79         <xsl:when test="@zeit = '07-09'"><xsl:text>1</xsl:text></xsl:when>
 80         <xsl:when test="@zeit = '09-11'"><xsl:text>2</xsl:text></xsl:when>
 81         <xsl:when test="@zeit = '11-13'"><xsl:text>3</xsl:text></xsl:when>
 82         <xsl:when test="@zeit = '13-15'"><xsl:text>4</xsl:text></xsl:when>
 83         <xsl:when test="@zeit = '15-17'"><xsl:text>5</xsl:text></xsl:when>
 84         <xsl:when test="@zeit = '17-19'"><xsl:text>6</xsl:text></xsl:when>
 85         <xsl:when test="@zeit = '19-21'"><xsl:text>7</xsl:text></xsl:when>
 86       </xsl:choose>
 87       <xsl:text>|</xsl:text>
 88       <!-- <xsl:value-of select="@raum"/> -->
 89       <xsl:value-of select="fn:concat(@raum, fn:string-join((for $i in 1 to 9 - fn:string-length(@raum) return ' '), ''))"/>
 90       <xsl:text>|</xsl:text>
 91     </xsl:for-each>
 92 
 93     <!-- Kommentar -->
 94     <xsl:choose>
 95       <xsl:when test="fn:string-length(kommentar) gt 0"><xsl:value-of select="fn:concat('\', kommentar)"/></xsl:when>
 96       <xsl:otherwise><xsl:text>\</xsl:text></xsl:otherwise>
 97     </xsl:choose>
 98     <xsl:text>|</xsl:text>
 99 
100     <!-- Teilnehmerzahl -->
101     <xsl:value-of select="@stud"/>
102     <xsl:text>|</xsl:text>
103 
104     <!-- LV-Art -->
105     <xsl:value-of select="art"/>
106     <xsl:text>|</xsl:text>
107       
108     <!-- Raumausstattung, praktisch immer leer, @ra ist optional -->
109     <xsl:if test="@ra">
110       <xsl:value-of select="@ra"/>
111     </xsl:if>
112     <xsl:text>|</xsl:text>
113       
114     <!-- Woche: wöchentlich / gerade / ungerade --> 
115     <xsl:choose>
116       <xsl:when test="termin[1]/@woche = 'w' or termin[1]/@woche = '?'"><xsl:text>1|1|0|A|65</xsl:text></xsl:when>
117       <xsl:when test="termin[1]/@woche = 'g'"><xsl:text>1|1|2|E|69</xsl:text></xsl:when>
118       <xsl:when test="termin[1]/@woche = 'u'"><xsl:text>1|1|1|I|73</xsl:text></xsl:when>
119     </xsl:choose>
120 
121     <!-- Zeilenumbruch am jeweiligen Datensatz-Ende -->
122     <xsl:value-of select="$crlf"/>
123 
124     <!--
125          Beispiel-Ergebniszeile:
126          2250110|VÜ AZ-Spr. I (HTML)|MTRWK1|4|1234567|F2 Meinike|Mo2|124/1/020|Mo3|124/1/020|\Test|25|VÜ||1|1|1|H|73         
127     -->
128 
129   </xsl:template>
130 
131 </xsl:stylesheet>

Code formatiert mit »Highlight 3.5«