ПРИЛОЖЕНИЕ 4
Интерпретация DTD для больших документов XML
Данный параграф тесно связан с параграфом "Интерпретация XSLT" и является продолжением параграфа "Интерпретация XML-Validate".
Целью является обработка больших документов XML.
Пусть e.XML - документ XML, e.DTD - его описание, DIBIG - функция-предикат от этих двух переменных. Будем суперкомпилировать <DIBIG (e.DTD) (e.XML) > в варианте фиксированного описания документа e.DTD.
Основное ограничение предлагаемых программ - не обрабатываются Attribute в тэгах.
Для пусков суперкомпилятора в этих примерах служит bat-файл di.bat ;bat-файл digo.bat запускает полученную программу на счет. Также как и в параграфе "Интерпретация XSLT" задание на суперкомпиляцию порождается программой diparm.ref, одно из заданий можно посмотреть в di.mst.
Программа dibig.ref подвергается суперкомпиляции. Для обработки e.DTD используется программа dtd-ref.ref , для преобразования регулярных выражений в конечные автоматы применяется программа di5.ref . Документ XML обрабатывается простым парсером dtd-next.ref , написанным специально для обработки больших документов.
Далее приведем четыре примера. В каждом из них файл diN.dtd содержит описание DTD, r_diN.ref - текст результирующей программы после работы суперкомпилятора. Один из возможных примеров документа XML для результирующей программы приведен в diN.xml.
Пример 1.( di1.dtd , di1.xml , r_di1.ref ). Упрощенный вариант арифметических выражений, взятый из http://www.w3.org/Math/.
Пример 2. ( di2.dtd , di2.xml , r_di2.ref ). Пример взят из документации http://www.w3.org/TR/xslt .
Пример 3. ( di3.dtd , di3.xml , r_di3.ref ). Совсем простой пример, в какой-то мере описывающий произвольную скобочную структуру.
Пример 4. ( di9.dtd , di9.xml, r_di9.ref ). Описание XHTML, взятое из http://www.xml.com/pub/resourceguide/index.html. Напомним, что элементы ATTLIST в DTD здесь не обрабатываются. В качестве HTML-файла взят пример из "XML for the absolute beginner" http://www.javaworld.com/javaworld/jw-04-1999/jw-04-xml.html .
Сравним размеры полученных суперкомпилятором программ в обоих случаях.
Пример DI DIBIG --------------------------------- 1 7 706 4 275 2 3 262 3 721 3 1 327 1 187 4 7 098 7 704 ---------------------------------
Список всех ссылок, отличных от ссылок параграфа "Интерпретация XML-Validate" и используемых в данном параграфе, приведен ниже.
di.bat - запуск суперкомпилятора.
dibig.ref - интерпретатор DTD-Validate.
dtd-next.ref - простой парсер.
r_di1.ref , r_di2.ref , r_di3.ref , r_di9.ref - программы, построенные суперкомпилятором.