Nu Html Checker (v.Nu) помогает обнаружить непреднамеренные ошибки в HTML, CSS и SVG. Он позволяет вам выполнять пакетную проверку документов из командной строки и других скриптов/приложений, а также развертывать собственный экземпляр средства проверки в качестве службы (например, validator.w3.org/nu). Доступен его исходный код, а также инструкции по сборке, тестированию и запуску кода.
Также доступны Dockerfile (см. «Извлечение образа Docker» ниже) и пакеты npm, pip и Brew.
Он выпускается в следующих форматах:
предварительно скомпилированные двоичные файлы Linux, Windows и macOS, включающие встроенную среду выполнения Java
vnu.jar
— портативная версия, которую можно использовать в любой системе, где установлена Java 11 или выше.
vnu.war
— для развертывания службы проверки через контейнер сервлетов, такой как Tomcat.
Примечание. Для файлов vnu.jar и vnu.war требуется наличие установленной версии Java 11 или более поздней версии. Предварительно скомпилированные двоичные файлы Linux, Windows и macOS вообще не требуют наличия какой-либо установленной версии Java.
Вы можете получить последнюю версию или запустить 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
или pip install html5validator
и просмотрите разделы «Использование» и «Проверка через Интернет» ниже. Или автоматизируйте проверку документов с помощью внешнего интерфейса, такого как:
Плагин Grunt для проверки HTML или плагин Gulp для проверки HTML или плагин Maven для проверки HTML
Пакет pip
html5validator (для интеграции в Travis CI, CircleCI, CodeShip, Jekyll, Pelican и т. д.)
LMVTFY: позвольте мне проверить это для вас (автоматическая проверка JSFiddle/JSBin и т. д., ссылки в комментариях к выпускам GitHub)
Запустите проверку одним из следующих вызовов:
• vnu-runtime-image/bin/vnu OPTIONS FILES
(Linux или macOS)
• vnu-runtime-imagebinvnu.bat OPTIONS FILES
(Windows)
• java -jar ~/vnu.jar OPTIONS FILES
(любая система с установленной Java8+)
…где FILES
— это документы для проверки, а OPTIONS
— ноль или более следующих параметров:
--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
В разделе «Параметры» ниже представлены подробные сведения о каждом параметре, а в остальной части этого раздела приведены некоторые конкретные примеры.
Примечание. В этих примерах замените ~/vnu.jar
фактическим путем к этому файлу jar в вашей системе, а также замените vnu-runtime-image/bin/vnu
и vnu-runtime-imagebinvnu.bat
фактическим путь к программе vnu
или vnu.bat
в вашей системе — или если вы добавите каталог vnu-runtime-image/bin
или vnu-runtime-imagebin
в системную переменную среды PATH
, вы можете вызвать программу проверки, просто vnu
.
Чтобы проверить один или несколько документов из командной строки:
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...
Примечание. Если при вызове средства проверки вы получаете ошибку StackOverflowError
, попробуйте изменить размер стека потока, предоставив параметр -Xss
для Java:
java -Xss512k -jar ~/vnu.jar ...
vnu-runtime-image/bin/java -Xss512k
-m vnu/nu.validator.client.SimpleCommandLineValidator ...
Чтобы проверить все документы в определенном каталоге DIRECTORY_PATH
как HTML:
java -jar ~/vnu.jar DIRECTORY_PATH
vnu-runtime-image/bin/vnu DIRECTORY_PATH
vnu-runtime-imagebinvnu.bat DIRECTORY_PATH
Примечание. В примерах в этом разделе предполагается, что у вас есть каталог vnu-runtime-image/bin
или vnu-runtime-imagebin
в системной переменной среды PATH
. Если вместо этого вы используете файл jar, замените vnu
в примерах на java -jar ~/vnu.jar
.
Чтобы проверить все документы в определенном каталоге DIRECTORY_PATH
как HTML, но пропустить все документы, имена которых не заканчиваются расширениями .html
, .htm
, .xhtml
или .xht
:
vnu --skip-non-html DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге как CSS:
vnu --css DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге как CSS, но пропустить все документы, имена которых не заканчиваются расширением .css
:
vnu --skip-non-css DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге, причем документы, имена которых заканчиваются расширением .css
проверяются как CSS, а все остальные документы проверяются как HTML:
vnu --also-check-css DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге как SVG:
vnu --svg DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге как SVG, но пропустить все документы, имена которых не заканчиваются расширением .svg
:
vnu --skip-non-svg DIRECTORY_PATH
Чтобы проверить все документы в определенном каталоге, причем документы, имена которых заканчиваются расширением .svg
проверяются как SVG, а все остальные документы проверяются как HTML:
vnu --also-check-svg DIRECTORY_PATH
Чтобы проверить веб-документ:
vnu _URL_
example: vnu http://example.com/foo
Чтобы проверить стандартный ввод:
vnu -
example:
echo '<!doctype html><title>...' | vnu -
echo '<!doctype html><title>...' | java -jar ~/vnu.jar -
При использовании из командной строки, как описано в этом разделе, средство проверки предоставляет следующие параметры:
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.
Nu Html Checker — помимо того, что его можно использовать в качестве автономного клиента командной строки — можно запускать как службу HTTP, аналогично validator.w3.org/nu, для проверки HTML-документов, таблиц стилей CSS и изображений SVG на основе браузера. через Интернет. Для этого чекер выпущен в виде нескольких отдельных пакетов:
Бинарные файлы для Linux, Windows и macOS для развертывания средства проверки как простого автономного сервиса в любой системе.
vnu.jar
для развертывания чекера как простого автономного сервиса в системе с установленной Java
vnu.war
для развертывания средства проверки в контейнере сервлетов, таком как Tomcat
Все развертывания предоставляют REST API, который позволяет проверять документы HTML, таблицы стилей CSS и изображения SVG из других клиентов, а не только из веб-браузеров. Двоичные файлы Linux, Windows и macOS, а также пакет vnu.jar
также включают в себя простой HTTP-клиент, который позволяет отправлять документы либо в локально работающий экземпляр HTTP-сервиса проверки (для быстрой проверки из командной строки), либо на любой удаленный компьютер. экземпляр HTTP-сервиса проверки, работающий где угодно в Интернете.
Последние выпуски двоичных файлов Linux, Windows и macOS, а также пакетов vnu.jar и vnu.war доступны в проекте validator
на github. Ниже приведены подробные инструкции по их использованию.
Примечание. В этих инструкциях замените ~/vnu.jar
фактическим путем к этому файлу jar в вашей системе, а также замените vnu-runtime-image/bin/java
и vnu-runtime-imagebinjava.exe
фактическим путь к программе проверки java
или java.exe
в вашей системе — или если вы добавите каталог vnu-runtime-image/bin
или vnu-runtime-imagebin
в системную переменную среды PATH
, вы можете вызвать программу проверки, просто java nu.validator.servlet.Main 8888
.
Чтобы запустить программу проверки как отдельную службу (с использованием встроенного сервера Jetty), откройте новое окно терминала и вызовите программу проверки следующим образом:
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
Затем откройте http://0.0.0.0:8888 в браузере. (Чтобы прослушивать другой порт, замените 8888
номером порта.)
Предупреждение: будущие выпуски чекера по умолчанию будут привязаны к адресу 127.0.0.1
. Развертывание вашего средства проверки может стать недоступным, если вы не используете системное свойство nu.validator.servlet.bind-address
для привязки средства проверки к другому адресу:
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
Когда вы откроете http://0.0.0.0:8888 (или любой другой URL-адрес, соответствующий значению nu.validator.servlet.bind-address
которое вы используете), вы увидите форму, похожую на validator.w3.org/nu. который позволяет вам ввести URL-адрес HTML-документа, таблицы стилей CSS или изображения SVG и отобразить результаты проверки этого ресурса в браузере.
Примечание. Если при использовании средства проверки вы получаете ошибку StackOverflowError
, попробуйте изменить размер стека потока, предоставив параметр -Xss
для Java:
java -Xss512k -cp ~/vnu.jar nu.validator.servlet.Main 8888
vnu-runtime-image/bin/java -Xss512k -m vnu/nu.validator.servlet.Main 8888
Чтобы запустить средство проверки внутри существующего контейнера сервлетов, такого как Apache Tomcat, вам необходимо развернуть файл vnu.war
на этом сервере в соответствии с его документацией. Например, в Apache Tomcat это можно сделать с помощью приложения Manager или просто скопировав файл в каталог webapps
(поскольку это настройка appBase
по умолчанию). Обычно в файле журнала 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
Предполагая, что ваш контейнер сервлетов настроен на получение HTTP-запросов, отправленных на localhost
через порт 80
, а корневым контекстом этого приложения является vnu
(часто поведением по умолчанию является использование имени файла WAR-файла в качестве корня контекста, если оно не указано явно), вы должны быть иметь доступ к приложению, подключившись к http://localhost/vnu/.
Примечание. Возможно, вы захотите настроить файл /WEB-INF/web.xml
внутри файла WAR (вы можете использовать любую программу обработки ZIP), чтобы изменить конфигурацию фильтра сервлетов. Например, если вы хотите отключить фильтр ограничения входящего размера, вы можете закомментировать этот фильтр следующим образом:
<!--
<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>
-->
Средство проверки поставляется с HTTP-клиентом, который можно использовать из командной строки для отправки документов либо в локально работающий экземпляр службы HTTP средства проверки (для быстрой проверки из командной строки), либо в удаленный экземпляр в любом месте в Интернете.
Чтобы проверить документы локально с помощью упакованного HTTP-клиента, сделайте следующее:
Запустите чекер как локальный HTTP-сервис, как описано в разделе Автономный веб-сервер .
Откройте новое окно терминала и вызовите HTTP-клиент следующим образом:
java -cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
vnu-runtime-image/bin/java nu.validator.client.HttpClient FILE.html...
Чтобы отправить документы в экземпляр средства проверки в Интернете, например html5.validator.nu/, используйте параметры nu.validator.client.host и nu.validator.client.port, например:
java -cp ~/vnu.jar -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
…или вот так:
vnu-runtime-image/bin/java -Dnu.validator.client.port=80
-Dnu.validator.client.host=html5.validator.nu
nu.validator.client.HttpClient FILE.html...
Другие варианты описаны ниже.
При использовании упакованного HTTP-клиента для отправки документов в экземпляр службы HTTP средства проверки для проверки вы можете установить свойства системы Java для управления параметрами конфигурации поведения средства проверки.
Например, вы можете подавить сообщения уровня предупреждения и отображать только сообщения уровня ошибки, установив для системного свойства nu.validator.client.level
значение error
, например:
java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
…или вот так:
vnu-runtime-image/bin/java -Dnu.validator.client.level=error
-cp ~/vnu.jar nu.validator.client.HttpClient FILE.html...
Большинство свойств, перечисленных ниже, соответствуют общим входным параметрам службы проверки, как описано на 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
Вы можете получить образ Docker средства проверки из https://ghcr.io/validator/validator в реестре контейнеров GitHub.
Чтобы вытащить и запустить последнюю версию чекера:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
Чтобы извлечь и запустить конкретный тег/версию чекера из реестра контейнеров — например, версию 17.11.1
:
docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:17.11.1
Чтобы привязать программу проверки к определенному адресу (вместо того, чтобы она прослушивала все интерфейсы):
docker run -it --rm -p 128.30.52.73:8888:8888
ghcr.io/validator/validator:latest
Чтобы проверка запускалась с таймаутом соединения и таймаутом сокета, отличным от 5 секунд по умолчанию, используйте переменные среды CONNECTION_TIMEOUT_SECONDS
и SOCKET_TIMEOUT_SECONDS
:
docker run -it --rm
-e CONNECTION_TIMEOUT_SECONDS=15
-e SOCKET_TIMEOUT_SECONDS=15
-p 8888:8888
validator/validator
Чтобы программа проверки запускалась с определенным набором системных свойств Java, используйте переменную среды JAVA_TOOL_OPTIONS
:
docker run -it --rm
-e JAVA_TOOL_OPTIONS=-Dnu.validator.client.asciiquotes=yes
-p 8888:8888
validator/validator
Чтобы определить службу с именем vnu
для использования с docker compose
, создайте файл Compose с именем docker-compose.yml
(например) со следующим содержимым:
version: '2' services:
vnu:
image: validator/validator ports:
- "8888:8888"
network_mode: "host" #so "localhost" refers to the host machine.
Выполните следующие действия, чтобы создать, протестировать и запустить средство проверки, чтобы можно было открыть http://0.0.0.0:8888/
в веб-браузере и использовать веб-интерфейс средства проверки.
Убедитесь, что у вас установлены git, python и JDK 8 или выше.
Установите переменную среды JAVA_HOME
:
экспорт JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 <-- Ubuntu и т. д.
экспорт JAVA_HOME=$(/usr/libexec/java_home) <-- MacOS
Создайте рабочий каталог:
git-клон https://github.com/validator/validator.git
Перейдите в свой рабочий каталог:
валидатор компакт-дисков
Запустите Python-скрипт проверки:
python ./checker.py все
При первом запуске скрипта Python для проверки вам потребуется подключение к Интернету, а сборке потребуется время для загрузки нескольких мегабайт зависимостей.
Вышеуказанные шаги позволят создать, протестировать и запустить средство проверки, так что вы сможете открыть http://0.0.0.0:8888/
в веб-браузере и использовать веб-интерфейс средства проверки.
Предупреждение: будущие выпуски чекера по умолчанию будут привязаны к адресу 127.0.0.1
. Развертывание вашего средства проверки может стать недоступным, если вы не используете опцию --bind-address
для привязки средства проверки к другому адресу:
python ./checker.py --bind-address=128.30.52.73 all
Используйте python ./checker.py --help
чтобы просмотреть параметры командной строки для управления поведением сценария, а также имена целей сборки, которые вы можете вызывать отдельно; например:
python ./checker.py build # только для сборки
python ./checker.py build test # для сборки и тестирования
python ./checker.py run # только для запуска
python ./checker.py jar # для компиляции vnu.jar
python ./checker.py update-shallow &&
python ./checker.py dldeps &&
python ./checker.py jar # для более быстрой компиляции vnu.jar