(cmark >= 1.1.0)
CommonMark 查询语言 (CQL) 是一种 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 的虚拟机或内部值表示。