Предположим, у вас есть дерево (в качестве примера я буду использовать дерево HTML DOM, но вопрос о любом виде дерева). Вы хотите отфильтровать дерево, чтобы включить определенные ветви и исключить другие. Иногда вы исключаете ветку, за исключением некоторых элементов в ней, которые вы хотите сохранить.
Есть ли у кого-нибудь элегантный способ выразить это (текстовое представление или, возможно, свободный интерфейс для создания и управления таким древовидным фильтром)?
например. для HTML DOM правила могут выглядеть примерно так ...
(-head, +body>(-footer, -header, +content>(-table>+tr)))
, что может означать: спуститься по дереву, если вы нажмете на элемент head, игнорируйте его и все, что находится под ним, включите элемент body, но внутри него исключите нижние колонтитулы и верхние колонтитулы и включите содержимое, кроме таблиц, где нам нужны только строки таблицы. Это правило не затрагивает проблему потомков против прямых потомков, что может быть чем-то еще, что пользователь может захотеть указать.
Является ли древовидный подход к определению правил или последовательного списка путей включения / исключения лучшим способом помочь пользователю выбрать, что сохранить и что исключить?
Есть ли идеи / предложения относительно альтернативных способов представления таких правил включения / исключения?