(cmark >= 1.1.0)
El CommonMark Query Language es un DSL para describir cómo viajar a través de un árbol de nodos CommonMark implementado como un analizador y un compilador para un pequeño conjunto de instrucciones, y una máquina virtual para ejecutar estas instrucciones.
En su forma más simplista, una consulta CQL combina las siguientes rutas y /
para describir cómo viajar a través de un árbol:
/firstChild/lastChild
viaja al último nodo hijo del primer nodo hijo.
CQL puede ser instruido para bucles, por ejemplo a través de los hijos de, o los hermanos de un nodo particular, utilizando la ruta children
, o siblings
. Por ejemplo, /firstChild/children
viajará a todos los hijos del primer nodo hijo.
CQL puede ser instruido para viajar utilizando una subconsulta como [/firstChild]
. Por ejemplo, /firstChild/children[/firstChild]
viajará al primer nodo hijo de todos los hijos del primer nodo hijo.
Al buclar, CQL puede ser instruido para restringir la ruta recorrida a los nodos de un tipo particular. Por ejemplo /children(BlockQuote)
viajará a los hijos de un nodo donde el tipo es BlockQuote
. Los siguientes tipos son reconocidos (insensibles a mayúsculas y minúsculas):
/children(BlockQuote|List)
viajará a los hijos de un nodo donde el tipo es BlockQuote
o List
. Los tipos, o uniones de tipos, también pueden ser negados. Por ejemplo /children(~BlockQuote)
viajará a los hijos de un nodo donde el tipo no es BlockQuote
, y /children(~BlockQuote|Paragraph)
viajará a los hijos de un nodo donde el tipo no es BlockQuote
o Paragraph
.
CQL puede ser instruido para crear un bucle para viajar a un nodo de un tipo particular, a una ruta particular. Por ejemplo, /firstChild(BlockQuote)
viajará al primer nodo hijo donde el tipo es BlockQuote
. Tenga en cuenta que como otros bucles para children
y siblings
, este tipo de ruta solo puede ser seguido por una subconsulta.
Aunque CQL ha sido implementado como parte de la extensión PHP CommonMark, está separado de PHP y no utiliza la máquina virtual de PHP o la representación interna de los valores.