<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" >
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"  />
	<!-- 
	Ceri Binding (University of Glamorgan). Convert zThes XML to BS8723 (Core) XML:
	demonstrates the transformation from term-based to concept-based thesauri
	-->	
	       
	<xsl:template match="/">			
		
		<bs8723:Thesaurus xmlns="http://schema.bsi-global.com/BS8723-5/" xmlns:bs8723="http://schema.bsi-global.com/BS8723-5/" xsi:noNamespaceSchemaLocation="http://porism.tdmweb.co.uk/BS8723/BS8723-5-Core/XmlSchema/BS8723-5-Core.xsd" >				
				
			<!--Each preferred term will become a concept-->
			<xsl:for-each select="/Zthes/term[termType='PT']">
			
				<!--ThesaurusConcept-->
				<xsl:element name="bs8723:ThesaurusConcept">
					<xsl:attribute name="dc:identifier">
						<xsl:value-of select='termId'/>
					</xsl:attribute>
					
					<!--dcterms:created (mandatory)-->
					<xsl:element name="dcterms:created">		
						<xsl:choose>
							<xsl:when test="termCreatedDate">
								<xsl:value-of select="termCreatedDate" />
							</xsl:when>
							<xsl:otherwise>
								<xsl:text>1900-01-01</xsl:text> <!--arbitrary text to satisfy mandatory element-->
							</xsl:otherwise>
						</xsl:choose>
					</xsl:element>	
							
					<!--dcterms:modified-->				
					<xsl:if test="termModifiedDate">
						<xsl:element name="dcterms:modified">
							<xsl:value-of select="termModifiedDate" />
						</xsl:element>
					</xsl:if>					
					
					<!--ScopeNote-->
					<xsl:if test="termNote">
						<xsl:element name="bs8723:ScopeNote">
							<xsl:element name="bs8723:LexicalValue">
								<xsl:value-of select='termNote'/>
							</xsl:element>
						</xsl:element>
					</xsl:if>
				
					<!--PreferredTerm-->
					<xsl:element name="bs8723:PreferredTerm">
						
						<xsl:attribute name="dc:identifier">
							<xsl:value-of select='termId'/>
						</xsl:attribute>
					
						<!--LexicalValue-->
						<xsl:element name="bs8723:LexicalValue">
							<xsl:value-of select='termName'/>		
						</xsl:element>		
						
						<!--dcterms:created (mandatory)-->
						<xsl:element name="dcterms:created">		
							<xsl:choose>
								<xsl:when test="termCreatedDate">
									<xsl:value-of select="termCreatedDate" />
								</xsl:when>
								<xsl:otherwise>
									<xsl:text>1900-01-01</xsl:text> <!--arbitrary text to satisfy mandatory element-->
								</xsl:otherwise>
							</xsl:choose>
						</xsl:element>	
			
					
						<!--dcterms:modified-->				
						<xsl:if test="termModifiedDate">
							<xsl:element name="dcterms:modified">
								<xsl:value-of select="termModifiedDate" />
							</xsl:element>
						</xsl:if>
					</xsl:element> <!--PreferredTerm-->											
					
					<!--HasBroaderConcept, HasNarrowerConcept, HasRelatedConcept, NonPreferredTerm-->
					<xsl:call-template name="getRelationships">
						<xsl:with-param name="termId" select="termId" />
					</xsl:call-template>
							
				</xsl:element>	<!--ThesaurusConcept-->			
			</xsl:for-each>
		</bs8723:Thesaurus>  		
	</xsl:template>
	
	
	<!--getRelationships - produces HasBroaderConcept, HasNarrowerConcept, HasRelatedConcept, NonPreferredTerm-->
	<xsl:template name="getRelationships">
		<xsl:param name="termId" />
		
		<xsl:for-each select="/Zthes/term[termId=$termId]/relation">
			<xsl:choose>
				<xsl:when test="relationType='BT'">
					<xsl:element name="bs8723:HasBroaderConcept">
						<xsl:value-of select='termId'/>
					</xsl:element>					
				</xsl:when>
				<xsl:when test="relationType='NT'">
					<xsl:element name="bs8723:HasNarrowerConcept">
						<xsl:value-of select='termId'/>
					</xsl:element>					
				</xsl:when>
				<xsl:when test="relationType='RT'">
					<xsl:element name="bs8723:HasRelatedConcept">
						<xsl:value-of select='termId'/>
					</xsl:element>					
				</xsl:when>	
				<xsl:when test="relationType='UF'">
					<xsl:element name="bs8723:NonPreferredTerm">
						<xsl:attribute name="dc:identifier">
							<xsl:value-of select="termId" />
						</xsl:attribute>
						<xsl:element name="bs8723:LexicalValue">
							<xsl:value-of select="termName" />
						</xsl:element>
						<xsl:element name="bs8723:USE">
							<xsl:value-of select="../termId" />
						</xsl:element>					
					</xsl:element>
				
				</xsl:when>			
			</xsl:choose>		
		</xsl:for-each>		
	</xsl:template>
	
</xsl:stylesheet>

