|
|
<xsl:stylesheet xmlns="http://purl.org/NET/xbiblio/citeproc" xmlns:bib="http://purl.org/NET/xbiblio/citeproc" xmlns:cs="http://purl.org/NET/xbiblio/csl" xmlns:db="http://docbook.org/ns/docbook" xmlns:mods="http://www.loc.gov/mods/v3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:exist="http://exist.sourceforge.net/NS/exist" xmlns:xdoc="http://www.pnp-software.com/XSLTdoc" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:course="http://purl.org/NET/xbiblio/course" version="2.0" exclude-result-prefixes="db xdoc xhtml mods xs cs exist bib course">
<xsl:include href="config/CONFIG" /> <xsl:include href="main/format-style.xsl" /> <xsl:include href="main/functions.xsl" /> <xsl:include href="main/sort.xsl" /> <xsl:include href="main/process-mods.xsl" /> <xsl:include href="drivers/in-driver.xsl" /> <xsl:include href="drivers/out-drivers.xsl" /> <xsl:include href="VERSION" /> <!-- === licensed under CC-GNU GPL; see http://creativecommons.org/licenses/GPL/2.0 === --> <xsl:output name="xml" encoding="UTF-8" indent="yes" /> <xsl:strip-space elements="cs:*" />
<xdoc:doc type="stylesheet"> <xdoc:short>Main CiteProc stylesheet.</xdoc:short> <xdoc:author>Bruce D’Arcus</xdoc:author> <xdoc:copyright>2004, Bruce D’Arcus</xdoc:copyright> </xdoc:doc> <xsl:param name="sort_order-bib" as="xs:string"> <xsl:choose> <xsl:when test="$citeclass='citekey'">citekey</xsl:when> <xsl:when test="$citeclass='number'"> <xsl:value-of select="$style-biblio/@sort-order" /> </xsl:when> <xsl:otherwise>author-year</xsl:otherwise> </xsl:choose> </xsl:param>
<xdoc:doc>A required parameter that specifies the CSL file to use for processing (minus the csl extension).<xdoc:param type="string" /> </xdoc:doc> <xsl:param name="citation-style" required="yes" as="xs:string" /> <xsl:variable name="styles" as="document-node()" select="doc(concat('../styles/',$citation-style,'.csl'))" />
<xdoc:doc>Class of formatting type, drawn from the CSL file.<xdoc:param type="string" /> </xdoc:doc> <xsl:param name="citeclass" select="$styles/cs:citationstyle/@class" /> <xsl:variable name="style-citation" select="$styles/cs:citationstyle/cs:content/cs:citation" /> <xsl:variable name="style-biblio" select="$styles/cs:citationstyle/cs:content/cs:bibliography" /> <xsl:variable name="style-names" select="$styles/cs:citationstyle/cs:content/cs:names" /> <xsl:variable name="style-terms" select="$styles/cs:citationstyle/cs:content/cs:terms" /> <xsl:variable name="locators" select="$styles/cs:citationstyle/cs:content/cs:locators" /> <xsl:key name="refs" match="db:biblioref" use="@linkend" /> <xsl:variable name="cite-position"> <bib:refs> <bib:all> <xsl:for-each select="$citerefs"> <bib:ref position="{position()}" id="{generate-id()}" key="{.}" /> </xsl:for-each> </bib:all> <bib:unique> <xsl:for-each-group select="$citerefs" group-by="."> <bib:ref position="{position()}" id="{generate-id()}" key="{.}" /> </xsl:for-each-group> </bib:unique> </bib:refs> </xsl:variable> <xsl:variable name="citekeys"> <xsl:if test="$bibdb='exist-xmldb'">(</xsl:if> <xsl:if test="$bibdb='sru'">%22</xsl:if> <xsl:for-each-group select="$citerefs" group-by="."> <xsl:if test="position() gt 1"> <xsl:choose> <xsl:when test="$bibdb='exist-xmldb'">,%20</xsl:when> <xsl:otherwise>%20</xsl:otherwise> </xsl:choose> </xsl:if> <xsl:if test="$bibdb='exist-xmldb'">'</xsl:if> <xsl:value-of select="." /> <xsl:if test="$bibdb='exist-xmldb'">'</xsl:if> </xsl:for-each-group> <xsl:if test="$bibdb='sru'">%22</xsl:if> <xsl:if test="$bibdb='exist-xmldb'">)</xsl:if> </xsl:variable> <xsl:variable name="authentication" select="'&x-info-2-auth1.0-authenticationToken='" as="xs:string" /> <xsl:variable name="sru-email" select="concat('email=', $email)" as="xs:string" />
<xdoc:doc>Takes a list of references, and imports them from a database over HTTP. Options include an XQuery to eXist, SRU/CQL, and flat files.</xdoc:doc> <xsl:variable name="bibrecord"> <xsl:message> <xsl:text> CiteProc XSL Stylesheets v</xsl:text> <xsl:value-of select="$CP-VERSION" /> <xsl:text> </xsl:text> </xsl:message> <xsl:message> <xsl:text>citation style: </xsl:text> <xsl:value-of select="$styles/cs:citationstyle/cs:info/cs:title" /> </xsl:message> <xsl:message> <xsl:text>citation class: </xsl:text> <xsl:value-of select="$citeclass" /> <xsl:text> </xsl:text> </xsl:message> <xsl:choose> <xsl:when test="$bibdb='exist-xmldb'"> <xsl:copy-of select="doc(concat("http://localhost:8080/exist/servlet/db/mods?", "_query=declare%20namespace%20mods=%22http://www.loc.gov/mods/v3%22;", "%20for%20$citekey%20in%20", $citekeys, "%20return%20//mods:mods[@ID=$citekey]&_howmany=-1"))" /> </xsl:when> <xsl:when test="$bibdb='sru'"> <xsl:copy-of select="doc(concat($server_url, 'version=1.1&query=bib.citekey%20any%20', $citekeys, '&operation=searchRetrieve&recordSchema=mods&recordPacking=xml&startRecord=1&maximumRecords=9999', $authentication, $sru-email))" /> </xsl:when> <xsl:when test="$bibdb='flatfile'"> <mods:modsCollection> <xsl:for-each select="distinct-values($citerefs)"> <xsl:copy-of select="document($bibinfile)/mods:modsCollection/mods:mods[@ID=current()]" /> </xsl:for-each> </mods:modsCollection> </xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="raw-biblist"> <modsCollection xmlns="http://www.loc.gov/mods/v3"> <xsl:copy-of select="$bibrecord//mods:mods" /> </modsCollection> </xsl:variable>
<xdoc:doc>Groups, sorts, and enhances content for processing; this is where most of the logic lies.</xdoc:doc> <xsl:variable name="enhanced-biblist"> <mods:modsCollection> <xsl:choose> <xsl:when test="$sort_order-bib='citekey'"> <xsl:apply-templates select="$raw-biblist/mods:modsCollection" mode="sort_citekey" /> </xsl:when> <xsl:when test="$sort_order-bib='cited'"> <xsl:apply-templates select="$raw-biblist/mods:modsCollection" mode="sort_cited" /> </xsl:when> <xsl:when test="$sort_order-bib='author-year'"> <xsl:apply-templates select="$raw-biblist/mods:modsCollection" mode="sort_author-year" /> </xsl:when> </xsl:choose> </mods:modsCollection> </xsl:variable>
<xdoc:doc>Creates final formatted bibliography list. Depending on output format, transforms or just copies contents of the bib:formatted-biblist variable.</xdoc:doc> <xsl:template name="bib:format-bibliography"> <xsl:param name="output-format" as="xs:string" /> <xsl:choose> <xsl:when test="$output-format='latex'"> <xsl:apply-templates select="$bib:formatted-biblist" mode="output-latex" /> </xsl:when> <xsl:when test="$output-format='xhtml'"> <xsl:apply-templates select="$bib:formatted-biblist" mode="output-xhtml" /> </xsl:when> <xsl:when test="$output-format='fo'"> <xsl:apply-templates select="$bib:formatted-biblist" mode="output-fo" /> </xsl:when> </xsl:choose> <xsl:if test="$biboutfile"> <xsl:result-document href="{$biboutfile}" format="xml"> <xsl:copy-of select="$raw-biblist" /> </xsl:result-document> </xsl:if> </xsl:template>
<xdoc:doc>In conjunction with bib:format-bib templates, formats bibliography list into an intermediate representation. The intermediate representation is similar to xhtml, but in the citeproc namespace.</xdoc:doc> <xsl:variable name="bib:formatted-biblist"> <xsl:apply-templates select="$enhanced-biblist/mods:modsCollection/mods:mods" mode="temp-placeholder" /> </xsl:variable> <xsl:template match="mods:mods" mode="temp-placeholder"> <xsl:variable name="shorten-author" select="@bib:shorten-author" /> <xsl:variable name="use_reftype" select="@bib:use-reftype" /> <xsl:variable name="id" select="@ID" /> <xsl:variable name="number"> <xsl:choose> <xsl:when test="$sort_order-bib='author-year'"> <xsl:value-of select="position()" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="$cite-position/bib:refs/bib:unique/bib:ref[@key=$id]/@position" /> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:apply-templates select="$style-biblio"> <xsl:with-param name="bib:source" select="." as="element()" tunnel="yes" /> <xsl:with-param name="use_reftype" select="@bib:use-reftype" as="xs:string" tunnel="yes" /> <xsl:with-param name="bib:number" select="$number" as="xs:string" tunnel="yes" /> </xsl:apply-templates> </xsl:template> <xsl:template name="bib:format-citation"> <xsl:param name="output-format" as="xs:string" /> <!-- create a temporary tree to hold the processing citations --> <xsl:variable name="intermediate-citation"> <bib:span class="citation"> <xsl:value-of select="$style-citation/cs:prefix" /> <xsl:choose> <xsl:when test="$sort_order-bib='author-year' or $citeclass='note-nobib'"> <xsl:choose> <!-- FIX: add additional conditional for @ibid, configure formatting in CSL --> <xsl:when test="bib:ibid(.) and count(db:biblioref)=1"> <bib:a class="citation" href="#{db:biblioref/@linkend}"> <xsl:text>ibid.</xsl:text> </bib:a> </xsl:when> <xsl:when test="$citeclass='author-year' or $citeclass='note-nobib'"> <xsl:apply-templates select="." mode="sort_citation_author-year" /> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="db:biblioref" mode="otherwise" /> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="db:biblioref" mode="otherwise" /> </xsl:otherwise> </xsl:choose> <xsl:value-of select="$style-citation/cs:suffix" /> </bib:span> </xsl:variable> <!-- create formatted output by running appropriate output mode on the temporary tree in the intermediate-citation variable --> <xsl:choose> <xsl:when test="$output-format='latex'"> <xsl:apply-templates select="$intermediate-citation" mode="output-latex" /> </xsl:when> <xsl:when test="$output-format='xhtml'"> <xsl:apply-templates select="$intermediate-citation" mode="output-xhtml" /> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="db:biblioref" mode="otherwise"> <xsl:apply-templates select="$style-citation"> <xsl:with-param name="cite-ref" select="." as="node()" tunnel="yes" /> </xsl:apply-templates> <xsl:if test="position() != last()"> <xsl:value-of select="$style-citation/@delimiter" /> </xsl:if> </xsl:template> </xsl:stylesheet> v |


