(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 的虚拟机或内部值表示。