Skip to content

Instantly share code, notes, and snippets.

@kschlottmann
Last active July 31, 2019 20:22
Show Gist options
  • Select an option

  • Save kschlottmann/48714de656dc48b3cfcf9122581f5549 to your computer and use it in GitHub Desktop.

Select an option

Save kschlottmann/48714de656dc48b3cfcf9122581f5549 to your computer and use it in GitHub Desktop.
XSL to generate pipe-delimited file with TBM information
<?xml version="1.0" encoding="UTF-8"?>
<!-- IN PROGRESS, 2019-07-29 -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ead="urn:isbn:1-931666-22-9" exclude-result-prefixes="xs" version="2.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="ead:ead">
<xsl:apply-templates select="//ead:c[@level = 'file']"/>
</xsl:template>
<xsl:template match="ead:c[@level = 'file']">
<!-- set fixed variables -->
<xsl:variable name="fa_url">
<xsl:value-of select="//ead:eadheader/ead:eadid/@url"/>
</xsl:variable>
<xsl:variable name="collection_name">
<xsl:value-of select="//ead:archdesc/ead:did/ead:unittitle"/>
</xsl:variable>
<xsl:variable name="bib_id">
<xsl:value-of select="//ead:archdesc/ead:did/ead:unitid[1]"/>
</xsl:variable>
<xsl:variable name="repo_code">
<xsl:value-of select="//ead:eadheader/ead:eadid/@mainagencycode"/>
</xsl:variable>
<xsl:variable name="rights">
<!-- DEFAULT onsite -->
<xsl:text>In copyright</xsl:text>
</xsl:variable>
<xsl:variable name="restrictions">
<!-- DEFAULT TBD -->
<xsl:text>Onsite access only</xsl:text>
</xsl:variable>
<xsl:variable name="creator">
<!-- DEFAULT from collection-->
<xsl:value-of select="//ead:archdesc/ead:did/ead:origination"/>
</xsl:variable>
<xsl:variable name="language">
<xsl:value-of select="//ead:archdesc/ead:did/ead:langmaterial/ead:language"/>
</xsl:variable>
<!-- add pipe-separated table headers here once sheet is set-->
<!-- includes test for dao, which indicates presence of previously digitized content -->
<xsl:choose>
<xsl:when test="ead:did/ead:dao">
<!-- dao indicator-->
<xsl:text>PREVIOUSLY DIGITIZED</xsl:text>
<xsl:text>|</xsl:text>
<!--collection title-->
<xsl:value-of select="$collection_name"/>
<xsl:text>|</xsl:text>
<!--bib ID-->
<xsl:value-of select="$bib_id"/>
<xsl:text>|</xsl:text>
<!--repo -->
<xsl:value-of select="$repo_code"/>
<xsl:text>|</xsl:text>
<!-- as id -->
<xsl:value-of select="substring-after(@id, 'aspace_')"/>
<!-- blank column -->
<xsl:text>|</xsl:text>
<xsl:text>|</xsl:text>
<!-- title -->
<xsl:value-of select="ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<!-- date -->
<xsl:value-of select="ead:did/ead:unitdate"/>
<!-- box number -->
<xsl:value-of select="ead:did/ead:container[@type = 'box']"/>
<xsl:text>|</xsl:text>
<!-- folder/reel etc number -->
<xsl:value-of select="ead:did/ead:container[2]"/>
<xsl:text>|</xsl:text>
<!-- dao indicator-->
<xsl:text>PREVIOUSLY DIGITIZED</xsl:text>
<xsl:text>|</xsl:text>
<xsl:text>&#xA;</xsl:text>
</xsl:when>
<xsl:otherwise>
<!--finding aid URL-->
<xsl:value-of select="$fa_url"/>
<xsl:text>|</xsl:text>
<!--collection title-->
<xsl:value-of select="$collection_name"/>
<xsl:text>|</xsl:text>
<!--bib ID-->
<xsl:value-of select="$bib_id"/>
<xsl:text>|</xsl:text>
<!--rights-->
<xsl:value-of select="$rights"/>
<xsl:text>|</xsl:text>
<!--restrictions-->
<xsl:value-of select="$restrictions"/>
<xsl:text>|</xsl:text>
<!--repo -->
<xsl:value-of select="$repo_code"/>
<!-- series location -->
<xsl:text>|</xsl:text>
<xsl:choose>
<xsl:when test="parent::ead:c[@level = 'series']">
<!-- grab series -->
<xsl:value-of select="parent::ead:c[@level = 'series']/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<!-- blank subseries column -->
<xsl:text>No Subseries</xsl:text>
<xsl:text>|</xsl:text>
<xsl:text>No Parent File</xsl:text>
<xsl:text>|</xsl:text>
</xsl:when>
<xsl:when test="parent::ead:c[@level = 'subseries']">
<!-- grab series and subseries-->
<xsl:value-of select="ancestor::ead:c[@level = 'series'][1]/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="parent::ead:c[@level = 'subseries']/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<xsl:text>No Parent File</xsl:text>
<xsl:text>|</xsl:text>
</xsl:when>
<xsl:when test="parent::ead:c[@level = 'file']">
<!-- grab series and subseries and file -->
<xsl:value-of select="ancestor::ead:c[@level = 'series'][1]/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="ancestor::ead:c[@level = 'subseries'][1]/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="parent::ead:c[@level = 'file']/ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>|</xsl:text>
<xsl:text>CHECK HIERARCHY</xsl:text>
<xsl:text>|</xsl:text>
</xsl:otherwise>
</xsl:choose>
<!-- as id -->
<xsl:value-of select="substring-after(@id, 'aspace_')"/>
<xsl:text>|</xsl:text>
<!-- title -->
<xsl:value-of select="ead:did/ead:unittitle"/>
<xsl:text>|</xsl:text>
<!-- date -->
<xsl:choose>
<xsl:when test="ead:did/ead:unitdate/text() = 'undated'">
<xsl:text>uuuu</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="ead:did/ead:unitdate"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>|</xsl:text>
<!-- creator -->
<xsl:choose>
<xsl:when test="ead:did/ead:origination">
<xsl:value-of select="ead:did/ead:origination"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$creator"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>|</xsl:text>
<!-- box number -->
<xsl:value-of select="ead:did/ead:container[@type = 'box']"/>
<xsl:text>|</xsl:text>
<!-- folder/reel etc number -->
<xsl:value-of select="ead:did/ead:container[2]"/>
<xsl:text>|</xsl:text>
<!-- extent -->
<xsl:value-of select="ead:did/ead:physdesc/ead:extent"/>
<xsl:text>|</xsl:text>
<!-- physfacet -->
<xsl:value-of select="ead:did/ead:physdesc/ead:physfacet"/>
<xsl:text>|</xsl:text>
<!-- subject -->
<xsl:text>AUDIO RECORDINGS</xsl:text>
<!--<xsl:text>VIDEO RECORDINGS</xsl:text>-->
<xsl:text>|</xsl:text>
<!-- scope note -->
<xsl:value-of select="ead:did/ead:scopecontent/ead:p"/>
<xsl:text>|</xsl:text>
<!-- language -->
<xsl:value-of select="$language"/>
<xsl:text>|</xsl:text>
<xsl:text>&#xA;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment