Да: функция trace
служит для этой цели.Его можно вызывать для любого выражения, для которого необходимо просмотреть выходные данные, вместе с выбранной меткой.
declare function utils:lowerCaseKey($obj as item) as item
{
{|
for $k in distinct-values(keys( trace($obj, "obj") ))
return { lower-case($k) : $obj.$k }
(: note the ',' to create a sequence :)
|}
};
Это приведет к выводу, например:
obj [1]: { "foo" : "bar" }
obj [2]: { "foo" : "bar2" }
Гдеточно (в командной строке, в файле журнала ...) этот вывод должен быть задокументирован в каждом движке.Zorba по умолчанию выведет в stderr.
Обратите внимание, что это декларативный язык, поэтому trace
ведет себя не так, как print
.Некоторые выражения могут быть оптимизированы, если они не нужны, и в этом случае они не генерируют никаких следов.Например,
(1, trace(2, "foo"))[1]
может не генерировать трассировку.Аналогично, порядок, в котором генерируются трассы, может зависеть от реализации, поскольку JSONiq, как и XQuery, оставляет каждому механизму свободу в том, как наилучшим образом оценить выражение, если его результаты соответствуют спецификации.