<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xts="http://www.xmlteam.com"
	xmlns:newsml="http://iptc.org/std/nar/2006-10-01/"
	xmlns:sportsml="http://iptc.org/std/SportsML/2006-10-18/"
>

<!-- In this template we put the NewsML G2 around the SportsML before passing on to the templates that operate on the inline SportsML (at or near the "apply-templates" at line 148). The SportsML files are declared "newsItem" with item metadata (itemMeta), content metadata (contentMeta) and the content itself (the SportsML as child of contentSet/inlineXML). -->

<xsl:template match="/">

<!-- These first two params are dummies that i put here in case they are handy as externally generated params. They do no harm otherwise. -->

<xsl:param name="path"/>
<xsl:param name="doc"/>

<xsl:variable name="doc-id" select="sports-content/sports-metadata/@doc-id"/>
<xsl:variable name="league-key" select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='league']/@code-key"/>
<xsl:variable name="sport-key" select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='sport']/@code-key"/>
<xsl:variable name="sport-name" select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='sport']/@code-name"/>
<xsl:variable name="league-name" select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='league']/@code-name"/>
<xsl:variable name="pub-status">
<xsl:choose>
<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='priority']/@code-key = 'high'">high</xsl:when>
<xsl:otherwise>normal</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fixture-key" select="sports-content/sports-metadata/@fixture-key"/>

<!-- Begin the newItem wrapper built by extracting values from the SportsML, either with explicit xpaths or using the variables declared above -->

