(cmark >= 1.1.0)
Le CommonMark Query Language est un DSL pour décrire comment voyager à travers un arbre de nœuds CommonMark implémenté comme un analyseur et un compilateur pour un petit ensemble d'instructions, et une machine virtuelle pour exécuter ces instructions.
Dans sa forme la plus simpliste, une requête CQL combine les chemins suivants et /
pour décrire comment voyager à travers un arbre :
/firstChild/lastChild
voyage au dernier nœud enfant du premier nœud enfant.
CQL peut être instruit de boucles, par exemple à travers les enfants de, ou les frères et sœurs d'un nœud particulier, en utilisant le chemin children
, ou siblings
. Par exemple, /firstChild/children
voyagera à tous les enfants du premier nœud enfant.
CQL peut être instruit de voyager en utilisant une sous-requête comme [/firstChild]
. Par exemple, /firstChild/children[/firstChild]
voyagera au premier nœud enfant de tous les enfants du premier nœud enfant.
En bouclant, CQL peut être instruit de restreindre le chemin parcouru aux nœuds d'un type particulier. Par exemple /children(BlockQuote)
voyagera aux enfants d'un nœud où le type est BlockQuote
. Les types suivants sont reconnus (insensibles à la casse) :
/children(BlockQuote|List)
voyagera aux enfants d'un nœud où le type est BlockQuote
ou List
. Les types, ou unions de types, peuvent également être niés. Par exemple /children(~BlockQuote)
voyagera aux enfants d'un nœud où le type n'est pas BlockQuote
, et /children(~BlockQuote|Paragraph)
voyagera aux enfants d'un nœud où le type n'est pas BlockQuote
ou Paragraph
.
CQL peut être instruit de créer une boucle pour voyager à un nœud d'un type particulier, à un chemin particulier. Par exemple, /firstChild(BlockQuote)
voyagera au premier nœud enfant où le type est BlockQuote
. Notez que comme d'autres boucles pour children
et siblings
, ce type de chemin ne peut être suivi que par une sous-requête.
Bien que CQL ait été implémenté en tant que partie de l'extension PHP CommonMark, il est séparé de PHP et n'utilise pas la machine virtuelle de PHP ou la représentation interne des valeurs.