From ef9ed865d7455d357d9933d039c1bf7acc6aa79a Mon Sep 17 00:00:00 2001
From: Jens Kupferschmidt <kupferschmidt@rz.uni-leipzig.de>
Date: Thu, 10 Sep 2020 15:41:01 +0200
Subject: [PATCH] fix oai2 support

---
 src/main/resources/xsl/biocol2mods.xsl     | 463 +++++++++++----------
 src/main/resources/xsl/biocol2oai_dc.xsl   | 121 +++---
 src/main/resources/xsl/biocol2oai_lido.xsl |  22 +
 src/main/resources/xsl/biocol2oai_mods.xsl |  17 +-
 4 files changed, 309 insertions(+), 314 deletions(-)
 create mode 100644 src/main/resources/xsl/biocol2oai_lido.xsl

diff --git a/src/main/resources/xsl/biocol2mods.xsl b/src/main/resources/xsl/biocol2mods.xsl
index fa9f1f5..e5f11f3 100644
--- a/src/main/resources/xsl/biocol2mods.xsl
+++ b/src/main/resources/xsl/biocol2mods.xsl
@@ -1,267 +1,272 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<xsl:stylesheet version="1.0" xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-  xmlns:mods="http://www.loc.gov/mods/v3" >
+<xsl:stylesheet version="1.0" xmlns="http://www.openarchives.org/OAI/2.0/"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mods="http://www.loc.gov/mods/v3">
 
-  <!-- for compatibility -->
-  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" priority="1" mode="metsmeta">
+  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="mods" priority="1">
     <mods:mods>
       <xsl:attribute name="ID">
         <xsl:value-of select="@ID" />
       </xsl:attribute>
-      <xsl:apply-templates mode="mods-elements" select="." />
-    </mods:mods>
-  </xsl:template>
-  
-  <!-- normal converter -->
-  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" priority="1" mode="mods">
-    <mods:mods>
-      <xsl:apply-templates mode="mods-elements" select="." />
-    </mods:mods>
-  </xsl:template>
-  
-  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="mods-elements">
+
+      <xsl:variable name="xml"
+        select="document(concat('xslStyle:mycoreobject-xml:mcrobject:',@ID))/mycoreobject" />
+
        
     <!-- mods:title - Objektbezeichnung, Gattung/Art -->
-    <xsl:choose>
-      <xsl:when test="./metadata/def.biocol09/biocol09">
-        <mods:titleInfo>
-          <mods:title>
-            <xsl:value-of select="./metadata/def.biocol09/biocol09/text()" />
-          </mods:title>
-          <xsl:if test="./metadata/def.biocol30/biocol30 or ./metadata/def.biocol31/biocol31"> 
-            <mods:subTitle>
-              <xsl:value-of select="concat(./metadata/def.biocol30/biocol30/text(), ' | ', ./metadata/def.biocol31/biocol31/text())" />
-            </mods:subTitle>
-          </xsl:if>
-        </mods:titleInfo>
-      </xsl:when>
-      <xsl:otherwise>
-        <mods:titleInfo>
-          <mods:title>
-            <xsl:value-of select="concat(./metadata/def.biocol30/biocol30/text(), ' | ', ./metadata/def.biocol31/biocol31/text())" />
-          </mods:title>
-        </mods:titleInfo>
-      </xsl:otherwise>
-    </xsl:choose>
+      <xsl:choose>
+        <xsl:when test="$xml/metadata/def.biocol09/biocol09">
+          <mods:titleInfo>
+            <mods:title>
+              <xsl:value-of select="$xml/metadata/def.biocol09/biocol09/text()" />
+            </mods:title>
+            <xsl:if test="$xml/metadata/def.biocol30/biocol30 or $xml/metadata/def.biocol31/biocol31">
+              <mods:subTitle>
+                <xsl:value-of
+                  select="concat($xml/metadata/def.biocol30/biocol30/text(), ' | ', $xml/metadata/def.biocol31/biocol31/text())" />
+              </mods:subTitle>
+            </xsl:if>
+          </mods:titleInfo>
+        </xsl:when>
+        <xsl:otherwise>
+          <mods:titleInfo>
+            <mods:title>
+              <xsl:value-of
+                select="concat($xml/metadata/def.biocol30/biocol30/text(), ' | ', $xml/metadata/def.biocol31/biocol31/text())" />
+            </mods:title>
+          </mods:titleInfo>
+        </xsl:otherwise>
+      </xsl:choose>
     
     <!-- mods:creator - Editor des Datensatzes -->
