Я уже месяц или около того работаю над проектом по разработке валидатора XML (XSD) в javascript. Я подошел очень близко, но продолжаю сталкиваться с проблемами.
Единственное, что у меня хорошо работает, - это нормализация структур схемы в FSA, которую я храню в DOM. Я попробовал несколько методов для проверки моих структур xml на соответствие FSA и каждый раз был коротким.
Валидатор используется для запуска XML-редактора WYSIWYG на стороне клиента, поэтому он должен отвечать следующим требованиям
будет преобразован в аналогичную обобщенную структуру:
Я делаю это на стороне сервера через XQuery и XSLT.
Моя первая попытка создания валидатора была с рекурсивными функциями в javascript. Попутно, если бы я нашел контент, который мог бы существовать, я бы добавил его в глобальный PSVI, сигнализирующий, что он может быть добавлен в определенной точке иерархии.
Моя вторая попытка была итеративной, и была намного быстрее, но оба они пострадали из одной и той же проблемы.
Оба они могли правильно проверить простые модели контента, но как только модели стали более сложными и очень вложенными, они потерпели неудачу.
Я думаю, что подхожу к этой проблеме с совершенно неверного направления. Из того, что я прочитал, большинство FSA обрабатываются путем помещения состояний в стек, но я не уверен, как это сделать в моей ситуации.
Мне нужен совет по следующим вопросам:
Спасибо ,
Кейси
Дополнительные правки:
Я смотрел учебник здесь: http://www.codeproject.com/KB/recipes/OwnRegExpressionsParser. aspx сфокусирован на регулярных выражениях. Кажется, это очень похоже на то, что мне нужно, но сосредоточено на создании синтаксического анализатора для регулярных выражений. Это вызывает некоторые интересные мысли.
Я думаю, что XML-схема разбивается только на несколько операторов:
sequence -> Concatination
Выбор -> Союз
minOccurs / maxOccurs - вероятно, нужно больше, чем Kleene Closure, не совсем уверенный лучший способ представить этот оператор.