Дерево навигационных выражений
From <XAnswer Wiki>
Английский термин: Path tree
Contents |
Определение
Дерево навигационных выражений (ДНВ) -- широко известная и используемая структура в области управления слабоструктурированными данными. Является вариантом путеводителя по данным (ПД). В отличие от ПД, дуги в ДНВ не помечаются (все дуги обозначают отношение предок-потомок), названия XML элементов хранятся в узлах. Кроме этого, в узлах также может храниться число, равное количеству стянутых в узел элементов исходного документа. ДНВ всегда строится на основе какого-то документа, не существует абстрактного ДНВ.
Использование
Название соответствует сути структуры: в ДНВ представлены ВСЕ возможные пути исходного документа, и только они. Благодаря этому свойству, ДНВ (в совокупности с числом стянутых в узел элементов) является очень полезным инструментом работы с данными. Так ДНВ широко используется в качестве основы для индексов, статистических структур.
Пример
Пример построения ДНВ (справа) из исходного документа (слева):
XQuery запрос для построения ДНВ
Условие "$deep < 10" приводит к построению ДНВ глубины не больше чем 9. Это нужно для текущей версии eXist, который неправильно обрабатывает пустые (типа <smth/>) теги.
declare function local:pathtree($seq, $deep) {
if (count($seq) and $deep < 10) then
let $names := distinct-values($seq/name())
let $newdeep := $deep + 1
for $nm in $names
let $nodes := $seq[name() = $nm]
let $nextnodes := $nodes/*
return
element {$nm} {
attribute {"c"} {count($nodes)},
attribute {"d"} {$deep},
local:pathtree($nextnodes,$newdeep)
}
else
""
};
local:pathtree(doc("/db/samples/shakespeare/r_and_j.xml")/PLAY, 0)