-    <xsl:for-each select="./metadata/def.biocol06/biocol06">
-      <mods:name type="personal">
-        <mods:namePart>
-          <xsl:value-of select="." />
-        </mods:namePart>
-        <mods:role>
-          <mods:roleTerm type="text" authroity="marcrelator">creator</mods:roleTerm>
-          <mods:roleTerm type="code" authority="marcrelator">cre</mods:roleTerm>
-          <mods:roleTerm type="text" authority="marcrelator">author</mods:roleTerm>
-          <mods:roleTerm type="code" authority="marcrelator">aut</mods:roleTerm>
-        </mods:role>
-      </mods:name>
-    </xsl:for-each>
+      <xsl:for-each select="$xml/metadata/def.biocol06/biocol06">
+        <mods:name type="personal">
+          <mods:namePart>
+            <xsl:value-of select="." />
+          </mods:namePart>
+          <mods:role>
+            <mods:roleTerm type="text" authroity="marcrelator">creator</mods:roleTerm>
+            <mods:roleTerm type="code" authority="marcrelator">cre</mods:roleTerm>
+            <mods:roleTerm type="text" authority="marcrelator">author</mods:roleTerm>
+            <mods:roleTerm type="code" authority="marcrelator">aut</mods:roleTerm>
+          </mods:role>
+        </mods:name>
+      </xsl:for-each>
     
     <!-- mods:genre - see https://www.loc.gov/standards/valuelist/marcgt.html -->
-    <mods:genre authority="marcgt">realia</mods:genre>    
+      <mods:genre authority="marcgt">realia</mods:genre>    
     
-    <!-- mods:originInfo - Fundort, Finder, Bestimmung / -er des Fundes, Funddatum -->      
-    <xsl:if test="./metadata/def.biocol40/biocol40 or ./metadata/def.biocol42/biocol42
-               or ./metadata/def.biocol43/biocol43 or ./metadata/def.biocol44/biocol44">
-      <mods:originInfo>
-        <xsl:attribute name="eventyType">discovery</xsl:attribute>
-        <xsl:for-each select="./metadata/def.biocol40/biocol40"> 
-          <mods:placeTerm>
-            <mods:place>
+    <!-- mods:originInfo - Fundort, Finder, Bestimmung / -er des Fundes, Funddatum -->
+      <xsl:if
+        test="$xml/metadata/def.biocol40/biocol40 or $xml/metadata/def.biocol42/biocol42
+               or $xml/metadata/def.biocol43/biocol43 or $xml/metadata/def.biocol44/biocol44">
+        <mods:originInfo>
+          <xsl:attribute name="eventyType">discovery</xsl:attribute>
+          <xsl:for-each select="$xml/metadata/def.biocol40/biocol40">
+            <mods:placeTerm>
+              <mods:place>
+                <xsl:value-of select="text()" />
+              </mods:place>
+            </mods:placeTerm>
+          </xsl:for-each>
+          <xsl:for-each select="$xml/metadata/def.biocol42/biocol42">
+            <mods:publisher>
               <xsl:value-of select="text()" />
-            </mods:place>
-          </mods:placeTerm>
-        </xsl:for-each>
-        <xsl:for-each select="./metadata/def.biocol42/biocol42"> 
-          <mods:publisher>
-            <xsl:value-of select="text()" />
-          </mods:publisher>
-        </xsl:for-each>
-        <xsl:for-each select="./metadata/def.biocol44/biocol44"> 
-          <mods:publisher>
-            <xsl:value-of select="text()" />
-          </mods:publisher>
-        </xsl:for-each>   
-        <xsl:for-each select="./metadata/def.biocol43/biocol43"> 
-          <mods:dateIssued>
-            <xsl:value-of select="text/text()" />
-          </mods:dateIssued>
-        </xsl:for-each>             
-      </mods:originInfo>
-    </xsl:if>    
-    
-    <mods:language>
-      <mods:languageTerm type="text">German</mods:languageTerm>
-      <mods:languageTerm type="code" authority="iso639-2b">ger</mods:languageTerm>
-    </mods:language>    
+            </mods:publisher>
+          </xsl:for-each>
+          <xsl:for-each select="$xml/metadata/def.biocol44/biocol44">
+            <mods:publisher>
+              <xsl:value-of select="text()" />
+            </mods:publisher>
+          </xsl:for-each>
+          <xsl:for-each select="$xml/metadata/def.biocol43/biocol43">
+            <mods:dateIssued>
+              <xsl:value-of select="text/text()" />
+            </mods:dateIssued>
+          </xsl:for-each>
+        </mods:originInfo>
+      </xsl:if>
+
+      <mods:language>
+        <mods:languageTerm type="text">German</mods:languageTerm>
+        <mods:languageTerm type="code" authority="iso639-2b">ger</mods:languageTerm>
+      </mods:language>    
     
     <!-- mods:physicalDescription/typeOfResource - richtet sich nach dem Objekttypen -->
     <!-- typeOfResource: see https://www.loc.gov/standards/valuelist/rdacontent.html -->
