Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Реализация HTML5 валидатора на чистом яваскрипте? (https://javascript.ru/forum/misc/39807-realizaciya-html5-validatora-na-chistom-yavaskripte.html)

melky 13.07.2013 15:38

Цитата:

Сообщение от danik.js (Сообщение 261968)
Думаю такой инструмент был бы очень кстати.
Основное применение - контроль качества html кода при его написании в web-based HTML-редакторах.
Дополнительное - использование в NodeJS окружении.

Тремуебого валидатора как я понимаю в природе не существует.
Поэтому я начал подбирать полезные материалы.

Возможно у кого-то есть интерес к разработке или полезная инфа - буду рад.

велосипед или просто практика для повышения скилла?

danik.js 13.07.2013 15:50

Велосипед предполагает повторную реализацию уже существующего решения. Я что-то пропустил? Можно ссылку на работающий в браузере валидатор HTML? Скомпилированный в яваскрипт htmltidy не в счет.

melky 14.07.2013 00:40

Цитата:

Сообщение от danik.js
Я что-то пропустил?

вроде такого ещё не видел. но они есть не в браузере - т.е. не на JS.
Цитата:

Сообщение от danik.js
работающий в браузере валидатор HTML

а чем он отличается от не работающего в браузере? если привязки к DOM нет, то различий нет никаких.

danik.js 14.07.2013 10:27

Цитата:

Сообщение от melky
а чем он отличается от не работающего в браузере? если привязки к DOM нет, то различий нет никаких.

Ну так то да. Я просто имел ввиду полная реализация на JS. Потому что например для NodeJS можно в общем-то использвовать обертку над экзешником.

Схемы для валидации HTML представляют собой формат Relax NG плюс схема Schematron.

Я разбирал как работает validator.nu. Он использует HTML парсер (либо XML для application/xhtml+xml), который используется в Firfefox. Причем именно как SAX-интерфейс. В качестве контент-хэндлера (обработчика "событий" startElement, startDocument, characters и тд) устанавливается специальный обработчик, получаемый из валидатора. Валидатор по получаемым SAX-событиям делает проверку. Сам валидатор представляет из себя цепочку комбинаций валидаторов. То есть он состоит из валидатора RelaxNG, Schematron, спец-оберток, например, обертки удаляющей data-атрибут, так как он не соответствует схеме RelaxNG. Плюс еще различные checker-ы, проверяющие устаревшие атрибуты, неподдерживаемые фичи и тд.

Реализацию RelaxNG валидатора на JS я нашел. Работает очень хреново и медленно но думаю допилить можно. С Schematron схемой все сложней. По идее она трансформируется в специальный xslt-шаблон, который нужно применить к проверяемому документу. То есть нужна голая имплементация XSLT на JS. Так как валидатор будет работать внутри web-worker'а, а всяких DOM-примочек там нету.

danik.js 16.07.2013 12:32

Запаковал этот html5 парсер испольуя browserify.
В итоге имеем живую проверку синтаксиса в редакторе: http://www.new-era63.ru/ace/kitchen-sink.html (выбрать HTML документ сначала)


Часовой пояс GMT +3, время: 01:58.