使用XSLT更新一组记录

应用更改

管理员用户可以使用目录API使用XSLT转换更新一组记录。步骤如下:

  • 以管理员用户身份登录

  • 使用 q 服务,例如选择特定标准中的所有模板:http://localhost/本地主机:8080/地理网络/srv/eng/q?_schema=iso19115-3和isTemplate=y

  • 选择与搜索匹配的所有记录http://localhost/本地主机:8080/地理网络/srv/eng/元数据。选择?selected=全部添加

  • 使用触发进程http://localhost/本地主机:8080/地理网络/srv/eng/md.processing.batch?进程=我的自定义进程

  • 查看进度报告http://localhost/本地主机:8080/地理网络/srv/eng/md.processing.batch公司.报告

在流程的最后,总结描述了:

  • 要处理的记录数

  • 要处理的记录数

  • 找不到的记录数(如果在选择之后删除了一条记录)

  • 有错误的记录数

  • 标准中未定义流程的记录数

  • 当前用户无法编辑的记录数

还可以使用 md.processing 服务。如。http://localhost/本地主机:8080/地理网络/srv/eng/医学博士处理?uuid=46eac9e4-33cb-45b7-a104-7bcc8e654c98&process=keywords mapper&search=water&replace=water

参数为:

  • uuid或id:元数据uuid或元数据内部标识符

  • 进程:进程标识符

  • 根据流程添加其他额外参数(见下文)。

添加批处理

创建处理文件

批处理过程是基于每个架构定义的。要检查标准的可用流程列表,请检查 <datadirectory>/config/schemaPlugins/<schemaId>/process 文件夹。

这个 process 文件夹包含一组XSLT。不带扩展名的XSLT文件的名称用于触发进程。例如,如果使用 md.processing.batch?process=my-custom-process ,进程XSLT必须命名为 my-custom-process.xsl .

处理记录的XML

XSLT过程将应用于所选内容中的每个元数据记录。每个文档都将元数据XML文档作为根元素 geonet:info 元素。这个 geonet:info 元素包含有关元数据的元数据。当保存到数据库中时,进程必须删除此元素以不更改记录。

<gmd:MD_Metadata>
    ...
    <geonet:info xmlns:geonet="http://www.fao.org/geonetwork">
        <id>73481</id>
        <uuid>bb151890-2da5-4cfb-8659-7839e7138be7</uuid>
        <schema>iso19139</schema>
        <createDate>2015-12-23T17:05:36</createDate>
        <changeDate>2015-12-23T18:07:40</changeDate>
        <source>2cc603e1-981c-41a2-a183-39429c7dcc49</source>
        <ownerId>1</ownerId>
        <edit>true</edit>
        <owner>true</owner>
        <isPublishedToAll>false</isPublishedToAll>
        <view>true</view>
        <notify>true</notify>
        <download>true</download>
        <dynamic>true</dynamic>
        <featured>true</featured>
        <selected>true</selected>
    </geonet:info>
</gmd:MD_Metadata>

添加参数

XSLT进程可以使用 xsl:param . 例如,如果使用 md.processing.batch?process=my-custom-process&myParameter=test .

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
                exclude-result-prefixes="#all">

    <xsl:param name="myParameter" select="''"/>

在这个例子中, xsl:param 将作为变量使用 $myParameter 如果不是由URL参数设置,则它将有一个空值。要检查参数设置是否正确,请使用 xsl:message 将信息输出到日志文件。

<xsl:param name="myParameter" select="''"/>
<xsl:message>myParameter: <xsl:value-of select="$myParameter"/></xsl:message>

XSLT进程还可以访问目录参数:

  • 桂朗:当前的UI语言

  • base URL:服务基URL(例如 http://localhost:8080/geonetwork

  • 目录URL:目录URL(例如 http://localhost:8080/geonetwork/srv/eng

  • nodeId:节点标识符(默认 srv

要在过程中使用这些参数之一,请使用 xsl:param

<xsl:param name="guiLang" select="''"/>

复印是最起码的

一个进程至少必须:

  • 一切的副本

  • 删除geonet:信息元数据

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:geonet="http://www.fao.org/geonetwork" version="2.0"
                exclude-result-prefixes="#all">

    <!-- Do a copy of every nodes and attributes recursively -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- Remove geonet:* elements. -->
    <xsl:template match="geonet:*" priority="2"/>
</xsl:stylesheet>

然后自定义过程以更新元数据记录。

处理示例

source file schemas/iso19139/src/main/plugin/iso19139/process 举个例子。

除了流程必须执行的最低操作之外,流程还可以使用新模板定义其他操作:

  • 移除元素。例如,删除有关DQ_拓扑一致性的所有报告:

<xsl:template match="gmd:report[gmd:DQ_TopologicalConsistency]"
              priority="2"/>

将priority设置为2,以便模板优先于制作所有内容副本的主模板。

将流程注册为建议

改进元数据内容的建议 .

将流程注册为编辑器操作

可以在编辑器中使用XSLT进程来触发特定的操作。例如,INSPIRE视图显示一个按钮,用于在元数据标识符未定义结束时添加资源标识符。

<action type="batch"
        process="add-resource-id"
        if="count(gmd:MD_Metadata/gmd:identificationInfo/*/
                      gmd:citation/gmd:CI_Citation/
                          gmd:identifier[
                          ends-with(
                              gmd:MD_Identifier/gmd:code/gco:CharacterString,
                              //gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString
                          )]) = 0"/>

请参见参考:“创建自定义编辑器”。

添加导入的XSLT转换

将XSL转换添加到 web/geonetwork/xsl/conversion/import 文件夹以便向用户提供新的导入选项。文件可以添加到此文件夹,而无需重新启动应用程序。