Да, вы можете, это не документировано или просто, но это не секрет.
Посмотрите на источник в Modules / MarkLogic / json / custom.xqy
Существует намного больше пользовательских параметров, чем задокументировано. «Интересные» позволяют переопределить отдельные методы, используемые для преобразования.
Пример: при использовании пользовательской стратегии вы можете установить переопределения.
Ниже приведены значения по умолчанию, вы можете изменить их.
map:put($c , $json-custom:element-qname-from-json-name , json-custom:element-qname-from-json-name#2 ),
map:put($c , $json-custom:attribute-qname-from-json-name , json-custom:attribute-qname-from-json-name#2 ),
Замените функцию 'json-custom: element-qname-from-json-name' своей собственной - вы можете использовать любую логику, какую пожелаете, учитывая объект конфигурации и текущее имя поля json, возвращая полное имя QName.
Функция 'build in', которую вы можете извлечь из вышеуказанного файла (она не закрыта). Начиная с версии 9.0 это выглядит так:
declare %private function json-custom:element-qname-from-json-name( $config as map:map , $json_name as xs:string? ) as xs:QName
{
json-custom:qname( map:get( $config , $json-custom:element-namespace ) ,
map:get( $config , $json-custom:element-namespace-prefix ) ,
if(map:get($config , $json-custom:camel-case)) then json-custom:from-camelCase($json_name) else $
};
Это может быть очень сложно сделать правильно. Я рекомендую сочетание пользовательских преобразований с последующей постобработкой в xml (используя xquery или xslt).
Сложность в том, что при переходе от JSON к XML вы не получаете большого «контекста».
У JSON нет предков узлов или порядка. Все, что вы получаете, это одно имя поля. Если вы можете отобразить на желаемое QName из этого, то это легко. Например, вы можете создать карту имен json для QNames и поместить ее в конфигурацию вместе со своей пользовательской функцией.
Зачастую требования сложнее, поэтому рекомендуем вам просто попытаться «приблизиться» к конфигурации, а затем выполнить процесс.