Невозможно выполнить ie xquery: err: XPST0003 нотация ': =' больше не принимается в выражении карты - PullRequest
2 голосов
/ 18 февраля 2020

Я пытаюсь выполнить репликацию 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)

Когда я запускаю этот запрос, он возвращает ошибку, такую ​​как заголовок. Я новичок в XQuery, так что вы можете помочь мне проверить это?

Ответы [ 3 ]

5 голосов
/ 18 февраля 2020

Обозначение map{ x := y, p := q } использовалось в ранней версии XSLT 3.0, и обозначение было изменено на map{ x : y, p : q }, когда оно было принято XQuery. Сообщение об ошибке говорит о том, что вы используете реализацию, которая когда-то поддерживала синтаксис из проекта spe c, а затем отбросила его.

Если это фактически Saxon «под капотом», то полное сообщение об ошибке будет «Нотация«: = »больше не принимается в выражениях карты: используйте вместо нее«: », что точно говорит вам, что вам нужно делать.

3 голосов
/ 18 февраля 2020

Майкл Кей прав. eXist-db 4.xx позволил использовать устаревший черновой синтаксис, а также более поздний стандартизированный синтаксис. eXist-db 5.xx oy поддерживает более поздний стандартизированный синтаксис.

2 голосов
/ 18 февраля 2020

= является резервной копией, декларация должна быть такой:

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"
}
...