<newsItem xmlns="http://iptc.org/std/nar/2006-10-01/">
<xsl:attribute name="schema">0.16</xsl:attribute>
<xsl:attribute name="version">1</xsl:attribute>
<xsl:attribute name="conformance">power</xsl:attribute>
<xsl:attribute name="xml:lang">en-US</xsl:attribute>
<xsl:attribute name="guid"><xsl:value-of select="$doc-id"/></xsl:attribute>
	<catalogRef href="http://iptc.org/std-dev/NAR/1.0/specification/IPTC-TempCatalog-inc_3.xml"/>
	<catalogRef href="http://xmlteam.com/NAR/1.0/specification/XMLTeamSportsCodes.xml"/>
	<itemMeta>
		<itemClass qcode="ccls:sportsContent"/>
		<provider qcode="web:xmlteam.com"/>
		<versionCreated>
			<xsl:call-template name="xml-date-time">
			<xsl:with-param name="date-time" select="sports-content/sports-metadata/@date-time"/>
			<xsl:with-param name="not-att" select="'yes'"/>
			</xsl:call-template>
		</versionCreated>
		<pubStatus>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('stat:',$pub-status)"/></xsl:attribute>
		</pubStatus>
		<fileName><xsl:value-of select="$doc-id"/></fileName>
		<instanceOf>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('fixture:',$fixture-key)"/></xsl:attribute>
			<name><xsl:value-of select="sports-content/sports-metadata/@fixture-name"/></name>
		</instanceOf>
	</itemMeta>
	<contentMeta>
		<contentCreated>
			<xsl:call-template name="xml-date-time">
			<xsl:with-param name="date-time" select="sports-content/sports-metadata/@date-time"/>
			<xsl:with-param name="not-att" select="'yes'"/>
			</xsl:call-template>
		</contentCreated>
		<located>
		<xsl:attribute name="qcode">
			<xsl:choose>
			<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'sportsnetwork.com'">city:Philadelphia</xsl:when>
			<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'forecaster.ca'">city:Toronto</xsl:when>
			<xsl:otherwise></xsl:otherwise>
			</xsl:choose>
		</xsl:attribute>
			<broader>
			<xsl:attribute name="qcode">
				<xsl:choose>
				<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'sportsnetwork.com'">reg:Pennsylvania</xsl:when>
				<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'forecaster.ca'">reg:Ontario</xsl:when>
				<xsl:otherwise></xsl:otherwise>
				</xsl:choose>
			</xsl:attribute>
			</broader>
			<broader>
			<xsl:attribute name="qcode">
				<xsl:choose>
				<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'sportsnetwork.com'">cntry:US</xsl:when>
				<xsl:when test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key = 'forecaster.ca'">cntry:Canada</xsl:when>
				<xsl:otherwise></xsl:otherwise>
				</xsl:choose>
			</xsl:attribute>
			</broader>
		</located>
		<infoSource>
			<xsl:attribute name="literal"><xsl:value-of select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='publisher']/@code-key"/></xsl:attribute>
		</infoSource>
		<creator qcode="web:xmlteam.com">
		<name>XML Team Solutions, Inc.</name>
		</creator>
		<altId type="idtype:tsn-dtd">
			<xsl:attribute name="id"><xsl:value-of select="sports-content/@xts:systemid"/></xsl:attribute>
		</altId>
		<altId type="idtype:tsn-id">
			<xsl:attribute name="id">sportsnetwork.com-<xsl:value-of select="sports-content/@xts:tsnid"/></xsl:attribute>
		</altId>
		<altId type="idtype:revision-id">
			<xsl:attribute name="id"><xsl:value-of select="sports-content/sports-metadata/@revision-id"/></xsl:attribute>
		</altId>
		<genre>
			<xsl:attribute name="type">sml-genre:docClass</xsl:attribute>
			<xsl:attribute name="qcode">docClass:<xsl:value-of select="sports-content/sports-metadata/@document-class"/></xsl:attribute>
			<narrower>
				<xsl:attribute name="qcode"><xsl:value-of select="concat('fixture:',$fixture-key)"/></xsl:attribute>
			</narrower>
		</genre>
		<genre>
			<xsl:attribute name="type">sml-genre:fixture</xsl:attribute>
			<xsl:attribute name="qcode">fixture:<xsl:value-of select="$fixture-key"/></xsl:attribute>
			<broader>
				<xsl:attribute name="qcode"><xsl:value-of select="concat('docClass:',sports-content/sports-metadata/@document-class)"/></xsl:attribute>
			</broader>
		</genre>
		<language>
			<xsl:attribute name="tag">en-US</xsl:attribute>
		</language>
		<xsl:if test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='season']"> <subject>
			<xsl:attribute name="type">subj:season-year</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='season']/@code-key"/></xsl:attribute>
		</subject>
		</xsl:if>
		<xsl:if test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='season-type']">
		<subject>
			<xsl:attribute name="type">subj:season-type</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='season-type']/@code-key"/></xsl:attribute>
		</subject>
		</xsl:if>
		<subject type="subj:sport" qcode="subj:15000000">
			<name>sport</name>
		</subject>
		<subject type="subj:sport" qcode="subj:{$sport-key}">
			<name><xsl:value-of select="$sport-name"/></name>
			<broader qcode="subj:15000000"/>
		</subject>
		<subject type="subj:league" qcode="league:{$league-key}">
			<name><xsl:value-of select="$league-name"/></name>
		</subject>
		<xsl:if test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='conference']">
		<subject>
			<xsl:attribute name="type">subj:conference</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('conference:',sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='conference']/@code-key)"/></xsl:attribute>
			<name><xsl:value-of select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='conference']/@code-name"/></name>
			<broader qcode="league:{$league-key}"/>
		</subject>
		</xsl:if>
		<xsl:if test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='team']">
		<xsl:for-each select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='team']">
		<subject>
			<xsl:attribute name="type">subj:team</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('team:',@code-key)"/></xsl:attribute>
			<name><xsl:value-of select="@code-name"/></name>
		</subject>
		</xsl:for-each>
		</xsl:if>
		<xsl:if test="sports-content/sports-event/event-metadata">
		<subject>
			<xsl:attribute name="type">subj:event</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('event:',sports-content/sports-event/event-metadata/@event-key)"/></xsl:attribute>
		</subject>
		</xsl:if>
		<xsl:if test="($fixture-key='post-event-coverage' or $fixture-key='pre-event-coverage') and sports-content/sports-event/team/player">
		<xsl:for-each select="sports-content/sports-event/team/player">
		<subject>
			<xsl:attribute name="type">subj:person</xsl:attribute>
			<xsl:attribute name="qcode"><xsl:value-of select="concat('person:',player-metadata/@player-key)"/></xsl:attribute>
			<name>
				<xsl:choose>
				<xsl:when test="player-metadata/name/@full">
					<xsl:value-of select="player-metadata/name/@full"/>
				</xsl:when>
				<xsl:when test="player-metadata/name/@first">
					<xsl:value-of select="player-metadata/name/@first"/><xsl:text> </xsl:text><xsl:value-of select="player-metadata/name/@last"/>
				</xsl:when>
				<xsl:otherwise></xsl:otherwise>
				</xsl:choose>
			</name>
			<sameAs>
				<xsl:attribute name="qcode">fssID:<xsl:value-of select="45678 + position()"/></xsl:attribute>
			</sameAs>			
		</subject>
		</xsl:for-each>
		</xsl:if>
		<headline><xsl:value-of select="sports-content/sports-metadata/sports-title"/></headline>
		<slugline><xsl:value-of select="sports-content/sports-metadata/@xts:tsnslug"/></slugline>
		<xts:filePath><xsl:value-of select="sports-content/@path-id"/></xts:filePath>
		<xsl:if test="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='action-listing']">		<xts:action-listing><xsl:value-of select="sports-content/sports-metadata/sports-content-codes/sports-content-code[@code-type='action-listing']/@code-key"/></xts:action-listing>
		</xsl:if>
	</contentMeta>
	<contentSet>
		<xsl:apply-templates/>
	</contentSet>
</newsItem>
</xsl:template>

<!-- the following templates operate on the inlineXML (SportsML). Most of the markup is passed through intact except for a few cses where modifications are needed for NAR compliance. These are: key values, datestamps, and names, as explained below. -->

<xsl:template match="sports-content[sports-event | schedule | statistic]">
	<inlineXML xmlns="http://iptc.org/std/nar/2006-10-01/">
		<xsl:attribute name="contenttype">application/sportsml+xml</xsl:attribute>
		<sports-content>
			<xsl:choose>
				<xsl:when test="sports-event">
					<xsl:apply-templates select="sports-event"/>
				</xsl:when>
				<xsl:when test="sports-content/schedule">
					<xsl:apply-templates select="schedule"/>
				</xsl:when>
				<xsl:when test="statistic">
					<xsl:apply-templates select="statistic"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:apply-templates/>
				</xsl:otherwise>
			</xsl:choose>
		</sports-content>
	</inlineXML>
	<xsl:if test="article">
	<inlineXML xmlns="http://iptc.org/std/nar/2006-10-01/">
		<xsl:attribute name="contenttype">application/nitf+xml</xsl:attribute>
		<nitf>
		<xsl:apply-templates select="article"/>
		</nitf>
	</inlineXML>
	</xsl:if>
</xsl:template>

<!-- add "full" attribute to name in addition to "first" and "last". The latter two are not NAR compliant and will likely be namespaced in future -->

<xsl:template match="name">
	<xsl:element name="{name()}">
		<xsl:choose>
		<xsl:when test="@full">
			<xsl:apply-templates select="@* | node()" />
		</xsl:when>
		<xsl:otherwise>
			<xsl:apply-templates select="@* | node()" />
				<xsl:attribute name="full">
				<xsl:value-of select="@first"/><xsl:text> </xsl:text><xsl:value-of select="@last" />
			</xsl:attribute>
		</xsl:otherwise>
		</xsl:choose>
	</xsl:element>
</xsl:template>

<!-- pass all remaining elements through -->

<xsl:template match="*">
	<xsl:element name="{name()}">
		<xsl:apply-templates select="@* | node()" />
	</xsl:element>
</xsl:template>

<!-- the following take all key values and turn them into qcodes -->

<xsl:template match="@code-key">
	<xsl:attribute name="{name()}">
		<xsl:value-of select="parent::sports-content-code/@code-type" />:<xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<xsl:template match="@event-key">
	<xsl:attribute name="{name()}">
		<xsl:text>event:</xsl:text><xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<xsl:template match="@team-key">
	<xsl:attribute name="{name()}">
		<xsl:text>team:</xsl:text><xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<xsl:template match="@player-key">
	<xsl:attribute name="{name()}">
		<xsl:text>player:</xsl:text><xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<xsl:template match="@fixture-key">
	<xsl:attribute name="{name()}">
		<xsl:text>fixture:</xsl:text><xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<!-- convert doc date-time and event start-date-time into XML dateTime -->

<xsl:template match="@date-time">
	<xsl:call-template name="xml-date-time">
		<xsl:with-param name="date-time" select="."/>
	</xsl:call-template>
</xsl:template>

<xsl:template match="@start-date-time">
	<xsl:call-template name="xml-date-time">
		<xsl:with-param name="date-time" select="."/>
	</xsl:call-template>
</xsl:template>

<xsl:template match="@date-coverage-value[parent::schedule-metadata]">
	<xsl:call-template name="xml-date-time">
		<xsl:with-param name="date-time" select="."/>
	</xsl:call-template>
</xsl:template>

<!-- pass all remaining attributes through -->

<xsl:template match="@*">
	<xsl:attribute name="{name()}">
		<xsl:value-of select="." />
	</xsl:attribute>
</xsl:template>

<!-- pass all remaining values through -->

<xsl:template match="text()">
	<xsl:if test="normalize-space()">
		<xsl:value-of select="." />
	</xsl:if>
</xsl:template>

<!-- Utilities -->
<!-- the date-time conversion template -->

<xsl:template name="xml-date-time">
<xsl:param name="date-time"/>
<xsl:param name="not-att"/>
<xsl:variable name="year" select="substring($date-time,0,5)"/>
<xsl:variable name="month" select="substring($date-time,5,2)"/>
<xsl:variable name="day" select="substring($date-time,7,2)"/>
<xsl:variable name="hour" select="substring($date-time,10,2)"/>
<xsl:variable name="minute" select="substring($date-time,12,2)"/>
<xsl:variable name="second" select="substring($date-time,14,2)"/>
<xsl:variable name="zone-hour" select="substring($date-time,16,3)"/>
<xsl:variable name="zone-minute" select="substring($date-time,19)"/>
	<xsl:choose>
	<xsl:when test="$not-att='yes'">
	<xsl:value-of select="$year"/>-<xsl:value-of select="$month"/>-<xsl:value-of select="$day"/>T<xsl:value-of select="$hour"/>:<xsl:value-of select="$minute"/>:<xsl:value-of select="$second"/><xsl:value-of select="$zone-hour"/>:<xsl:value-of select="$zone-minute"/>
	</xsl:when>
	<xsl:otherwise>
	<xsl:attribute name="{name()}">
	<xsl:value-of select="$year"/>-<xsl:value-of select="$month"/>-<xsl:value-of select="$day"/>T<xsl:value-of select="$hour"/>:<xsl:value-of select="$minute"/>:<xsl:value-of select="$second"/><xsl:value-of select="$zone-hour"/>:<xsl:value-of select="$zone-minute"/>
	</xsl:attribute>
	</xsl:otherwise>
	</xsl:choose>
</xsl:template>

</xsl:stylesheet>
