(cmark >= 1.1.0)
CommonMark Query Language - это DSL для описания того, как проходить через дерево узлов CommonMark, реализованное в виде синтаксического анализатора и компилятора для небольшого набора инструкций, и виртуальной машины для выполнения этих инструкций.
В наиболее упрощённой форме запрос CQL объединяет следующие пути и /
, чтобы описать, как перемещаться по дереву:
/firstChild/lastChild
будет перемещаться к последнему дочернему узлу первого дочернего узла.
В CQL может быть задан цикл, например, через дочерние элементы или дочерние элементы к определённому узлу с использованием пути children
или siblings
. Например, /firstChild/children
будет перемещаться по всем дочерним элементам первого дочернего узла.
CQL можно проинструктировать, как перемещаться, используя подзапрос, такой как [/firstChild]
. Например, /firstChild/children[/firstChild]
перейдёт к первому дочернему узлу всех дочерних узлов первого дочернего узла.
Во время цикла CQL может быть проинструктирован ограничивать пройденный путь до узлов определённого типа. Например, /children(BlockQuote)
будет перемещаться к дочерним элементам узла, где типом является BlockQuote
. Следующие типы распознаются (без учёта регистра):
/children(BlockQuote|List)
будет перемещаться к дочерним элементам узла, где типом является BlockQuote
или List
. Типы или объединения типов, также могут быть отменены. Например, /children(~BlockQuote)
будет перемещаться к дочерним элементам узла, где тип не является BlockQuote
, а /children(~BlockQuote|Paragraph)
будет перемещаться к дочерним узлам, где тип не является BlockQuote
или Paragraph
.
CQL можно поручить создать цикл для перемещения к узлу определённого типа по определённому пути. Например, /firstChild(BlockQuote)
перейдёт к первому дочернему узлу с типом BlockQuote
. Обратите внимание, что как и другие циклы, для children
и siblings
, этот тип пути может сопровождаться только подзапросом.
Хотя CQL реализован как часть модуля PHP CommonMark, он стоит отдельно от PHP и не использует виртуальную машину PHP или внутреннее представление значений.