gpt4 book ai didi

xslt - 将大多数下载的项目插入 XMLUI (DSpace 6.2)

转载 作者:行者123 更新时间:2023-12-02 01:03:41 27 4
gpt4 key购买 nike

我在 DSpace 6.2 上使用 XMLUI (Mirage) 并尝试将“下载最多的项目”插入主页。

我已经找到了 SOLR 查询,即(在 page-structure.xsl 中):

<xsl:variable name="statsURL">
<xsl:text>http://localhost/solr/statistics</xsl:text>
</xsl:variable>
<xsl:apply-templates select="document(concat($statsURL,'/select?q=type:0+-isBot:true+statistics_type:view&amp;wt=xml&amp;indent=true&amp;facet=true&amp;facet.field=id&amp;facet.sort=count&amp;facet.limit=10'))" mode="mostdownloaded"/>

此查询返回一个 xml 文档:
<response>
+<result name="response" numFound="8" start="0"></result>
-<lst name="facet_counts">
<lst name="facet_queries"/>
-<lst name="facet_fields">
-<lst name="id">
<int name="49b63c98-122c-40d4-9181-2ad4db8853c9">8</int>
<int name="061c72a0-3edc-4e17-8f33-4e7f6ce4573a">0</int>
<int name="0e124f85-4636-4eb5-85cb-2e4afd3e3ed0">0</int>
<int name="19095190-9074-4a4a-bb59-abcb539c8c38">0</int>
<int name="1e5350e0-83d9-4f26-bd76-e5d660254ee6">0</int>
<int name="432038ee-a7d7-4c69-80c1-02641e105286">0</int>
<int name="6b70eeea-be33-4489-8370-189ef041ba93">0</int>
<int name="9a8cd24e-3d88-43fc-8e92-b4e2c6142fbc">0</int>
<int name="bba37b59-7edc-453c-87d2-4039e432217b">0</int>
<int name="cc78e683-9563-49df-b5cf-35d506b4a27d">0</int>
</lst>
</lst>
<lst name="facet_dates"/>
<lst name="facet_ranges"/>
<lst name="facet_intervals"/>
</lst>
</response>

然后我将其与模板进行匹配,如下所示:
<xsl:template match="/response/lst/lst/lst/int" mode="most-downloaded">
<div class="most_downloaded">
<xsl:value-of select="./@name"/>
</div>
<div class="downloaded_count">
<xsl:value-of select="text()"/>
</div>
</xsl:template>

我希望看到 8 个“most_downloaded”类的 div,每个 div 都包含项目的 id,散布着另外 8 个包含实际值的“downloaded_count”类的 div。
我确实看到了这些 div,但在它们上面,我得到了所有 XML 文本节点的转储。我认为这是由于我对模板匹配的理解不足而发生的。

我的问题是:
i) 我的查询是否正确获取了下载次数最多的项目列表?我试图对此进行测试,但没有收到积极的结果。
ii) 匹配模板的正确方法是什么?/response/lst/lst/lst/int 听起来是错误的。
iii) 如何使用 id(我认为是数据库中的项目 uuid)通过 cocoon 获取mets.xml 数据?
iv) 有没有更简单的方法来完成所有这些工作?

谢谢你的帮助。

最佳答案

i) 您的查询获得比特流 ID,而不是拥有项目的 ID。对于大多数下载的项目,您需要 facet.field=owningItem ,也可能是排除项,因此您不计算缩略图(例如 &fq=bundleName:ORIGINAL - 如果您有非标准包名称,则需要进行调整)。

ii) 看起来不错。你可能想要类似 <xsl:template match="*" mode="most-downloaded"> 的东西抑制您看到的随机 XML 垃圾。

iii) 我认为最好从 Discovery Solr 核心获取元数据,而不是尝试获取 mets.xml 文件。您也许可以将 Solr 连接到发现核心并在一个查询中从那里获取标题(或您想要的任何其他元数据),但我不确定这是否适用于分面。您可以在模板中查询每个 ID 的 Discovery 核心以获取您想要的内容(例如 http://localhost:8080/solr/search/select?q=*:*&fq=search.id= [id-goes-here] &rows=1&fl=title)。

iv) 取决于您是否认为编写 Java 代码更容易 ;) 我已经通过两步过程在本地解决了大致相同的问题:(a) 每天查询一次 solr,使用与您类似的查询并将结果写入 ( JSON) 文件; (b) 为 Cocoon 转换器编写 Java 代码,从文件加载项目 ID,查找相应项目的标题,然后将其以有用的格式放入页面。不确定您的方法是否更好/更糟!尽管我的方法避免了必须实时查询 Solr,但我们发现这是非常资源密集型的。

仅供引用,我对 (iv) 中提到的 JSON 文件的查询是
http://localhost:8080/solr/statistics/select?q=*:*&fq=-isBot:true&fq=type:0&fq=statistics_type:view&facet=true&facet.field=owningItem&facet.limit=5&indent=true&rows=0&fq=time:[NOW/DAY-7DAYS+TO+NOW/DAY]&facet.mincount=5&fq=bundleName:ORIGINAL&wt=json&omitHeader=true

  • 获得非机器人点击
  • 比特流的命中(类型 0)
  • 统计类型是 View (不是工作流或其他任何东西)
  • 我们希望它们按相应项目的 ID
  • 分组
  • 我们只想要 5
  • 我们希望它缩进(这仅用于光学)
  • 我们想要 0 行数据(这将是除构面之外的 - 我们只关心构面)
  • 我们想要最后 7 天
  • 我们只想要文件至少被下载 5 次的项目
  • 我们只想要原始包,而不是缩略图等
  • 我们想要 JSON 格式
  • 我们想跳过一些我们不关心的 Solr 结果内容
  • 关于xslt - 将大多数下载的项目插入 XMLUI (DSpace 6.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007831/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com