-    <xsl:choose>
-      <xsl:when test="./metadata/def.biocol07/biocol07[@categid='objecttype_otolith']">
-        <mods:physicalDescription>
-          <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
-          <mods:form>biogenes Kalkkonkrement</mods:form>
-        </mods:physicalDescription>
-        <mods:typeOfResource authority="rdacontent">three dimensional object</mods:typeOfResource>
-      </xsl:when>
-      <xsl:when test="./metadata/def.biocol07/biocol07[@categid='objecttype_herbar']">
-        <mods:physicalDescription>
-          <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
-          <mods:form>Plantea</mods:form>
-        </mods:physicalDescription>
-        <mods:typeOfResource authority="rdacontent">still image</mods:typeOfResource>
-      </xsl:when>      
-      <xsl:otherwise>
-        <mods:physicalDescription>
-          <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
-          <mods:form>unknown</mods:form>
-        </mods:physicalDescription>      
-        <mods:typeOfResource authority="rdacontent">mixed material</mods:typeOfResource>
-      </xsl:otherwise>
-    </xsl:choose>  
-              
-    <mods:subject>
+      <xsl:choose>
+        <xsl:when test="$xml/metadata/def.biocol07/biocol07[@categid='objecttype_otolith']">
+          <mods:physicalDescription>
+            <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
+            <mods:form>biogenes Kalkkonkrement</mods:form>
+          </mods:physicalDescription>
+          <mods:typeOfResource authority="rdacontent">three dimensional object</mods:typeOfResource>
+        </xsl:when>
+        <xsl:when test="$xml/metadata/def.biocol07/biocol07[@categid='objecttype_herbar']">
+          <mods:physicalDescription>
+            <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
+            <mods:form>Plantea</mods:form>
+          </mods:physicalDescription>
+          <mods:typeOfResource authority="rdacontent">still image</mods:typeOfResource>
+        </xsl:when>
+        <xsl:otherwise>
+          <mods:physicalDescription>
+            <mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
+            <mods:form>unknown</mods:form>
+          </mods:physicalDescription>
+          <mods:typeOfResource authority="rdacontent">mixed material</mods:typeOfResource>
+        </xsl:otherwise>
+      </xsl:choose>
+
+      <mods:subject>
+    
+        <!-- mods:subject/titleInfo - objectType -->
+        <xsl:if test="$xml/metadata/def.biocol07">
+          <mods:titleInfo>
+            <xsl:for-each select="./metadata/def.biocol07/biocol07">
+              <xsl:variable name="subjectlinkURL">
+                <xsl:call-template name="linkClassQueryURL">
+                  <xsl:with-param name="classid" select="@classid" />
+                  <xsl:with-param name="categid" select="@categid" />
+                </xsl:call-template>
+              </xsl:variable>
+              <xsl:for-each
+                select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
+                <xsl:value-of select="@text" />
+              </xsl:for-each>
+            </xsl:for-each>
+          </mods:titleInfo>
+        </xsl:if>
+      
+        <!--  mods:subject/topic - family, kind, genus, ... -->
+        <xsl:if
+          test="$xml/metadata/def.biocol20/biocol20 or $xml/metadata/def.biocol21/biocol21 or $xml/metadata/def.biocol22/biocol22
+                 or $xml/metadata/def.biocol23/biocol23 or $xml/metadata/def.biocol24/biocol24 or $xml/metadata/def.biocol25/biocol25
+                 or $xml/metadata/def.biocol26/biocol26 or $xml/metadata/def.biocol27/biocol27 or $xml/metadata/def.biocol28/biocol28
+                 or $xml/metadata/def.biocol29/biocol29">
+          <mods:topic>
+            <xsl:value-of
+              select="concat($xml/metadata/def.biocol20/biocol20, ' | ', $xml/metadata/def.biocol21/biocol21, ' | ', $xml/metadata/def.biocol22/biocol22,
+                 ' | ', $xml/metadata/def.biocol23/biocol23, ' | ', $xml/metadata/def.biocol24/biocol24, ' | ', $xml/metadata/def.biocol25/biocol25,
+                 ' | ', $xml/metadata/def.biocol26/biocol26, ' | ', $xml/metadata/def.biocol27/biocol27, ' | ', $xml/metadata/def.biocol28/biocol28,
+                 ' | ', $xml/metadata/def.biocol29/biocol29)" />
+          </mods:topic>
+        </xsl:if>
+      
+        <!--  mods:subject/hierarchicalGeographic - places -->
+        <xsl:if
+          test="$xml/metadata/def.biocol61/biocol61 or $xml/metadata/def.biocol62/biocol62 or $xml/metadata/def.biocol63/biocol63">
+          <mods:hierarchicalGeographic>
+            <xsl:for-each select="$xml/metadata/def.biocol61/biocol61">
+              <mods:country>
+                <xsl:value-of select="text()" />
+              </mods:country>
+            </xsl:for-each>
+            <xsl:for-each select="$xml/metadata/def.biocol62/biocol62">
+              <mods:region>
+                <xsl:value-of select="text()" />
+              </mods:region>
+            </xsl:for-each>
+            <xsl:for-each select="$xml/metadata/def.biocol63/biocol63">
+              <mods:city>
+                <xsl:value-of select="text()" />
+              </mods:city>
+            </xsl:for-each>
+          </mods:hierarchicalGeographic>
+        </xsl:if>
+      </mods:subject>
     
