Skip to content
Snippets Groups Projects
mods2dc.xsl 3.11 KiB
Newer Older
David Maus's avatar
David Maus committed
<!-- See: https://www.loc.gov/standards/mods/mods-dcsimple.html -->
<xsl:transform version="1.0"
               exclude-result-prefixes="mods"
               xmlns:dc="http://purl.org/dc/elements/1.1/"
               xmlns:mods="http://www.loc.gov/mods/v3"
               xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="mods:mods">
    <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
      <xsl:apply-templates/>
    </oai_dc:dc>
  </xsl:template>

  <xsl:template match="mods:mods/mods:titleInfo">
    <dc:title>
      <xsl:value-of select="normalize-space(concat(mods:nonSort, ' ', mods:title, ' ', mods:subTitle))"/>
    </dc:title>
  </xsl:template>

  <xsl:template match="mods:name[mods:role/mods:roleTerm = 'aut']">
    <dc:creator>
      <xsl:value-of select="mods:displayForm"/>
    </dc:creator>
  </xsl:template>

  <xsl:template match="mods:subject[mods:topic or mods:name or mods:occupation]">
    <dc:subject>
      <xsl:value-of select="."/>
    </dc:subject>
  </xsl:template>

  <xsl:template match="mods:genre">
    <dc:type>
      <xsl:if test="@authority">
        <xsl:value-of select="concat('(', @authority, ')')"/>
      </xsl:if>
      <xsl:value-of select="."/>
    </dc:type>
  </xsl:template>

  <xsl:template match="mods:note">
    <dc:description>
      <xsl:value-of select="."/>
    </dc:description>
  </xsl:template>

  <xsl:template match="mods:originInfo[mods:dateIssued or mods:dateCreated]">
    <dc:publisher>
      <xsl:if test="mods:place/mods:placeTerm">
        <xsl:for-each select="mods:place/mods:placeTerm">
          <xsl:if test="position() > 1">
            <xsl:text>; </xsl:text>
          </xsl:if>
          <xsl:value-of select="."/>
        </xsl:for-each>
        <xsl:text> : </xsl:text>
      </xsl:if>
      <xsl:for-each select="mods:publisher">
        <xsl:if test="position() > 1">
          <xsl:text>; </xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
      </xsl:for-each>
    </dc:publisher>
  </xsl:template>

  <xsl:template match="mods:originInfo/mods:dateIssued | mods:originInfo/mods:dateCreated">
    <dc:date>
      <xsl:value-of select="."/>
    </dc:date>
  </xsl:template>

  <xsl:template match="mods:extent">
David Maus's avatar
David Maus committed
    <dc:format>
      <xsl:value-of select="."/>
    </dc:format>
  </xsl:template>

  <xsl:template match="mods:identifier">
    <dc:identifier>
      <xsl:if test="@type">
        <xsl:value-of select="concat('(', @type, ')')"/>
      </xsl:if>
      <xsl:value-of select="."/>
    </dc:identifier>
  </xsl:template>

  <xsl:template match="mods:language/mods:languageTerm">
    <dc:language>
      <xsl:value-of select="."/>
    </dc:language>
  </xsl:template>

  <xsl:template match="mods:subject[mods:geographic or mods:temporal or mods:hierarchicalGeographic or mods:cartographics]">
    <dc:coverage>
      <xsl:value-of select="."/>
    </dc:coverage>
  </xsl:template>

  <xsl:template match="text()"/>

</xsl:transform>