<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<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="/">
		<xsl:element name="Zthes">
			<xsl:attribute name="noNamespaceSchemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">../../XmlSchema/zthes-1.0.xsd</xsl:attribute>
			<!--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>
		</xsl:element>
	</xsl:template>
</xsl:stylesheet>

