From 281fb393f22d565622ca591addba3fba1325dd02 Mon Sep 17 00:00:00 2001 From: gloas <gloas@afi-sa.fr> Date: Thu, 12 Apr 2018 11:01:12 +0200 Subject: [PATCH] dev #73871 start implementing xslt --- .../opac/controllers/NoticeajaxController.php | 7 +- library/Class/Notice/Xsl.php | 74 + library/Class/Testing/Abstract.php | 3 +- library/Class/Testing/FileSystem.php | 3 +- library/Class/Testing/PhpCommand.php | 27 + library/Trait/StaticPhpCommand.php | 36 + library/ZendAfi/View/Helper/Notice/Xsl.php | 36 + tests/scenarios/Xsl/XslTest.php | 15 +- tests/scenarios/Xsl/record_description.xsl | 1337 +++++++++++++++++ 9 files changed, 1531 insertions(+), 7 deletions(-) create mode 100644 library/Class/Notice/Xsl.php create mode 100644 library/Class/Testing/PhpCommand.php create mode 100644 library/Trait/StaticPhpCommand.php create mode 100644 library/ZendAfi/View/Helper/Notice/Xsl.php create mode 100644 tests/scenarios/Xsl/record_description.xsl diff --git a/application/modules/opac/controllers/NoticeajaxController.php b/application/modules/opac/controllers/NoticeajaxController.php index 0b22ce8582e..e967bccbe08 100644 --- a/application/modules/opac/controllers/NoticeajaxController.php +++ b/application/modules/opac/controllers/NoticeajaxController.php @@ -160,7 +160,12 @@ class NoticeAjaxController extends Zend_Controller_Action { return; } - $this->_sendResponseWithScripts($this->view->notice_Entete($notice, ['entete' => Class_Codification::CHAMPS])); + $xsl = (new Class_Notice_Xsl($notice, Class_Profil::getCurrentProfil())); + $html = $xsl->isEnabled() + ? $this->view->Notice_Xsl($xsl) + : $this->view->notice_Entete($notice, ['entete' => Class_Codification::CHAMPS]); + + $this->_sendResponseWithScripts($html); } diff --git a/library/Class/Notice/Xsl.php b/library/Class/Notice/Xsl.php new file mode 100644 index 00000000000..c8b8764ceb8 --- /dev/null +++ b/library/Class/Notice/Xsl.php @@ -0,0 +1,74 @@ +<?php +/** + * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class Class_Notice_Xsl { + use Trait_StaticPhpCommand; + + protected + $_record, + $_profile, + $_xsl_file; + + + public function __construct($record, $profile) { + $this->_record = $record; + $this->_profile = $profile; + $this->_xsl_file = $this->_getXslFileFromProfile(); + } + + + public function isEnabled() { + if(!static::getPhpCommand()->extension_loaded('xsl')) + return false; + + if(!$this->_record) + return false; + + if(!$this->_profile) + return false; + + if(!$this->getXslFile()) + return false; + + return true; + } + + + public function getXslFile() { + return $this->_xsl_file; + } + + + protected function _getXslFileFromProfile() { + $settings = $this->_profile->getCfgModulesPreferences('recherche', 'viewnotice', $this->_record->getTypeDoc()); + if(!$settings) + return; + + if(empty($settings)) + return; + + if(!array_key_exists('xsl', $settings)) + return; + + return $settings['xsl']; + } +} \ No newline at end of file diff --git a/library/Class/Testing/Abstract.php b/library/Class/Testing/Abstract.php index d6c2f4a9067..78a4d0c4e67 100644 --- a/library/Class/Testing/Abstract.php +++ b/library/Class/Testing/Abstract.php @@ -29,5 +29,4 @@ abstract class Class_Testing_Abstract { throw new RuntimeException($this->_error . $name); return @call_user_func_array($name, $args); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/Testing/FileSystem.php b/library/Class/Testing/FileSystem.php index 535978d386a..7c83ae6a180 100644 --- a/library/Class/Testing/FileSystem.php +++ b/library/Class/Testing/FileSystem.php @@ -30,5 +30,4 @@ class Class_Testing_FileSystem extends Class_Testing_Abstract { 'is_readable', 'file_put_contents', 'filesize' ], $_error = 'Call to unknown fileSystem method '; -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/Testing/PhpCommand.php b/library/Class/Testing/PhpCommand.php new file mode 100644 index 00000000000..455626d40aa --- /dev/null +++ b/library/Class/Testing/PhpCommand.php @@ -0,0 +1,27 @@ +<?php +/** + * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class Class_Testing_PhpCommand extends Class_Testing_FileSystem { + public function __construct() { + $this->_known_functions = array_merge($this->_known_functions, + ['extension_loaded']); + } +} \ No newline at end of file diff --git a/library/Trait/StaticPhpCommand.php b/library/Trait/StaticPhpCommand.php new file mode 100644 index 00000000000..e12c482ffc2 --- /dev/null +++ b/library/Trait/StaticPhpCommand.php @@ -0,0 +1,36 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +trait Trait_StaticPhpCommand { + protected static $_phpCommand; + + public static function setPhpCommand($phpCommand) { + self::$_phpCommand = $phpCommand; + } + + + public static function getPhpCommand() { + if (null !== self::$_phpCommand) + return self::$_phpCommand; + return new Class_Testing_PhpCommand(); + } +} \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/Notice/Xsl.php b/library/ZendAfi/View/Helper/Notice/Xsl.php new file mode 100644 index 00000000000..c7cf20e201b --- /dev/null +++ b/library/ZendAfi/View/Helper/Notice/Xsl.php @@ -0,0 +1,36 @@ +<?php +/** + * Copyright (c) 2012-2017, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class ZendAfi_View_Helper_Notice_Xsl extends ZendAfi_View_Helper_BaseHelper { + public function Notice_Xsl($xsl) { + $xsl_doc = new DOMDocument(); + $xsl_doc->load($xsl->getXslFile()); + + $xml = new DOMDocument(); + $xml->load($xsl->getMarcXml()); + + $xslt = new XSLTProcessor(); + $xslt->importStylesheet($xsl_doc); + + return $xslt->transformToXml($xml); + } +} \ No newline at end of file diff --git a/tests/scenarios/Xsl/XslTest.php b/tests/scenarios/Xsl/XslTest.php index 304b100e72b..eee08703b34 100644 --- a/tests/scenarios/Xsl/XslTest.php +++ b/tests/scenarios/Xsl/XslTest.php @@ -61,13 +61,24 @@ class XslNoticeajaxDetailDispatchTest extends AbstractControllerTestCase { public function setUp() { parent::setUp(); + $php_command = $this->mock() + ->whenCalled('extension_loaded') + ->answers(true); + + Class_Notice_Xsl::setPhpCommand($php_command); + $profile = Class_Profil::getCurrentProfil(); + $profile->setCfgModulesPreferences(['xsl' => 'tests/scenarios/Xsl/record_description.xsl'], + 'recherche', + 'viewnotice', + '1'); + $profile->save(); $this->fixture('Class_Notice', ['id' => 5, - '']); + 'type_doc' => 1]); - $this->dispatch('/opac/recherche/noticeajax/detail/id_notice/5', true); + $this->dispatch('/opac/noticeajax/detail/id_notice/5', true); } diff --git a/tests/scenarios/Xsl/record_description.xsl b/tests/scenarios/Xsl/record_description.xsl new file mode 100644 index 00000000000..5c08983ff25 --- /dev/null +++ b/tests/scenarios/Xsl/record_description.xsl @@ -0,0 +1,1337 @@ + + +<!DOCTYPE stylesheet [<!ENTITY nbsp " " >]> + +<xsl:stylesheet version="1.0" + xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:items="http://www.koha-community.org/items" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="marc items"> + +<xsl:output method = "html" indent="yes" omit-xml-declaration = "yes" encoding="UTF-8"/> +<xsl:template match="/"> + <xsl:apply-templates/> +</xsl:template> + + +<!-- debut du report de utils --> + +<xsl:template name="datafield"> + <xsl:param name="tag"/> + <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param> + <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param> + <xsl:param name="subfields"/> + <xsl:element name="datafield"> + <xsl:attribute name="tag"> + <xsl:value-of select="$tag"/> + </xsl:attribute> + <xsl:attribute name="ind1"> + <xsl:value-of select="$ind1"/> + </xsl:attribute> + <xsl:attribute name="ind2"> + <xsl:value-of select="$ind2"/> + </xsl:attribute> + <xsl:copy-of select="$subfields"/> + </xsl:element> + </xsl:template> + + <xsl:template name="tag_099"> +<xsl:if test="marc:datafield[@tag=099]"> + <br/><li> + <strong>Informations locales : </strong> + <xsl:for-each select="marc:datafield[@tag=099]"> + <xsl:if test="marc:subfield[@code='a']"> + <li><strong> <xsl:text>Créateur : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='a']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='b']"> + <li><strong> <xsl:text>Dernier modificateur : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='b']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='c']"> + <li><strong> <xsl:text>Date de création : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='c']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='d']"> + <li><strong> <xsl:text>Date de modification : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='d']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> + <li><strong> <xsl:text>Export BDSP : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='e']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> + <li><strong> <xsl:text>Base d'origine : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='f']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='g']"> + <li><strong> <xsl:text>Code de centre BDSP : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='g']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='s']"> + <li><strong> <xsl:text>Périodique : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='s']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='t']"> + <li><strong> <xsl:text>Type de document : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='t']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='u']"> + <li><strong> <xsl:text>Type de BO : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='u']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='y']"> + <li><strong> <xsl:text>Secteur thématique : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='y']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:if test="marc:subfield[@code='z']"> + <li><strong> <xsl:text>IBO : </xsl:text></strong> + <xsl:for-each select="marc:subfield[@code='z']"> + <xsl:value-of select="text()"/><xsl:text> </xsl:text> + </xsl:for-each> + </li> + </xsl:if> + <xsl:choose> + <xsl:when test="position()=last()"> + <br/> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text> ; </xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + + <xsl:template name="tag_210"> + <xsl:for-each select="marc:datafield[@tag=210]"> + <li> + <strong>Publication : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='a']"> + <xsl:for-each select="marc:subfield[@code='a']"> + <xsl:text> </xsl:text> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:if> + <xsl:if test="marc:subfield[@code='b']"> + <xsl:if test="marc:subfield[@code='a']">, </xsl:if> + <xsl:value-of select="marc:subfield[@code='b']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='c']"> + <xsl:if test="marc:subfield[@code='a']"> : </xsl:if> + <xsl:for-each select="marc:subfield[@code='c']"> + <xsl:text> </xsl:text> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:if> + <xsl:if test="marc:subfield[@code='d']"> + <xsl:if test="marc:subfield[@code='a' or @code='c']">, </xsl:if> + <xsl:value-of select="marc:subfield[@code='d']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> + <xsl:if test="marc:subfield[@code='a' or @code='c' or @code='d']"> - </xsl:if> + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='g']"> + <xsl:if test="marc:subfield[@code='e']"> : </xsl:if> + <xsl:value-of select="marc:subfield[@code='g']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='h']"> + <xsl:if test="marc:subfield[@code='e' or @code='g']">, </xsl:if> + <xsl:value-of select="marc:subfield[@code='h']"/> + </xsl:if> + <xsl:if test="not (position() = last())"> + <xsl:text> • </xsl:text> + </xsl:if> + </span> + </li> + </xsl:for-each> + </xsl:template> + + <xsl:template name="tag_215"> + <xsl:for-each select="marc:datafield[@tag=215]"> + <li> + <strong>Description : </strong> + <xsl:if test="marc:subfield[@code='a']"> + <xsl:value-of select="marc:subfield[@code='a']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='c']"> : + <xsl:value-of select="marc:subfield[@code='c']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='d']"> ; + <xsl:value-of select="marc:subfield[@code='d']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> + + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> + + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + </li> + </xsl:for-each> + </xsl:template> + + <xsl:template name="tag_4xx"> + <xsl:for-each select="marc:datafield[@tag=410]"> + <li> + <strong>Collection : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='i']"> : + <xsl:value-of select="marc:subfield[@code='i']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> +<xsl:for-each select="marc:datafield[@tag=411]"> + <li> + <strong>Sous collection : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='i']"> : + <xsl:value-of select="marc:subfield[@code='i']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> + <xsl:for-each select="marc:datafield[@tag=449]"> + <li> + <strong>Etat réglementaire : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='a']"> + <xsl:value-of select="marc:subfield[@code='a']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='t']"> + <xsl:text> : </xsl:text><xsl:value-of select="marc:subfield[@code='t']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> + + <xsl:for-each select="marc:datafield[@tag=454]"> + <li> + <strong>Est une traduction de : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> + <xsl:for-each select="marc:datafield[@tag=464 or @tag=461]"> + <li> + <strong>relié avec : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> + <xsl:for-each select="marc:datafield[@tag=462]"> + <li> + <strong>Titre d'ensemble : </strong> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </li> + </xsl:for-each> + </xsl:template> + + + <xsl:template name="tag_4xx_perio"> + <xsl:param name="tag" /> + <xsl:param name="label" /> + <xsl:if test="marc:datafield[@tag=$tag]"> + <li> + <strong><xsl:value-of select="$label"/>: </strong> + <xsl:for-each select="marc:datafield[@tag=$tag]"> + <span> + <xsl:call-template name="addClassRtl" /> + <xsl:if test="marc:subfield[@code='t']"> + <a> + <xsl:attribute name="href"> + <xsl:text>/recherche/simple/expressionRecherche/</xsl:text> + <xsl:value-of select="translate(marc:subfield[@code='t'], '*?()', '+')"/> + </xsl:attribute> + <xsl:value-of select="marc:subfield[@code='t']"/> + </a> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> : + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='i']"> : + <xsl:value-of select="marc:subfield[@code='i']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> / + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']">, + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + </span> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + + + + <xsl:template name="subfieldSelect"> + <xsl:param name="codes"/> + <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param> + <xsl:param name="subdivCodes"/> + <xsl:param name="subdivDelimiter"/> + <xsl:variable name="str"> + <xsl:for-each select="marc:subfield"> + <xsl:if test="contains($codes, @code)"> + <xsl:if test="contains($subdivCodes, @code)"> + <xsl:value-of select="$subdivDelimiter"/> + </xsl:if> + <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/> + </xsl:template> + + <xsl:template name="buildSpaces"> + <xsl:param name="spaces"/> + <xsl:param name="char"><xsl:text> </xsl:text></xsl:param> + <xsl:if test="$spaces>0"> + <xsl:value-of select="$char"/> + <xsl:call-template name="buildSpaces"> + <xsl:with-param name="spaces" select="$spaces - 1"/> + <xsl:with-param name="char" select="$char"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name="chopSpecialCharacters"> + <xsl:param name="title" /> + <xsl:variable name="ntitle" + select="translate($title, '˜œ슜슛슘슈슉','')"/> + <xsl:value-of select="$ntitle" /> + </xsl:template> + + + <xsl:template name="chopPunctuation"> + <xsl:param name="chopString"/> + <xsl:variable name="length" select="string-length($chopString)"/> + <xsl:choose> + <xsl:when test="$length=0"/> + <xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="not($chopString)"/> + <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise> + </xsl:choose> + <xsl:text> </xsl:text> + </xsl:template> + + <xsl:template name="addClassRtl"> + <xsl:variable name="lang" select="marc:subfield[@code='7']" /> + <xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'"> + <xsl:attribute name="class">rtl</xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template name="nl2br"> + <xsl:param name="string"/> + <xsl:value-of select="normalize-space(substring-before($string,' '))"/> + <xsl:choose> + <xsl:when test="contains($string,' ')"> + <br /> + <xsl:call-template name="nl2br"> + <xsl:with-param name="string" select="substring-after($string,' ')"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$string"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="tag_title"> + <xsl:param name="tag" /> + <xsl:param name="label" /> + <xsl:if test="marc:datafield[@tag=$tag]"> + <li> + <strong><xsl:value-of select="$label"/>: </strong> + <xsl:for-each select="marc:datafield[@tag=$tag]"> + <xsl:value-of select="marc:subfield[@code='a']" /> + <xsl:if test="marc:subfield[@code='d']"> + <xsl:text> : </xsl:text> + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> + <xsl:for-each select="marc:subfield[@code='e']"> + <xsl:text> </xsl:text> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> + <xsl:text> / </xsl:text> + <xsl:value-of select="marc:subfield[@code='f']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='h']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='h']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='i']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='i']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='v']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='x']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='x']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='z']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='z']"/> + </xsl:if> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + + + <xsl:template name="tag_5xx"> + <xsl:param name="tag" /> + <xsl:param name="label" /> + <xsl:if test="marc:datafield[@tag=$tag]"> + <li> + <strong><xsl:value-of select="$label"/>: </strong> + <xsl:for-each select="marc:datafield[@tag=$tag]"> + <a> + <xsl:choose> + <xsl:when test="marc:subfield[@code=9]"> + <xsl:attribute name="href">/cgi-bin/koha/catalogue/detail.pl?biblionumber=<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="href">/recherche/simple/expressionRecherche/<xsl:value-of select="translate(marc:subfield[@code='a'], '*?()', '+')"/></xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:value-of select="marc:subfield[@code='a']"/> + </a> + <xsl:if test="not (position()=last())"> + <xsl:text> | </xsl:text> + </xsl:if> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + + + <xsl:template name="tag_subject"> + <xsl:param name="tag" /> + <xsl:param name="label" /> + <xsl:if test="marc:datafield[@tag=$tag]"> + <li> + <strong><xsl:value-of select="$label"/>: </strong> + <xsl:for-each select="marc:datafield[@tag=$tag]"> + <a> + <xsl:choose> + <xsl:when test="marc:subfield[@code=9]"> + <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="href">/recherche/simple/expressionRecherche/<xsl:value-of select="translate(marc:subfield[@code='a'], '*?()', '+')"/></xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param> + <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param> + <xsl:with-param name="subdivDelimiter">-- </xsl:with-param> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </a> + <xsl:if test="not (position()=last())"> + <xsl:text> | </xsl:text> + </xsl:if> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + + + <xsl:template name="tag_7xx"> + <xsl:param name="tag" /> + <xsl:param name="label" /> + <xsl:if test="marc:datafield[@tag=$tag]"> + <li> + <strong><xsl:value-of select="$label" />: </strong> + <xsl:for-each select="marc:datafield[@tag=$tag]"> + <span> + <xsl:call-template name="addClassRtl" /> + <a> + <xsl:choose> + <xsl:when test="marc:subfield[@code=9]"> + <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="href">/recherche/simple/expressionRecherche/<xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="marc:subfield[@code='a']"> + <xsl:value-of select="marc:subfield[@code='a']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='b']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='b']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='c']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='c']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='d']"> + <xsl:text> </xsl:text> + <xsl:value-of select="marc:subfield[@code='d']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='e']"> + <xsl:text> </xsl:text> + <xsl:value-of select="marc:subfield[@code='e']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='f']"> + <span dir="ltr"> + <xsl:text> (</xsl:text> + <xsl:value-of select="marc:subfield[@code='f']"/> + <xsl:text>)</xsl:text> + </span> + </xsl:if> + <xsl:if test="marc:subfield[@code='g']"> + <xsl:text> </xsl:text> + <xsl:value-of select="marc:subfield[@code='g']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='p']"> + <xsl:text> </xsl:text> + <xsl:value-of select="marc:subfield[@code='p']"/> + </xsl:if> + </a> + <xsl:if test="marc:subfield[@code='4']"> + <xsl:text> </xsl:text> + <xsl:value-of select="marc:subfield[@code='4']"/> + </xsl:if> + </span> + <xsl:if test="not (position() = last())"> + <xsl:text> ; </xsl:text> + </xsl:if> + </xsl:for-each> + </li> + </xsl:if> + </xsl:template> + +<!-- fin du report de utils --> + +<xsl:template match="marc:record"> + <xsl:variable name="leader" select="marc:leader"/> + <xsl:variable name="leader6" select="substring($leader,7,1)"/> + <xsl:variable name="leader7" select="substring($leader,8,1)"/> + <xsl:variable name="biblionumber" select="marc:datafield[@tag=090]/marc:subfield[@code='a']"/> + + + <xsl:if test="marc:datafield[@tag=200]"> + <xsl:for-each select="marc:datafield[@tag=200]"> + <h1> + <xsl:call-template name="addClassRtl" /> + <xsl:variable name="title" select="marc:subfield[@code='a']"/> + <xsl:variable name="ntitle" + select="translate($title, '˜œ슜슛슘슈슉','')"/> + <!--<xsl:value-of select="$ntitle" />--> + <xsl:value-of select="marc:subfield[@code='a'][1]" /> +<xsl:for-each select="marc:subfield[@code='b']"> + <xsl:text> [</xsl:text><xsl:value-of select="."/><xsl:text>]</xsl:text> + </xsl:for-each> +<xsl:if test="marc:subfield[@code='e'][1]"><xsl:text> : </xsl:text><xsl:value-of select="marc:subfield[@code='e'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='c'][1]"><xsl:text> .</xsl:text><xsl:value-of select="marc:subfield[@code='c'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='d'][1]"><xsl:text> =</xsl:text><xsl:value-of select="marc:subfield[@code='d'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='h'][1]"><xsl:text> . </xsl:text><xsl:value-of select="marc:subfield[@code='h'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='i'][1]"><xsl:text>, </xsl:text><xsl:value-of select="marc:subfield[@code='i'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='e'][2]"><xsl:text> : </xsl:text><xsl:value-of select="marc:subfield[@code='e'][2]" /></xsl:if> +<!--<xsl:if test="marc:subfield[@code='c'][2]"><xsl:text> .</xsl:text><xsl:value-of select="marc:subfield[@code='c'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='d'][2]"><xsl:text> = </xsl:text><xsl:value-of select="marc:subfield[@code='d'][2]" /></xsl:if>--> +<xsl:if test="marc:subfield[@code='h'][2]"><xsl:text> . </xsl:text><xsl:value-of select="marc:subfield[@code='h'][2]" /></xsl:if> +<xsl:if test="marc:subfield[@code='i'][2]"><xsl:text>, </xsl:text><xsl:value-of select="marc:subfield[@code='i'][2]" /></xsl:if> +<xsl:if test="marc:subfield[@code='e'][3]"><xsl:text> : </xsl:text><xsl:value-of select="marc:subfield[@code='e'][3]" /></xsl:if><!-- +<xsl:if test="marc:subfield[@code='c'][3]"><xsl:text> .</xsl:text><xsl:value-of select="marc:subfield[@code='c'][3]" /></xsl:if> +<xsl:if test="marc:subfield[@code='d'][3]"><xsl:text> = </xsl:text><xsl:value-of select="marc:subfield[@code='d'][3]" /></xsl:if> +<xsl:if test="marc:subfield[@code='h'][3]"><xsl:text> . </xsl:text><xsl:value-of select="marc:subfield[@code='h'][3]" /></xsl:if>--> +<xsl:if test="marc:subfield[@code='i'][3]"><xsl:text>, </xsl:text><xsl:value-of select="marc:subfield[@code='i'][3]" /></xsl:if> + +<xsl:if test="marc:subfield[@code='a'][2]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][2]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][3]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][3]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][4]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][4]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][5]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][5]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][6]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][6]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][7]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][7]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][8]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][8]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][9]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][9]" /></xsl:if> +<xsl:if test="marc:subfield[@code='a'][10]"><xsl:text>. </xsl:text><xsl:value-of select="marc:subfield[@code='a'][10]" /></xsl:if> + +<!--<xsl:if test="marc:subfield[@code='b']"><xsl:text> [</xsl:text><xsl:value-of select="marc:subfield[@code='b']"/><xsl:text>]</xsl:text> + </xsl:if>--> + + <xsl:if test="marc:subfield[@code='f']"> + <xsl:text> / </xsl:text> +<xsl:if test="marc:subfield[@code='f'][1]"><xsl:text></xsl:text><xsl:value-of select="marc:subfield[@code='f'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='f'][2]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='f'][2]" /></xsl:if> +<xsl:if test="marc:subfield[@code='f'][3]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='f'][3]" /></xsl:if> + </xsl:if> +<xsl:if test="marc:subfield[@code='g'][1]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][1]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][2]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][2]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][3]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][3]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][4]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][4]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][5]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][5]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][6]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][6]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][7]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][7]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][8]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][8]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][9]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][9]" /></xsl:if> +<xsl:if test="marc:subfield[@code='g'][10]"><xsl:text> ; </xsl:text><xsl:value-of select="marc:subfield[@code='g'][10]" /></xsl:if> + </h1> + </xsl:for-each> + </xsl:if> + + <li><strong>Numéro de notice Koha : </strong> + <xsl:value-of select="$biblionumber"/> + </li> + + <xsl:call-template name="tag_099" /> + + <xsl:call-template name="tag_4xx" /> + + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">421</xsl:with-param> + <xsl:with-param name="label">Supplément</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">422</xsl:with-param> + <xsl:with-param name="label">Publication-mère du supplément</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">430</xsl:with-param> + <xsl:with-param name="label">Suite de</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">432</xsl:with-param> + <xsl:with-param name="label">Remplace</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">434</xsl:with-param> + <xsl:with-param name="label">Absorbe</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">435</xsl:with-param> + <xsl:with-param name="label">Absorbe partiellement</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">436</xsl:with-param> + <xsl:with-param name="label">Fusion de ... et de ...</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">437</xsl:with-param> + <xsl:with-param name="label">Suite partielle de</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">441</xsl:with-param> + <xsl:with-param name="label">Devient partiellement</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">442</xsl:with-param> + <xsl:with-param name="label">Remplacé par</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">444</xsl:with-param> + <xsl:with-param name="label">Absorbé par</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">446</xsl:with-param> + <xsl:with-param name="label">Scindé en ... et en ...</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">447</xsl:with-param> + <xsl:with-param name="label">Fusionne avec ... pour former ...</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">453</xsl:with-param> + <xsl:with-param name="label">Traduit sous le titre</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">454</xsl:with-param> + <xsl:with-param name="label">Est une traduction de</xsl:with-param> + </xsl:call-template> + <xsl:call-template name="tag_4xx_perio"> + <xsl:with-param name="tag">488</xsl:with-param> + <xsl:with-param name="label">Autre type de relation</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">700</xsl:with-param> + <xsl:with-param name="label">Auteur principal</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">710</xsl:with-param> + <xsl:with-param name="label">Auteur principal collectivité</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">701</xsl:with-param> + <xsl:with-param name="label">Co-auteur</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">702</xsl:with-param> + <xsl:with-param name="label">Auteur secondaire</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">711</xsl:with-param> + <xsl:with-param name="label">Co-auteur collectivité</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">712</xsl:with-param> + <xsl:with-param name="label">Auteur secondaire collectivité</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">790</xsl:with-param> + <xsl:with-param name="label">Emetteurs</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_7xx"> + <xsl:with-param name="tag">791</xsl:with-param> + <xsl:with-param name="label">Emetteurs</xsl:with-param> + </xsl:call-template> + + <xsl:if test="marc:datafield[@tag=022]"> + <li> + <strong>Numéro de publication officielle : </strong> + <xsl:for-each select="marc:datafield[@tag=022]"> + <xsl:for-each select="marc:subfield"> + <li> + <xsl:value-of select="text()"/> + </li> + </xsl:for-each> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=029]"> + <li> + <strong>Champs spécifiques BO / Instructions : </strong> + <xsl:for-each select="marc:datafield[@tag=029]"> + <xsl:for-each select="marc:subfield"> + <xsl:choose> + <xsl:when test="@code='a'">Année : </xsl:when> + <xsl:when test="@code='b'">Numéro : </xsl:when> + </xsl:choose> + <xsl:value-of select="text()"/><xsl:text> ; </xsl:text> + </xsl:for-each> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=101]"> + <li> + <strong>Langue : </strong> + </li> + <xsl:for-each select="marc:datafield[@tag=101]"> + <xsl:for-each select="marc:subfield"> + <li> + <xsl:choose> + <xsl:when test="@code='b'">du texte intermédiaire : </xsl:when> + <xsl:when test="@code='c'">de l'oeuvre originale : </xsl:when> + <xsl:when test="@code='d'">du résumé : </xsl:when> + <xsl:when test="@code='e'">de la table des matières : </xsl:when> + <xsl:when test="@code='f'">de la page de titre : </xsl:when> + <xsl:when test="@code='g'">du titre propre : </xsl:when> + <xsl:when test="@code='h'">du livret : </xsl:when> + <xsl:when test="@code='i'">du matériel d'accompagnement : </xsl:when> + <xsl:when test="@code='j'">des sous-titres : </xsl:when> </xsl:choose> + <xsl:value-of select="text()"/> + </li> + </xsl:for-each> + </xsl:for-each> + </xsl:if> +<!-- test pour bokeh, a supprimer si besoin !!!!!!!--> + <xsl:if test="marc:datafield[@tag=1000]"> + <li> + <strong>Langue : </strong> + </li> + <xsl:for-each select="marc:datafield[@tag=1000]"> + <li> + <xsl:value-of select="marc:subfield[@code='2']"/> <xsl:text> : </xsl:text><xsl:value-of select="marc:subfield[@code='a']"/> + </li> + </xsl:for-each> + </xsl:if> + + + <xsl:if test="marc:datafield[@tag=102]"> + <li> + <strong>Pays : </strong> + <xsl:for-each select="marc:datafield[@tag=102]"> + <xsl:for-each select="marc:subfield"> + <li> + <xsl:value-of select="text()"/> + </li> + </xsl:for-each> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=205]"> + <li> + <strong>Mention d'édition : </strong> + <xsl:for-each select="marc:datafield[@tag=205]"> + <xsl:for-each select="marc:subfield"> + <li> + <xsl:value-of select="text()"/> + </li> + </xsl:for-each> + </xsl:for-each> + </li> + </xsl:if> + + + <xsl:if test="marc:datafield[@tag=207]"> + <li> + <strong>Ressources continues, numérotation : </strong> + <xsl:for-each select="marc:datafield[@tag=207]"> + <xsl:for-each select="marc:subfield"> + <xsl:choose> + <xsl:when test="@code='a'">numérotation : </xsl:when> + <xsl:when test="@code='z'">source d'information sur la numérotation : </xsl:when> + </xsl:choose> + <xsl:value-of select="text()"/><xsl:text> ; </xsl:text> + </xsl:for-each> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:call-template name="tag_210" /> + + <xsl:call-template name="tag_215" /> + +<xsl:if test="marc:controlfield[@tag=009]"> + <li><strong>Champ 009 : </strong> + <xsl:value-of select="marc:controlfield[@tag=009]"/> + </li> + </xsl:if> + + <!-- Build ISBN --> + <xsl:if test="marc:datafield[@tag=010]/marc:subfield[@code='a']"> + <li><strong>ISBN : </strong> + <xsl:for-each select="marc:datafield[@tag=010]/marc:subfield[@code='a']"> + <li><span property="isbn"> + <xsl:value-of select="."/> + </span></li> + </xsl:for-each> + </li> + </xsl:if> + + <!-- Build ISSN --> + <xsl:if test="marc:datafield[@tag=011]/marc:subfield[@code='a']"> + <li> + <strong>ISSN : </strong> + <xsl:for-each select="marc:datafield[@tag=011]/marc:subfield[@code='a']"> + <span property="issn"> + <xsl:value-of select="."/> + <xsl:choose> + <xsl:when test="position()=last()"> + <xsl:text>.</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>; </xsl:text> + </xsl:otherwise> + </xsl:choose> + </span> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:call-template name="tag_title"> + <xsl:with-param name="tag">225</xsl:with-param> + <xsl:with-param name="label">Collection</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">503</xsl:with-param> + <xsl:with-param name="label">Titre de forme</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">510</xsl:with-param> + <xsl:with-param name="label">Titre parallèle</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">512</xsl:with-param> + <xsl:with-param name="label">Titre de couverture</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">513</xsl:with-param> + <xsl:with-param name="label">Titre figurant sur une autre page de titre</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">517</xsl:with-param> + <xsl:with-param name="label">Autres variantes du titre</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">530</xsl:with-param> + <xsl:with-param name="label">Titré clé</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">531</xsl:with-param> + <xsl:with-param name="label">Titre abrégé</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">532</xsl:with-param> + <xsl:with-param name="label">Titre développé</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_5xx"> + <xsl:with-param name="tag">540</xsl:with-param> + <xsl:with-param name="label">Titre ajouté par le catalogueur</xsl:with-param> + </xsl:call-template> + + <xsl:if test="marc:datafield[@tag=676]"> + <li> + <strong>Dewey : </strong> + <xsl:for-each select="marc:datafield[@tag=676]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + <xsl:if test="marc:subfield[@code='v']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='v']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='z']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='z']"/> + </xsl:if> + <xsl:if test="not (position()=last())"> + <xsl:text> ; </xsl:text> + </xsl:if> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=686]"> + <li> + <strong>Classification : </strong> + <xsl:for-each select="marc:datafield[@tag=686]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + <xsl:if test="marc:subfield[@code='b']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='b']"/> + </xsl:if> + <xsl:if test="marc:subfield[@code='c']"> + <xsl:text>, </xsl:text> + <xsl:value-of select="marc:subfield[@code='c']"/> + </xsl:if> + <xsl:if test="not (position()=last())"><xsl:text> ; </xsl:text></xsl:if> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=327]"> + <li> + <strong>Note de contenu : </strong> + <xsl:for-each select="marc:datafield[@tag=327]"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param> + <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param> + <xsl:with-param name="subdivDelimiter">-- </xsl:with-param> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=330]"> + <li> + <strong>Résumé : </strong> + </li> + <xsl:for-each select="marc:datafield[@tag=330]"> + <li> + <xsl:call-template name="nl2br"> + <xsl:with-param name="string"><xsl:value-of select="marc:subfield[@code='a']"/></xsl:with-param> + </xsl:call-template> + </li> + </xsl:for-each> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=317]"> + <li> + <strong>Note de provenance : </strong> + <xsl:for-each select="marc:datafield[@tag=317]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=320]"> + <li> + <strong>Bibliographie : </strong> + <xsl:for-each select="marc:datafield[@tag=320]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=328]"> + <li> + <strong>Note de thèse : </strong> + <xsl:for-each select="marc:datafield[@tag=328]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=333]"> + <li> + <strong>Public : </strong> + <xsl:for-each select="marc:datafield[@tag=333]"> + <xsl:value-of select="marc:subfield[@code='a']"/> + <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:if test="marc:datafield[@tag=955]"> + <li> + <strong>Historique SUDOC du périodique : </strong> + <xsl:for-each select="marc:datafield[@tag=955]"> + <xsl:value-of select="marc:subfield[@code='9']"/>: + <xsl:value-of select="marc:subfield[@code='r']"/> + <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose> + </xsl:for-each> + </li> + </xsl:if> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">600</xsl:with-param> + <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">601</xsl:with-param> + <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">602</xsl:with-param> + <xsl:with-param name="label">Sujet - Famille</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">604</xsl:with-param> + <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">606</xsl:with-param> + <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">607</xsl:with-param> + <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">608</xsl:with-param> + <xsl:with-param name="label">Sujet - Forme</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">609</xsl:with-param> + <xsl:with-param name="label">Mots clés TESS</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">610</xsl:with-param> + <xsl:with-param name="label">Sujet</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">611</xsl:with-param> + <xsl:with-param name="label">Mots clés période</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">615</xsl:with-param> + <xsl:with-param name="label">Catégorie de sujet</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">616</xsl:with-param> + <xsl:with-param name="label">Marque</xsl:with-param> + </xsl:call-template> + + <xsl:call-template name="tag_subject"> + <xsl:with-param name="tag">619</xsl:with-param> + <xsl:with-param name="label">Mots clés candidats</xsl:with-param> + </xsl:call-template> + + <xsl:if test="marc:datafield[@tag=856]"> + <li> + <strong>Ressources en ligne : </strong> + <xsl:for-each select="marc:datafield[@tag=856]"> + <xsl:variable name="SubqText"><xsl:value-of select="marc:subfield[@code='q']"/></xsl:variable> + <a target="_blank"> + <xsl:attribute name="href"> + <xsl:value-of select="marc:subfield[@code='u']"/> + </xsl:attribute> + <xsl:choose> + <xsl:when test="marc:subfield[@code='y' or @code='2' or @code='z']"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">y2z</xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])"> + Cliquez ici pour consulter en ligne </xsl:when> + </xsl:choose> + </a> + <xsl:choose> + <xsl:when test="position()=last()"></xsl:when> + <xsl:otherwise> | </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </li> + </xsl:if> +</xsl:template> + + <xsl:template name="nameABCDQ"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">aq</xsl:with-param> + </xsl:call-template> + </xsl:with-param> + <xsl:with-param name="punctuation"> + <xsl:text>:,;/ </xsl:text> + </xsl:with-param> + </xsl:call-template> + <xsl:call-template name="termsOfAddress"/> + </xsl:template> + + <xsl:template name="nameABCDN"> + <xsl:for-each select="marc:subfield[@code='a']"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString" select="."/> + </xsl:call-template> + </xsl:for-each> + <xsl:for-each select="marc:subfield[@code='b']"> + <xsl:value-of select="."/> + </xsl:for-each> + <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">cdn</xsl:with-param> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name="nameACDEQ"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">acdeq</xsl:with-param> + </xsl:call-template> + </xsl:template> + <xsl:template name="termsOfAddress"> + <xsl:if test="marc:subfield[@code='b' or @code='c']"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString"> + <xsl:call-template name="subfieldSelect"> + <xsl:with-param name="codes">bc</xsl:with-param> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name="part"> + <xsl:variable name="partNumber"> + <xsl:call-template name="specialSubfieldSelect"> + <xsl:with-param name="axis">n</xsl:with-param> + <xsl:with-param name="anyCodes">n</xsl:with-param> + <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="partName"> + <xsl:call-template name="specialSubfieldSelect"> + <xsl:with-param name="axis">p</xsl:with-param> + <xsl:with-param name="anyCodes">p</xsl:with-param> + <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param> + </xsl:call-template> + </xsl:variable> + <xsl:if test="string-length(normalize-space($partNumber))"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString" select="$partNumber"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="string-length(normalize-space($partName))"> + <xsl:call-template name="chopPunctuation"> + <xsl:with-param name="chopString" select="$partName"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name="specialSubfieldSelect"> + <xsl:param name="anyCodes"/> + <xsl:param name="axis"/> + <xsl:param name="beforeCodes"/> + <xsl:param name="afterCodes"/> + <xsl:variable name="str"> + <xsl:for-each select="marc:subfield"> + <xsl:if test="contains($anyCodes, @code) or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis]) or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])"> + <xsl:value-of select="text()"/> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:value-of select="substring($str,1,string-length($str)-1)"/> + </xsl:template> + +</xsl:stylesheet> -- GitLab