包含cts:map XML的映射XML的XDMP-QUERYNOVALS

时间:2014-03-26 10:51:51

标签: marklogic

我正在尝试从XML构建一个映射,其中包含一个值的`cts:element-range-query。当我在cq中运行它时会抛出XDMP-QUERYNOVALS。 ML5中使用相同的XML。是否有任何需要更改的设置才能在ML7中工作?

let $request-body := <wrapper xmlns="xdmp:http">
  <map:map xmlns:map="http://marklogic.com/xdmp/map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <map:entry key="GLOBAL">
      <map:value><cts:and-query xmlns:cts="http://marklogic.com/cts">
                  <cts:or-query>
                    <cts:element-range-query operator="=">
                      <cts:element>abcd</cts:element>
                    </cts:element-range-query>
                  </cts:or-query>
        </cts:and-query></map:value>
  </map:entry>
</map:map></wrapper>    
return map:map($request-body/node())

错误讯息:

[1.0-ml] XDMP-QUERYNOVALS: map:map(
<map:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:map="http://marklogic.com/xdmp/map" xmlns="xdmp:http">
<map:entry key="GLOBAL"><map:value><cts:and-query xmlns:cts="htt...</map:map>)
 -- /*:wrapper/map:map/map:entry/map:value/cts:and-query/cts:or-query/cts:element-range-query

谢谢, Selva的

2 个答案:

答案 0 :(得分:1)

Selva的:

您只能将地图的XML序列化传递给地图构造函数。映射构造函数不会将其他XML结构强制转换为映射。

要了解地图的XML序列化,请参阅以下示例:

http://docs.marklogic.com/map:map

但是,在构建地图后,您可以使用map:put()函数将原子值或节点添加到地图中。因此,您可以编写一个XQuery函数,使用从节点中提取的值或片段填充映射,并将其用作地图构造函数。

希望有帮助,

Erik Hennum

答案 1 :(得分:1)

仔细查看cts:element-range-query XML。它没有cts:value元素。所以cts:query XML无效。如果您构建了cts,则可能会发生这种情况:自动查询XML,并且从未验证过它。

MarkLogic 7可能比MarkLogic 5更加严格,但对于任何一个版本,XML都不代表有效的查询。