<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:bs8723="http://schema.bsi-global.com/BS8723-5/" exclude-result-prefixes="bs8723 dc dcterms">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<!-- 
	Ceri Binding (University of Glamorgan). Convert BS8723 XML TO Zthes XML:
	demonstrates the transformation from concept-based to term-based thesauri
	-->
	<xsl:template match="/">
		<Zthes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://zthes.z3950.org/schema/zthes-1.0.xsd">
			
			<!--Each NonPreferredTerm will become a term record - type ND-->
			<xsl:for-each select="//bs8723:NonPreferredTerm">
				<!--term-->
				<xsl:element name="term">				
					<xsl:element name="termId"><xsl:value-of select="@dc:identifier"/></xsl:element>
					<xsl:element name="termName">	<xsl:value-of select="bs8723:LexicalValue"/>	</xsl:element>								
					<xsl:element name="termType">ND</xsl:element>
					<xsl:if test="@xml:lang">
						<xsl:element name="termLanguage"><xsl:value-of select="@xml:lang" /></xsl:element>
					</xsl:if>	
					<xsl:if test="dcterms:created">
						<xsl:element name="termCreatedDate"><xsl:value-of select="dcterms:created" /></xsl:element>
					</xsl:if>
					<xsl:if test="dcterms:modified">
						<xsl:element name="termModifiedDate"><xsl:value-of select="dcterms:modified" /></xsl:element>
					</xsl:if>				
				</xsl:element>
			</xsl:for-each>

			<!--Each ThesaurusConcept will become a term record - type PT-->
			<xsl:for-each select="/bs8723:Thesaurus/bs8723:ThesaurusConcept">
				
				<!--term-->
				<xsl:element name="term">
				
					<!--termId-->					
					<xsl:element name="termId">
						<xsl:value-of select="@dc:identifier"/>
					</xsl:element>
					
					<!--termName-->
					<xsl:element name="termName">
						<xsl:value-of select="bs8723:PreferredTerm/bs8723:LexicalValue"/>
					</xsl:element>
					
					<!--termType-->
					<xsl:element name="termType">
						<xsl:text>PT</xsl:text>
					</xsl:element>
					
					<xsl:if test="@xml:lang">
						<xsl:element name="termLanguage"><xsl:value-of select="@xml:lang" /></xsl:element>
					</xsl:if>						
										
					<!--termNote (if it exists)-->
					<xsl:if test="bs8723:ScopeNote/bs8723:LexicalValue">
						<xsl:element name="termNote">
							<xsl:attribute name="label">Scope</xsl:attribute>
							<xsl:value-of select="bs8723:ScopeNote/bs8723:LexicalValue"/>
						</xsl:element>						
					</xsl:if>		
					
					<!--termCreatedDate-->
					<xsl:if test="dcterms:created">
						<xsl:element name="termCreatedDate"><xsl:value-of select="dcterms:created" /></xsl:element>
					</xsl:if>
					
					<!--termModifiedDate-->
					<xsl:if test="dcterms:modified">
						<xsl:element name="termModifiedDate"><xsl:value-of select="dcterms:modified" /></xsl:element>
					</xsl:if>								
					
					<!--nonpreferred terms-->
					<xsl:for-each select="bs8723:NonPreferredTerm">
						<xsl:element name="relation">
							<xsl:element name="relationType">UF</xsl:element>
							<xsl:element name="termId"><xsl:value-of select="@dc:identifier" /></xsl:element>
							<xsl:element name="termName"><xsl:value-of select="bs8723:LexicalValue" /></xsl:element>
							<xsl:if test="@xml:lang">
								<xsl:element name="termLanguage"><xsl:value-of select="@xml:lang" /></xsl:element>
							</xsl:if>							
						</xsl:element>
					</xsl:for-each>

					
					<!--relation BT, NT, RT-->
					<xsl:for-each select="bs8723:HasBroaderConcept | bs8723:HasNarrowerConcept | bs8723:HasRelatedConcept">
						<xsl:variable name="termId" select="." />						
							
						<xsl:element name="relation">						
							
							<xsl:choose>
								<xsl:when test="local-name()='HasBroaderConcept'">
									<xsl:element name="relationType">BT</xsl:element>
								</xsl:when>
								<xsl:when test="local-name()='HasNarrowerConcept'">
									<xsl:element name="relationType">NT</xsl:element>
								</xsl:when>
								<xsl:when test="local-name()='HasRelatedConcept'">
									<xsl:element name="relationType">RT</xsl:element>
								</xsl:when>
							</xsl:choose>								
							
							<!--termId-->
							<xsl:element  name="termId">
								<xsl:value-of select="$termId" />
							</xsl:element>	
							
							<!--termName-->
							<xsl:element  name="termName">								
								<xsl:value-of select="//bs8723:ThesaurusConcept[@dc:identifier=$termId]/bs8723:PreferredTerm/bs8723:LexicalValue" />
							</xsl:element>
		
							<!--termType-->						
							<xsl:element  name="termType">
								<xsl:text>PT</xsl:text>								
							</xsl:element>						

						</xsl:element> <!--relation-->
					
					</xsl:for-each> <!--relation BT, NT, RT-->
					
				</xsl:element>	<!--term-->
			</xsl:for-each>
		</Zthes>
	</xsl:template>	
</xsl:stylesheet>