-      <!-- mods:subject/titleInfo - objectType -->
-      <mods:titleInfo>
-        <xsl:for-each select="./metadata/def.biocol07/biocol07">
+      <!-- mods:classification - ddc -->
+      <xsl:for-each select="$xml/metadata/def.biocol08/biocol08">
+        <mods:classification>
+          <xsl:attribute name="authority">ddc</xsl:attribute>
           <xsl:variable name="subjectlinkURL">
             <xsl:call-template name="linkClassQueryURL">
-              <xsl:with-param name="classid" select="@classid"/>
-              <xsl:with-param name="categid" select="@categid"/>
+              <xsl:with-param name="classid" select="@classid" />
+              <xsl:with-param name="categid" select="@categid" />
             </xsl:call-template>
           </xsl:variable>
-          <xsl:for-each select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
-            <xsl:value-of select="@text"/>
-          </xsl:for-each>      
-        </xsl:for-each>
-      </mods:titleInfo>
-      
-      <!--  mods:subject/topic - family, kind, genus, ... -->
-      <xsl:if test="./metadata/def.biocol20/biocol20 or ./metadata/def.biocol21/biocol21 or ./metadata/def.biocol22/biocol22
-                 or ./metadata/def.biocol23/biocol23 or ./metadata/def.biocol24/biocol24 or ./metadata/def.biocol25/biocol25
-                 or ./metadata/def.biocol26/biocol26 or ./metadata/def.biocol27/biocol27 or ./metadata/def.biocol28/biocol28
-                 or ./metadata/def.biocol29/biocol29">
-        <mods:topic>
-          <xsl:value-of select="concat(./metadata/def.biocol20/biocol20, ' | ', ./metadata/def.biocol21/biocol21, ' | ', ./metadata/def.biocol22/biocol22,
-                 ' | ', ./metadata/def.biocol23/biocol23, ' | ', ./metadata/def.biocol24/biocol24, ' | ', ./metadata/def.biocol25/biocol25,
-                 ' | ', ./metadata/def.biocol26/biocol26, ' | ', ./metadata/def.biocol27/biocol27, ' | ', ./metadata/def.biocol28/biocol28,
-                 ' | ', ./metadata/def.biocol29/biocol29)" />
-        </mods:topic>
-      </xsl:if>
-      
-      <!--  mods:subject/hierarchicalGeographic - places -->
-      <xsl:if test="./metadata/def.biocol61/biocol61 or ./metadata/def.biocol62/biocol62 or ./metadata/def.biocol63/biocol63">
-        <mods:hierarchicalGeographic>
-          <xsl:for-each select="./metadata/def.biocol61/biocol61">
-            <mods:country>
-              <xsl:value-of select="text()" />
-            </mods:country>
+          <xsl:for-each
+            select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
+            <xsl:value-of select="@text" />
           </xsl:for-each>
-          <xsl:for-each select="./metadata/def.biocol62/biocol62">
-            <mods:region>
-              <xsl:value-of select="text()" />
-            </mods:region>
-          </xsl:for-each>
-          <xsl:for-each select="./metadata/def.biocol63/biocol63">
-            <mods:city>
-              <xsl:value-of select="text()" />
-            </mods:city>
-          </xsl:for-each>                    
-        </mods:hierarchicalGeographic>
-      </xsl:if>
-    </mods:subject>
-    
-    <!-- mods:classification - ddc -->   
-    <xsl:for-each select="./metadata/def.biocol08/biocol08">
-      <mods:classification>
-        <xsl:attribute name="authority">ddc</xsl:attribute>
-        <xsl:variable name="subjectlinkURL">
-          <xsl:call-template name="linkClassQueryURL">
-            <xsl:with-param name="classid" select="@classid"/>
-            <xsl:with-param name="categid" select="@categid"/>
-          </xsl:call-template>
-        </xsl:variable>      
-        <xsl:for-each select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
-          <xsl:value-of select="@text"/>
-        </xsl:for-each>      
-      </mods:classification>
-    </xsl:for-each>  
+        </mods:classification>
+      </xsl:for-each>  
 
