Browse Source
This patch introduces an XSLT file grabbed from DSpace and a couple css files. To test: - Point to your dev Koha's oai endpoint. For example: http://localhost:8080/cgi-bin/koha/oai.pl?verb=ListMetadataFormats => FAIL: Look how ugly it is for humans. - Apply this patch - Reload => SUCCES: It is styled and provides really useful links to interact with the OAI server verbs. - Sign off :-D Sponsored-by: Universidad Empresarial Siglo 21 Signed-off-by: Frédéric Demians <f.demians@tamil.fr> Works as described. Nice looking. Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>new_12478_elasticsearch
4 changed files with 7968 additions and 0 deletions
File diff suppressed because it is too large
@ -0,0 +1,22 @@ |
|||
.vertical-space { |
|||
height: 20px; |
|||
} |
|||
|
|||
.xoai-contexts div:nth-child(even) { |
|||
background-color: #eee; |
|||
} |
|||
|
|||
pre { |
|||
line-height: 0.8; |
|||
} |
|||
|
|||
.xmlverb-element-name { color: #990000 } |
|||
.xmlverb-element-nsprefix { color: #666600 } |
|||
.xmlverb-attr-name { color: #660000 } |
|||
.xmlverb-attr-content { color: #000099; font-weight: bold } |
|||
.xmlverb-ns-name { color: #666600 } |
|||
.xmlverb-ns-uri { color: #330099 } |
|||
.xmlverb-text { color: #000000; font-weight: bold } |
|||
.xmlverb-comment { color: #006600; font-style: italic } |
|||
.xmlverb-pi-name { color: #006600; font-style: italic } |
|||
.xmlverb-pi-content { color: #006666; font-style: italic } |
@ -0,0 +1,839 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- |
|||
|
|||
The contents of this file are subject to the license and copyright |
|||
detailed in the LICENSE and NOTICE files at the root of the source |
|||
tree and available online at |
|||
|
|||
http://www.dspace.org/license/ |
|||
|
|||
--> |
|||
<xsl:stylesheet version="1.0" |
|||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:oai="http://www.openarchives.org/OAI/2.0/" |
|||
xmlns:koha="http://koha-community.org" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" |
|||
xmlns:dc="http://purl.org/dc/doc:elements/1.1/" xmlns:marc="http://www.loc.gov/MARC21/slim" |
|||
xmlns:verb="http://informatik.hu-berlin.de/xmlverbatim" |
|||
xmlns:oai_id="http://www.openarchives.org/OAI/2.0/oai-identifier" |
|||
exclude-result-prefixes="oai oai_dc dc marc marcxml verb oai_id"> |
|||
|
|||
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" /> |
|||
|
|||
<xsl:template match="/"> |
|||
<html> |
|||
<head> |
|||
<title>Koha OAI-PMH Data Provider</title> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
|||
<script src="/opac-tmpl/bootstrap/lib/jquery/jquery.js" type="text/javascript" /> |
|||
<script src="/opac-tmpl/bootstrap/lib/bootstrap/js/bootstrap.min.js" type="text/javascript" /> |
|||
<link rel="stylesheet" href="/opac-tmpl/bootstrap/css/bootstrap-theme-oai.css" type="text/css" /> |
|||
<link rel="stylesheet" href="/opac-tmpl/bootstrap/css/oai.css" type="text/css" /> |
|||
</head> |
|||
<body> |
|||
<div class="container"> |
|||
<div class="navbar navbar-default" role="navigation"> |
|||
<div class="navbar-header"> |
|||
<a class="navbar-brand" href="#">Koha OAI-PMH Data Provider</a> |
|||
</div> |
|||
<div class="navbar-collapse collapse"> |
|||
<ul class="nav navbar-nav navbar-right"> |
|||
<li> |
|||
<a title="Institutional information"> |
|||
<xsl:if test="/oai:OAI-PMH/oai:request/@verb = 'Identify'"> |
|||
<xsl:attribute name="class">active</xsl:attribute> |
|||
</xsl:if> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=Identify')"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Identify |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a title="Listing available sets"> |
|||
<xsl:if test="/oai:OAI-PMH/oai:request/@verb = 'ListSets'"> |
|||
<xsl:attribute name="class">active</xsl:attribute> |
|||
</xsl:if> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListSets')"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Sets |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a title="Listing records (with metadata)"> |
|||
<xsl:if test="/oai:OAI-PMH/oai:request/@verb = 'ListRecords'"> |
|||
<xsl:attribute name="class">active</xsl:attribute> |
|||
</xsl:if> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=oai_dc')"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Records |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a title="Listing identifiers only"> |
|||
<xsl:if test="/oai:OAI-PMH/oai:request/@verb = 'ListIdentifiers'"> |
|||
<xsl:attribute name="class">active</xsl:attribute> |
|||
</xsl:if> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListIdentifiers&metadataPrefix=oai_dc')"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Identifiers |
|||
</a> |
|||
</li> |
|||
<li> |
|||
<a title="Metadata Formats available"> |
|||
<xsl:if |
|||
test="/oai:OAI-PMH/oai:request/@verb = 'ListMetadataFormats'"> |
|||
<xsl:attribute name="class">active</xsl:attribute> |
|||
</xsl:if> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListMetadataFormats')"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Metadata Formats |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
</div><!--/.nav-collapse --> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-lg-offset-1 col-lg-10"> |
|||
<div class="row"> |
|||
<h5>Response Date <small><xsl:value-of select="translate(oai:OAI-PMH/oai:responseDate/text(), 'TZ', ' ')" /></small></h5> |
|||
</div> |
|||
<div class="row"> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:error" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:Identify" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:ListSets" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:ListRecords" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:ListIdentifiers" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:ListMetadataFormats" /> |
|||
<xsl:apply-templates select="oai:OAI-PMH/oai:GetRecord" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row-fluid text-center"> |
|||
<div class="vertical-space"></div> |
|||
<p><small>Powered by <a href="http://koha-community.org">Koha</a></small></p> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:error"> |
|||
<div class="alert alert-danger"> |
|||
<h4>Error</h4> |
|||
<p> |
|||
<xsl:value-of select="text()"></xsl:value-of> |
|||
</p> |
|||
</div> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:Identify"> |
|||
<h2>Repository Information</h2> |
|||
<hr /> |
|||
<table class="table table-striped table-bordered"> |
|||
<tr> |
|||
<td><b>Repository Name</b></td> |
|||
<td><xsl:value-of select="oai:repositoryName/text()" /></td> |
|||
</tr> |
|||
<xsl:for-each select="oai:adminEmail"> |
|||
<tr> |
|||
<td><b>E-Mail Contact</b></td> |
|||
<td> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of select="concat('mailto:', text())" /> |
|||
</xsl:attribute> |
|||
<xsl:value-of select="text()" /> |
|||
</a> |
|||
</td> |
|||
</tr> |
|||
</xsl:for-each> |
|||
<tr> |
|||
<td><b>Repository identifier</b></td> |
|||
<td> |
|||
<xsl:value-of select="oai:description/oai_id:oai-identifier/oai_id:repositoryIdentifier/text()" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td><b>Sample identifier</b></td> |
|||
<td> |
|||
<xsl:value-of |
|||
select="oai:description/oai_id:oai-identifier/oai_id:sampleIdentifier/text()" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td><b>Protocol Version</b></td> |
|||
<td> |
|||
<xsl:value-of |
|||
select="oai:protocolVersion/text()" /> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td><b>Earliest Registered Date</b></td> |
|||
<td> |
|||
<xsl:value-of |
|||
select="translate(oai:earliestDatestamp/text(), 'TZ' ,' ')" /> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td><b>Date Granularity</b></td> |
|||
<td> |
|||
<xsl:value-of |
|||
select="translate(oai:granularity/text(), 'TZ', ' ')" /> |
|||
</td> |
|||
|
|||
</tr> |
|||
<tr> |
|||
<td><b>Deletion Mode</b></td> |
|||
<td> |
|||
<xsl:value-of |
|||
select="oai:deletedRecord/text()" /> |
|||
</td> |
|||
|
|||
</tr> |
|||
</table> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:ListSets"> |
|||
<h2>List of Sets</h2> |
|||
<hr /> |
|||
<div class="well well-sm"> |
|||
<h4>Results fetched |
|||
<small> |
|||
<xsl:call-template name="result-count"> |
|||
<xsl:with-param name="path" select="oai:set" /> |
|||
</xsl:call-template> |
|||
</small> |
|||
</h4> |
|||
</div> |
|||
<div class="list-group"> |
|||
<xsl:for-each select="oai:set"> |
|||
<div class="list-group-item"> |
|||
<h5 class="list-group-item-heading"> |
|||
<xsl:choose> |
|||
<xsl:when test="string-length(oai:setName/text()) > 83"> |
|||
<xsl:value-of select="substring(oai:setName/text(),0, 80 )" /> |
|||
... |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="oai:setName/text()" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
<small> |
|||
[<xsl:value-of select="oai:setSpec/text()" />] |
|||
</small> |
|||
</h5> |
|||
<div class="spec"> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=oai_dc&set=', oai:setSpec/text())" /> |
|||
</xsl:attribute> |
|||
Records |
|||
</a> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListIdentifiers&metadataPrefix=oai_dc&set=', oai:setSpec/text())" /> |
|||
</xsl:attribute> |
|||
Identifiers |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</xsl:for-each> |
|||
</div> |
|||
|
|||
<xsl:apply-templates select="oai:resumptionToken"/> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:ListRecords"> |
|||
<h2>List of Records</h2> |
|||
<hr /> |
|||
<div class="well well-sm"> |
|||
<h4>Results fetched |
|||
<small> |
|||
<xsl:call-template name="result-count"> |
|||
<xsl:with-param name="path" select="oai:record" /> |
|||
</xsl:call-template> |
|||
</small> |
|||
</h4> |
|||
</div> |
|||
<xsl:for-each select="oai:record"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<div class="row"> |
|||
<div class="col-lg-6"> |
|||
<h5>Identifier <small><xsl:value-of select="oai:header/oai:identifier/text()"></xsl:value-of></small></h5> |
|||
</div> |
|||
<div class="col-lg-6"> |
|||
<h5>Last Modified <small><xsl:value-of select="translate(oai:header/oai:datestamp/text(), 'TZ', ' ')"></xsl:value-of></small></h5> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<!-- If this record has a "status", display it as a warning --> |
|||
<xsl:if test="oai:header/@status"> |
|||
<div class="alert alert-warning">Record Status: <xsl:value-of select="oai:header/@status"/></div> |
|||
</xsl:if> |
|||
<div class="panel panel-success"> |
|||
<a data-toggle="collapse"> |
|||
<xsl:attribute name="href">#sets<xsl:value-of select="translate(oai:header/oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-heading"> |
|||
<h5 class="panel-title"> |
|||
Sets |
|||
</h5> |
|||
</div> |
|||
</a> |
|||
<div class="panel-collapse collapse"> |
|||
<xsl:attribute name="id">sets<xsl:value-of select="translate(oai:header/oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-body list-group"> |
|||
<xsl:for-each select="oai:header/oai:setSpec"> |
|||
<div class="list-group-item"> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=oai_dc&set=', text())" /> |
|||
</xsl:attribute> |
|||
<xsl:value-of select="text()" /> |
|||
</a> |
|||
</div> |
|||
</xsl:for-each> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel panel-info"> |
|||
<a data-toggle="collapse"> |
|||
<xsl:attribute name="href">#<xsl:value-of select="translate(oai:header/oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-heading"> |
|||
<h5 class="panel-title"> |
|||
Metadata |
|||
</h5> |
|||
</div> |
|||
</a> |
|||
<div class="panel-collapse collapse"> |
|||
<xsl:attribute name="id"><xsl:value-of select="translate(oai:header/oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-body"> |
|||
<xsl:apply-templates select="oai:metadata/*" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xsl:for-each> |
|||
|
|||
<xsl:apply-templates select="oai:resumptionToken"/> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:GetRecord"> |
|||
<h2>Record Details</h2> |
|||
<hr /> |
|||
<xsl:for-each select="oai:record"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<div class="row"> |
|||
<div class="col-lg-6"> |
|||
<h5>Identifier <small><xsl:value-of select="oai:header/oai:identifier/text()"></xsl:value-of></small></h5> |
|||
</div> |
|||
<div class="col-lg-6"> |
|||
<h5>Last Modified <small><xsl:value-of select="translate(oai:header/oai:datestamp/text(), 'TZ', ' ')"></xsl:value-of></small></h5> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<!-- If this record has a "status", display it as a warning --> |
|||
<xsl:if test="oai:header/@status"> |
|||
<div class="alert alert-warning">Record Status: <xsl:value-of select="oai:header/@status"/></div> |
|||
</xsl:if> |
|||
<div class="panel panel-success"> |
|||
<div class="panel-heading"> |
|||
<h5 class="panel-title"> |
|||
Sets |
|||
</h5> |
|||
</div> |
|||
<div class="panel-body list-group"> |
|||
<xsl:for-each select="oai:header/oai:setSpec"> |
|||
<div class="list-group-item"> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=oai_dc&set=', text())" /> |
|||
</xsl:attribute> |
|||
<xsl:value-of select="text()" /> |
|||
</a> |
|||
</div> |
|||
</xsl:for-each> |
|||
</div> |
|||
</div> |
|||
<div class="panel panel-info"> |
|||
<div class="panel-heading"> |
|||
<h5 class="panel-title"> |
|||
Metadata |
|||
</h5> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<xsl:apply-templates select="oai:metadata/*" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xsl:for-each> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:ListIdentifiers"> |
|||
<h2>List of Identifiers</h2> |
|||
<hr /> |
|||
<div class="well well-sm"> |
|||
<h4>Results fetched |
|||
<small> |
|||
<xsl:call-template name="result-count"> |
|||
<xsl:with-param name="path" select="oai:header" /> |
|||
</xsl:call-template> |
|||
</small> |
|||
</h4> |
|||
</div> |
|||
<xsl:for-each select="oai:header"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<div class="row"> |
|||
<div class="col-lg-4"> |
|||
<h5>Identifier <small><xsl:value-of select="oai:identifier/text()"></xsl:value-of></small></h5> |
|||
</div> |
|||
<div class="col-lg-4"> |
|||
<h5>Last Modified <small><xsl:value-of select="translate(oai:datestamp/text(), 'TZ', ' ')"></xsl:value-of></small></h5> |
|||
</div> |
|||
<div class="col-lg-4"> |
|||
<a class="btn btn-default pull-right"> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=GetRecord&metadataPrefix=oai_dc&identifier=', oai:identifier/text())" /> |
|||
</xsl:attribute> |
|||
View Details |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<!-- If this record has a "status", display it as a warning --> |
|||
<xsl:if test="@status"> |
|||
<div class="alert alert-warning">Record Status: <xsl:value-of select="@status"/></div> |
|||
</xsl:if> |
|||
<div class="panel panel-success"> |
|||
<a data-toggle="collapse"> |
|||
<xsl:attribute name="href">#sets<xsl:value-of select="translate(oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-heading"> |
|||
<h5 class="panel-title"> |
|||
Sets |
|||
</h5> |
|||
</div> |
|||
</a> |
|||
<div class="panel-collapse collapse"> |
|||
<xsl:attribute name="id">sets<xsl:value-of select="translate(oai:identifier/text(), ':/.', '')"></xsl:value-of></xsl:attribute> |
|||
<div class="panel-body list-group"> |
|||
<xsl:for-each select="oai:setSpec"> |
|||
<div class="list-group-item"> |
|||
<a> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=oai_dc&set=', text())" /> |
|||
</xsl:attribute> |
|||
<xsl:value-of select="text()" /> |
|||
</a> |
|||
</div> |
|||
</xsl:for-each> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xsl:for-each> |
|||
|
|||
<xsl:apply-templates select="oai:resumptionToken"/> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:OAI-PMH/oai:ListMetadataFormats"> |
|||
<h2>List of Metadata Formats</h2> |
|||
<hr /> |
|||
<div class="well well-sm"> |
|||
<h4>Results fetched |
|||
<small> |
|||
<xsl:value-of select="count(oai:OAI-PMH/oai:ListMetadataFormats/oai:metadataFormat)" /> |
|||
</small> |
|||
</h4> |
|||
</div> |
|||
<xsl:for-each select="oai:metadataFormat"> |
|||
<div class="panel panel-default"> |
|||
<div class="panel-heading"> |
|||
<div class="row"> |
|||
<div class="col-lg-9"> |
|||
<h5><xsl:value-of select="oai:metadataPrefix/text()"></xsl:value-of></h5> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<a class="btn btn-default pull-right"> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of |
|||
select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=ListRecords&metadataPrefix=', oai:metadataPrefix/text())" /> |
|||
</xsl:attribute> |
|||
List Records |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<div class="row"> |
|||
<div class="col-lg-9"> |
|||
<h5>Namespace <small><xsl:value-of select="oai:metadataNamespace/text()"></xsl:value-of></small></h5> |
|||
<h5>Schema <small><xsl:value-of select="oai:schema/text()"></xsl:value-of></small></h5> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xsl:for-each> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:resumptionToken"> |
|||
<xsl:if test="text() != ''"> |
|||
<div class="text-center"> |
|||
<a class="btn btn-primary"> |
|||
<xsl:attribute name="href"> |
|||
<xsl:value-of select="concat(/oai:OAI-PMH/oai:request/text(), '?verb=',/oai:OAI-PMH/oai:request/@verb,'&resumptionToken=', text())"></xsl:value-of> |
|||
</xsl:attribute> |
|||
Show More |
|||
</a> |
|||
</div> |
|||
</xsl:if> |
|||
</xsl:template> |
|||
|
|||
<xsl:template name="result-count"> |
|||
<xsl:param name="path" /> |
|||
<xsl:variable name="cursor" select="$path/../oai:resumptionToken/@cursor" /> |
|||
<xsl:variable name="count" select="count($path)" /> |
|||
<xsl:variable name="total" select="$path/../oai:resumptionToken/@completeListSize" /> |
|||
<xsl:choose> |
|||
<xsl:when test="$cursor"> |
|||
<xsl:choose> |
|||
<xsl:when test="normalize-space($path/../oai:resumptionToken/text()) = ''"> |
|||
<!-- on the last page of results we have to assume that @completeListSize is available --> |
|||
<xsl:value-of |
|||
select="$total - $count" /> |
|||
- |
|||
<xsl:value-of select="$total" /> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="$cursor * $count" /> |
|||
- |
|||
<xsl:value-of select="($cursor+1) * $count" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="$count" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
<xsl:if test="$total"> |
|||
of |
|||
<xsl:value-of select="$total" /> |
|||
</xsl:if> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="oai:metadata/*" priority='-20'> |
|||
<xsl:apply-templates select="." mode='xmlverb' /> |
|||
</xsl:template> |
|||
|
|||
<xsl:param name="indent-elements" select="false()" /> |
|||
|
|||
<xsl:template match="/" mode="xmlverb"> |
|||
<xsl:text>
</xsl:text> |
|||
<xsl:comment> |
|||
<xsl:text> converted by xmlverbatim.xsl 1.1, (c) O. Becker </xsl:text> |
|||
</xsl:comment> |
|||
<xsl:text>
</xsl:text> |
|||
<div class="xmlverb-default"> |
|||
<xsl:apply-templates mode="xmlverb"> |
|||
<xsl:with-param name="indent-elements" select="$indent-elements" /> |
|||
</xsl:apply-templates> |
|||
</div> |
|||
<xsl:text>
</xsl:text> |
|||
</xsl:template> |
|||
|
|||
<!-- wrapper --> |
|||
<xsl:template match="verb:wrapper"> |
|||
<xsl:apply-templates mode="xmlverb"> |
|||
<xsl:with-param name="indent-elements" select="$indent-elements" /> |
|||
</xsl:apply-templates> |
|||
</xsl:template> |
|||
|
|||
<xsl:template match="verb:wrapper" mode="xmlverb"> |
|||
<xsl:apply-templates mode="xmlverb"> |
|||
<xsl:with-param name="indent-elements" select="$indent-elements" /> |
|||
</xsl:apply-templates> |
|||
</xsl:template> |
|||
|
|||
<!-- element nodes --> |
|||
<xsl:template match="*" mode="xmlverb"> |
|||
<xsl:param name="indent-elements" select="true()" /> |
|||
<xsl:param name="indent" select="''" /> |
|||
<xsl:param name="indent-increment" select="'   '" /> |
|||
<xsl:if test="$indent-elements"> |
|||
<br/> |
|||
<xsl:value-of select="$indent" /> |
|||
</xsl:if> |
|||
<xsl:text><</xsl:text> |
|||
<xsl:variable name="ns-prefix" |
|||
select="substring-before(name(),':')" /> |
|||
<xsl:if test="$ns-prefix != ''"> |
|||
<span class="xmlverb-element-nsprefix"> |
|||
<xsl:value-of select="$ns-prefix"/> |
|||
</span> |
|||
<xsl:text>:</xsl:text> |
|||
</xsl:if> |
|||
<span class="xmlverb-element-name"> |
|||
<xsl:value-of select="local-name()"/> |
|||
</span> |
|||
<xsl:variable name="pns" select="../namespace::*"/> |
|||
<xsl:if test="$pns[name()=''] and not(namespace::*[name()=''])"> |
|||
<span class="xmlverb-ns-name"> |
|||
<xsl:text> xmlns</xsl:text> |
|||
</span> |
|||
<xsl:text>=""</xsl:text> |
|||
</xsl:if> |
|||
<xsl:for-each select="namespace::*"> |
|||
<xsl:if test="not($pns[name()=name(current()) and |
|||
.=current()])"> |
|||
<xsl:call-template name="xmlverb-ns" /> |
|||
</xsl:if> |
|||
</xsl:for-each> |
|||
<xsl:for-each select="@*"> |
|||
<xsl:call-template name="xmlverb-attrs" /> |
|||
</xsl:for-each> |
|||
<xsl:choose> |
|||
<xsl:when test="node()"> |
|||
<xsl:text>></xsl:text> |
|||
<xsl:apply-templates mode="xmlverb"> |
|||
<xsl:with-param name="indent-elements" |
|||
select="$indent-elements"/> |
|||
<xsl:with-param name="indent" |
|||
select="concat($indent, $indent-increment)"/> |
|||
<xsl:with-param name="indent-increment" |
|||
select="$indent-increment"/> |
|||
</xsl:apply-templates> |
|||
<xsl:if test="* and $indent-elements"> |
|||
<br/> |
|||
<xsl:value-of select="$indent" /> |
|||
</xsl:if> |
|||
<xsl:text></</xsl:text> |
|||
<xsl:if test="$ns-prefix != ''"> |
|||
<span class="xmlverb-element-nsprefix"> |
|||
<xsl:value-of select="$ns-prefix"/> |
|||
</span> |
|||
<xsl:text>:</xsl:text> |
|||
</xsl:if> |
|||
<span class="xmlverb-element-name"> |
|||
<xsl:value-of select="local-name()"/> |
|||
</span> |
|||
<xsl:text>></xsl:text> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:text> /></xsl:text> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
<xsl:if test="not(parent::*)"><br /><xsl:text>
</xsl:text></xsl:if> |
|||
</xsl:template> |
|||
|
|||
<!-- attribute nodes --> |
|||
<xsl:template name="xmlverb-attrs"> |
|||
<xsl:text> </xsl:text> |
|||
<span class="xmlverb-attr-name"> |
|||
<xsl:value-of select="name()"/> |
|||
</span> |
|||
<xsl:text>="</xsl:text> |
|||
<span class="xmlverb-attr-content"> |
|||
<xsl:call-template name="html-replace-entities"> |
|||
<xsl:with-param name="text" select="normalize-space(.)" /> |
|||
<xsl:with-param name="attrs" select="true()" /> |
|||
</xsl:call-template> |
|||
</span> |
|||
<xsl:text>"</xsl:text> |
|||
</xsl:template> |
|||
|
|||
<!-- namespace nodes --> |
|||
<xsl:template name="xmlverb-ns"> |
|||
<xsl:if test="name()!='xml'"> |
|||
<span class="xmlverb-ns-name"> |
|||
<xsl:text> xmlns</xsl:text> |
|||
<xsl:if test="name()!=''"> |
|||
<xsl:text>:</xsl:text> |
|||
</xsl:if> |
|||
<xsl:value-of select="name()"/> |
|||
</span> |
|||
<xsl:text>="</xsl:text> |
|||
<span class="xmlverb-ns-uri"> |
|||
<xsl:value-of select="."/> |
|||
</span> |
|||
<xsl:text>"</xsl:text> |
|||
</xsl:if> |
|||
</xsl:template> |
|||
|
|||
<!-- text nodes --> |
|||
<xsl:template match="text()" mode="xmlverb"> |
|||
<span class="xmlverb-text"> |
|||
<xsl:call-template name="preformatted-output"> |
|||
<xsl:with-param name="text"> |
|||
<xsl:call-template name="html-replace-entities"> |
|||
<xsl:with-param name="text" select="." /> |
|||
</xsl:call-template> |
|||
</xsl:with-param> |
|||
</xsl:call-template> |
|||
</span> |
|||
</xsl:template> |
|||
|
|||
<!-- comments --> |
|||
<xsl:template match="comment()" mode="xmlverb"> |
|||
<xsl:text><!--</xsl:text> |
|||
<span class="xmlverb-comment"> |
|||
<xsl:call-template name="preformatted-output"> |
|||
<xsl:with-param name="text" select="." /> |
|||
</xsl:call-template> |
|||
</span> |
|||
<xsl:text>--></xsl:text> |
|||
<xsl:if test="not(parent::*)"><br /><xsl:text>
</xsl:text></xsl:if> |
|||
</xsl:template> |
|||
|
|||
<!-- processing instructions --> |
|||
<xsl:template match="processing-instruction()" mode="xmlverb"> |
|||
<xsl:text><?</xsl:text> |
|||
<span class="xmlverb-pi-name"> |
|||
<xsl:value-of select="name()"/> |
|||
</span> |
|||
<xsl:if test=".!=''"> |
|||
<xsl:text> </xsl:text> |
|||
<span class="xmlverb-pi-content"> |
|||
<xsl:value-of select="."/> |
|||
</span> |
|||
</xsl:if> |
|||
<xsl:text>?></xsl:text> |
|||
<xsl:if test="not(parent::*)"><br /><xsl:text>
</xsl:text></xsl:if> |
|||
</xsl:template> |
|||
|
|||
|
|||
<!-- =========================================================== --> |
|||
<!-- Procedures / Functions --> |
|||
<!-- =========================================================== --> |
|||
|
|||
<!-- generate entities by replacing &, ", < and > in $text --> |
|||
<xsl:template name="html-replace-entities"> |
|||
<xsl:param name="text" /> |
|||
<xsl:param name="attrs" /> |
|||
<xsl:variable name="tmp"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="from" select="'>'" /> |
|||
<xsl:with-param name="to" select="'&gt;'" /> |
|||
<xsl:with-param name="value"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="from" select="'<'" /> |
|||
<xsl:with-param name="to" select="'&lt;'" /> |
|||
<xsl:with-param name="value"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="from" |
|||
select="'&'" /> |
|||
<xsl:with-param name="to" |
|||
select="'&amp;'" /> |
|||
<xsl:with-param name="value" |
|||
select="$text" /> |
|||
</xsl:call-template> |
|||
</xsl:with-param> |
|||
</xsl:call-template> |
|||
</xsl:with-param> |
|||
</xsl:call-template> |
|||
</xsl:variable> |
|||
<xsl:choose> |
|||
<!-- $text is an attribute value --> |
|||
<xsl:when test="$attrs"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="from" select="'
'" /> |
|||
<xsl:with-param name="to" select="'&#xA;'" /> |
|||
<xsl:with-param name="value"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="from" |
|||
select="'"'" /> |
|||
<xsl:with-param name="to" |
|||
select="'&quot;'" /> |
|||
<xsl:with-param name="value" select="$tmp" /> |
|||
</xsl:call-template> |
|||
</xsl:with-param> |
|||
</xsl:call-template> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="$tmp" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
</xsl:template> |
|||
|
|||
<!-- replace in $value substring $from with $to --> |
|||
<xsl:template name="replace-substring"> |
|||
<xsl:param name="value" /> |
|||
<xsl:param name="from" /> |
|||
<xsl:param name="to" /> |
|||
<xsl:choose> |
|||
<xsl:when test="contains($value,$from)"> |
|||
<xsl:value-of select="substring-before($value,$from)" /> |
|||
<xsl:value-of select="$to" /> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="value" |
|||
select="substring-after($value,$from)" /> |
|||
<xsl:with-param name="from" select="$from" /> |
|||
<xsl:with-param name="to" select="$to" /> |
|||
</xsl:call-template> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="$value" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
</xsl:template> |
|||
|
|||
<!-- preformatted output: space as , tab as 8 |
|||
nl as <br> --> |
|||
<xsl:template name="preformatted-output"> |
|||
<xsl:param name="text" /> |
|||
<xsl:call-template name="output-nl"> |
|||
<xsl:with-param name="text"> |
|||
<xsl:call-template name="replace-substring"> |
|||
<xsl:with-param name="value" |
|||
select="translate($text,' ',' ')" /> |
|||
<xsl:with-param name="from" select="'	'" /> |
|||
<xsl:with-param name="to" |
|||
select="'        '" /> |
|||
</xsl:call-template> |
|||
</xsl:with-param> |
|||
</xsl:call-template> |
|||
</xsl:template> |
|||
|
|||
<!-- output nl as <br> --> |
|||
<xsl:template name="output-nl"> |
|||
<xsl:param name="text" /> |
|||
<xsl:choose> |
|||
<xsl:when test="contains($text,'
')"> |
|||
<xsl:value-of select="substring-before($text,'
')" /> |
|||
<br /> |
|||
<xsl:text>
</xsl:text> |
|||
<xsl:call-template name="output-nl"> |
|||
<xsl:with-param name="text" |
|||
select="substring-after($text,'
')" /> |
|||
</xsl:call-template> |
|||
</xsl:when> |
|||
<xsl:otherwise> |
|||
<xsl:value-of select="$text" /> |
|||
</xsl:otherwise> |
|||
</xsl:choose> |
|||
</xsl:template> |
|||
|
|||
</xsl:stylesheet> |
Loading…
Reference in new issue