Знаете ли вы средство проверки HTML-фрагментов?

#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>
  

Было бы допустимо, но для проверки у меня есть два варианта:

  1. Проверка всего документа: В большинстве случаев этого достаточно, но иногда, когда я работаю с частичными HTML-фрагментами или встроенным HTML, возникают довольно большие проблемы. Мне пришлось бы скопировать все это в новый HTML-документ и подтвердить это.
  2. Просто скопируйте фрагмент и проверьте его с помощью средства проверки 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