-    <!-- mods:relatedItem - collection information -->
-    <mods:relatedItem type="host">
+      <!-- mods:relatedItem - collection information -->
+      <mods:relatedItem type="host">
     
-      <!-- mods:relatedItem/title - Teilsammlung -->
-      <mods:titleInfo>
-        <mods:title>
-          <xsl:for-each select="./metadata/def.biocol02/biocol02">
-            <xsl:variable name="subjectlinkURL">
-              <xsl:call-template name="linkClassQueryURL">
-                <xsl:with-param name="classid" select="@classid"/>
-                <xsl:with-param name="categid" select="@categid"/>
-              </xsl:call-template>
-            </xsl:variable>       
-            <xsl:for-each select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
-              <xsl:value-of select="@text"/>
-            </xsl:for-each>               
-          </xsl:for-each>
-        </mods:title>
-      </mods:titleInfo> 
+        <!-- mods:relatedItem/title - Teilsammlung -->
+        <xsl:if test="$xml/metadata/def.biocol02">
+          <mods:titleInfo>
+            <mods:title>
+              <xsl:for-each select="$xml/metadata/def.biocol02/biocol02">
+                <xsl:variable name="subjectlinkURL">
+                  <xsl:call-template name="linkClassQueryURL">
+                    <xsl:with-param name="classid" select="@classid" />
+                    <xsl:with-param name="categid" select="@categid" />
+                  </xsl:call-template>
+                </xsl:variable>
+                <xsl:for-each
+                  select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
+                  <xsl:value-of select="@text" />
+                </xsl:for-each>
+              </xsl:for-each>
+            </mods:title>
+          </mods:titleInfo>
+        </xsl:if>
            
-      <!-- mods:relatedItem/name - contributor -->
-      <mods:name type="personal">
-        <mods:namePart type="given">Jens</mods:namePart>
-        <mods:namePart type="family">Kupferschmidt</mods:namePart>
-        <mods:affiliation>Universitätsrechenzentrum Leipzig; Deutschland</mods:affiliation>
-        <mods:displayForm>
-          <xsl:text>Jens Kupferschmidt; Universitätsrechenzentrum Leipzig; Deutschland</xsl:text>
-        </mods:displayForm>
-        <mods:role>
-          <mods:roleTerm type="text" authroity="marcrelator">contributor</mods:roleTerm>
-          <mods:roleTerm type="code" authority="marcrelator">ctb</mods:roleTerm>
-        </mods:role>
-      </mods:name>       
+        <!-- mods:relatedItem/name - contributor -->
+        <mods:name type="personal">
+          <mods:namePart type="given">Jens</mods:namePart>
+          <mods:namePart type="family">Kupferschmidt</mods:namePart>
+          <mods:affiliation>Universitätsrechenzentrum Leipzig; Deutschland</mods:affiliation>
+          <mods:displayForm>
+            <xsl:text>Jens Kupferschmidt; Universitätsrechenzentrum Leipzig; Deutschland</xsl:text>
+          </mods:displayForm>
+          <mods:role>
+            <mods:roleTerm type="text" authroity="marcrelator">contributor</mods:roleTerm>
+            <mods:roleTerm type="code" authority="marcrelator">ctb</mods:roleTerm>
+          </mods:role>
+        </mods:name>       
 
-      <!-- mods:relatedItem/mods:genre - see https://www.loc.gov/standards/valuelist/marcgt.html -->
-      <mods:genre authority="marcgt">online system or service</mods:genre>    
+        <!-- mods:relatedItem/mods:genre - see https://www.loc.gov/standards/valuelist/marcgt.html -->
+        <mods:genre authority="marcgt">online system or service</mods:genre>    
     
-      <!-- mods:relatedItem/mods:typeOfResource - see https://www.loc.gov/standards/valuelist/rdacontent.html -->
-      <mods:typeOfResource collection="yes">software, multimedia</mods:typeOfResource>
+        <!-- mods:relatedItem/mods:typeOfResource - see https://www.loc.gov/standards/valuelist/rdacontent.html -->
+        <mods:typeOfResource collection="yes">computer dataset</mods:typeOfResource>
       
-      <!-- mods:relatedItem/location - URL -->
-      <mods:location>
-        <mods:url>
-          <xsl:value-of select="$WebApplicationBaseURL" />
-        </mods:url>
-        <mods:physicalLocation>Universität Leipzig</mods:physicalLocation>
-      </mods:location>
-       
-    </mods:relatedItem>
+        <!-- mods:relatedItem/location - URL -->
+        <mods:location>
+          <mods:url>
+            <xsl:value-of select="$WebApplicationBaseURL" />
+          </mods:url>
+          <mods:physicalLocation>Universität Leipzig</mods:physicalLocation>
+        </mods:location>
+
+      </mods:relatedItem>
       
