如何在MLCP导入MarkLogic时用文档内容替换默认URI?
问题
希望将文件的默认文档URI替换为文件内容中的对应值。例如默认URI为/test/Invoice.xml,需要替换为/Invoice_{从文件DateCreated字段提取的时间}.xml。示例文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Test xsi:noNamespaceSchemaLocation="file:///D:/Mapforce/Projects/schema/Test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ID>f1258d4ae0df43d5a1e05ce9139f0ed2</ID> <SystemRef>22000041</SystemRef> <DateCreated>2022-09-06T19:07:46.3492849+01:00</DateCreated> <TimeSaved>240</TimeSaved> <ManyReasons/> <SubmissionUser>System</SubmissionUser> <InternalBusinessUnit>Finance</InternalBusinessUnit> <Direction>Inbound</Direction> </Test>
请问如何通过MLCP实现该需求?
实现方案
要通过MLCP实现从XML内容提取字段生成自定义文档URI,核心是利用MLCP的内容转换机制,结合XSLT提取目标字段并生成URI。具体步骤如下:
1. 编写XSLT转换文件
创建一个XSLT文件(例如custom-uri-transform.xsl),该文件需要保留原XML内容,同时通过MLCP专属的mlcp:metadata模式生成自定义URI:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 保留原XML结构不变 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 生成自定义文档URI --> <xsl:template match="/" mode="mlcp:metadata"> <metadata> <uri> <xsl:text>/Invoice_</xsl:text> <!-- 提取DateCreated字段值,替换URI非法字符(冒号、点) --> <xsl:value-of select="replace(/Test/DateCreated, '[:.]', '_')"/> <xsl:text>.xml</xsl:text> </uri> </metadata> </xsl:template> </xsl:stylesheet>
- 若XML存在命名空间,需在XSLT中添加对应命名空间声明,并调整
/Test/DateCreated的节点路径;时间格式可根据需求修改replace函数规则,比如截取到秒级或移除时区信息。
2. 执行MLCP导入命令
在MLCP命令中指定转换模块及参数,示例命令如下:
mlcp import -host localhost -port 8000 -username admin -password admin \ -input_file_path /local/path/to/xml/files \ -transform_module /local/path/to/custom-uri-transform.xsl \ -transform_namespace "http://www.w3.org/1999/XSL/Transform" \ -transform_param "mode=mlcp:metadata"
关键参数说明:
-transform_module:指向本地或MarkLogic服务器上的XSLT转换文件路径-transform_param "mode=mlcp:metadata":触发MLCP使用XSLT中的元数据生成模式- 若使用服务器端模块,需将XSLT上传至MarkLogic的模块数据库,并指定模块的数据库路径。
3. 验证结果
导入完成后,在MarkLogic中查看文档,其URI将变为/Invoice_2022-09-06T19_07_46_3492849+01_00.xml(或自定义格式),原XML内容完全保留。
内容的提问来源于stack exchange,提问作者Rashmita Purkayastha
相关产品推荐
相关产品推荐

