无法编译 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支持后来的标准化语法。
我正在尝试 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支持后来的标准化语法。