O Nu Html Checker (v.Nu) ajuda você a detectar erros não intencionais em seu HTML, CSS e SVG. Ele permite que você verifique documentos em lote a partir da linha de comando e de outros scripts/aplicativos, e implante sua própria instância do verificador como um serviço (como validator.w3.org/nu). Seu código-fonte está disponível, assim como instruções sobre como construir, testar e executar o código.
Um Dockerfile (veja Extraindo a imagem do Docker abaixo) e pacotes npm, pip e brew também estão disponíveis.
É lançado upstream nestes formatos:
Binários Linux, Windows e macOS pré-compilados que incluem um tempo de execução Java incorporado
vnu.jar
— uma versão portátil que você pode usar em qualquer sistema que tenha Java 11 ou superior instalado
vnu.war
— para implantar o serviço verificador por meio de um contêiner de servlet como o Tomcat
Nota: Os arquivos vnu.jar e vnu.war exigem que você tenha o Java 11 ou superior instalado. Os binários pré-compilados do Linux, Windows e macOS não exigem que você tenha nenhuma versão do Java já instalada.
Você pode obter a versão mais recente ou executar docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
, npm install vnu-jar
, npm install --registry=https://npm.pkg.github.com @validator/vnu-jar
, brew install vnu
ou pip install html5validator
e consulte as seções de uso e verificação baseada na Web abaixo. Ou automatize a verificação de seus documentos com um frontend como:
Plugin Grunt para validação de HTML ou plugin Gulp para validação de HTML ou plugin Maven para validação de HTML
Pacote pip
html5validator (para integração em Travis CI, CircleCI, CodeShip, Jekyll, Pelican, etc.)
LMVTFY: Deixe-me validar isso para você (verifique automaticamente JSFiddle/JSBin, etc., links nos comentários de problemas do GitHub)
Execute o verificador com uma das seguintes invocações:
• vnu-runtime-image/bin/vnu OPTIONS FILES
(Linux ou macOS)
• vnu-runtime-imagebinvnu.bat OPTIONS FILES
(Windows)
• java -jar ~/vnu.jar OPTIONS FILES
(qualquer sistema com Java8+ instalado)
…onde FILES
são os documentos a serem verificados e OPTIONS
são zero ou mais das seguintes opções:
--errors-only --Werror --exit-zero-always --stdout --asciiquotes
--user-agent USER_AGENT --no-langdetect --no-stream --filterfile FILENAME
--filterpattern PATTERN --css --skip-non-css --also-check-css --svg
--skip-non-svg --also-check-svg --xml --html --skip-non-html
--format gnu|xml|json|text --help --verbose --version
A seção Opções abaixo fornece detalhes sobre cada opção e o restante desta seção fornece alguns exemplos específicos.
Nota: Ao longo destes exemplos, substitua ~/vnu.jar
pelo caminho real para esse arquivo jar em seu sistema e substitua vnu-runtime-image/bin/vnu
e vnu-runtime-imagebinvnu.bat
pelo real caminho para o programa vnu
ou vnu.bat
em seu sistema - ou se você adicionar o diretório vnu-runtime-image/bin
ou vnu-runtime-imagebin
à variável de ambiente PATH
do sistema, poderá invocar o verificador apenas com vnu
.
Para verificar um ou mais documentos na linha de comando:
vnu-runtime-image/bin/vnu FILE.html FILE2.html FILE3.html...
vnu-runtime-imagebinvnu.bat FILE.html FILE2.html FILE3.html...
java -jar ~/vnu.jar FILE.html FILE2.html FILE3.html...
Nota: Se você receber um erro StackOverflowError
ao invocar o verificador, tente ajustar o tamanho da pilha de threads fornecendo a opção -Xss
para java:
java -Xss512k -jar ~/vnu.jar ...
vnu-runtime-image/bin/java -Xss512k
-m vnu/nu.validator.client.SimpleCommandLineValidator ...
Para verificar todos os documentos em um diretório específico DIRECTORY_PATH
como HTML:
java -jar ~/vnu.jar DIRECTORY_PATH
vnu-runtime-image/bin/vnu DIRECTORY_PATH
vnu-runtime-imagebinvnu.bat DIRECTORY_PATH
Nota: Os exemplos nesta seção pressupõem que você tenha o diretório vnu-runtime-image/bin
ou vnu-runtime-imagebin
na variável de ambiente PATH
do sistema. Se você estiver usando o arquivo jar, substitua vnu
nos exemplos por java -jar ~/vnu.jar
.
Para verificar todos os documentos em um diretório específico DIRECTORY_PATH
como HTML, mas ignore quaisquer documentos cujos nomes não terminem com as extensões .html
, .htm
, .xhtml
ou .xht
:
vnu --skip-non-html DIRECTORY_PATH
Para verificar todos os documentos em um diretório específico como CSS:
vnu --css DIRECTORY_PATH
Para verificar todos os documentos em um diretório específico como CSS, mas ignore quaisquer documentos cujos nomes não terminem com a extensão .css
:
vnu --skip-non-css DIRECTORY_PATH
Para verificar todos os documentos em um determinado diretório, com documentos cujos nomes terminam na extensão .css
sendo verificados como CSS e todos os outros documentos sendo verificados como HTML:
vnu --also-check-css DIRECTORY_PATH
Para verificar todos os documentos em um diretório específico como SVG:
vnu --svg DIRECTORY_PATH
Para verificar todos os documentos em um diretório específico como SVG, mas ignore quaisquer documentos cujos nomes não terminem com a extensão .svg
:
vnu --skip-non-svg DIRECTORY_PATH
Para verificar todos os documentos em um diretório específico, com documentos cujos nomes terminam na extensão .svg
sendo verificados como SVG e todos os outros documentos sendo verificados como HTML:
vnu --also-check-svg DIRECTORY_PATH
Para verificar um documento da Web:
vnu _URL_
example: vnu http://example.com/foo
Para verificar a entrada padrão:
vnu -
example:
echo '<!doctype html><title>...' | vnu -
echo '<!doctype html><title>...' | java -jar ~/vnu.jar -
Quando usado na linha de comando conforme descrito nesta seção, o verificador oferece as seguintes opções:
Specifies whether ASCII quotation marks are substituted for Unicode smart
quotation marks in messages.
default: [unset; Unicode smart quotation marks are used in messages]
Specifies that only error-level messages and non-document-error messages are
reported (so that warnings and info messages are not reported).
default: [unset; all messages reported, including warnings & info messages]
Makes the checker exit non-zero if any warnings are encountered (even if
there are no errors).
default: [unset; checker exits zero if only warnings are encountered]
Makes the checker exit zero even if errors are reported for any documents.
default: [unset; checker exits 1 if errors are reported for any documents]
Makes the checker report errors and warnings to stdout rather than stderr.
default: [unset; checker reports errors and warnings to stderr]
Specifies a filename. Each line of the file contains either a regular
expression or starts with "#" to indicate the line is a comment. Any error
message or warning message that matches a regular expression in the file is
filtered out (dropped/suppressed).
default: [unset; checker does no message filtering]
Specifies a regular expression. Any error message or warning message that
matches the regular expression is filtered out (dropped/suppressed).
As with all other checker options, this option may only be specified once.
So to filter multiple error messages or warning messages, you must provide a
single regular expression that will match all the messages. The typical way
to do that for regular expressions is to OR multiple patterns together using
the "|" character.
default: [unset; checker does no message filtering]
Specifies the output format for reporting the results.
default: "gnu"
possible values: "gnu", "xml", "json", "text" [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#out
Shows detailed usage information.
Check documents as CSS but skip documents that don’t have *.css extensions.
default: [unset; all documents found are checked]
Force all documents to be checked as CSS, regardless of extension.
default: [unset]
Check documents as SVG but skip documents that don’t have *.svg extensions.
default: [unset; all documents found are checked]
Force all documents to be checked as SVG, regardless of extension.
default: [unset]
Skip documents that don’t have *.html, *.htm, *.xhtml, or *.xht extensions.
default: [unset; all documents found are checked, regardless of extension]
Forces any *.xhtml or *.xht documents to be parsed using the HTML parser.
default: [unset; XML parser is used for *.xhtml and *.xht documents]
Forces any *.html documents to be parsed using the XML parser.
default: [unset; HTML parser is used for *.html documents]
Check CSS documents (in addition to checking HTML documents).
default: [unset; no documents are checked as CSS]
Check SVG documents (in addition to checking HTML documents).
default: [unset; no documents are checked as SVG]
Specifies the value of the User-Agent request header to send when checking
HTTPS/HTTP URLs.
default: "Validator.nu/LV"
Disables language detection, so that documents are not checked for missing
or mislabeled html[lang] attributes.
default: [unset; language detection & html[lang] checking are performed]
Forces all documents to be be parsed in buffered mode instead of streaming
mode (causes some parse errors to be treated as non-fatal document errors
instead of as fatal document errors).
default: [unset; non-streamable parse errors cause fatal document errors]
Specifies "verbose" output. (Currently this just means that the names of
files being checked are written to stdout.)
default: [unset; output is not verbose]
Shows the checker version number.
O Nu Html Checker - além de poder ser usado como um cliente de linha de comando independente - pode ser executado como um serviço HTTP, semelhante a validator.w3.org/nu, para verificação baseada em navegador de documentos HTML, folhas de estilo CSS e imagens SVG pela Web. Para esse fim, o verificador é lançado em vários pacotes separados:
Binários Linux, Windows e macOS para implantar o verificador como um serviço simples e independente em qualquer sistema
vnu.jar
para implantar o verificador como um serviço simples e independente em um sistema com Java instalado
vnu.war
para implantar o verificador em um contêiner de servlet como o Tomcat
Todas as implantações expõem uma API REST que permite a verificação de documentos HTML, folhas de estilo CSS e imagens SVG de outros clientes, não apenas de navegadores da web. E os binários Linux, Windows e macOS e o pacote vnu.jar
também incluem um cliente HTTP simples que permite enviar documentos para uma instância do serviço HTTP verificador em execução local - para verificação rápida de linha de comando - ou para qualquer controle remoto instância do serviço HTTP verificador em execução em qualquer lugar da Web.
As versões mais recentes dos binários Linux, Windows e macOS e dos pacotes vnu.jar e vnu.war estão disponíveis no projeto validator
no github. A seguir estão instruções detalhadas sobre como usá-los.
Nota: Ao longo destas instruções, substitua ~/vnu.jar
pelo caminho real para esse arquivo jar em seu sistema e substitua vnu-runtime-image/bin/java
e vnu-runtime-imagebinjava.exe
pelo real caminho para o programa verificador java
ou java.exe
em seu sistema - ou se você adicionar o diretório vnu-runtime-image/bin
ou vnu-runtime-imagebin
à variável de ambiente PATH
do sistema, poderá invocar o verificador apenas com java nu.validator.servlet.Main 8888
.
Para executar o verificador como um serviço independente (usando um servidor Jetty integrado), abra uma nova janela de terminal e invoque o verificador assim:
java -cp ~/vnu.jar nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java nu.validator.servlet.Main 8888
vnu-runtime-imagebinjava.exe nu.validator.servlet.Main 8888
Em seguida, abra http://0.0.0.0:8888 em um navegador. (Para escutar em uma porta diferente, substitua 8888
pelo número da porta.)
Aviso: versões futuras do verificador serão vinculadas por padrão ao endereço 127.0.0.1
. A implementação do verificador poderá se tornar inacessível, a menos que você use a propriedade de sistema nu.validator.servlet.bind-address
para vincular o verificador a um endereço diferente:
java -cp ~/vnu.jar
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
vnu-runtime-imagebinjava.exe
-Dnu.validator.servlet.bind-address=128.30.52.73
nu.validator.servlet.Main 8888
Ao abrir http://0.0.0.0:8888 (ou qualquer URL que corresponda ao valor nu.validator.servlet.bind-address
que você está usando), você verá um formulário semelhante a validator.w3.org/nu que permite inserir o URL de um documento HTML, folha de estilo CSS ou imagem SVG e exibir os resultados da verificação desse recurso no navegador.
Nota: Se você receber um erro StackOverflowError
ao usar o verificador, tente ajustar o tamanho da pilha de threads fornecendo a opção -Xss
para java:
java -Xss512k -cp ~/vnu.jar nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java -Xss512k -m vnu/nu.validator.servlet.Main 8888
Para executar o verificador dentro de um contêiner de servlet existente, como o Apache Tomcat, você precisará implantar o arquivo vnu.war
nesse servidor seguindo sua documentação. Por exemplo, no Apache Tomcat você pode fazer isso usando o aplicativo Manager ou simplesmente copiando o arquivo para o diretório webapps
(já que essa é a configuração padrão appBase
). Normalmente, você veria uma mensagem semelhante à seguinte no arquivo de log catalina.out
.
May 7, 2014 4:42:04 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/vnu.war
Supondo que seu contêiner de servlet esteja configurado para receber solicitações HTTP enviadas para localhost
na porta 80
e a raiz de contexto deste aplicativo seja vnu
(geralmente o comportamento padrão é usar o nome do arquivo WAR como raiz de contexto, a menos que um seja especificado explicitamente), você deve estar capaz de acessar o aplicativo conectando-se a http://localhost/vnu/.
Nota: Talvez você queira customizar o arquivo /WEB-INF/web.xml
dentro do arquivo WAR (você pode usar qualquer programa de manipulação de ZIP) para modificar a configuração do filtro do servlet. Por exemplo, se você quiser desabilitar o filtro de limite de tamanho de entrada, poderá comentar esse filtro assim:
<!--
<filter>
<filter-name>inbound-size-limit-filter</filter-name>
<filter-class>nu.validator.servlet.InboundSizeLimitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>inbound-size-limit-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
O verificador é empacotado com um cliente HTTP que você pode usar na linha de comando para enviar documentos para uma instância do serviço HTTP do verificador em execução local - para verificação rápida de linha de comando - ou para uma instância remota em qualquer lugar na Web.
Para verificar documentos localmente usando o cliente HTTP empacotado, faça o seguinte:
Inicie o verificador como um serviço HTTP local, conforme descrito na seção Servidor web independente .
Abra uma nova janela de terminal e invoque o cliente HTTP assim:
java -cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
vnu-runtime-image/bin/java nu.validator.client.HttpClient FILE.html...
Para enviar documentos para uma instância do verificador na Web, como html5.validator.nu/, utilize as opções nu.validator.client.host e nu.validator.client.port, assim:
java -cp ~/vnu.jar -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
…ou assim:
vnu-runtime-image/bin/java -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
Outras opções estão documentadas abaixo.
Ao usar o cliente HTTP empacotado para enviar documentos para uma instância do serviço HTTP do verificador para verificação, é possível configurar as propriedades do sistema Java para controlar as opções de configuração para o comportamento do verificador.
Por exemplo, você pode suprimir mensagens em nível de aviso e mostrar apenas mensagens em nível de erro definindo o valor da propriedade de sistema nu.validator.client.level
como error
, assim:
java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
…ou assim:
vnu-runtime-image/bin/java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
A maioria das propriedades listadas abaixo são mapeadas para os parâmetros de entrada comuns para o serviço verificador, conforme documentado em github.com/validator/validator/wiki/Service-»-Common-params.
Specifies the hostname of the checker for the client to connect to.
default: "127.0.0.1"
Specifies the hostname of the checker for the client to connect to.
default: "8888"
example: java -Dnu.validator.client.port=8080 -jar ~/vnu.jar FILE.html
Specifies the severity level of messages to report; to suppress
warning-level messages, and only show error-level ones, set this property to
"error".
default: [unset]
possible values: "error"
example: java -Dnu.validator.client.level=error -jar ~/vnu.jar FILE.html
Specifies which parser to use.
default: "html"; or, for *.xhtml input files, "xml"
possible values: [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#parser
Specifies the encoding of the input document.
default: [unset]
Specifies the content-type of the input document.
default: "text/html"; or, for *.xhtml files, "application/xhtml+xml"
Specifies the output format for messages.
default: "gnu"
possible values: [see information at URL below]
https://github.com/validator/validator/wiki/Service-%C2%BB-Common-params#out
Specifies whether ASCII quotation marks are substituted for Unicode smart
quotation marks in messages.
default: "yes"
possible values: "yes" or "no"
Binds the validator service to the specified IP address.
default: 0.0.0.0 [causes the checker to listen on all interfaces]
possible values: The IP address of any network interface
example: -Dnu.validator.servlet.bind-address=127.0.0.1
Specifies the connection timeout.
default: 5000
possible values: number of milliseconds
example: -Dnu.validator.servlet.connection-timeout=5000
Specifies the socket timeout.
default: 5000
possible values: number of milliseconds
example: -Dnu.validator.servlet.socket-timeout=5000
Você pode extrair a imagem do Docker do verificador de https://ghcr.io/validator/validator no registro do contêiner GitHub.
Para extrair e executar a versão mais recente do verificador:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
Para extrair e executar uma tag/versão específica do verificador do registro do contêiner — por exemplo, a versão 17.11.1
:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:17.11.1
Para vincular o verificador a um endereço específico (em vez de ouvi-lo em todas as interfaces):
docker run -it --rm -p 128.30.52.73:8888:8888
ghcr.io/validator/validator:latest
Para fazer o verificador rodar com um tempo limite de conexão e tempo limite de soquete diferentes dos 5 segundos padrão, use as variáveis de ambiente CONNECTION_TIMEOUT_SECONDS
e SOCKET_TIMEOUT_SECONDS
:
docker run -it --rm
-e CONNECTION_TIMEOUT_SECONDS=15
-e SOCKET_TIMEOUT_SECONDS=15
-p 8888:8888
validator/validator
Para fazer o verificador ser executado com propriedades específicas do sistema Java definidas, use a variável de ambiente JAVA_TOOL_OPTIONS
:
docker run -it --rm
-e JAVA_TOOL_OPTIONS=-Dnu.validator.client.asciiquotes=yes
-p 8888:8888
validator/validator
Para definir um serviço chamado vnu
para uso com docker compose
, crie um arquivo Compose chamado docker-compose.yml
(por exemplo), com conteúdo como o seguinte:
version: '2' services:
vnu:
image: validator/validator ports:
- "8888:8888"
network_mode: "host" #so "localhost" refers to the host machine.
Siga as etapas abaixo para criar, testar e executar o verificador de forma que você possa abrir http://0.0.0.0:8888/
em um navegador da Web para usar a UI da Web do verificador.
Certifique-se de ter git, python e JDK 8 ou superior instalados.
Defina a variável de ambiente JAVA_HOME
:
exportar JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 <- Ubuntu, etc.
exportar JAVA_HOME=$(/usr/libexec/java_home) <-- MacOS
Crie um diretório de trabalho:
clone do git https://github.com/validator/validator.git
Mude para o seu diretório de trabalho:
validador de cd
Inicie o script Python do verificador:
python ./checker.py tudo
Na primeira vez que você executar o script verificador Python, precisará estar on-line e a compilação precisará de tempo para baixar vários megabytes de dependências.
As etapas acima irão construir, testar e executar o verificador de forma que você possa abrir http://0.0.0.0:8888/
em um navegador da Web para usar a UI da Web do verificador.
Aviso: versões futuras do verificador serão vinculadas por padrão ao endereço 127.0.0.1
. A implantação do seu verificador pode se tornar inacessível, a menos que você use a opção --bind-address
para vincular o verificador a um endereço diferente:
python ./checker.py --bind-address=128.30.52.73 all
Use python ./checker.py --help
para ver as opções de linha de comando para controlar o comportamento do script, bem como os nomes dos alvos de construção que você pode chamar separadamente; por exemplo:
python ./checker.py build # apenas para compilar
python ./checker.py build test # para construir e testar
python ./checker.py run # para executar apenas
python ./checker.py jar # para compilar vnu.jar
python ./checker.py atualização-rasa &&
python ./checker.py dldeps &&
python ./checker.py jar # para compilar vnu.jar mais rápido