(cmark >= 1.1.0)
CommonMark 查询语言 (CQL) 是一种用于描述如何遍历 CommonMark 节点树的 DSL,它实现为一个小型指令集的解析器和编译器,以及一个用于执行这些指令的虚拟机。
最简单的形式下,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 的虚拟机或内部值表示。