Какова цель / использование карты в XPath 3.1?
Я понимаю необходимость использования типа массива в XPath 3.1, поскольку он является фундаментальным для JSON. И да, я понимаю, что вы можете создать буквальную карту () в запросе XPath.
Но есть ли способ структурировать XML или JSON, при котором запрос естественным образом возвращал бы карту в запросе XPath для базового документа? Или он существует исключительно в том случае, если преобразование результатов в карту для последующей обработки полезно?
2 ответа
Вероятно, основные варианты использования карт, которые я видел:
(a) для захвата результата синтаксического анализа ввода JSON, когда входные данные находятся в JSON
(b) для создания структуры, которая может быть сериализована как JSON, когда требуется вывод JSON.
(c) для предоставления сложных входных параметров функциям (например, функциям fn: transform () или fn: serialize ())
(d) для захвата нескольких результатов или составных результатов от функций, например, функции, которая вычисляет как минимум, так и максимум последовательности. Если бы карты были доступны в то время, их можно было бы использовать для получения контекста пространства имен элемента гораздо более элегантно, чем механизм in-scope-prefixes/namespace-uri-for-prefix.
(e) карту, элементы которой являются функциями, можно использовать как объект в объектно-ориентированных языках для достижения полиморфизма - особенно полезно в XQuery, в котором отсутствует механизм отправки правил шаблонов XSLT. Дизайн функции fn:random-number-generator() иллюстрирует эту идею.
(f) карта может действовать как простая структура для составных значений, например комплексных чисел. (Его можно было использовать для даты / времени / продолжительности /QName, если доступно, или для информации об ошибке, доступной в предложении catch)
"есть ли способ [..] структурирования JSON, при котором запрос естественным образом возвращал бы карту?": что-либо в JSON является "объектом"
https://www.json.org/json-en.html: "Объект - это неупорядоченный набор пар имя / значение. Объект начинается с {левой фигурной скобки и заканчивается} правой фигурной скобкой")
отображает (каламбур) на карту XDM.
Таким образом, в JSON и массивы, и объекты являются фундаментальными, а в XDM вы можете представить массив JSON как массив XDM, а объект JSON как карту XDM.