Когда я анализирую XSLT в контексте, где вход и выход — SAX, создается ли за кулисами дерево DOM?

Вот пример кода, который я имею в виду:

http://xml.apache.org/xalan-j/usagepatterns.html#sax

Во-первых, обратите внимание, что все, что может быть основано на SAX, в этом коде основано на SAX: как на входе, так и на выходе.

Кроме того, обратите внимание, что объект transformHandler создается из «foo.xsl» и этот transformHandler используется для преобразования входных данных SAX в SAX ContentHandler, который создает выходные данные.

Я понял, что XSLT требует построения чего-то вроде дерева DOM, чтобы он мог выполнять свою работу.

Итак, вот мой вопрос: мне интересно, действительно ли transformHandler строит что-то вроде дерева DOM за кулисами? Если да, то разве это не противоречит цели столь упорных попыток остаться в стране SAX?


person BPS    schedule 15.08.2011    source источник
comment
Я нашел это: http://xml.apache.org/xalan-j/dtm.html, который, кажется, предполагает, что они используют что-то вроде VTD-XML за кулисами. Это намного эффективнее, чем дерево DOM, и имеет смысл в данном контексте. Я оставлю это на некоторое время и посмотрю, не даст ли кто-нибудь еще более определенный ответ.   -  person BPS    schedule 15.08.2011
comment
Это делается в одну фазу — вы не получаете доступ к процессу во время его выполнения. Дело в том, что для каждого нового документа требуется новая установка. Когда я делаю это НЕ используя SAX, я могу (повторно) использовать один и тот же процессор снова и снова. Если у вас уже есть экземпляр DOM, его можно проанализировать, как подготовленный ввод — это сэкономит некоторые накладные расходы, потому что ему не нужно выполнять анализ от META до DOM.   -  person MikeyKennethR    schedule 15.08.2011
comment
Все зависит от таблицы стилей и внутренней реализации преобразователя (сколько умных оптимизаций удалось втиснуть в нее авторам). Я ссылаюсь на эту статью, ibm.com/developerworks/library/x-xslt2, о внутреннем устройстве раннего сакса. Если вы прочтете это, я думаю, вы поймете, что пребывание в стране SAX может быть полезным.   -  person forty-two    schedule 15.08.2011
comment
Пер Норман, спасибо. Похоже, что Saxon также использует что-то вроде VTD-XML (который они называют com.icl.saxon.tinytree), чтобы избежать создания дерева DOM. Очень интересно. user639175, похоже, мне нужно провести тестирование производительности. Я ожидаю, что чем ближе я смогу оставаться к SAX-стране, тем лучше я буду (в моем конкретном приложении).   -  person BPS    schedule 16.08.2011


Ответы (1)


Цитата из http://xml.apache.org/xalan-j/dtm.html< /а>

Модель таблицы документов (DTM) — это интерфейс к модели документов, разработанный специально для нужд наших реализаций XPath и XSLT. Мотивация этой модели заключается в оптимизации производительности и минимизации объема памяти.

В частности, DTM позволяет избежать накладных расходов на создание экземпляров объектов, которые требуются стандартному DOM для представления дерева узлов. DTM использует уникальные целочисленные дескрипторы для идентификации узлов, значения целочисленных идентификаторов для представления URL-адресов, локальных имен и расширенных имен, а также целочисленные ссылки индекса и длины на строковый буфер для представления текстового значения каждого узла.

Другими словами, он строит не дерево DOM, а эффективную структуру, которая специально подходит для удовлетворения потребностей XSLT.

person BPS    schedule 19.08.2011