2014-03-26 83 views
0

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

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 

感谢, 塞尔瓦

回答

1

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

MarkLogic 7可能比MarkLogic 5更严格,但无论哪种版本,XML都不代表有效的查询。

+0

谢谢。它解决了这个问题。 – Selva

1

塞尔瓦:

只能传递一个映射到地图构造函数的XML序列化。地图构造函数不会将其他XML结构转换为地图。

要了解地图的XML序列化,请看到的例子:

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

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

希望帮助,

埃里克Hennum

+0

谢谢埃里克。但是,如果不涉及cts查询,这是有效的。 – Selva

+0

它也适用于早期版本的ML – Selva