Parsoid
Parsoid es una biblioteca empaquetada junto con MediaWiki (a partir de la versión 1.35) utilizada para convertir de ida y vuelta entre código wiki y HTML. Ha estado en desarrollo desde 2012, inicialmente escrita en JavaScript y construida para soportar el VisualEditor . El objetivo es, en un futuro, reemplazar completamente el analizador sintáctico nativo de MediaWiki por Parsoid.
Parsoid
![]() Un analizador sintáctico de texto wiki en tiempo de ejecución bidireccional. Convierte de ida y vuelta entre código wiki y DOM HTML/XML con RDFa.
|

- Para la versión anterior de Parsoid escrita en JavaScript (Node.js), véase Parsoid/JS.
El analizador anterior sigue gozando de soporte en MediaWiki 1.43 (LTS), pero probablemente no será así en el próximo LTS.
Detalles técnicos
Parsoid es una aplicación capaz de traducir en ambas direcciones entre la sintaxis código wiki de MediaWiki y un modelo de documentos HTML/RDFa equivalente, compatible con procesamiento automatizado y edición enriquecida mejorada.
Ha estado en desarrollo desde 2012 por un equipo especial de la Fundación Wikimedia. Lo utilizan ampliamente VisualEditor , Traducción de contenido y otras aplicaciones.
Parsoid tiene como objeto brindar una conversión bidireccional impecable, que evite pérdidas de información y «diferencias sucias».
En los wikis de Wikimedia, para varios fines, Parsoid actualmente se ejecuta en un servidor intermediario tras RESTBase , que almacena el HTML que Parsoid procesa. Se espera sustituir con el tiempo RESTBase con una antememoria más estrechamente integrada con MediaWiki.
Para conocer más detalles sobre el proyecto en conjunto, consulte esta entrada de blog de marzo de 2013. Para obtener información sobre el modelo HTML utilizado, vea la especificación del DOM de MediaWiki.
Originalmente, Parsoid se estructuraba como servicio web escrito en JavaScript, haciendo uso de Node.js
.
Una charla técnica de febrero de 2019 (diapositivas), así como una entrada de blog, describen el proceso de reescritura en PHP.
La API de extensiones de Parsoid se está desarrollando activamente en estos momentos; una charla técnica de agosto de 2020 describe esta labor.
Repositorio en GitHub: https://github.com/wikimedia/parsoid
Uso
- Parsoid/Releases - Lista de versiones de Parsoid
- Parsoid/API - para la API web
- MediaWiki DOM spec - para dar sentido al HTML generado desde la API, diseñado para ser útil como futuro formato de almacenamiento
- Parsoid/LanguageConverter - notas sobre la implementación de LanguageConverter para Parsoid
- Parsoid/Known differences with Core Parser output
Instalación
Parsoid está incluido en MediaWiki desde la versión 1.35. No hace falta configuración alguna para activarlo.
Parsoid exporta una API REST interna que históricamente era utilizada por RESTBase y no era accesible fuera del clúster interno de la WMF. Esto ya no es necesario para el Editor Visual o las vistas de lectura del núcleo, y la API interna está perdiendo su vigencia, estando prevista su eliminación para MW 1.43.
Parsoid es nominalmente una biblioteca de Composer utilizada por el núcleo de MediaWiki.
Si aun así necesitas la API interna por alguna razón, puedes cargar explícitamente Parsoid «como una extensión» añadiendo lo siguiente a LocalSettings.php
:
wfLoadExtension( 'Parsoid', "$IP/vendor/wikimedia/parsoid/extension.json" );
Se recomienda encarecidamente a cualquier usuario externo de la API interna de Parsoid que migre al punto de acceso de la página HTML REST del núcleo que brinda una funcionalidad equivalente.
Desarrollo
El desarrollo se produce en el Parsoid Git repository. La revisión de código tiene lugar en Gerrit. Consulta Gerrit/Primeros pasos para configurar tu propia cuenta.
En caso de utilizar el entorno de desarrollo MediaWiki-Vagrant en una máquina virtual, puedes simplemente añadirle el rol visualeditor
y establecerá un Parsoid funcional junto con Extension:VisualEditor .
Las instrucciones a continuación son para MediaWiki 1.35 o posterior. Comprueba Parsoid/JS en caso de ejecutar la versión antigua de Parsoid escrita en JavaScript y utilizada para MW 1.34 y anteriores.
Enlazar a una copia de desarrollador de Parsoid
En una instalación MediaWiki estándar, Parsoid está incluido en MediaWiki como biblioteca de Composer, wikimedia/parsoid
.
Para propósitos de desarrollo, generalmente querrás utilizar una copia de Parsoid obtenida de Git, y no la versión empaquetada en el núcleo de MediaWiki como biblioteca de Composer. Las siguientes líneas añadidas a LocalSettings.php permiten utilizar (opcionalmente) una copia de Parsoid proveniente de Git, cargar la API REST de Parsoid con wfLoadExtension (en lugar de utilizar la versión empaquetada en el Editor Visual) y configurar Parsoid a mano, lo que generalmente se hace mediante el Editor Visual:
$parsoidInstallDir = 'vendor/wikimedia/parsoid'; # copia empaquetada
#$parsoidInstallDir = '/my/path/to/git/checkout/of/Parsoid';
// Para desarrolladores: asegúrate de que se ejecute Parsoid desde $parsoidInstallDir,
// (no la versión incluida por defecto en mediawiki-core)
// Debe ejecutarse *antes* de wfLoadExtension()
if ( $parsoidInstallDir !== 'vendor/wikimedia/parsoid' ) {
function wfInterceptParsoidLoading( $className ) {
// Only intercept Parsoid namespace classes
if ( preg_match( '/(MW|Wikimedia\\\\)Parsoid\\\\/', $className ) ) {
$fileName = Autoloader::find( $className );
if ( $fileName !== null ) {
require $fileName;
}
}
}
spl_autoload_register( 'wfInterceptParsoidLoading', true, true );
// AutoLoader::registerNamespaces fue añadido en MW 1.39
AutoLoader::registerNamespaces( [
// Mantener esto sincronizado con la cláusula «autoload» en
// $parsoidInstallDir/composer.json
'Wikimedia\\Parsoid\\' => "$parsoidInstallDir/src",
] );
}
wfLoadExtension( 'Parsoid', "$parsoidInstallDir/extension.json" );
# Configurar Parsoid manualmente
$wgVisualEditorParsoidAutoConfig = false;
$wgParsoidSettings = [
'useSelser' => true,
'rtTestMode' => false,
'linting' => false,
];
$wgVirtualRestConfig['modules']['parsoid'] = [
// URL de la instancia de Parsoid.
// Si Parsoid no se ejecuta localmente, cambia $wgServer para que coincida con el anfitrión no local
// En caso de ejecutar Docker en macOS, puede que tengas que reemplazar $wgServer por http://host.docker.internal:8080
// En caso de ejecutar Docker en Linux, puede que tengas que reemplazar $wgServer por http://172.17.0.1:8080
'url' => $wgServer . $wgScriptPath . '/rest.php',
// «Dominio» de Parsoid; vea más abajo (opcional; rara vez hace falta)
// 'domain' => 'localhost',
];
unset( $parsoidInstallDir );
Estas líneas no son necesarias para la mayoría de los usuarios del Editor Visual, que pueden utilizar la autoconfiguración del Editor Visual y el código de Parsoid empaquetado en MediaWiki, pero sí serán necesarias para la mayoría de los desarrolladores.
Si estás sirviendo MediaWiki con Nginx, también tendrás que añadir algo parecido a esto en el bloque de tu servidor (asumiendo que tu configuración de MediaWiki tenga sus archivos residiendo en /w/
):
location /w/rest.php/ {
try_files $uri $uri/ /w/rest.php?$query_string;
}
Para realizar pruebas de configuración correcta, visita {$wgScriptPath}/rest.php/{$domain}/v3/page/html/Main%20Page
, donde $domain
es el nombre del host de tu $wgCanonicalServer
.
(Ten en cuenta que los servidores de producción de la WMF no exponen la API REST de Parsoid a la red externa.)
Ejecutar las pruebas
Para ejecutar todas las pruebas del analizador y de Mocha:
$ composer test
Las pruebas del analizador cuentan ahora con una serie de opciones que se pueden enumerar mediante php bin/parserTests.php --help
.
Si tu variable de entorno MW_INSTALL_DIR
apunta a una instalación de MediaWiki configurada, puedes ejecutar algunas pruebas adicionales con:
$ composer phan-integrated
Conversión de wikitexto simple
Puedes convertir fragmentos simples de wikitexto desde la línea de comandos utilizando el script parse.php
en el directorio bin/
:
$ echo '[[Foo]]' | php bin/parse.php
El script de análisis tiene muchas opciones.
php bin/parse.php --help
proporciona información al respecto.
Depuración de Parsoid (para desarrolladores)
Véase Parsoid/Debugging para consejos de depuración.
Integración continua
A octubre de 2021
Parsoid siempre está disponible como biblioteca al ser una dependencia de Composer del núcleo de MediaWiki. Pero dos elementos no están activados:
- el ServiceWiring de Parsoid
- la API REST externa de Parsoid
El lanzador de pruebas Quibble lo activará si detecta que se ha clonado mediawiki/services/parsoid.git
como parte de la versión.
En cuyo caso:
- apuntará el cargador automático de
Wikimedia\Parsoid
al código clonado (reemplazando efectivamente la versión instalada por Composer) - cargará la extensión
wfLoadExtension( 'Parsoid', '/path/to/cloned/repo' );
El ServiceWiring debería estar habilitado en MediaWiki a partir de la versión 1.38.
En teoría, la API REST nunca se fusionará en MediaWiki: a) nunca se ha expuesto al público en producción, es una API interna utilizada por RESTBase que va a desaparecer; b) nunca ha sido sometida a una auditoría de seguridad y c) es redundante con la API empresarial de MediaWiki. La solución será que el Editor Visual invoque directamente Parsoid mediante la API de acciones del Editor Visual, lo que ahorraría tener que pasar por la API REST.
Cargar la extensión es por tanto un apaño que permite utilizar interfaces susceptibles de cambiar y que aún no queremos poner a disposición de los usuarios.
En la mayoría de los casos, por tanto, no se debería añadir Parsoid como dependencia de la integración continua, siendo la única excepción a fecha de octubre de 2021 la extensión Disambiguator de MediaWiki.
Cargar Parsoid como extensión permite ejecutar las tareas de las pruebas de integración de MediaWiki contra mediawiki/services/parsoid.git
(como Quibble y apitesting) y garantizar que Parsoid y MediaWiki sean compatibles.
Una extensión puede ser capaz de escribir pruebas con Parsoid aunque no se haya clonado el repositorio.
Dado que es una dependencia de Composer del núcleo de MediaWiki, el espacio de nombres MediaWiki\Parsoid
está disponible, pero no así la parte del cableado de servicios (es extension/src
en el repositorio de Parsoid y está expuesta en tanto que espacio de nombres \MWParsoid
).
El código de ParsoidTestFileSuite.php
solo lanzará las pruebas del analizador si Parsoid está cargado (lo cual debería ser el comportamiento predeterminado con MediaWiki 1.38).
Para la integración continua, Parsoid es sometido a pruebas contra la superficie de MediaWiki, mientras que en el caso de MediaWiki es con la dependencia de Composer. En caso de un cambio disruptivo, el cambio de Parsoid se fusiona en primer lugar (lo que rompe su integración continua, pero no la de MediaWiki), y el de MediaWiki se ajusta cuando se haya actualizado Parsoid. Así pues, se trata de un cambio en un solo sentido.
Versión de lanzamiento
Para las versiones de lanzamiento de MediaWiki, tenemos una integración del ServiceWiring de Parsoid en el Editor Visual para que este último funcione sin una configuración suplementaria (aparte de wfLoadExtension( 'VisualEditor' )
).
La versión de lanzamiento también permite utilizar la API REST y conecta todo para que Parsoid se pueda ejecutar inmediatamente.
Esto se hace copiando un poco de código de Parsoid en el Editor Visual que no está en la rama maestra del Editor Visual, ya que quedaría obsoleto tan pronto como se actualice Parsoid.
En lugar de eso, el código está mantenido en dos sitios.
Documentos técnicos
- Parsoid/Internals: documentación sobre la estructura interna de Parsoid con enlaces a otros detalles.
- Notas sobre la portación de PHP y tareas en que se solicita ayuda
- Agenda de despliegue de Parsoid en el clúster de Wikimedia (el código se despliega normalmente cada lunes y miércoles entre las 13 h y las 13:30 h PST)
- Parsoid/Round-trip testing: La configuración de pruebas de ida y vuelta que utilizamos para comprobar las transformaciones de ida y vuelta wikitexto -> DOM HTML -> wikitexto del contenido real de Wikipedia.
- Parsoid/Visual Diffs Testing: Información sobre pruebas visuales de diferencias para comparar la presentación HTML de Parsoid con la presentación HTML del analizador PHP más una configuración reducida de pruebas para realizar pruebas visuales de diferencias en masa.
- Parsoid/limitations: Limitaciones en Parsoid, principalmente (ab)usos artificiosos de plantillas que no importan en la práctica. Se puede extender para parecerse a las notas de actualización del preprocesador (puede requerir una actualización)
- Parsoid/Bibliography: Bibliografía de literatura relacionada
Enlaces para desarrolladores de Parsoid
- Véase Parsoid/Debugging para consejos de depuración.
- Actualizar o añadir paquetes a Parsoid
- Consulta estas instrucciones para sincronizar la copia de Parsoid de las pruebas de análisis sintáctico hacia/desde el núcleo
- Parsoid tiene una interfaz de biblioteca limitada para invocarla programáticamente.
- Discusión técnica sobre redirigir extensiones para que funcionen con Parsoid
- Así que quieres que tu extensión funcione con Parsoid
- Versionado de la especificación HTML de Parsoid
- Así que vas a cambiar la salida de Parsoid
Enlaces para desplegadores de Parsoid (al clúster de Wikimedia)
- Parsoid/Deployments
- Commits de pruebas en tiempo real (útil para comprobar regresiones y correcciones)
- Instrucciones de despliegue de Parsoid
- Panel de control de Kibana
- Panel de control de Grafana para las métricas wt2html
- Panel de control de Grafana para las métricas html2wt
- Desglose de Prometheus para el clúster de Parsoid en eqiad
- Desglose de Prometheus para el clúster de Parsoid en codfw
- Documentación del Job Builder de Jenkins para actualizar tareas de Jenkins
Historia
La aplicación original se escribió en JavaScript (utilizando Node.js) y se empezó a ejecutar en los servidores de Wikimedia en diciembre de 2012. En 2019, Parsoid se reescribió en PHP, y esta versión sustituyó a la anterior en JS en los servidores de Wikimedia en diciembre de 2019. Parsoid está en proceso de integración en el núcleo de MediaWiki, con el objetivo de reemplazar a la larga el analizador sintáctico nativo actual de MediaWiki. In early 2024, Parsoid began to be used on some production wikis of the Wikimedia Foundation as the default parser for read views.
Parsoid (en su versión PHP) se ha incluido nativamente en MediaWiki desde la versión 1.35, publicada en septiembre de 2020. En instalaciones ajenas a Wikimedia, Parsoid/JS gozaba de servicio técnico hasta la finalización del ciclo de vida de MediaWiki 1.31 (LTS), en septiembre de 2021.
Véase también
- API
- RESTBase: a caching / storing API proxy for page HTML translated by Parsoid
- Quarterly review meetings of the Parsoid team: April 2015, January 2015 (earlier)
- Parser 2011/Parser plan: Early (now relatively old) design ideas and issues
- Special:PrefixIndex/Parsoid/: Parsoid-related pages on this wiki
- Extension:ParsoidBatchAPI (archived)
- parsoid-jsapi: a high-level interface for extraction and transformation of wikitext, similar to the mwparserfromhell API.
- Alternative parsers
- Parsoid/Parser Unification
External links
- Source code (GitHub mirror)
- JS Documentation (old version of Parsoid)
- PHP Documentation
- Parsoid on the Wikimedia Commons
Contact
If you need help or have questions/feedback, you can contact us in #mediawiki-parsoid connect or the wikitext-l mailing list.
If all that fails, you can also contact us by email at content-transform-team
at the wikimedia.org
domain.
Parsoid is maintained by the Content Transform Team.
Get help:
|