f09f936661c021e33b431a8fda51bba1e8aba1c1
[irspy-moved-to-github.git] / xsl / irspy2zeerex.xsl
1 <?xml version="1.0"?>
2 <!--
3     $Id: irspy2zeerex.xsl,v 1.8 2006-10-30 14:55:27 sondberg Exp $
4
5     This stylesheet is used by IRSpy to map the internal mixed Zeerex/IRSpy
6     record format into the Zeerex record which we store.
7
8 -->
9 <xsl:stylesheet
10     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
11     xmlns:irspy="http://indexdata.com/irspy/1.0"
12     xmlns="http://explain.z3950.org/dtd/2.0/"
13     xmlns:explain="http://explain.z3950.org/dtd/2.0/"
14     exclude-result-prefixes="irspy explain"
15     version="1.0">
16
17   <xsl:output indent="yes"
18       method="xml"
19       version="1.0"
20       encoding="UTF-8"/>
21
22   <xsl:preserve-space elements="*"/>
23
24   <xsl:variable name="old_indexes" select="/*/explain:indexInfo/explain:index"/>
25   <xsl:variable name="use_attr_names" select="document('use-attr-names.xml')"/>
26
27   
28   <xsl:template match="node() | @*">
29     <xsl:copy>
30       <xsl:apply-templates select="@* | node()"/>
31     </xsl:copy>
32   </xsl:template>
33
34
35   <xsl:template match="/*">
36     <explain>
37       <xsl:apply-templates select="explain:serverInfo   |
38                                    explain:databaseInfo |
39                                    explain:metaInfo"/>
40                                    
41       <xsl:call-template name="insert-indexInfo"/>
42       <xsl:call-template name="insert-recordInfo"/>
43       <xsl:call-template name="insert-irspySection"/>
44     </explain>
45   </xsl:template>
46
47
48   <xsl:template name="insert-indexInfo">
49     <indexInfo>
50       <xsl:for-each select="/*/irspy:status/irspy:search">
51         <xsl:variable name="set" select="@set"/>
52         <xsl:variable name="ap" select="@ap"/>
53         <xsl:variable name="old"
54             select="$old_indexes[explain:map/explain:attr/@set = $set and
55                                  explain:map/explain:attr/text() = $ap]"/>
56         <xsl:choose>
57           <xsl:when test="$old">
58             <xsl:call-template name="insert-index-section">
59               <xsl:with-param name="title" select="$old/explain:title"/>
60             </xsl:call-template>
61           </xsl:when>
62           <xsl:otherwise>
63             <xsl:call-template name="insert-index-section"/>
64           </xsl:otherwise>
65         </xsl:choose>
66       </xsl:for-each>
67     </indexInfo>
68   </xsl:template>
69
70
71   <xsl:template name="insert-recordInfo">
72     <recordInfo>
73       <xsl:for-each select="/*/irspy:status/irspy:record_fetch[@ok = 1]">
74         <recordSyntax name="{@syntax}">
75           <elementSet name="F"/> <!-- FIXME: This should be probed too -->
76         </recordSyntax>
77       </xsl:for-each>
78     </recordInfo>
79   </xsl:template>
80
81
82   <xsl:template name="insert-irspySection">
83     <xsl:copy-of select="/*/irspy:status"/>
84   </xsl:template>
85
86
87   <xsl:template name="insert-index-section">
88     <xsl:param name="update" select="."/>
89     <xsl:param name="title">
90       <xsl:call-template name="insert-index-title">
91         <xsl:with-param name="update" select="$update"/>
92       </xsl:call-template>
93     </xsl:param>
94
95     <index>
96       <xsl:attribute name="search">
97         <xsl:choose>
98           <xsl:when test="$update/@ok = 1">true</xsl:when>
99           <xsl:otherwise>false</xsl:otherwise>
100         </xsl:choose>
101       </xsl:attribute>
102       <title primary="true" lang="en">
103         <xsl:value-of select="$title"/>
104       </title>
105       <map primary="true">
106         <attr type="1" set="{$update/@set}">
107           <xsl:value-of select="$update/@ap"/>
108         </attr>
109       </map>
110     </index>
111   </xsl:template>
112
113
114   <xsl:template name="insert-index-title">
115     <xsl:param name="update"/>
116     <xsl:variable name="name"
117                 select="$use_attr_names/*/map[@attr = $update/@ap and
118                                               @set = $update/@set]/@name"/>
119
120     <xsl:choose>
121       <xsl:when test="string-length($name) &gt; 0"><xsl:value-of
122                                             select="$name"/></xsl:when>
123       <xsl:otherwise><xsl:value-of select="$update/@ap"/></xsl:otherwise>
124     </xsl:choose>
125   </xsl:template>
126
127
128   <xsl:template match="explain:dateModified">
129     <dateModified><xsl:value-of
130                     select="/*/irspy:status/*[last()]"/></dateModified>
131   </xsl:template>
132
133
134 </xsl:stylesheet>