-    <!-- mods:identifier - URI to WebPage -->
-    <mods:identifier type="uri">
-      <xsl:value-of select="concat($WebApplicationBaseURL,'receive/',@ID)" />
-    </mods:identifier>
+      <!-- mods:identifier - URI to WebPage -->
+      <mods:identifier type="uri">
+        <xsl:value-of select="concat($WebApplicationBaseURL,'receive/',@ID)" />
+      </mods:identifier>
 
-    <!-- mods:location - inventory number -->
-    <mods:location>      
-      <mods:shelfLocator>
-        <xsl:for-each select="./metadata/def.biocol01/biocol01">
-          <xsl:value-of select="." />
-        </xsl:for-each>
-      </mods:shelfLocator>
-    </mods:location>
+      <!-- mods:location - inventory number -->
+      <mods:location>
+        <mods:shelfLocator>
+          <xsl:for-each select="$xml/metadata/def.biocol01/biocol01">
+            <xsl:value-of select="." />
+          </xsl:for-each>
+        </mods:shelfLocator>
+      </mods:location>
           
-    <!-- mods:accessConditions - rights -->
-    <xsl:apply-templates select="." mode="accessConditions" />
+      <!-- mods:accessConditions - rights -->
+      <xsl:apply-templates select="$xml" mode="accessConditions" />
     
-    <!-- mods:recordInfo - System Control Number -->
-    <xsl:apply-templates select="." mode="recordInfo" />
+      <!-- mods:recordInfo - System Control Number -->
+      <xsl:apply-templates select="$xml" mode="recordInfo" />
 
+    </mods:mods>
   </xsl:template>
 
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/src/main/resources/xsl/biocol2oai_dc.xsl b/src/main/resources/xsl/biocol2oai_dc.xsl
index bf4a603..4a49ccd 100644
--- a/src/main/resources/xsl/biocol2oai_dc.xsl
+++ b/src/main/resources/xsl/biocol2oai_dc.xsl
@@ -10,55 +10,40 @@
 
   <xsl:include href="object2record.xsl" />
 
-  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="header">
-    <xsl:apply-templates select="@ID" />
-    <xsl:apply-templates select="service/servdates/servdate[@type='modifydate']" />
-  </xsl:template>
-
-  <xsl:template match="mycoreobject" mode="metadata">
-    <xsl:variable name="sourcedoc" select="document(concat('xslStyle:mycoreobject-xml:mcrobject:',@ID))" />
-    <xsl:apply-templates select="$sourcedoc/mycoreobject" mode="dc" />
-  </xsl:template>
-
-  <xsl:template match="mycoreobject" mode="dc">
+  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="oai2_metadata" priority="1">
+    <xsl:variable name="native"
+      select="document(concat('xslStyle:mycoreobject-native:mcrobject:',@ID))/mycoreobject" />
 
     <oai_dc:dc>
       
       <!-- dc:title - title -->
-      <dc:title>
-        <xsl:choose>
-          <xsl:when test="./metadata/def.biocol09/biocol09">
-            <xsl:value-of select="./metadata/def.biocol09/biocol09/text()" />
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:value-of
-              select="concat(./metadata/def.biocol30/biocol30/text(), ' | ', ./metadata/def.biocol31/biocol31/text())" />
-          </xsl:otherwise>
-        </xsl:choose>
-      </dc:title>
+      <xsl:if test="$native/metadata/def.biocol09">
+        <dc:title>
+          <xsl:choose>
+            <xsl:when test="$native/metadata/def.biocol09/biocol09">
+              <xsl:value-of select="$native/metadata/def.biocol09/biocol09/text()" />
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:value-of
+                select="concat($native/metadata/def.biocol30/biocol30/text(), ' | ', $native/metadata/def.biocol31/biocol31/text())" />
+            </xsl:otherwise>
+          </xsl:choose>
+        </dc:title>
+      </xsl:if>
       
       <!-- dc:type - objectType -->
-      <xsl:for-each select="./metadata/def.biocol07/biocol07">
+      <xsl:for-each select="$native/metadata/def.biocol07/biocol07">
         <dc:type>
-          <xsl:variable name="subjectlinkURL">
-            <xsl:call-template name="linkClassQueryURL">
-              <xsl:with-param name="classid" select="@classid" />
-              <xsl:with-param name="categid" select="@categid" />
-            </xsl:call-template>
-          </xsl:variable>
-          <xsl:for-each
-            select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
-            <xsl:value-of select="@text" />
-          </xsl:for-each>
+          <xsl:value-of select="." />
         </dc:type>
       </xsl:for-each>
 
       <!-- dc:format - format -->
       <xsl:choose>
