6

我正在使用 MLCP(Marklogic Content Pump)将内容从一个数据库复制到另一个数据库。在这个我使用-query_filter选项,它的值是一个 cts:query 以 XML 序列化格式的一组 cts:element-range-query 包装在 cts:and-query :

<cts:and-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-range-query operator=">">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
  <cts:element-range-query operator="&lt;">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
</cts:and-query>

现在,上面的查询在 ML Qconsole 上执行时返回有效结果,但是当传入 MLCP 的 -query_filter 选项时,它会给出错误消息'Invalid attribute value character '<'

Marklogic 和 MLCP 的版本是 8.0-5。

在进一步深入研究这一点时,我发现问题仅在于运算符值小于“<”时

注意:我在数据库中为元素 "released-on" 配置了一个有效的范围索引

4

1 回答 1

1

MarkLogic鼓励在使用序列化为XML的 cts 查询时使用选项文件,因为特殊字符可以在命令行上由底层操作系统解释。

我的第一个猜测是尝试创建一个文件,例如,options.txt包含以下内容:

--query_filter
<cts:and-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-range-query operator=">">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
  <cts:element-range-query operator="&lt;">
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value>
  </cts:element-range-query>
</cts:and-query>

(您可能必须使所有XML都适合该文件的同一行)

然后调用MLCP

mlcp.sh -options_file 选项.txt ...

于 2016-07-06T11:50:49.907 回答