Вложенные поля v210.1.0
Схема донора ParserKit: вложенные пути, flatten, группы, is_terminal и обрезка веток.
Зачем вложенность
Реальные API и XML часто отдают не плоский список полей, а дерево: объект area с полем name, вложенные begin-area / end-area и т.д. В 210.1.0 ParserKit строит цепочки путей через точку (и атрибуты @… для XML), чтобы в Twig писать {{ area.name }}, а не только {{ name }}.
Что попадает в схему
| Тип узла | В схеме | В Twig-выражениях |
|---|---|---|
Лист (leaf) — текст/число | Путь + alias + тип | {{ alias }} или {{ path }} |
Группа (group) — объект без своего значения | Путь, роль group | Не выводится сам по себе; дети через точку |
| Атрибут XML | Путь, напр. link@href | {{ link@href }} |
| Список однотипных детей | Путь без .0.; тип list | Цикл {% for item in aliases %}{{ item.name }}{% endfor %} |
Промежуточные объекты не создают «пустых» тегов — только группировку. Ложный «успех» с пустыми путями не записывается.
Flatten (развёртка путей)
При опросе сервис обходит ответ без фиксированного лимита глубины и собирает листья:
artist
├── name → {{ name }}
├── area → group
│ └── name → {{ area.name }}
├── begin-area → group
│ └── name → {{ begin-area.name }}
└── …Пути хранятся в schema_json донора. Все шаблоны этого донора используют одну схему.
Списки внутри объекта
Если у узла много однотипных детей (массив), в схему попадает путь без числового сегмента (.0. в имени нет):
aliases.alias → тип list; дочерние поля — aliases.alias.name и т.п.Перебор элементов — в Twig: {% for row in aliases.alias %}{{ row.name }}{% endfor %}. Окно «Схема» на строке карты подставляет цикл с учётом типа list.
«Последний узел» (is_terminal)
На карточке донора у строк группы есть переключатель «Обрезать потомков» (is_terminal в schema_json).
| Действие | Результат |
|---|---|
| Пометка включена | Пути ниже этой ветки не попадают в теги и в опрос |
| Пометка снята | При следующем опросе ветка снова углубляется |
Только на доноре
Пометка «последний узел» задаётся на карточке донора, не в отдельном шаблоне. Сохранение terminals — через donor_save (поле schema_terminals).
Пример
- Опрос artist-ответа — много полей внутри
area. - Отметьте группу
areaкак «последний узел» → Перестроить схему / сохранить. - Поле
area.nameисчезнет из схемы;nameи поля вне веткиareaостанутся.
Роли в таблице схемы
| Колонка / признак | Значение |
|---|---|
| Путь | Канонический путь в ответе |
| Alias | Короткое имя для Twig (необязательно) |
| Тип | string, list, object и др. |
| Роль | leaf или group |
| Последний узел | Только у group: ветка обрезана (is_terminal) |
| Пример | Образец значения из опроса |
Связь с шаблоном
- Окно «Схема» в шаблоне показывает дерево: группы и листья, alias · path · тип.
- Подсказки и вставка фрагментов — из листьев и списков с типом
list. - Первичный ключ выбирается только из листьев с непустым путём (в списке — alias, если задан).