无法编译 xquery:err:XPST0003 映射表达式中不再接受 ':=' 符号

Cannot complie xquery : err:XPST0003 the ':=' notation is no longer accepted in map expression

我正在尝试 eXist-db 使用 ActiveMQ 进行复制。当我为消费者实例配置时,它需要像这样执行 XQuery 来注册 JMS 接收器:

xquery version "3.0";
import module namespace replication="http://exist-db.org/xquery/replication" at "java:org.exist.jms.xquery.ReplicationModule"; 
let $jmsConfiguration := map {
    "java.naming.factory.initial" 
            := "org.apache.activemq.jndi.ActiveMQInitialContextFactory",
    "java.naming.provider.url" := "tcp://localhost:61616",
    "connection-factory" := "ConnectionFactory",
    "destination" := "dynamicTopics/eXistdb-replication-example",
    "subscriber.name" := "SubscriptionId",
    "connection.client-id" := "ClientId"
}

return
    replication:register($jmsConfiguration)

当我运行这个查询时,它returns出现了如标题的错误。我是 XQuery 的新手,所以你能帮我检查一下吗?

= 是多余的,声明应该是这样的:

let $jmsConfiguration := map {
    "java.naming.factory.initial" : "org.apache.activemq.jndi.ActiveMQInitialContextFactory",
    "java.naming.provider.url" : "tcp://localhost:61616",
    "connection-factory" : "ConnectionFactory",
    "destination" : "dynamicTopics/eXistdb-replication-example",
    "subscriber.name" : "SubscriptionId",
    "connection.client-id" : "ClientId"
}

在 XSLT 3.0 的早期草案中使用了符号 map{ x := y, p := q },在 XQuery 采用时该符号被更改为 map{ x : y, p : q }。错误消息表明您使用的实现曾经支持规范草案中的语法,后来又放弃了它。

如果这实际上是 Saxon "under the hood",那么完整的错误消息是 "The ':=' notation is no longer accepted in map expressions: use ':' instead",它准确地告诉您需要做什么。

Michael Kay 是正确的。 eXist-db 4.x.x 允许遗留的语法草案以及后来的标准化语法。 eXist-db 5.x.x oy支持后来的标准化语法。