-        <xsl:when test="./metadata/def.biocol07/biocol07[@categid='objecttype_otolith']">
+        <xsl:when test="$native/metadata/def.biocol07/biocol07[@categid='objecttype_otolith']">
           <dc:format>biogenes Kalkkonkrement</dc:format>
         </xsl:when>
-        <xsl:when test="./metadata/def.biocol07/biocol07[@categid='objecttype_herbar']">
+        <xsl:when test="$native/metadata/def.biocol07/biocol07[@categid='objecttype_herbar']">
           <dc:format>Plantea</dc:format>
         </xsl:when>
         <xsl:otherwise>
@@ -68,26 +53,26 @@
       
       <!-- dc:coverage - places -->
       <xsl:if
-        test="./metadata/def.biocol61/biocol61 or ./metadata/def.biocol62/biocol62 or ./metadata/def.biocol63/biocol63">
+        test="$native/metadata/def.biocol61/biocol61 or $native/metadata/def.biocol62/biocol62 or $native/metadata/def.biocol63/biocol63">
         <dc:coverage>
           <xsl:value-of
-            select="concat(./metadata/def.biocol61/biocol61, ' | ', ./metadata/def.biocol62/biocol62, ' | ', 
-                                       ./metadata/def.biocol63/biocol63)" />
+            select="concat($native/metadata/def.biocol61/biocol61, ' | ', $native/metadata/def.biocol62/biocol62, ' | ', 
+                                       $native/metadata/def.biocol63/biocol63)" />
         </dc:coverage>
       </xsl:if>              
 
       <!-- dc:subject - genre and type -->
       <xsl:if
-        test="./metadata/def.biocol20/biocol20 or ./metadata/def.biocol21/biocol21 or ./metadata/def.biocol22/biocol22
-                 or ./metadata/def.biocol23/biocol23 or ./metadata/def.biocol24/biocol24 or ./metadata/def.biocol25/biocol25
-                 or ./metadata/def.biocol26/biocol26 or ./metadata/def.biocol27/biocol27 or ./metadata/def.biocol28/biocol28
-                 or ./metadata/def.biocol29/biocol29">
+        test="$native/metadata/def.biocol20/biocol20 or $native/metadata/def.biocol21/biocol21 or $native/metadata/def.biocol22/biocol22
+                 or $native/metadata/def.biocol23/biocol23 or $native/metadata/def.biocol24/biocol24 or $native/metadata/def.biocol25/biocol25
+                 or $native/metadata/def.biocol26/biocol26 or $native/metadata/def.biocol27/biocol27 or $native/metadata/def.biocol28/biocol28
+                 or $native/metadata/def.biocol29/biocol29">
         <dc:subject>
           <xsl:value-of
-            select="concat(./metadata/def.biocol20/biocol20, ' | ', ./metadata/def.biocol21/biocol21, ' | ', ./metadata/def.biocol22/biocol22,
-                 ' | ', ./metadata/def.biocol23/biocol23, ' | ', ./metadata/def.biocol24/biocol24, ' | ', ./metadata/def.biocol25/biocol25,
-                 ' | ', ./metadata/def.biocol26/biocol26, ' | ', ./metadata/def.biocol27/biocol27, ' | ', ./metadata/def.biocol28/biocol28,
-                 ' | ', ./metadata/def.biocol29/biocol29)" />
+            select="concat($native/metadata/def.biocol20/biocol20, ' | ', $native/metadata/def.biocol21/biocol21, ' | ', $native/metadata/def.biocol22/biocol22,
+                 ' | ', $native/metadata/def.biocol23/biocol23, ' | ', $native/metadata/def.biocol24/biocol24, ' | ', $native/metadata/def.biocol25/biocol25,
+                 ' | ', $native/metadata/def.biocol26/biocol26, ' | ', $native/metadata/def.biocol27/biocol27, ' | ', $native/metadata/def.biocol28/biocol28,
+                 ' | ', $native/metadata/def.biocol29/biocol29)" />
         </dc:subject>
       </xsl:if>
 
@@ -95,36 +80,30 @@
       <dc:language>ger</dc:language>       
                
       <!-- dc:creator - author of record -->
