Сообщение от 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-примочек там нету.