Parsoid
|
Parsoid
Um interpretador bidirecional de wikitexto. Converte bidirecionalmente entre wikitexto e DOM HTML/XML com RDFa.
|

"Para a versão mais antiga do Parsoid escrita em JavaScript (Node.js), consulte Parsoid/JS."
Parsoid é uma biblioteca PHP incluída no MediaWiki (desde a versão 1.35) que é usada para converter entre wikitexto e HTML. Está em desenvolvimento desde 2012, tendo sido originalmente escrito em JavaScript e criado para suportar o VisualEditor. It has been bundled with MediaWiki since version 1.35. In MediaWiki 1.47, Parsoid is planned to become MediaWiki's default parser, replacing the current native parser, in a project known as parser unification.
Detalhes técnicos
O Parsoid é um aplicativo capaz de converter, em ambos os sentidos, entre a sintaxe wikitexto do MediaWiki e um modelo de documento HTML/RDFa equivalente, com suporte aprimorado para processamento automatizado e edição avançada.
Está sendo desenvolvido por uma equipe da Fundação Wikimedia desde 2012. Atualmente, é amplamente utilizado pelo VisualEditor, pelo Tradutor de conteúdo e por outras aplicações.
O Parsoid foi concebido para proporcionar uma conversão bidirecional perfeita, ou seja, para evitar a perda de informações e também impedir a ocorrência de "diferenças incorretas".
Nas wikis da Wikimedia, para várias aplicações, o Parsoid está atualmente configurado como proxy por meio do RESTBase, que armazena o HTML traduzido pelo Parsoid. Espera-se que o RESTBase venha a ser substituído por um cache mais integrado ao MediaWiki.
Para saber mais sobre o projeto como um todo, consulte esta publicação no blog de março de 2013. Para saber mais sobre o modelo HTML utilizado, consulte Especificação DOM do MediaWiki.
O Parsoid foi originalmente concebido como um serviço web e escrito em JavaScript, utilizando o Node.js.
Uma [palestra técnica de fevereiro de 2019] (slides) e postagem no blog descrevem o processo de portá-la para PHP.
A API de extensão do Parsoid está atualmente em desenvolvimento ativo; uma palestra técnica de agosto de 2020 descreve esse trabalho.
Repositório do GitHub: https://github.com/wikimedia/parsoid
Uso
- Parsoid/Releases – Lista de lançamentos realizados para o Parsoid
- Parsoid/API – para a API da web
- MediaWiki DOM spec – para interpretar o HTML obtido da API, concebido para servir como um futuro formato de armazenamento
- Parsoid/LanguageConverter – notas sobre a implementação de LanguageConverter no Parsoid
- Parsoid/Known differences with Core Parser output
Instalação
O Parsoid está incluído no MediaWiki desde a versão 1.35. Não é necessária nenhuma configuração para ativá-lo.
O Parsoid exporta uma API REST interna que, historicamente, era utilizada pelo RESTBase e não era acessível fora do cluster interno da WMF. Isso não é mais necessário para o Editor Visual ou para as visualizações de leitura do núcleo, e a API interna está sendo descontinuada, com remoção prevista para a versão MW 1.43.
O Parsoid é, em princípio, uma biblioteca de compositores utilizada pelo núcleo do MediaWiki.
Se, por algum motivo, você ainda precisar da API interna, poderá carregar explicitamente o Parsoid “como uma extensão” adicionando o seguinte ao LocalSettings.php:
wfLoadExtension( 'Parsoid', "$IP/vendor/wikimedia/parsoid/extension.json" );
Recomenda-se enfaticamente que todos os usuários terceirizados que ainda utilizam a API interna do Parsoid migrem para o endpoint REST da página HTML principal, que oferece funcionalidades equivalentes.
Desenvolvimento
O desenvolvimento ocorre no Parsoid Git repository. A revisão de código é feita no Gerrit. Consulte Gerrit/Introdução para criar uma conta.
Se você usar o ambiente de desenvolvimento de MediaWiki-Vagrant em uma máquina virtual, basta adicionar a função visualeditor a ele, e ele configurará um Parsoid funcional junto com Extension:VisualEditor.
As instruções abaixo se aplicam ao MediaWiki 1.35 ou versões posteriores. Marque a opção Parsoid/JS se estiver executando a versão antiga do Parsoid, escrita em JavaScript e usada no MW 1.34 e versões anteriores.
Vinculando uma versão de checkout para desenvolvedores do Parsoid
Em uma instalação padrão do MediaWiki, o Parsoid é incluído pelo MediaWiki como uma biblioteca do Composer, wikimedia/parsoid.
Para fins de desenvolvimento, geralmente é recomendável usar uma cópia do Parsoid obtida via git checkout, e não a versão incluída no núcleo do MediaWiki como uma biblioteca do Composer. As linhas a seguir, adicionadas ao LocalSettings.php, permitem fazer um checkout do Parsoid no Git (opcionalmente), carregar a API REST do Parsoid com o wfLoadExtension (em vez de usar a versão incluída no VisualEditor) e realizar manualmente a configuração do Parsoid, que normalmente é feita pelo VisualEditor:
$parsoidInstallDir = 'vendor/wikimedia/parsoid'; # cópia incluída
#$parsoidInstallDir = '/my/path/to/git/checkout/of/Parsoid';
// Para desenvolvedores: certifiquem-se de que o Parsoid seja executado a partir de $parsoidInstallDir,
// (não é a versão incluída por padrão no mediawiki-core)
// Deve ocorrer *antes* de wfLoadExtension()
if ( $parsoidInstallDir !== 'vendor/wikimedia/parsoid' ) {
function wfInterceptParsoidLoading( $className ) {
// Interceptar apenas as classes do namespace Parsoid
if ( preg_match( '/(MW|Wikimedia\\\\)Parsoid\\\\/', $className ) ) {
$fileName = Autoloader::find( $className );
if ( $fileName !== null ) {
require $fileName;
}
}
}
spl_autoload_register( 'wfInterceptParsoidLoading', true, true );
// Foi adicionado AutoLoader::registerNamespaces na versão 1.39 do MW
AutoLoader::registerNamespaces( [
// Mantenha isso em sincronia com a cláusula "autoload" em
// $parsoidInstallDir/composer.json
'Wikimedia\\Parsoid\\' => "$parsoidInstallDir/src/",
] );
}
wfLoadExtension( 'Parsoid', "$parsoidInstallDir/extension.json" );
unset( $parsoidInstallDir );
Essas linhas não são necessárias para a maioria dos usuários do VisualEditor, que podem utilizar a configuração automática do VisualEditor e o código do Parsoid incluído no MediaWiki, mas serão necessárias para a maioria dos desenvolvedores.
Se você estiver hospedando o MediaWiki com o Nginx, será necessário adicionar algo como isto no seu bloco de servidor (supondo que a configuração do MediaWiki tenha seus arquivos localizados em /w/):
location /w/rest.php/ {
try_files $uri $uri/ /w/rest.php?$query_string;
}
Se você estiver executando o MediaWiki usando o Docker e vinculando seu repositório local do Parsoid ao MediaWiki, será necessário mapear um volume adicional para o contêiner do Docker no arquivo docker-compose.override.yml do projeto do MediaWiki. Para isso, a maneira mais simples é criar uma pasta chamada docker-compose.override.yml no projeto MediaWiki e inserir o código abaixo nela (após modificar o caminho). Se você já tiver o arquivo docker-compose.override.yml, modifique-o conforme necessário.
services:
mediawiki:
volumes:
- ./:/var/www/html/w:cached
- /my/path/to/git/checkout/of/Parsoid:/my/path/to/git/checkout/of/Parsoid
Para verificar se a configuração está correta, acesse {$wgScriptPath}/rest.php/{$domain}/v3/page/html/Main%20Page, sendo que $domain é o nome do host no seu $wgCanonicalServer.
(Observe que os servidores WMF em produção não expõem a API REST do Parsoid à rede externa.)
Executando os testes
Para executar todos os testes do analisador e os testes do Mocha:
$ composer test
Os testes do analisador contam agora com várias opções, que podem ser listadas usando php bin/parserTests.php --help.
Se a variável de ambiente MW_INSTALL_DIR estiver apontando para uma instalação configurada do MediaWiki, você pode executar alguns testes adicionais com:
$ composer phan-integrated
Conversão de wikitexto simples
Você pode converter trechos simples de wikitexto a partir da linha de comando usando o script parse.php no diretório bin/:
$ echo '[[Foo]]' | php bin/parse.php
O script de análise tem várias opções.
php bin/parse.php --help fornece informações sobre isso.
Depuração do Parsoid (para desenvolvedores)
Veja a seção Parsoid/Debugging para dicas de depuração.
Integração contínua
O Parsoid está sempre disponível como biblioteca, uma vez que é uma dependência do Composer do núcleo do MediaWiki. No entanto, dois componentes não estão habilitados:
- Parsoid ServiceWiring
- API REST externa do Parsoid
O executor de testes Quibble ativaria essa opção caso detectasse que mediawiki/services/parsoid.git foi clonado como parte da compilação.
Nesse caso, isso:
- direciona o autoloader do
Wikimedia\Parsoidpara o código clonado (substituindo, na prática, a versão instalada pelo Composer) - Carregue a extensão
wfLoadExtension( 'Parsoid', '/path/to/cloned/repo' );
O ServiceWiring deve estar habilitado no MediaWiki a partir da versão 1.38.
A API REST, em teoria, nunca seria incorporada ao MediaWiki: a) ela nunca foi disponibilizada ao público em ambiente de produção; trata-se de uma API interna utilizada pelo RESTBase, que está sendo descontinuado; b) ela nunca passou por uma auditoria de segurança; e c) ela é redundante em relação à API empresarial do MediaWiki. A solução seria o VisualEditor invocar o Parsoid diretamente por meio da API de Ações do VisualEditor, o que evitaria uma ida e volta pela API REST.
Carregar a extensão é, portanto, um truque que permite usar interfaces sujeitas a alterações e que, na verdade, ainda não queremos que as pessoas utilizem.
Para a maioria dos casos, o parsoid não deve, portanto, ser adicionado como dependência de CI; a única exceção, em outubro de 2021, é a extensão Disambiguator do MediaWiki.
Carregando o Parsoid como extensão, vamos executar tarefas de teste de integração do MediaWiki no mediawiki/services/parsoid.git (como o Quibble e o apitesting) e garantir que o Parsoid e o MediaWiki funcionem em conjunto.
Uma extensão pode ser capaz de escrever testes com o Parsoid mesmo quando o repositório ainda não tiver sido clonado.
Como se trata de uma dependência do núcleo do MediaWiki, o namespace MediaWiki\Parsoid está disponível, mas a parte de integração do serviço não está (ela é extension/src no repositório do Parsoid e exposta como o namespace \MWParsoid).
O código de ParsoidTestFileSuite.php só executaria os testes do analisador se o Parsoid tivesse sido carregado (o que deve ser o padrão no MediaWiki 1.38).
No caso do CI, o Parsoid é testado com a versão mais recente do MediaWiki, enquanto o MediaWiki é testado com a dependência do Composer. Em caso de uma alteração compatibilidade, a alteração do Parsoid é incorporada primeiro (o que causa falhas na integração contínua do Parsoid, mas não na do MediaWiki) e o MediaWiki é ajustado quando o Parsoid é atualizado. Trata-se, portanto, de uma mudança irreversível.
Versão de lançamento
Para as compilações de lançamento do MediaWiki, integramos o Parsoid ServiceWiring ao VisualEditor para que este funcione sem necessidade de configuração adicional (além de um wfLoadExtension( 'VisualEditor' )).
A versão de lançamento também habilita a API REST e configura tudo para que o Parsoid funcione imediatamente.
Isso é feito copiando um trecho do código do Parsoid para o VisualEditor, que não está no ramo principal do VisualEditor, pois ficaria obsoleto assim que o Parsoid fosse atualizado.
Em vez disso, o código é mantido em dois locais.
Documentos técnicos
- Parsoid/Internals – documentação sobre o funcionamento interno do Parsoid, com links para mais informações.
- Notas sobre a portabilidade para PHP e tarefas que precisam de ajuda
- Agenda de implantação do Parsoid no cluster da Wikimedia (o código é normalmente implantado todas as segundas e quartas-feiras, entre 13h e 13h30, horário do Pacífico)
- Parsoid/Round-trip testing – A configuração de teste de ida e volta que estamos usando para testar a conversão de wikitexto -> DOM HTML -> wikitexto em conteúdo real da Wikipédia.
- Parsoid/Visual Diffs Testing – Informações sobre testes de comparação visual para comparar a renderização HTML do Parsoid com a renderização HTML do analisador PHP + uma configuração do TestReduce para realizar testes de comparação visual em massa.
- Parsoid/limitations – Limitações do Parsoid, principalmente (ab)usos artificiais de modelos que, na prática, não têm importância. Poderia ser ampliado para ficar semelhante às notas de atualização do pré-processador (Talvez precise ser atualizado)
- Parsoid/Bibliography – Bibliografia de obras relacionadas
Links para desenvolvedores do Parsoid
- Veja a seção Parsoid/Debugging para dicas de depuração.
- Atualização ou adição de pacotes ao Parsoid
- Consulte estas instruções para sincronizar a cópia dos testes do analisador do Parsoid com o core
- O Parsoid possui uma interface de biblioteca limitada para sua invocação programática.
- Palestra técnica sobre como fazer com que as extensões de retargeting funcionem com o Parsoid
- Então você quer que sua extensão funcione com o Parsoid
- Controle de versões da especificação HTML do Parsoid
- Então você vai alterar a saída do Parsoid
Links para os administradores do Parsoid (para o cluster da Wikimedia)
- Parsoid/Deployments
- Commits de testes de RT (útil para verificar regressões e correções)
- Instruções de implantação do Parsoid
- Painel do Kibana
- Painel do Grafana para métricas do wt2html
- Painel do Grafana para métricas do html2wt
- Relatório de falhas do Prometheus para o cluster Parsoid no eqiad
- Falha do Prometheus no cluster Parsoid no codfw
- Documentação do Jenkins Job Builder para atualizar tarefas do Jenkins
História
O aplicativo original foi escrito em JavaScript (usando Node.js) e começou a ser executado no cluster da Wikimedia em dezembro de 2012. Em 2019, a Parsoid foi portada para PHP, tendo essa versão substituído a em JS na Wikimedia em dezembro de 2019. Essa biblioteca está sendo integrada ao núcleo do MediaWiki, com o objetivo de eventualmente substituir o atual interpretador nativo do MediaWiki. No início de 2024, o Parsoid começou a ser utilizado em algumas wikis de produção da Wikimedia Foundation como o analisador padrão para visualizações de leitura. Você pode vê-los na lista de configuração de produção.
O Parsoid (na versão PHP) vem integrado nativamente ao MediaWiki desde a versão 1.35, lançada em setembro de 2020. Para instalações que não sejam da Wikimedia, o Parsoid/JS teve suporte até o fim do ciclo de vida do MediaWiki 1.31 (LTS) em setembro de 2021.
FAQ
- Como posso verificar se uma página foi renderizada com o Parsoid?
- O rodapé exibirá a mensagem "Esta página foi gerada com o Parsoid".
- Como faço para configurar uma página para ser renderizada temporariamente com o Parsoid?
- Instalar Extension:ParserMigration
- Adicione
?useparsoid=1à URL
- Como faço para renderizar um wiki inteiro com o Parsoid?
- Instalar Extension:ParserMigration
- Conjunto de
$wgParserMigrationEnableParsoidArticlePages = true; - Conjunto de
$wgParserMigrationEnableParsoidDiscussionTools = true;
- Quais wikis da Wikimedia utilizam o Parsoid para renderização?
- A lista está em parsoidrendered.dblist. Em agosto de 2025, eram cerca de 250 dos 1.000 wikis. A implementação continuará até que todos os wikis estejam usando o Parsoid.
Veja também
- API
- RESTBase – um proxy de API para armazenamento em cache de páginas HTML traduzidas pelo Parsoid
- Parser 2011/Parser plan – Ideias e questões de design iniciais (hoje relativamente antigas) de 2011
- Special:PrefixIndex/Parsoid/ – Páginas relacionadas ao Parsoid nesta wiki
- Extension:ParsoidBatchAPI (arquivado)
- parsoid-jsapi – uma interface de alto nível para extração e transformação de wikitexto, semelhante à API mwparserfromhell.
- Analisadores alternativos
- Parsoid/Parser Unification
Links externos
- Código-fonte (Espelho no GitHub)
- Documentação do JS (versão antiga do Parsoid)
- Documentação do PHP
- Parsoid na Wikimedia Commons
Contato
Se precisar de ajuda ou tiver dúvidas/sugestões, entre em contato conosco em #mediawiki-parsoid conectar ou na lista de discussão wikitext-l.
Se nada disso funcionar, você também pode entrar em contato conosco por e-mail no endereço content-transform-team no domínio wikimedia.org.
Parsoid é mantido the Content Transform Team.
Para obter ajuda:
|
