在DSpace XMLUI中,如何更改"预览"搜索结果的摘要?

时间:2016-03-15 23:25:47

标签: xslt xslt-1.0 user-experience dspace

当前状态

默认情况下,DSpace XMLUI(幻影,幻影2主题与"元数据"焦点)显示搜索结果列表中的项目,如下所示:

  1. 当在标题/作者/发布者元数据中找到搜索词时,该项目显示为"最近添加的"列表(包括摘要的第一部分)。
  2. 当在摘要中找到搜索词时,为项目"显示的抽象片段会移动"显示搜索词所在位置的上下文。
  3. 在提取的全文中找到搜索词时,根本不显示摘要片段。相反,会显示提取的全文的片段,以显示搜索词所在位置的上下文。
  4. 在所有三种情况下,搜索字词都以粗体显示。

    此方法的问题

    上述方法在用户体验方面会产生一些问题:

    • 上述逻辑并未向用户说明;搜索结果列表可以是显示摘要开头的项目组合,显示抽象中间部分的项目以及显示全文摘要片段的项目。
    • 提取的全文可能包括"丑陋"特殊字符,通常包括文件名,文件大小和与用户关系不大的其他元数据。
    • 提取的全文可能来自受限制的比特流,预览片段可能会显示应该保密的信息(请参阅this DSpace bug)。

    所需行为

    相反,我希望始终显示搜索结果列表中的项目的抽象代码段。抽象片段可以接受" shift"显示搜索词的上下文,但这应该向用户说明。当仅在全文文件中找到搜索词时,应显示摘要的开头,以及属于该项的全文文件包含搜索词的消息。

2 个答案:

答案 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

您应该知道的最后一件事 - 如果您正在编辑此文件并希望更改对您来说非常明显,则您需要不断清除浏览器历史记录/缓存或执行新搜索。在我找到一个好的工作流程之前,编辑过程因为这个原因(似乎没有反映出最新的变化)而有点艰难。