-      <dc:creator>
-        <xsl:for-each select="./metadata/def.biocol06/biocol06">
-          <xsl:if test="position() != 1">
-            <xsl:value-of select="' ; '" />
-          </xsl:if>
-          <xsl:value-of select="." />
-        </xsl:for-each>
-      </dc:creator>
+      <xsl:if test="$native/metadata/def.biocol06">
+        <dc:creator>
+          <xsl:for-each select="$native/metadata/def.biocol06/biocol06">
+            <xsl:if test="position() != 1">
+              <xsl:value-of select="' ; '" />
+            </xsl:if>
+            <xsl:value-of select="." />
+          </xsl:for-each>
+        </dc:creator>
+      </xsl:if>
       
       <!-- dc:publisher - collection -->
-      <xsl:for-each select="./metadata/def.biocol02/biocol02">
-        <xsl:variable name="subjectlinkURL">
-          <xsl:call-template name="linkClassQueryURL">
-            <xsl:with-param name="classid" select="@classid" />
-            <xsl:with-param name="categid" select="@categid" />
-          </xsl:call-template>
-        </xsl:variable>
-        <xsl:for-each
-          select="document($subjectlinkURL)/mycoreclass/categories/category/label[lang($DefaultLang)]">
-          <dc:publisher>
-            <xsl:value-of select="concat(@text, ' ; ', 'Universität Leipzig')" />
-          </dc:publisher>
-        </xsl:for-each>
-      </xsl:for-each>     
-      
-       
+      <xsl:for-each select="$native/metadata/def.biocol02/biocol02">
+        <dc:publisher>
+          <xsl:value-of select="." />
+        </dc:publisher>
+      </xsl:for-each>
+      <dc:publisher>
+        <xsl:value-of select="'Universität Leipzig'" />
+      </dc:publisher>
             
       <!-- dc:identifier - inventory number, alternate ID and @ID -->
       <dc:identifier>
-        <xsl:value-of select="./metadata/def.biocol01/biocol01" />
+        <xsl:value-of select="$native/metadata/def.biocol01/biocol01" />
         <xsl:value-of select="' ; '" />
         <xsl:value-of select="concat($WebApplicationBaseURL,'receive/',@ID)" />
       </dc:identifier>
diff --git a/src/main/resources/xsl/biocol2oai_lido.xsl b/src/main/resources/xsl/biocol2oai_lido.xsl
new file mode 100644
index 0000000..4dfc06f
--- /dev/null
+++ b/src/main/resources/xsl/biocol2oai_lido.xsl
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet version="1.0" xmlns="http://www.openarchives.org/OAI/2.0/"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink"
+  xmlns:mods="http://www.loc.gov/mods/v3" xmlns:lido="http://www.lido-schema.org">
+
+  <xsl:param name="DefaultLang" />
+  <xsl:param name="WebApplicationBaseURL" />
+  <xsl:param name="MCR.OAIDataProvider.OAI2.RepositoryIdentifier" />
+
+  <xsl:include href="object2record.xsl" />
+
+  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="oai2_metadata" priority="1">
+    <xsl:variable name="native"
+      select="document(concat('xslStyle:mycoreobject-native:mcrobject:',@ID))/mycoreobject" />
+    
+    <lido:lido>
+    </lido:lido>
+    
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/src/main/resources/xsl/biocol2oai_mods.xsl b/src/main/resources/xsl/biocol2oai_mods.xsl
index 9943745..40c5f6d 100644
--- a/src/main/resources/xsl/biocol2oai_mods.xsl
+++ b/src/main/resources/xsl/biocol2oai_mods.xsl
@@ -2,7 +2,7 @@
 
 <xsl:stylesheet version="1.0" xmlns="http://www.openarchives.org/OAI/2.0/"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink"
-  xmlns:mods="http://www.loc.gov/mods/v3" >
+  xmlns:mods="http://www.loc.gov/mods/v3">
 
   <xsl:param name="DefaultLang" />
   <xsl:param name="WebApplicationBaseURL" />
@@ -12,19 +12,8 @@
   <xsl:include href="biocol2mods.xsl" />
   <xsl:include href="common4mods.xsl" />
 
-  <xsl:template match="mycoreobject" mode="header">
-    <xsl:apply-templates select="@ID" />
-    <xsl:apply-templates select="service/servdates/servdate[@type='modifydate']" />
-  </xsl:template>
-
-  <xsl:template match="mycoreobject" mode="metadata">
-    <modsCollection xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.loc.gov/mods/v3"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-7.xsd">
-      <xsl:variable name="sourcedoc"
-        select="document(concat('xslStyle:mycoreobject-xml:mcrobject:',@ID))" />
-      <xsl:apply-templates select="$sourcedoc/mycoreobject" mode="mods" />
-    </modsCollection>
+  <xsl:template match="mycoreobject[contains(@ID,'_biocol_')]" mode="oai2_metadata" priority="1">
+    <xsl:apply-templates select="." mode="mods" />
   </xsl:template>
 
 </xsl:stylesheet>
-- 
GitLab