Skip to content

Instantly share code, notes, and snippets.

@anayram
Last active January 12, 2024 22:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anayram/e0a4ab615b6fa6fd2e85c44635584393 to your computer and use it in GitHub Desktop.
Save anayram/e0a4ab615b6fa6fd2e85c44635584393 to your computer and use it in GitHub Desktop.
Qureshi and FolkwaysAlive! Archive Metadata

Qureshi and FolkwaysAlive! Archive Metadata

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:text>path,</xsl:text>
<xsl:text>image link,</xsl:text>
<xsl:text>archive link,</xsl:text>
<xsl:text>title,</xsl:text>
<xsl:text>participant,</xsl:text>
<xsl:text>description,</xsl:text>
<xsl:text>public,</xsl:text>
<xsl:text>accession</xsl:text>
<xsl:text>&#xa;</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/*">
<xsl:for-each select="collection('?select=*.xml;recurse=yes')/*:technicalMetadata[not(//original[@mediaType='audio']) and not(//original[@mediaType='video'])]//component">
<xsl:variable name="linkstring">
<xsl:value-of select="replace(derivative[format/@id='full']/@path,'.+(/.+/.+/.+\..+)','$1')"/>
</xsl:variable>
<xsl:variable name="id">
<xsl:value-of select="replace(original/@path,'.+/([^/]+)/[^/]+\..+','$1')"/>
</xsl:variable>
<xsl:variable name="doc" as="node()" select="collection('?select=*.xml;recurse=yes')/*:metadata[element[@id='AccessionNumber' and @value=$id]]"/>
<xsl:value-of select="original/@path"/> <!-- path -->
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('http://igcan.ca:1897/CCO_media',$linkstring)"/> <!-- media link -->
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('https://web.archive.org/web/20180601235116/http://www.folkwaysalive.ualberta.ca/SAMC/object.html?id=',$id)"/> <!-- archive link -->
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('&quot;',$doc/element[@id='TitlePrimary']/@value,'&quot;')"/> <!-- title -->
<xsl:text>,</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="$doc/element[@id[contains(.,'Participant')]]/@value" separator="|"/><xsl:text>"</xsl:text> <!-- participant -->
<xsl:text>,</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="replace($doc/element[@id='Description']/@value,'&quot;','\\\\;')"/><xsl:text>"</xsl:text> <!-- description -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$doc/element[@id='PubliclyViewable']/@value"/> <!-- public -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$id"/> <!-- accession -->
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:template>
<!--<xsl:template name="descrption">
<xsl:value-of select="concat('&quot;',collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]/element[@id='TitlePrimary']/@value,'&quot;')"/> <!-\- title -\->
</xsl:template>-->
<!--<xsl:template name="description">
<xsl:for-each select="collection('?select=*.xml;recurse=yes')//*:metadata">
<xsl:value-of select="element[@id='TitlePrimary']/@value"/> <!-\- title -\->
<xsl:text>,SOMETHING</xsl:text>
<xsl:value-of select="element[@id='AccessionNumber']/@value"/> <!-\- accession -\->
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:template>-->
</xsl:transform>
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:text>type,</xsl:text>
<xsl:text>path,</xsl:text>
<xsl:text>media link,</xsl:text>
<xsl:text>archive link,</xsl:text>
<xsl:text>bitrate,</xsl:text>
<xsl:text>duration,</xsl:text>
<xsl:text>size (MB),</xsl:text>
<xsl:text>title,</xsl:text>
<xsl:text>participants,</xsl:text>
<xsl:text>public,</xsl:text>
<xsl:text>accession</xsl:text>
<xsl:text>&#xa;</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/*" priority="2">
<xsl:variable name="techdoc" select="collection('?select=*.technical.xml;recurse=yes')"/>
<!--<xsl:for-each select="$techdoc/*:technicalMetadata//derivative[@mediaType='audio']">-->
<xsl:for-each select="$techdoc/*:technicalMetadata//derivative[@mediaType='video' and *:format[@id='movMP4']]">
<xsl:variable name="bitrate">
<xsl:value-of select="descendant::bitrate/text()"/>
</xsl:variable>
<xsl:variable name="duration">
<xsl:value-of select="descendant::duration"/>
</xsl:variable>
<xsl:variable name="linkstring">
<xsl:value-of select="replace(@path,'/var/www/SAMC/SAMC_Objects','')"/>
</xsl:variable>
<xsl:variable name="id">
<xsl:value-of select="replace(@path,'/var/www/SAMC/SAMC_Objects/([^/]+)/.+','$1')"/>
</xsl:variable>
<xsl:variable name="type">
<xsl:value-of select="@mediaType"/>
</xsl:variable>
<xsl:variable name="doc" as="node()" select="collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]"/>
<xsl:value-of select="$type"/> <!-- type -->
<xsl:text>,</xsl:text>
<xsl:value-of select="@path"/> <!-- path -->
<xsl:text>,</xsl:text>
<xsl:choose>
<xsl:when test="$type='audio'">
<xsl:value-of select="concat('http://igcan.ca:1897/CCO_media',$linkstring)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('http://igcan.ca:1897/CCO_media',$linkstring, '.mp4')"/>
</xsl:otherwise>
</xsl:choose> <!-- media link -->
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('https://web.archive.org/web/20180601235116/http://www.folkwaysalive.ualberta.ca/SAMC/object.html?id=',$id)"/> <!-- archive link -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$bitrate"/> <!-- bitrate -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$duration"/> <!-- duration -->
<xsl:text>,</xsl:text>
<xsl:if test="$bitrate and $duration">
<xsl:value-of select="((number($bitrate) div 8) * number($duration)) div 1000000"/> <!-- size -->
</xsl:if>
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('&quot;',$doc/element[@id='TitlePrimary']/@value,'&quot;')"/> <!-- title -->
<xsl:text>,</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="$doc/element[@id[contains(.,'Participant')]]/@value" separator="|"/><xsl:text>"</xsl:text> <!-- participant -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$doc/element[@id='PubliclyViewable']/@value"/> <!-- public -->
<xsl:text>,</xsl:text>
<xsl:value-of select="$id"/> <!-- accession -->
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:template>
<!--<xsl:template name="description">
<xsl:param name="id"/>
<xsl:variable name="doc">collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]</xsl:variable>
<xsl:value-of select="concat('&quot;',collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]/element[@id='TitlePrimary']/@value,'&quot;')"/> <!-\- title -\->
<xsl:text>,</xsl:text>
<xsl:value-of select="collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]/element[@id[contains(.,'Participant')]]/@value" separator="|"/> <!-\- participant -\->
<xsl:text>,</xsl:text>
<xsl:value-of select="collection('?select=*.xml;recurse=yes')/metadata[element[@id='AccessionNumber' and @value=$id]]/element[@id='PubliclyViewable']/@value"/> <!-\- public -\->
<xsl:text>,</xsl:text>
<xsl:value-of select="$id"/> <!-\- accession -\->
<xsl:text>&#xa;</xsl:text>
</xsl:template>-->
<!--<xsl:template name="description" >
<xsl:param name="id"/>
<!-\-<xsl:variable name="docPile" as="node()" select="<!-\\-collection('?select=*.descriptive.xml;recurse=yes')/*:metadata[//*:element[@id='AccessionNumber' and @value=@id]]-\\->"/>-\->
<xsl:text>SOME TEST TESTO</xsl:text>
<xsl:value-of select="collection('?select=*.descriptive.xml;recurse=yes')/*:metadata[//*:element[@id='AccessionNumber' and @value=@id]]//*:element[@id='TitlePrimary']/@value"/> <!-\- title -\->
<xsl:text>ANOTHER,</xsl:text>
<!-\- <xsl:for-each select="$docPile/element[@id[contains(.,'Participant')]]">
<xsl:value-of select="replace(.,',','\\,')" separator="|"/>
</xsl:for-each> <!-\\- participants -\\->
<xsl:text>,</xsl:text>
<xsl:value-of select="concat('&quot;',$sdocPile/element[@id='PubliclyViewable']/@value,'&quot;')"/> <!-\\- public -\\->-\->
<xsl:text>,</xsl:text>
<xsl:value-of select="$id"/> <!-\- accession -\->
<xsl:text>&#xa;</xsl:text>
</xsl:template>-->
</xsl:transform>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:text>AccessionNumber</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentCommercialPublication</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentCommercialPublication#Subcategory</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#Concert</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#InformalRecital</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#Instruction</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#Interview</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#PoetryRecital</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentEvent#Subcategory</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentOther</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentOther#Subcategory</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#ConcertPoster</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#ConcertPoster#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#ConcertProgramme</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#ConcertProgramme#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Flyer</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Flyer#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Newsletter</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Pamphlet</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Pamphlet#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Photograph</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Photograph#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Program</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Program#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Resume</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Resume#Text</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentPromoPublication#Subcategory</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ContentType</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>DateTime</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Description</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>DescriptiveCategory</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>English</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>English#Summary</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>English#Transcript</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>English#Translation</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Genre</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Genre#Subgenre</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ItemsContentList</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Misc</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>ObjectType</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Participants</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>PubliclyViewable</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>TitlePrimary</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>TitlePrimary#Subtitle</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>VenueLocation</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>File</xsl:text>
<xsl:call-template name="separator"/>
<xsl:text>Folder</xsl:text>
<xsl:call-template name="newline"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/*">
<xsl:for-each select="collection('?select=*.descriptive.xml;recurse=yes')">
<xsl:value-of select="//element[@id = 'AccessionNumber']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentCommercialPublication']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentCommercialPublication#Subcategory']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#Concert']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#InformalRecital']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#Instruction']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#Interview']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#PoetryRecital']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentEvent#Subcategory']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentOther']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentOther#Subcategory']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#ConcertPoster']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of
select="//element[@id = 'ContentPromoPublication#ConcertPoster#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of
select="//element[@id = 'ContentPromoPublication#ConcertProgramme']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of
select="//element[@id = 'ContentPromoPublication#ConcertProgramme#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Flyer']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Flyer#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Newsletter']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Pamphlet']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Pamphlet#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Photograph']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Photograph#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Program']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Program#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Resume']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Resume#Text']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentPromoPublication#Subcategory']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ContentType']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'DateTime']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'Description']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'DescriptiveCategory']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'English']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'English#Summary']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'English#Transcript']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'English#Translation']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'Genre']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'Genre#Subgenre']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ItemsContentList']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'Misc']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'ObjectType']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:for-each select="//element[@id[contains(.,'Participant')]][@value != '']">
<xsl:value-of select="concat(@id,'::',@value)"/>
<xsl:if test="not(position()=last())">
<xsl:text>|</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'PubliclyViewable']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="replace(//element[@id = 'TitlePrimary']/@value,'&#13;','')" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="//element[@id = 'TitlePrimary#Subtitle']/@value" separator="|||"/>
<xsl:call-template name="separator"/>
<xsl:for-each select="//element[@id = 'VenueLocation']/@value">
<xsl:value-of select="replace(.,'&#13;','')" separator="|||"/>
</xsl:for-each>
<xsl:call-template name="separator"/>
<xsl:value-of select="tokenize(document-uri(.), '/')[last()]"/>
<xsl:call-template name="separator"/>
<xsl:value-of select="tokenize(document-uri(.), '/')[last()-2]"/>
<xsl:call-template name="newline"/>
<!--
<xsl:value-of select="concat('&quot;', //element[@id='TitlePrimary']/@value" separator="|||"/>
<xsl:text>,</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="//element[@id[contains(.,'Participant')]]/@value" separator="|"/><xsl:text>"</xsl:text> <!-\- participant -\->
<xsl:text>,</xsl:text>
<xsl:value-of select="//element[@id='PubliclyViewable']/@value"/> <!-\- public -\->
<xsl:text>,</xsl:text>
<xsl:value-of select="$id"/> <!-\- accession -\->-->
</xsl:for-each>
</xsl:template>
<xsl:template name="newline">
<xsl:text>&#xa;</xsl:text>
</xsl:template>
<xsl:template name="separator">
<xsl:text>&#9;</xsl:text>
</xsl:template>
<xsl:template name="quotestart">
<xsl:text>,"</xsl:text>
</xsl:template>
<xsl:template name="quoteend">
<xsl:text>",</xsl:text>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment