<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:name="http://namesforlife.com/ns/name"
  xmlns:taxon="http://namesforlife.com/ns/taxon"
  xmlns:exemplar="http://namesforlife.com/ns/exemplar"
  xmlns:reference="http://namesforlife.com/ns/reference"
  xmlns:common="http://namesforlife.com/ns/common"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  exclude-result-prefixes="name taxon exemplar reference common"
  >

  <xsl:include href="common.xsl" />

  <xsl:output
    method="html"
    standalone="yes"
    encoding="iso-8859-1"
    omit-xml-declaration="yes"
    cdata-section-elements="pre script style"
    indent="yes"
    media-type="text/html"
  />

  <!-- Main Entry Point -->
  <xsl:template match="/name:name">
    <xsl:apply-templates select="." mode="anchor" />
  </xsl:template>

  <!-- Anchor -->
  <xsl:template match="name:name" mode="anchor">
    <xsl:apply-templates select="." mode="monograph" />
  </xsl:template>

  <!-- Breadcrumb -->
  <xsl:template match="name:name" mode="breadcrumb">
    <div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
      <a itemprop="url">
        <xsl:text>https://doi.org/</xsl:text>
        <xsl:value-of select="@doi" />
        <span itemprop="title"><xsl:apply-templates select="." mode="name-proper" /></span>
      </a>
    </div>
    <xsl:text>›</xsl:text>
    <div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
      <a itemprop="url">
        <xsl:text>https://doi.org/</xsl:text>
        <xsl:value-of select="taxon:taxon/@doi" />
        <span itemprop="title">Taxonomy</span>
      </a>
    </div>
    <xsl:if test="taxon:taxon/exemplar:exemplars/exemplar:exemplar[@doi=../../common:nomenclatural-type/@nomenclatural-type-exemplar]">
      <xsl:text>›</xsl:text>
      <div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
        <a itemprop="url">
          <xsl:text>https://doi.org/</xsl:text>
          <xsl:value-of select="taxon:taxon/exemplar:exemplars/exemplar:exemplar[@doi=../../common:nomenclatural-type/@nomenclatural-type-exemplar]/@doi" />
          <span itemprop="title">Type Strain</span>
        </a>
      </div>
    </xsl:if>
  </xsl:template>

  <!-- Monograph -->
  <xsl:template match="name:name" mode="monograph">
    <table class="anchor">
      <caption></caption>
      <thead></thead>
      <tbody>
        <tr>
          <td>
            <table class="monograph">
              <caption></caption>
              <thead></thead>
              <tbody>
                <xsl:apply-templates select="." mode="table-row-doi" />
                <xsl:apply-templates select="." mode="table-row-name" />
                <xsl:apply-templates select="." mode="table-row-name-status" />
                <xsl:apply-templates select="." mode="table-row-current-authority" />
                <xsl:apply-templates select="." mode="table-row-preferred-name" />
                <xsl:apply-templates select="." mode="table-row-taxonomic-rank" />
                <xsl:apply-templates select="." mode="table-row-nomenclatural-type" />
                <xsl:call-template name="table-row-empty" />
                <xsl:apply-templates select="." mode="table-row-taxon" />
                <xsl:if test="taxon:taxon/exemplar:exemplars/exemplar:exemplar[@doi=../../common:nomenclatural-type/@nomenclatural-type-exemplar]">
                  <xsl:apply-templates select="." mode="table-row-type-exemplar" />
                </xsl:if>
              </tbody>
              <tfoot></tfoot>
            </table>
          </td>
        </tr>
      </tbody>
      <tfoot></tfoot>
    </table>
  </xsl:template>

  <!-- Name DOI -->
  <xsl:template match="name:name" mode="table-row-doi">
    <tr class="doi">
      <td><div>Name DOI</div></td>
      <td><xsl:value-of select="@doi" /></td>
    </tr>
  </xsl:template>

  <!-- Name -->
  <xsl:template match="name:name" mode="table-row-name">
    <tr itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
      <td><div>Name</div></td>
      <td itemscope="itemscope" itemtype="http://schema.org/about"><xsl:apply-templates select="." mode="complete-link" /></td>
    </tr>
  </xsl:template>

  <!-- Name Status -->
  <xsl:template match="name:name" mode="table-row-name-status">
    <tr>
      <td><div>Name Status</div></td>
      <td><xsl:apply-templates select="common:nomenclature/common:name-status-group" mode="status" /></td>
    </tr>
  </xsl:template>

  <!-- Current Authority -->
  <xsl:template match="name:name" mode="table-row-current-authority">
    <tr>
      <td><div>Current Authority</div></td>
      <td><xsl:apply-templates select="common:nomenclature/common:name-status-group" mode="authority" /></td>
    </tr>
  </xsl:template>

  <!-- Preferred Name -->
  <xsl:template match="name:name" mode="table-row-preferred-name">
    <tr>
      <td><div>Preferred Name</div></td>
      <td>
        <xsl:call-template name="name-name-link">
          <xsl:with-param name="status-code" select="common:nomenclature/common:name-status-group/common:status/@status-code" />
          <xsl:with-param name="rank" select="common:nomenclature/common:name-status-group/common:identifier/@rank" />
          <xsl:with-param name="name" select="common:nomenclature/common:name-status-group/common:status/@current-name" />
          <xsl:with-param name="doi" select="common:nomenclature/common:name-status-group/common:status/@current-name-doi" />
        </xsl:call-template>
      </td>
    </tr>
  </xsl:template>

  <!-- Taxonomic Rank -->
  <xsl:template match="name:name" mode="table-row-taxonomic-rank">
    <tr>
      <td><div>Taxonomic Rank</div></td>
      <td><xsl:value-of select="taxon:taxon/@rank" /></td>
    </tr>
  </xsl:template>

  <!-- Nomenclatural Type -->
  <xsl:template match="name:name" mode="table-row-nomenclatural-type">
    <tr>
      <td>
        <div>Nomenclatural Type</div>
        <div>
          <xsl:choose>
            <xsl:when test="taxon:taxon/@rank='species' or taxon:taxon/@rank='subspecies'">(designated strain)</xsl:when>
            <xsl:when test="taxon:taxon/@rank='genus' or taxon:taxon/@rank='subgenus'">(designated species)</xsl:when>
            <xsl:when test="taxon:taxon/@rank='tribe' or taxon:taxon/@rank='subtribe' or taxon:taxon/@rank='family' or taxon:taxon/@rank='subfamily' or taxon:taxon/@rank='order' or taxon:taxon/@rank='suborder'">(genus on whose name the name of this taxon is based)</xsl:when>
            <xsl:when test="taxon:taxon/@rank='class' or taxon:taxon/@rank='subclass'">(one of the contained orders)</xsl:when>
          </xsl:choose>
        </div>
      </td>
      <td>
        <xsl:choose>
          <xsl:when test="taxon:taxon/@rank='species' or taxon:taxon/@rank='subspecies'">Refer to the type exemplar.</xsl:when>
          <xsl:when test="taxon:taxon/common:nomenclatural-type/common:name-status-group">
            <xsl:apply-templates select="taxon:taxon/common:nomenclatural-type/common:name-status-group" mode="complete-link" />
          </xsl:when>
          <xsl:otherwise>No nomenclatural type has been designated for this <xsl:choose><xsl:when test="taxon:taxon/@rank='unspecified'">taxon</xsl:when><xsl:otherwise><xsl:value-of select="taxon:taxon/@rank" /></xsl:otherwise></xsl:choose>.</xsl:otherwise>
        </xsl:choose>
      </td>
    </tr>
  </xsl:template>

  <!-- Taxon -->
  <xsl:template match="name:name" mode="table-row-taxon">
    <tr itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
      <td><div itemprop="title">Taxonomy</div></td>
      <td><xsl:apply-templates select="common:nomenclature/common:name-status-group" mode="taxon-doi-link" /></td>
    </tr>
  </xsl:template>

  <!-- Type Exemplar -->
  <xsl:template match="name:name" mode="table-row-type-exemplar">
    <tr itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
      <td><div itemprop="title">Type Strain</div><div>representative organism</div></td>
      <td><xsl:apply-templates select="taxon:taxon/exemplar:exemplars/exemplar:exemplar[@doi=../../common:nomenclatural-type/@nomenclatural-type-exemplar]/exemplar:identifiers" mode="strain-equivalence-links" /></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
