Как вы сказали, рекурсия с использованием группировок не поддерживается. Простейший подход состоит в том, чтобы иметь плоский список узлов, где каждый узел имеет родительский узел, на который ссылаются как на ссылку. Что-то вроде:
container nodes {
list node {
key id;
leaf id { type int32; }
leaf parent-id {
type leafref {
path "../../node/id";
}
}
}
}
Эквивалентный XML будет:
<nodes>
<node>
<id>1</id>
<node>
<node>
<id>2</id>
<parent-id>1</parent-id>
</node>
<node>
<id>3</id>
<node>
<node>
<id>4</id>
<parent-id>3</parent-id>
</node>
</nodes>
Вы можете сделать обратное, когда узел ссылается на своих потомков (через лист-лист), а не на свой лист. родители.
Конечно, использование одного и того же узла данных напрямую рекурсивно работает:
container nodes {
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
// and so on
}
}
}
}
, но это не допускает бесконечно глубоких иерархий. Я бы не стал использовать эту модель, а не чистый дизайн модели.