如何从另一个项目访问或检索项目的内容?

时间:2015-08-31 04:10:50

标签: xslt-1.0 dspace

我的用例是我有一个项目在另一个项目中有链接。例如,项123456789/152具有元数据字段dc.relation.hasversion=123456789/717。在123456789/152的项目视图中,如何检索123456789/717的元数据值?例如,我想从dc.language.iso检索123456789/717的{​​{1}}值。

我查看了DSpace中的相关项目功能,但我不知道相关项目列表中显示的元数据是如何从该项中的项目中提取的列表。

我正在使用 DSpace版本5.3 Mirage 2主题

修改

根据schweerelos回答,以下是我的实际代码。我正在使用自定义元数据字段123456789/152。基本上,我想链接到其他版本但不显示值,我会在dc.relation.languageVersion中显示其他版本的dc.language.iso。我已在代码中将answer schweerelos question合并到此Please, download from here.,但仅显示item-view.xsl的值dc.relation.languageVersion的样本值为dc.relation.languageVersion; 10665.1/9843即不是完整的URI而只是句柄。

提前致谢!

实际代码

10665.1/9844

1 个答案:

答案 0 :(得分:1)

相关项目功能使用Discovery solr索引,其中"相关性"通过比较元数据来计算。相关项目'元数据也来自solr索引,因此不能轻易地为您的目的重复使用。

您并未说明您正在使用的DSpace UI变体 - 从您提出的其他问题我假设XMLUI(如果您包含了其他问题,您的问题可能对其他Stack Overflow用户更有帮助每次都有DSpace版本+ UI变体。

要检索您知道其句柄的项目的元数据,请使用document()功能加载该项目的mets文件。然后,您可以将模板应用于整个事物或特定元数据字段。

像这样的东西(完全未经测试,你可能需要修改它才能使它真正起作用):

假设您的item-view.xsl包含这样的模板(以及确保模板实际调用的代码):

<xsl:template match="dim:field[@element='relation' and @qualifier='hasversion' and descendant::text()]" mode="showRelatedLang">        
    <xsl:variable name="otherItemMetadataURL">        
        <xsl:text>cocoon://metadata/handle/</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text>/mets.xml</xsl:text>
    </xsl:variable>        
    <xsl:apply-templates select="document($otherItemMetadataURL)" mode="showLang"/>
</xsl:template>

<xsl:template match="dim:field[@element='language' and @qualifier='iso' and descendant::text()]" mode="showLang">
    <xsl:value-of select="."/>
</xsl:template>

第一个模板从第一个项目的dc.relation.hasversion中读取句柄,然后将URL构建到第二个项目的mets文件并加载mets文件。然后它将第二个模板调用到加载第二个项目的mets文件的结果。第二个模板从dc.language.iso读取值;因为它会调用document()调用的结果,所以会选择第二个项目的语言。