Как отобразить миниатюры из собранных предметов в DSpace?
Я пытаюсь отобразить миниатюры из собранных предметов. У меня есть параметры сбора урожая: метаданные сбора и ссылки на битовые потоки (требуется поддержка ORE). Когда я искал код о том, как DSpace отображает имена файлов и размеры файлов потоков битов собранных элементов в простом виде, я обнаружил, что в https://github.com/DSpace/DSpace/blob/dspace-6.1/dspace-xmlui-mirage2/src/main/webapp/xsl/aspect/artifactbrowser/item-view.xsl#L375-L378
<!-- Special case for handling ORE resource maps stored as DSpace bitstreams -->
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="//mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM" />
</xsl:when>
и для полного представления записи элемента в https://github.com/DSpace/DSpace/blob/dspace-6.1/dspace-xmlui-mirage2/src/main/webapp/xsl/aspect/artifactbrowser/item-view.xsl#L81-L84.
<!-- Special case for handling ORE resource maps stored as DSpace bitstreams -->
<xsl:when test="./mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="./mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemDetailView-DIM" />
</xsl:when>
Так что кажется, что код найден в item-view.xsl
вызывает соответствие шаблона, найденное в ORE.xsl
,
Теперь, глядя на образец mets.xml
файл собранного предмета, в частности, в //mets:fileSec/mets:fileGrp[@USE='ORE']
мы можем видеть, что это ссылается на ORE.xml
в /bitstream/handle/10862/3360/ORE.xml
,
<mets:fileSec>
<mets:fileGrp USE="ORE">
<mets:file GROUPID="group_file_f148a8ad-b7ad-49fe-8b4b-0d3893d2c351" CHECKSUM="7afebcfcf393395503377219395e3926" MIMETYPE="text/xml" SIZE="4137" ID="file_f148a8ad-b7ad-49fe-8b4b-0d3893d2c351" CHECKSUMTYPE="MD5">
<mets:FLocat LOCTYPE="URL" xlink:href="/bitstream/handle/10862/3360/ORE.xml?sequence=1&isAllowed=y" xlink:type="locator" xlink:title="ORE.xml"/>
</mets:file>
</mets:fileGrp>
</mets:fileSec>
На основании совпадения шаблона, найденного в ORE.xsl
, мы можем видеть, что имена файлов и размер файла были сгенерированы из этого кода:
<xsl:template match="mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM">
<xsl:variable name="AtomMapURL" select="concat('cocoon:/',substring-after(mets:file/mets:FLocat[@LOCTYPE='URL']//@*[local-name(.)='href'],$context-path))"/>
<div class="item-page-field-wrapper table">
<h5>
<i18n:text>xmlui.dri2xhtml.METS-1.0.item-files-viewOpen</i18n:text>
</h5>
<xsl:for-each select="document($AtomMapURL)/atom:entry/atom:link[@rel='http://www.openarchives.org/ore/terms/aggregates']">
<xsl:variable name="link_href" select="@href"/>
<xsl:if test="/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href][dcterms:description='ORIGINAL']
or not(/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href])">
<xsl:call-template name="itemSummaryView-DIM-file-section-entry">
<xsl:with-param name="href" select="@href" />
<xsl:with-param name="mimetype" select="@type" />
<xsl:with-param name="label-1" select="'title'" />
<xsl:with-param name="label-2" select="'title'" />
<xsl:with-param name="title" select="@title" />
<xsl:with-param name="label" select="@title" />
<xsl:with-param name="size" select="@length" />
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</div>
</xsl:template>
Просмотр журнала /bitstream/handle/10862/3360/ORE.xml
мы можем видеть, что помимо ORIGINAL
расслоение, TEXT
а также THUMBNAIL
связки были также захвачены, когда это было собрано.
<atom:link href="https://repository.seafdec.org.ph/bitstream/10862/152/1/ediblecrustacea.pdf" length="2310365" rel="http://www.openarchives.org/ore/terms/aggregates" title="ediblecrustacea.pdf" type="application/pdf"/>
<atom:link href="https://repository.seafdec.org.ph/bitstream/10862/152/4/edible-crust-errata.pdf" length="177699" rel="http://www.openarchives.org/ore/terms/aggregates" title="edible-crust-errata.pdf" type="application/pdf"/>
<oreatom:triples>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="http://hdl.handle.net/10862/152/ore.xml#atom">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceItem"/>
<dcterms:modified>2011-06-07T06:45:26Z</dcterms:modified>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/35/edible-crust-errata.pdf.txt">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>TEXT</dcterms:description>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/36/ediblecrustacea.pdf.txt">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>TEXT</dcterms:description>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/1/ediblecrustacea.pdf">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>ORIGINAL</dcterms:description>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/4/edible-crust-errata.pdf">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>ORIGINAL</dcterms:description>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/32/ediblecrustacea.pdf.jpg">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>THUMBNAIL</dcterms:description>
</rdf:Description>
<rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="https://repository.seafdec.org.ph/bitstream/10862/152/33/edible-crust-errata.pdf.jpg">
<rdf:type rdf:resource="http://www.dspace.org/objectModel/DSpaceBitstream"/>
<dcterms:description>THUMBNAIL</dcterms:description>
</rdf:Description>
</oreatom:triples>
Теперь моя цель состоит в том, чтобы захватить и повторно использовать URL, найденный в /atom:entry/oreatom:triples/rdf:Description[@rdf:about][dcterms:description='THUMBNAIL']
и сделать это как src
миниатюры, найденной в коде для itemSummaryView-DIM-thumnail
а также mets:file
шаблон, что-то вроде горячей ссылки на исходный эскиз. Кстати, файлы в этом представлении не так хороши, так что...
Что касается отображения миниатюры в простом виде, я думаю о <xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
в itemSummaryView-DIM-thumbnail
шаблон т.е.
<xsl:choose>
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']">
<xsl:variable name="src">
<xsl:choose>
<xsl:when test="/mets:METS/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file[@GROUPID=../../mets:fileGrp[@USE='CONTENT']/mets:file[@GROUPID=../../mets:fileGrp[@USE='THUMBNAIL']/mets:file/@GROUPID][1]/@GROUPID]">
<xsl:value-of
select="/mets:METS/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file[@GROUPID=../../mets:fileGrp[@USE='CONTENT']/mets:file[@GROUPID=../../mets:fileGrp[@USE='THUMBNAIL']/mets:file/@GROUPID][1]/@GROUPID]/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="//mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Checking if Thumbnail is restricted and if so, show a restricted image -->
<xsl:choose>
<xsl:when test="contains($src,'isAllowed=n')"/>
<xsl:otherwise>
<img class="img-thumbnail" alt="Thumbnail">
<xsl:attribute name="src">
<xsl:value-of select="$src"/>
</xsl:attribute>
</img>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="//mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail" />
</xsl:when>
<xsl:otherwise>
<img class="img-thumbnail" alt="Thumbnail">
<xsl:attribute name="data-src">
<xsl:text>holder.js/100%x</xsl:text>
<xsl:value-of select="$thumbnail.maxheight"/>
<xsl:text>/text:No Thumbnail</xsl:text>
</xsl:attribute>
</img>
</xsl:otherwise>
</xsl:choose>
Моя проблема сейчас в том, что я не знаю, как ссылаться на URL для миниатюры в ORE.xml
файл. Я также заметил, что имя и размер файла были извлечены из /atom:entry/atom:link[@rel='http://www.openarchives.org/ore/terms/aggregates']
основанный на ORE.xsl
код выше.
Заранее спасибо!
ОБНОВИТЬ
Вот что я сделал: я модифицирую [dspace]/config/crosswalks/oai/metadataFormats/ore.xsl
исходного сервера, так что он будет отображать эскизы в <atom:link rel="http://www.openarchives.org/ore/terms/aggregates">
часть OAI
вывод при использовании ore
как формат метаданных, но я должен очистить кэш oai и выполнить полный повторный импорт OAI на исходном сервере. Кроме того, я должен сбросить и импортировать урожай с сервера сбора урожая, чтобы включить новый сгенерированный ORE.xml
файлы. Модификация, которую я сделал, состояла в том, чтобы изменить строку № 67 ore.xsl
от
<xsl:if test="doc:field[@name='name']/text() = 'ORIGINAL'">
в:
<xsl:if test="doc:field[@name='name']/text() = 'ORIGINAL' or doc:field[@name='name']/text() = 'THUMBNAIL'">
Затем в item-view.xsl
Я включил эту строку в <xsl:template name="itemSummaryView-DIM-thumbnail">
:
Затем в [dspace]/webapps/xmlui/themes/Mirage2/xsl/aspect/artifactbrowser/ORE.xsl
Я включаю эти строки:
<xsl:template match="mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail">
<xsl:variable name="AtomMapURL" select="concat('cocoon:/',substring-after(mets:file/mets:FLocat[@LOCTYPE='URL']//@*[local-name(.)='href'],$context-path))"/>
<xsl:apply-templates select="document($AtomMapURL)/atom:entry/atom:link[@rel='http://www.openarchives.org/ore/terms/aggregates']" mode="itemSummaryView-DIM-thumbnail"/>
</xsl:template>
<xsl:template match="atom:link[@rel='http://www.openarchives.org/ore/terms/aggregates']" mode="itemSummaryView-DIM-thumbnail">
<xsl:variable name="link_href" select="@href"/>
<xsl:if test="/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href][dcterms:description='THUMBNAIL' and position() = 1]
or not(/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href])">
<img class="img-thumbnail" alt="Thumbnail">
<xsl:attribute name="src">
<xsl:value-of select="@href"/>
</xsl:attribute>
</img>
</xsl:if>
</xsl:template>
Это сработало, за исключением того, что в случаях, когда в исходном элементе есть несколько миниатюр, он также будет отображать более одной миниатюры, даже если в моем тестовом состоянии <xsl:if test="/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href][dcterms:description='THUMBNAIL' and position() = 1] or not(/atom:entry/oreatom:triples/rdf:Description[@rdf:about=$link_href])">
, Смотрите скриншот ниже:
Кроме того, я бы не хотел изменять ore.xsl
в каталоге crosswalk исходного сервера, следовательно, этот пост: Извлечь значение атрибута, если дочерний узел содержит этот текст
ОБНОВЛЕНИЕ 2 - Миниатюра теперь отображается в простом представлении элемента
Что я сделал:
В <xsl:template name="itemSummaryView-DIM-thumbnail">
Я вставил код ниже после строки # 195:
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="//mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail" />
</xsl:when>
Затем я добавил эти шаблоны в ORE.xsl
:
<xsl:template match="mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail">
<xsl:variable name="AtomMapURL" select="concat('cocoon:/',substring-after(mets:file/mets:FLocat[@LOCTYPE='URL']//@*[local-name(.)='href'],$context-path))"/>
<xsl:apply-templates select="document($AtomMapURL)/atom:entry/oreatom:triples" mode="itemSummaryView-DIM-thumbnail"/>
</xsl:template>
<xsl:template match="oreatom:triples" mode="itemSummaryView-DIM-thumbnail">
<xsl:if test="/atom:entry/oreatom:triples/rdf:Description[dcterms:description='THUMBNAIL']
or not(/atom:entry/oreatom:triples/rdf:Description)">
<img class="img-thumbnail" alt="Thumbnail">
<xsl:attribute name="src">
<xsl:value-of select="rdf:Description[boolean(@rdf:about) and
.//dcterms:description[. = 'THUMBNAIL']][1]/@rdf:about"/>
</xsl:attribute>
</img>
</xsl:if>
</xsl:template>
Мой собранный элемент теперь отображает миниатюру в сводном представлении элемента:
Было бы здорово, если бы я мог также отображать эскизы в списке элементов и результатах поиска, но пока я не могу понять, как сопоставить и выбрать URL-адрес эскиза. Я не знаю, как ссылаться на них изнутри <xsl:template match="mets:fileSec" mode="artifact-preview">
шаблон.
0 ответов
На будущее, это то, что я сделал, чтобы показать эскизы собранных предметов.
Этот ответ основан на теме DSpace 5x Mirage2, но его также можно применить к DSpace 6x Mirage2.
В item-view.xsl
, найдите <xsl:template name="itemSummaryView-DIM-thumbnail">
блок, а затем вставьте этот код:
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="//mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail" />
</xsl:when>
перед <xsl:otherwise>
блок. Полный блок шаблона ниже:
<xsl:template name="itemSummaryView-DIM-thumbnail">
<div class="thumbnail">
<xsl:choose>
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']">
<xsl:variable name="src">
<xsl:choose>
<xsl:when test="/mets:METS/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file[@GROUPID=../../mets:fileGrp[@USE='CONTENT']/mets:file[@GROUPID=../../mets:fileGrp[@USE='THUMBNAIL']/mets:file/@GROUPID][1]/@GROUPID]">
<xsl:value-of
select="/mets:METS/mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file[@GROUPID=../../mets:fileGrp[@USE='CONTENT']/mets:file[@GROUPID=../../mets:fileGrp[@USE='THUMBNAIL']/mets:file/@GROUPID][1]/@GROUPID]/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="//mets:fileSec/mets:fileGrp[@USE='THUMBNAIL']/mets:file/mets:FLocat[@LOCTYPE='URL']/@xlink:href"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<img alt="Thumbnail">
<xsl:attribute name="src">
<xsl:value-of select="$src"/>
</xsl:attribute>
</img>
</xsl:when>
<xsl:when test="//mets:fileSec/mets:fileGrp[@USE='ORE']">
<xsl:apply-templates select="//mets:fileSec/mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail" />
</xsl:when>
<xsl:otherwise>
<img alt="Thumbnail">
<xsl:attribute name="data-src">
<xsl:text>holder.js/100%x</xsl:text>
<xsl:value-of select="$thumbnail.maxheight"/>
<xsl:text>/text:No Thumbnail</xsl:text>
</xsl:attribute>
</img>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
Затем отредактируйте ORE.xsl
и вставьте приведенный ниже код непосредственно перед </xsl:stylesheet>
конечный тег.
<xsl:template match="mets:fileGrp[@USE='ORE']" mode="itemSummaryView-DIM-thumbnail">
<xsl:variable name="AtomMapURL" select="concat('cocoon:/',substring-after(mets:file/mets:FLocat[@LOCTYPE='URL']//@*[local-name(.)='href'],$context-path))"/>
<xsl:apply-templates select="document($AtomMapURL)/atom:entry/oreatom:triples" mode="itemSummaryView-DIM-thumbnail"/>
</xsl:template>
<xsl:template match="oreatom:triples" mode="itemSummaryView-DIM-thumbnail">
<xsl:if test="/atom:entry/oreatom:triples/rdf:Description[dcterms:description='THUMBNAIL']
or not(/atom:entry/oreatom:triples/rdf:Description)">
<img alt="Thumbnail" class="img-responsive">
<xsl:attribute name="src">
<xsl:value-of select="rdf:Description[boolean(@rdf:about) and
.//dcterms:description[. = 'THUMBNAIL']][1]/@rdf:about"/>
</xsl:attribute>
</img>
</xsl:if>
</xsl:template>
Чтобы отобразить эскизы в списке элементов, отредактируйте common.xsl
и найдите этот код:
<xsl:text>?sections=dmdSec,fileSec&fileGrpTypes=THUMBNAIL</xsl:text>
и измените его на:
<xsl:text>?sections=dmdSec,fileSec&fileGrpTypes=THUMBNAIL,ORE</xsl:text>
Чтобы отобразить эскизы в результатах поиска, найдите ту же строку кода выше в файле. discovery.xsl
найдено под [dspace-src]/dspace/modules/xmlui-mirage2/src/main/webapp/themes/Mirage2/xsl/aspect/discovery
каталог и измените его так же, как в common.xsl
файл.
Все изменения файлов в этом ответе производятся в соответствии с [dspace-src]dspace/modules
каталог.
Пример этого кода в действии можно найти здесь: Внешние публикации SEAFDEC