P4toP5NZETC
Jump to navigation
Jump to search
Below is the stylesheet used to convert TEI P4 text to TEI P5 text at the NZETC (http://www.nzetc.org/). It is based on a previous stylesheet by Sebastian Rahtz. Many of the extensions to Sebastian's stylesheet are due to data-tidying needed to cope with P5's significantly better checking of content types.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:edate="http://exslt.org/dates-and-times"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tei="http://www.tei-c.org/ns/1.0"
xmlns="http://www.tei-c.org/ns/1.0"
exclude-result-prefixes="tei edate" version="1.0">
<!--
P4 to P5 converter
Stuart Yeates <stuart.yeates@VUW.AC.NZ>
based on a stylesheet by
Sebastian Rahtz <sebastian.rahtz@oucs.ox.ac.uk>
$Date: 2008-02-16 03:30:22 +1300 (Sat, 16 Feb 2008) $ $Id: p4top5.xsl 4420 2008-02-15 14:30:22Z rahtz $
Copyright 2007 TEI Consortium
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and any associated documentation gfiles (the
``Software''), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
-->
<xsl:output method="xml" encoding="utf-8"
cdata-section-elements="tei:eg" omit-xml-declaration="no"/>
<xsl:variable name="processor">
<xsl:value-of select="system-property('xsl:vendor')"/>
</xsl:variable>
<xsl:variable name="today">
<xsl:choose>
<xsl:when test="function-available('edate:date-time')">
<xsl:value-of select="edate:date-time()"/>
</xsl:when>
<xsl:when test="contains($processor,'SAXON')">
<xsl:value-of select="Date:toString(Date:new())"
xmlns:Date="/java.util.Date"/>
</xsl:when>
<xsl:otherwise>0000-00-00</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="uc">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:variable name="lc">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="namespace-uri()=''">
<xsl:element namespace="http://www.tei-c.org/ns/1.0" name="{local-name(.)}">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|processing-instruction()|comment()">
<xsl:copy/>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
<!-- change of name, or replaced by another element -->
<xsl:template match="teiCorpus.2">
<teiCorpus xsi:schemaLocation="http://www.tei-c.org/ns/1.0 nzetc-p5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</teiCorpus>
</xsl:template>
<xsl:template match="witness/@sigil">
<xsl:attribute name="xml:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="witList">
<listWit>
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</listWit>
</xsl:template>
<xsl:template match="TEI.2">
<TEI xsi:schemaLocation="http://www.tei-c.org/ns/1.0 nzetc-p5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</TEI>
</xsl:template>
<xsl:template match="xref">
<xsl:element namespace="http://www.tei-c.org/ns/1.0" name="ref">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="xptr">
<xsl:element namespace="http://www.tei-c.org/ns/1.0" name="ptr">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="figure/@url"/>
<xsl:template match="figure[@url]">
<figure>
<xsl:apply-templates select="@id"/>
<xsl:value-of select="@id"/>/
<xsl:value-of select="@n"/>/
<xsl:value-of select="@url"/>
<graphic>
<xsl:apply-templates select="@n|@url"/>
<xsl:apply-templates select="@id" mode="graphic"/>
</graphic>
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
</figure>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="figure/@entity"/>
<xsl:template match="figure[@entity]">
<xsl:variable name="entity">
<xsl:choose>
<xsl:when test="contains(@entity,'.')">
<xsl:value-of select="substring-before(@entity, '.')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@entity"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mimetype">
<xsl:choose>
<xsl:when test="contains(@entity,'.gif')">
<xsl:text>image/gif</xsl:text>
</xsl:when>
<xsl:when test="contains(@entity,'.pdf')">
<xsl:text>application/pdf</xsl:text>
</xsl:when>
<xsl:when test="contains(@entity,'.jpg')">
<xsl:text>image/jpeg</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>image/jpeg</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="url">
<xsl:choose>
<xsl:when test="contains(@entity,'.gif')">
<xsl:value-of select="@entity"/>
</xsl:when>
<xsl:when test="contains(@entity,'.pdf')">
<xsl:value-of select="@entity"/>
</xsl:when>
<xsl:when test="contains(@entity,'.jpg')">
<xsl:value-of select="@entity"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(@entity,'.jpg')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<figure>
<xsl:attribute name="xml:id"><xsl:value-of select="@id"/></xsl:attribute>
<graphic>
<xsl:attribute name="url"><xsl:value-of select="$url"/></xsl:attribute>
<xsl:attribute name="mimeType"><xsl:value-of select="$mimetype"/></xsl:attribute>
<xsl:attribute name="xml:id"><xsl:value-of select="concat(@id, '-g')"/></xsl:attribute>
<xsl:apply-templates select="@n"/>
</graphic>
<xsl:apply-templates select="*|text()|comment()|processing-instruction()"/>
</figure>
</xsl:template>
<xsl:template match="event">
<incident>
<xsl:apply-templates select="@*|*|text()|comment()|processing-instruction()"/>
</incident>
</xsl:template>
<xsl:template match="state">
<refState>
<xsl:apply-templates select="@*|*|text()|comment()|processing-instruction()"/>
</refState>
</xsl:template>
<xsl:template match="language">
<xsl:element namespace="http://www.tei-c.org/ns/1.0" name="language">
<xsl:if test="@id">
<xsl:attribute name="ident">
<xsl:choose>
<xsl:when test="@id='eng'"><xsl:text>en</xsl:text></xsl:when>
<xsl:when test="@id='moa'"><xsl:text>mi</xsl:text></xsl:when>
<xsl:when test="@id='mao'"><xsl:text>mi</xsl:text></xsl:when>
<xsl:when test="@id='rap'"><xsl:text>rap</xsl:text></xsl:when>
<xsl:when test="@id='SAMPA'"><xsl:text>x-sampa</xsl:text></xsl:when>
<xsl:otherwise><xsl:value-of select="@id"/></xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
</xsl:element>
</xsl:template>
<!-- attributes lost -->
<!-- dropped from TEI. Added as new change records later -->
<xsl:template match="@date.created"/>
<xsl:template match="@date.updated"/>
<!-- dropped from TEI. No replacement -->
<xsl:template match="refsDecl/@doctype"/>
<!-- dates -->
<xsl:template match="dateRange">
<date>
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</date>
</xsl:template>
<xsl:template match="dateRange/@from">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="dateRange/@to">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="date/@value|time/@value|docDate/@value">
<xsl:variable name="normal">
<xsl:choose>
<!-- unknown years encoded badly -->
<xsl:when test="starts-with(.,'0000-')">
<xsl:value-of select="concat('--',substring-after(.,'0000-'))"/>
</xsl:when>
<!-- days encoded badly -->
<xsl:when test="string-length(.)=9 and substring(.,8,1)='-'">
<xsl:value-of select="substring(.,0,8)"/>-0<xsl:value-of select="substring(.,9,1)"/>
</xsl:when>
<!-- months encoded badly -->
<xsl:when test="string-length(.)=9 and not (substring(.,8,1)='-')">
<xsl:value-of select="substring(.,0,6)"/>-0<xsl:value-of select="substring(.,8,1)"/>
</xsl:when>
<!-- unknown months and days encoded badly -->
<xsl:when test="string-length(.)=10 and contains(.,'-00-00')">
<xsl:value-of select="substring(.,0,4)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:attribute name="when">
<xsl:value-of select="$normal"/>
</xsl:attribute>
</xsl:template>
<!-- eat dates with question marks in them (all are automatically generated)-->
<xsl:template match="date[contains(@value,'?')]|dateRange[contains(@to,'?')]|dateRange[contains(@from,'?')]">
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
</xsl:template>
<!-- format of the dates in the maori legal corpus file are bad and
don't comply with the stricter schema. eat their values. -->
<!-- more tei/legalmaoriarchive.teiCorpus | grep 'xi:include' | sed 's/<xi:include href="/or @id="/' | sed 's/.xml"\/>/"/'-->
<xsl:template match="/TEI.2[@id='Auc1873-1909Proc'
or @id='Auc1911NgaM'
or @id='Auc1912NgaM'
or @id='BIM1032Epam'
or @id='BIM1192Kape'
or @id='BIM1195Huin'
or @id='BIM1196Tong'
or @id='BIM1203Wiki'
or @id='BIM1204KiaH'
or @id='BIM1205KoNg'
or @id='BIM1250Kare'
or @id='BIM1251Kare'
or @id='BIM1269Meih'
or @id='BIM1310TeWa'
or @id='BIM1336West'
or @id='BIM1341Panu'
or @id='BIM1346Tawh'
or @id='BIM1386Nati'
or @id='BIM1390Paep'
or @id='BIM1427Tuu'
or @id='BIM1518Ehoa'
or @id='BIM1563Hepi'
or @id='BIM205KiNg'
or @id='BIM496Evid'
or @id='BIM521Ngat'
or @id='BIM533Kaho'
or @id='BIM534Frie'
or @id='BIM554Kawa'
or @id='BIM577Panu'
or @id='BIM588Tawh'
or @id='BIM594Furt'
or @id='BIM595Ngar'
or @id='BIM596Kian'
or @id='BIM597KiNg'
or @id='BIM623Puka'
or @id='BIM635Tino'
or @id='BIM636Nati'
or @id='BIM646Lett'
or @id='BIM658Whak'
or @id='BIM666Runa'
or @id='BIM673Tumu'
or @id='BIM675Kaiw'
or @id='BIM678Peti'
or @id='BIM685Peti'
or @id='BIM689Haer'
or @id='BIM694Runa'
or @id='BIM697Pueh'
or @id='BIM698Wita'
or @id='BIM737Kara'
or @id='BIM753Heta'
or @id='BIM754Kuik'
or @id='BIM762Rang'
or @id='BIM763Hiri'
or @id='BIM764Hira'
or @id='BIM765Tami'
or @id='BIM767Paor'
or @id='BIM781Inoi'
or @id='BIM782Kawe'
or @id='BIM783Timb'
or @id='BIM787Hena'
or @id='BIM814Mohi'
or @id='BIM825Hepe'
or @id='BIM840TeWa'
or @id='BIM854Kuin'
or @id='BIM859Kawe'
or @id='BIM867Tene'
or @id='BIM868Panu'
or @id='BIM869KiNg'
or @id='BIM870Rang'
or @id='BIM872Puka'
or @id='BIM873TeHa'
or @id='BIM874Tika'
or @id='BIM875Tomo'
or @id='BIM876Hena'
or @id='BIM885Peti'
or @id='BIM935Nati'
or @id='BIM952Panu'
or @id='BIMS36Kahi'
or @id='BIMs310Chur'
or @id='Gov1879Ture'
or @id='Gov1880Ture'
or @id='Gov1881NgaT'
or @id='Gov1903Acts'
or @id='Gov1904Acts'
or @id='Gov1905Acts'
or @id='Gov1906Acts'
or @id='Gov1907Acts'
or @id='Gov1908Acts'
or @id='Gov1909Acts'
or @id='Gov1910Acts'
or @id='HePPuka'
or @id='HuiMaor'
or @id='IndRitu'
or @id='KawRena'
or @id='Kot1894Kore'
or @id='Mac01Comp'
or @id='Mac02Comp'
or @id='MacRepo'
or @id='MacWhak'
or @id='MaoKore'
or @id='MaoPare'
or @id='MarKoNg'
or @id='MarOutl'
or @id='NZGNati'
or @id='NZPCorr'
or @id='NZPHous'
or @id='NZPPeti'
or @id='NZPRoya'
or @id='NZPa1900NgaK'
or @id='NZPa1901NgaK'
or @id='NZPa1902NgaK'
or @id='NZPa1904-5NgaK'
or @id='NZPaV01NgaK'
or @id='NZPaV02NgaK'
or @id='NZPaV03NgaK'
or @id='NZPaV04NgaK'
or @id='Nat1876Repo'
or @id='Nat1877Repo'
or @id='Nat1878Repo'
or @id='Nat1879Repo-1'
or @id='Nat1879Repo-2'
or @id='Nat1880Repo'
or @id='Nat1881Repo'
or @id='Nat1882Repo'
or @id='Nat1883Repo'
or @id='Nat1884Repo-2'
or @id='Nat1885Repo'
or @id='Nat1887Repo-1'
or @id='Nat1887Repo-2'
or @id='Nat1888Repo'
or @id='Nat1889Repo'
or @id='Nat1890Repo'
or @id='Nat1891Repo-2'
or @id='Nat1892Repo'
or @id='Nat1893Repo'
or @id='Nat1894Repo'
or @id='Nat1895Repo'
or @id='Nat1896Repo'
or @id='Nat1897Repo'
or @id='Nat1898Repo'
or @id='Nat1899Repo'
or @id='Nat1900Repo'
or @id='Nat1901Repo'
or @id='Nat1902Repo'
or @id='Nat1903Repo'
or @id='Nat1904Repo'
or @id='Nat1905Repo'
or @id='Nat1906Repo'
or @id='Nat1907Repo'
or @id='Nat1908Repo'
or @id='PunLett'
or @id='SedWhai'
or @id='TaiProp'
or @id='TeWRetu'
or @id='Tur01Nort'
or @id='Tur01Plan'
or @id='Tur02Nort'
or @id='Tur02Plan'
or @id='TurEpit'
or @id='TurOldP'
or @id='TurWhen'
or @id='Wai1861Mahi'
or @id='Wai1863Mahi'
or @id='Wai864Mahi'
or @id='Wai1865Mahi'
or @id='Wai1872NgaM'
or @id='Wai1874NgaM'
or @id='Wai1875NgaM'
or @id='Wai1887NgaM'
or @id='Wai1891NgaM'
or @id='Wai1896NgaM'
or @id='Wait1872NgaM'
or @id='WesRepo'
or @id='WhaEasy'
]/text//date/@value"/>
<!-- attributes changed name -->
<xsl:template match="@url">
<xsl:attribute name="target">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@doc">
<xsl:attribute name="target">
<xsl:value-of select="unparsed-entity-uri(.)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@id">
<xsl:choose>
<xsl:when test="parent::lang">
<xsl:attribute name="ident">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:if test=".!=''">
<xsl:attribute name="xml:id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@lang">
<xsl:attribute name="xml:lang">
<xsl:choose>
<xsl:when test=".='eng'"><xsl:text>en</xsl:text></xsl:when>
<xsl:when test=".='moa'"><xsl:text>mi</xsl:text></xsl:when>
<xsl:when test=".='rap'"><xsl:text>rap</xsl:text></xsl:when>
<xsl:when test=".='SAMPA'"><xsl:text>x-sampa</xsl:text></xsl:when>
<xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="change/@date"/>
<xsl:template match="date/@certainty">
<xsl:attribute name="cert">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- all pointing attributes preceded by # -->
<xsl:template match="variantEncoding/@location|num/@value">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="@ana|@active|@adj|@adjFrom|@adjTo|@children|@children|@class|@code|@code|@copyOf|@corresp|@decls|@domains|@end|@exclude|@fVal|@feats|@follow|@from|@hand|@inst|@langKey|@location|@mergedin|@new|@next|@old|@origin|@otherLangs|@parent|@passive|@perf|@prev|@render|@resp|@sameAs|@scheme|@script|@select|@since|@start|@synch|@target|@targetEnd|@to|@to|@value|@value|@who|@wit">
<xsl:attribute name="{name(.)}">
<xsl:call-template name="splitter">
<xsl:with-param name="val">
<xsl:value-of select="."/>
</xsl:with-param>
</xsl:call-template>
</xsl:attribute>
</xsl:template>
<xsl:template name="splitter">
<xsl:param name="val"/>
<xsl:choose>
<xsl:when test="not(starts-with($val,'#'))">
<xsl:text>#</xsl:text>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="contains($val,' ')">
<xsl:value-of select="substring-before($val,' ')"/>
<xsl:text> </xsl:text>
<xsl:call-template name="splitter">
<xsl:with-param name="val">
<xsl:value-of select="substring-after($val,' ')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$val"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- fool around with selected elements -->
<!-- hand stuff -->
<xsl:template match="hand">
<handNote>
<xsl:apply-templates select="@*|*|text()|comment()|processing-instruction()"/>
</handNote>
</xsl:template>
<xsl:template match="handList">
<handNotes>
<xsl:apply-templates select="@*|*|text()|comment()|processing-instruction()"/>
</handNotes>
</xsl:template>
<!-- TODO fix me, this should be allowed -->
<xsl:template match="bibl/imprint">
<xsl:apply-templates select="*|text()|comment()|processing-instruction()"/>
</xsl:template>
<xsl:template match="editionStmt/editor">
<respStmt>
<xsl:apply-templates select="@*[local-name()!='role']"/>
<resp><xsl:value-of select="@role"/></resp>
<name><xsl:apply-templates/></name>
</respStmt>
</xsl:template>
<!-- header -->
<xsl:template match="teiHeader">
<teiHeader>
<xsl:apply-templates select="@*|*|comment()|processing-instruction()"/>
<xsl:if test="not(revisionDesc) and (@date.created or @date.updated)">
<revisionDesc>
<xsl:if test="@date.updated">
<change>
<label>updated</label>
<date>
<xsl:value-of select="@date.updated"/>
</date>
<label>Date edited</label>
</change>
</xsl:if>
<xsl:if test="@date.created">
<change>
<label>created</label>
<date>
<xsl:value-of select="@date.created"/>
</date>
<label>Date created</label>
</change>
</xsl:if>
</revisionDesc>
</xsl:if>
<!--
<change when="{$today}">Converted to TEI P5 XML by p4top5.xsl
written by Sebastian
Rahtz at Oxford University Computing Services.</change>
</revisionDesc>
</xsl:if>
-->
</teiHeader>
</xsl:template>
<xsl:template match="revisionDesc">
<revisionDesc>
<xsl:apply-templates
select="@*|*|comment()|processing-instruction()"/>
</revisionDesc>
</xsl:template>
<xsl:template match="publicationStmt">
<publicationStmt>
<xsl:apply-templates select="@*|*|comment()|processing-instruction()"/>
<!--
<availability>
<p>Licensed under <ptr target="http://creativecommons.org/licenses/by-sa/2.0/uk/"/></p>
</availability>
-->
</publicationStmt>
</xsl:template>
<!-- space does not have @extent any more -->
<xsl:template match="space/@extent">
<xsl:attribute name="quantity">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- tagsDecl has a compulsory namespace child now -->
<xsl:template match="tagsDecl">
<xsl:if test="*">
<tagsDecl>
<namespace name="http://www.tei-c.org/ns/1.0">
<xsl:apply-templates select="*|comment()|processing-instruction"/>
</namespace>
</tagsDecl>
</xsl:if>
</xsl:template>
<!-- orgTitle inside orgName? redundant -->
<xsl:template match="orgName/orgTitle">
<xsl:apply-templates/>
</xsl:template>
<!-- no need for empty <p> in sourceDesc -->
<!-- actually we do need these when it's all there is
<xsl:template match="sourceDesc/p[string-length(.)=0]"/>
-->
<!-- start creating the new choice element -->
<xsl:template match="corr[@sic]">
<choice>
<corr>
<xsl:value-of select="text()" />
</corr>
<sic>
<xsl:value-of select="@sic" />
</sic>
</choice>
</xsl:template>
<xsl:template match="gap/@desc">
<desc>
<xsl:value-of select="."/>
</desc>
</xsl:template>
<xsl:template match="sic[@corr]">
<choice>
<sic>
<xsl:apply-templates/>
</sic>
<corr>
<xsl:value-of select="@corr" />
</corr>
</choice>
</xsl:template>
<xsl:template match="abbr[@expan]">
<choice>
<abbr>
<xsl:apply-templates/>
</abbr>
<expan>
<xsl:value-of select="@expan" />
</expan>
</choice>
</xsl:template>
<xsl:template match="expan[@abbr]">
<choice>
<expan>
<xsl:apply-templates/>
</expan>
<abbr>
<xsl:value-of select="@abbr" />
</abbr>
</choice>
</xsl:template>
<!-- special consideration for <change> element -->
<xsl:template match="change">
<change>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="item/@*"/>
<xsl:apply-templates select="date"/>
<xsl:if test="respStmt/resp">
<label>
<xsl:value-of select="respStmt/resp/text()"/>
</label>
</xsl:if>
<xsl:for-each select="respStmt/name">
<name>
<xsl:apply-templates
select="@*|*|comment()|processing-instruction()|text()"/>
</name>
</xsl:for-each>
<xsl:for-each select="item">
<xsl:apply-templates
select="*|comment()|processing-instruction()|text()"/>
</xsl:for-each>
<xsl:apply-templates select="comment()"/>
</change>
</xsl:template>
<xsl:template match="respStmt[resp]">
<respStmt>
<xsl:apply-templates select="@*"/>
<xsl:choose>
<xsl:when test="resp/name">
<resp>
<xsl:value-of select="resp/text()"/>
</resp>
<xsl:for-each select="resp/name">
<name>
<xsl:apply-templates/>
</name>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*|comment()|processing-instruction()|text()"/>
</xsl:otherwise>
</xsl:choose>
</respStmt>
</xsl:template>
<xsl:template match="q/@direct"/>
<xsl:template match="q">
<q>
<xsl:apply-templates
select="@*|*|comment()|processing-instruction()|text()"/>
</q>
</xsl:template>
<!-- if we are reading the P4 with a DTD,
we need to avoid copying the default values
of attributes -->
<xsl:template match="@targOrder">
<xsl:if test="not(translate(.,$uc,$lc) ='u')">
<xsl:attribute name="targOrder">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@opt">
<xsl:if test="not(translate(.,$uc,$lc) ='n')">
<xsl:attribute name="opt">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@to">
<xsl:if test="not(translate(.,$uc,$lc) ='ditto')">
<xsl:attribute name="to">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@default">
<xsl:choose>
<xsl:when test="translate(.,$uc,$lc)= 'no'"/>
<xsl:otherwise>
<xsl:attribute name="default">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@part">
<xsl:if test="not(translate(.,$uc,$lc) ='n')">
<xsl:attribute name="part">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@full">
<xsl:if test="not(translate(.,$uc,$lc) ='yes')">
<xsl:attribute name="full">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@from">
<xsl:if test="not(translate(.,$uc,$lc) ='root')">
<xsl:attribute name="from">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@status">
<xsl:choose>
<xsl:when test="parent::teiHeader">
<xsl:if test="not(translate(.,$uc,$lc) ='new')">
<xsl:attribute name="status">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:when>
<xsl:when test="parent::del">
<xsl:if test="not(translate(.,$uc,$lc) ='unremarkable')">
<xsl:attribute name="status">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="status">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@place">
<xsl:if test="not(translate(.,$uc,$lc) ='unspecified')">
<xsl:attribute name="place">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@sample">
<xsl:if test="not(translate(.,$uc,$lc) ='complete')">
<xsl:attribute name="sample">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="@org">
<xsl:if test="not(translate(.,$uc,$lc) ='uniform')">
<xsl:attribute name="org">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<!-- do some normalisation -->
<xsl:template match="@type">
<xsl:variable name="normal">
<xsl:value-of select="translate(translate(.,'-',''),$uc,$lc)"/>
</xsl:variable>
<xsl:variable name="unsub">
<xsl:choose>
<xsl:when test="$normal='subsection'">section</xsl:when>
<xsl:when test="$normal='subsubsection'">section</xsl:when>
<xsl:when test="$normal='subsubsubsection'">section</xsl:when>
<xsl:when test="$normal='subsubsubsubsection'">section</xsl:when>
<xsl:when test="$normal='subsubsubsubsubsection'">section</xsl:when>
<xsl:when test="$normal='subsubsubsubsubsubsection'">section</xsl:when>
<xsl:when test="$normal='poem'">verse</xsl:when>
<xsl:when test="$normal='poetry'">verse</xsl:when>
<xsl:when test="$normal='acknowledgement'">acknowledgements</xsl:when>
<xsl:when test="$normal='reference'">references</xsl:when>
<xsl:when test="$normal='notes'">note</xsl:when>
<xsl:when test="$normal='chpater'">chapter</xsl:when>
<xsl:when test="$normal='front cover'">cover</xsl:when>
<xsl:when test="$normal='back cover'">cover</xsl:when>
<xsl:when test="$normal='author index'">index</xsl:when>
<xsl:when test="$normal='subject index'">index</xsl:when>
<xsl:when test="$normal='illus'">illustration</xsl:when>
<xsl:when test="$normal='article text'">article</xsl:when>
<xsl:when test="$normal='cutting from catalogue'">cutting</xsl:when>
<xsl:when test="contains(., ' ')"><xsl:value-of select="."/></xsl:when>
<xsl:otherwise>
<xsl:value-of select="$normal"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:attribute name="type">
<xsl:value-of select="$unsub"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="@type[contains(.,' ')][not (parent::*/@n)][not (normalize-space(.)='')]">
<xsl:attribute name="n">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- eat empty tyep attributes -->
<xsl:template match="@type[normalize-space(.)='']">
</xsl:template>
<xsl:template match="title/@type[.='245']">
<xsl:attribute name="type">marc245</xsl:attribute>
</xsl:template>
<!-- yes|no to boolean -->
<xsl:template match="@anchored">
<xsl:attribute name="anchored">
<xsl:choose>
<xsl:when test="translate(.,$uc,$lc)='yes'">true</xsl:when>
<xsl:when test="translate(.,$uc,$lc)='no'">false</xsl:when>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="sourceDesc/@default"/>
<xsl:template match="@tei">
<xsl:attribute name="tei">
<xsl:choose>
<xsl:when test="translate(.,$uc,$lc)='yes'">true</xsl:when>
<xsl:when test="translate(.,$uc,$lc)='no'">false</xsl:when>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="textClass/@default|biblFull/@default">
<xsl:attribute name="default">
<xsl:choose>
<xsl:when test="translate(.,$uc,$lc)='yes'">true</xsl:when>
<xsl:when test="translate(.,$uc,$lc)='no'">false</xsl:when>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="@langKey"/>
<xsl:template match="@TEIform"/>
<!-- assorted atts -->
<xsl:template match="@old"/>
<xsl:template match="@mergedin">
<xsl:attribute name="mergedIn">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- deal with the loss of div0 -->
<xsl:template match="div0|div1|div2|div3|div4|div5|div6">
<div>
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</div>
</xsl:template>
<!-- from Conal Tuohy -->
<xsl:template match="orig[@reg]">
<choice>
<orig><xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/></orig>
<reg><xsl:value-of select="@reg"/></reg>
</choice>
</xsl:template>
<xsl:template match="reg[@orig]">
<choice>
<reg><xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/></reg>
<orig><xsl:value-of select="@orig"/></orig>
</choice>
</xsl:template>
<xsl:template match="@orig|@reg"/>
<!-- Start of Stuart Yeates's stuff -->
<xsl:template match="name[not(@key)]">
<name>
<xsl:apply-templates select="@*"/>
<xsl:choose>
<xsl:when test="@reg">
<choice>
<orig><xsl:apply-templates select="*|processing-instruction()|comment()|text()"/></orig>
<reg><xsl:value-of select="@reg"/></reg>
</choice>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
</xsl:otherwise>
</xsl:choose>
</name>
</xsl:template>
<!-- schemes are now URLs -->
<xsl:template match="@scheme[contains (., 'nzetc-subjects')]">
<xsl:attribute name="scheme">http://www.nzetc.org/nzetc-subjects</xsl:attribute>
</xsl:template>
<xsl:template match="@scheme[contains (., 'nzetc-mads')]">
<xsl:attribute name="scheme">http://www.nzetc.org/nzetc-mads</xsl:attribute>
</xsl:template>
<xsl:template match="keywords[not(@scheme)]">
<keywords>
<xsl:attribute name="scheme">http://www.example.org/folksonomy</xsl:attribute>
<xsl:apply-templates select="@*|*|processing-instruction()|comment()|text()"/>
</keywords>
</xsl:template>
<!-- floatingText tag -->
<xsl:template match="text[not(parent::TEI|parent::TEI.2|parent::group)]">
<floatingText>
<xsl:apply-templates select="@*|*|processing-instruction()|comment()|text()"/>
</floatingText>
</xsl:template>
<xsl:template match="p[text][not(parent::quote)]|div[text][not(parent::quote)]">
<figure>
<xsl:apply-templates select="@*|*|processing-instruction()|comment()|text()"/>
</figure>
</xsl:template>
<xsl:template match="p[text][parent::quote]|div[text][parent::quote]">
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
</xsl:template>
<xsl:template match="figDesc/hi">
<emph>
<xsl:apply-templates select="@*|*|processing-instruction()|comment()|text()"/>
</emph>
</xsl:template>
<!-- create addSpans, ugly, ugly, ugly -->
<xsl:template match="add[p]">
<xsl:variable name="count" select="count(preceding::add[p])"/>
<addSpan>
<xsl:attribute name="spanTo">#addSpan-<xsl:value-of select="$count"/></xsl:attribute>
<xsl:apply-templates select="@*"/>
</addSpan>
<xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
<anchor>
<xsl:attribute name="xml:id">addSpan-<xsl:value-of select="$count"/></xsl:attribute>
</anchor>
</xsl:template>
<!-- eat empty lists-->
<xsl:template match="list[not(node())]"/>
<!-- eat empty titles-->
<xsl:template match="title[not(text())][not(child::*)]"/>
<!-- eat empty page numbers -->
<xsl:template match="pb/@n[.='']|div/@n[.='']"/>
<!-- fix an ugly cludge -->
<xsl:template match="xref/@type[starts-with(.,'http://')]">
<xsl:attribute name="target">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- move pbs from listBibls into bibls-->
<xsl:template match="bibl[parent::listBibl][following-sibling::*[1][local-name()='pb']]">
<xsl:element name="bibl">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
<xsl:apply-templates select="following-sibling::pb[1]"/>
</xsl:element>
</xsl:template>
<xsl:template match="listBibl/pb"/>
<!-- don't allow p's in change tags -->
<xsl:template match="change/item/p">
<xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
</xsl:template>
</xsl:stylesheet>