使用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
文件夹以便向用户提供新的导入选项。文件可以添加到此文件夹,而无需重新启动应用程序。