International PHP Conference Berlin 2025

The CommonMark\CQL class

(cmark >= 1.1.0)

Introduction

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.

Chemins :

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
  • previous
  • next
  • parent
Par exemple, /firstChild/lastChild voyage au dernier nœud enfant du premier nœud enfant.

Boucles

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.

Sous-requêtes

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.

Contraintes de boucle

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) :

  • BlockQuote
  • List
  • Item
  • CodeBlock
  • HtmlBlock
  • CustomBlock
  • Paragraph
  • Heading
  • ThematicBreak
  • Text
  • SoftBreak
  • LineBreak
  • Code
  • HtmlInline
  • CustomInline
  • Emphasis
  • Strong
  • Link
  • Image
Les types peuvent être utilisés comme une union, par exemple /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.

Contraintes de chemins

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.

Notes d'implémentation

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.

Synopsis de la classe

class CommonMark\CQL {
/* Constructeur */
public __construct(string $query)
/* Méthodes */
public __invoke(CommonMark\Node $root, callable $handler)
}

Sommaire

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top