#html #validation #xhtml
#HTML #проверка #xhtml
Вопрос:
Я ищу инструмент, который позволил бы мне проверить, будет ли определенный фрагмент HTML допустимым в его надлежащем контексте.
Я бы ввел что-то вроде
<dd>
my definition
<div>
div inside amp;<ddamp;> is allowed
</div>
</dd>
вместо всего документа. Обычный средство проверки будет жаловаться на отсутствие dl-тега, но в большинстве случаев я просто хочу знать, допустим ли определенный элемент внутри другого или нет.
Я попытаюсь объяснить это более подробно. Рассмотрим следующий фрагмент:
<form>
<label>Name: <input /></label>
</form>
Было бы допустимо, но для проверки у меня есть два варианта:
- Проверка всего документа: В большинстве случаев этого достаточно, но иногда, когда я работаю с частичными HTML-фрагментами или встроенным HTML, возникают довольно большие проблемы. Мне пришлось бы скопировать все это в новый HTML-документ и подтвердить это.
- Просто скопируйте фрагмент и проверьте его с помощью средства проверки W3C и проигнорируйте некоторые ошибки.
В принципе, я хотел бы проверить, содержит ли элемент только те элементы, которые ему разрешено содержать.
Комментарии:
1. Этот фрагмент недопустим исключительно и именно из-за отсутствия
<dl>
тегов. Хорошо иметь a<div>
внутри a<dd>
.2. Я не уверен, но вы можете попробовать netbeans IDE, вставка html-фрагмента в редактор Netbeans выделит ошибки и предупреждения в вашем html-фрагменте.
3. Для пользователей emacs: emacswiki.org/emacs/HtmlCheckFrag проверяет соответствие пар недействительных html-тегов. Выделяются ошибки. Если в документе есть ошибки, это указывается в строке режима.
S-Mouse-1
на индикаторе в строке mode выполняется поиск в документе следующей ошибки. Это также работает для HTML-фрагментов. Пока нет проверки для таких вещей,<td></td>
находится ли внутри<table></table>
и так далее.
Ответ №1:
На самом деле вы можете использовать средство проверки W3C для проверки фрагмента.
Выберите вкладку «Проверка с помощью прямого ввода» и выберите дополнительные параметры. Там есть переключатель для «проверки фрагмента HTML». http://validator.w3.org/#validate_by_input with_options
Оно переведет вашу страницу в допустимый html, так что ошибки, которые вы видите, связаны только с вашим фрагментом.
Комментарии:
1. Функция проверки с помощью фрагмента HTML сейчас не активна
Ответ №2:
В настоящее время (май 2020) у W3C есть средство проверки фрагментов, но, похоже, в нем есть bitrot (по крайней мере, без HTML5). Вот пара простых скриптов, которые прикрепляют верхний и нижний колонтитулы к вашему фрагменту и запускают результат через локальную копию Nu checker. Фрагментом может быть все, что допустимо на верхнем уровне <body>
тега — измените верхний и нижний колонтитулы, если вам нужно что-то еще.
validate1.sh
принимает единственный аргумент filename и проверяет его, в то время как validate2.sh
циклически просматривает все HTML-файлы в каталоге. В нем есть простой механизм списка исключений, который вам нужно будет изменить. Вам нужно будет изменить оба, чтобы они указывали на вашу копию vnu.jar
.
validate1.sh
:
#!/bin/bash
#
# validate1.sh
#
# Run the nu validator on the HTML fragment in the supplied filename.
# This script adds a header and trailer around the fragment, and supplies
# the result to 'vnu.jar'. You'll need to modify it to correctly locate
# vnu.jar.
if test "$#" -ne 1; then
echo "Usage: '$0 fname', where 'fname' is the HTML file to be linted"
exit 1
fi
var="<!doctype html>
<html lang="en">
<head>
<title>foo</title>
</head>
<body>
$(< "$1")
</body>
</html>"
echo "Checking '$1'... subtract 6 from any reported line numbers"
echo "$var" | java -jar vnu.jar -
validate2.sh
:
#!/bin/bash
#
# validate2.sh
#
# Run the nu validator on the HTML fragments in the supplied directory. This
# script adds a header and footer around each fragment in the directory, and
# supplies the result to 'vnu.jar'. You'll need to modify it to correctly
# locate vnu.jar.
if test "$#" -ne 1; then
echo "Usage: '$0 fname', where 'fname' is the HTML directory to be linted"
exit 1
fi
for filename in $1/*.html; do
case $filename in
# simple exclusion list example:
"$1/root.html" | "$1/sitedown.html")
echo "Skipping '$filename'"
continue
;;
*)
;;
esac
var="<!doctype html>
<html lang="en">
<head>
<title>foo</title>
</head>
<body>
$(< "$filename")
</body>
</html>"
echo "Checking '$filename'... subtract 6 from any reported line numbers"
echo "$var" | java -jar vnu.jar -
done