ПРИЛОЖЕНИЕ  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 - программы, построенные суперкомпилятором.