当前状态
默认情况下,DSpace XMLUI(幻影,幻影2主题与"元数据"焦点)显示搜索结果列表中的项目,如下所示:
在所有三种情况下,搜索字词都以粗体显示。
此方法的问题
上述方法在用户体验方面会产生一些问题:
所需行为
相反,我希望始终显示搜索结果列表中的项目的抽象代码段。抽象片段可以接受" shift"显示搜索词的上下文,但这应该向用户说明。当仅在全文文件中找到搜索词时,应显示摘要的开头,以及属于该项的全文文件包含搜索词的消息。
答案 0 :(得分:2)
搜索结果列表的摘要/预览片段部分在discovery.xml中生成,例如{Miver 2中文件的当前版本starting here。自定义"选择"如下声明将产生所需的结果(虽然它在i18n方面不稳健):
<xsl:choose>
<xsl:when test="dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item/dri:hi">
<!--
search term found in abstract - show context
around search term location(s)
-->
<div class="abstract">
<strong>Search term found in abstract:</strong>
<xsl:for-each select="dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item">
<xsl:text>… </xsl:text><xsl:apply-templates select="."/><xsl:text> …</xsl:text>
<br/>
</xsl:for-each>
</div>
</xsl:when>
<xsl:when test="dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item">
<!--
search term not found in abstract but the item has an abstract
- show first part of abstract like in recently added lists
-->
<div class="abstract">
<xsl:value-of select="util:shortenString(dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item, 220, 10)"/>
</div>
</xsl:when>
</xsl:choose>
<xsl:if test="not(dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item/dri:hi) and dri:list[@n=(concat($handle, ':fulltext'))]">
<!--
search term not found in abstract but found in fulltext file -
show message _instead_ of preview; if there is an abstract
then it will already be shown via the choose statement above
-->
<strong>(Search term found in fulltext file)</strong>
</xsl:if>
答案 1 :(得分:0)
谢谢schweerelos!通过您的示例,我们对discovery.xsl进行了以下更改:
首先,我们需要在样式表中添加一个额外的项目,以便执行字符串缩短:
<xsl:stylesheet
xmlns:util="org.dspace.app.xmlui.utils.XSLUtils"
...
exclude-result-prefixes="xalan encoder i18n dri util ...">
然后我们将:fulltext
分支修改为另外一个显示摘要的前220个字符(只要它存在)。
<xsl:choose>
<xsl:when test="dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item/dri:hi">
<div class="abstract">
<xsl:for-each select="dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item">
<xsl:apply-templates select="."/>
<xsl:text>...</xsl:text>
<br/>
</xsl:for-each>
</div>
</xsl:when>
<xsl:otherwise> <!-- NEW APPROACH STARTS ON THIS LINE -->
<div class="abstract">
<xsl:value-of select="util:shortenString(dri:list[@n=(concat($handle, ':dc.description.abstract'))]/dri:item, 220, 10)"/>
</div>
</xsl:otherwise>
</xsl:choose>
我们发现这是一个可接受的权衡,并提供一致的外观。你可以在记录上提供的dc.description.abstract或dc.description.abstract的开头看到Hit Highlighting找到搜索词的位置(KWIC)。
如果摘要的文本本身目前被禁止(或无限期限制),那么任何在旧的演示文稿中显示限制内容的搜索词只会显示该项目的摘要是限制...&#39;因为dc.description.abstract
字段填充了该文本。
上述方法(<xsl:otherwise>
部分)取代了以下内容。
拒绝(已交付)方法:
<xsl:when test="dri:list[@n=(concat($handle, ':fulltext'))]">
<div class="abstract">
<xsl:for-each select="dri:list[@n=(concat($handle, ':fulltext'))]/dri:item">
<xsl:apply-templates select="."/>
<xsl:text>...</xsl:text>
<br/>
</xsl:for-each>
</div>
</xsl:when>
该文件位于一个意想不到的位置,如果我更了解开发过程的工作方式,我可以将其放在 OUR 主题文件夹中,但就目前而言,它是在dri2xhtml-alt中编辑的。主题。我没想到会在那里找到影响这种行为的文件,但是很明显它可以在那里进行更改。
\DSpaceRepo\dspace-xmlui\src\main\webapp\themes\dri2xhtml-alt\aspect\artifactbrowser\discovery.xsl
您应该知道的最后一件事 - 如果您正在编辑此文件并希望更改对您来说非常明显,则您需要不断清除浏览器历史记录/缓存或执行新搜索。在我找到一个好的工作流程之前,编辑过程因为这个原因(似乎没有反映出最新的变化)而有点艰难。