gpt4 book ai didi

marklogic - 应用 fn :data to info-node 时出现奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 22:39:29 24 4
gpt4 key购买 nike

当我在 MarkLogic 中运行以下 xquery 时:

xquery version "1.0-ml";

let $envelope := <envelope xmlns="http://marklogic.com/entity-services">
<info>hello</info>
</envelope>

return fn:data($envelope/es:info)

我收到此错误:

[1.0-ml] XDMP-NONMIXEDCOMPLEXCONT: fn:data(hello) -- 节点具有复杂类型和非混合复杂内容

奇怪的是,当我将信息节点重命名为 info1 时,代码按预期工作:

xquery version "1.0-ml";

let $envelope := <envelope xmlns="http://marklogic.com/entity-services">
<info1>hello</info1>
</envelope>

return fn:data($envelope/es:info1)

结果是:你好(如预期)

有人可以向我解释一下这个黑魔法吗?

最佳答案

我猜这是因为模式 entity-type.xsd 将元素定义为非混合:

<xs:complexType name="InfoType">
<xs:sequence>
<xs:element ref="es:title"/>
<xs:element ref="es:version"/>
<xs:element ref="es:base-uri" minOccurs="0"/>
<xs:element ref="es:description" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

<xs:element name="info" type="es:InfoType"/>

如果元素具有 mixed="true" 属性,则该元素可以是混合内容。因为在这种情况下您无法更改架构,所以我会尝试使用 string()

declare namespace es = "http://marklogic.com/entity-services";

let $envelope := <envelope xmlns="http://marklogic.com/entity-services">
<info>
<title>hello</title>
<version>1.0</version>
</info>
</envelope>

return $envelope/es:info/string()

如果这是您想要的,这将为您提供 hello1.0 结果。

您的 info1 示例有效,因为该元素未在架构中定义(因此不是有效的 xml)。

关于marklogic - 应用 fn :data to info-node 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com