parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

XSLT-расширения

G_Z 01.03.2008 15:57

Товарищи, предлагаю обсудить вопрос XSLT-расширений в Парсере.

Сейчас есть такая штука как parser://, которая позволяет делать любопытные вещи.
А именно, расширить функционал XSL и XPath функциями Парсера.
К сожалению, в задачи подобного вызова не входило что-то сложнее передачи строки.
В результате, сделать мало-мальски серьёзное таким образом не получится.
Однако, даже тривиальное применение демонстрирует всю мощь механизма расширений.

Можно сгенерировать случайное значение, идентификатор, отформатировать дату и сделать массу других приятных мелочей, реализовать которые средствами XSL затруднительно или, вовсе, невозможно.
При этом, вызовы пойдут Парсеру прямо во время трансформации, что позволяет делать множество ресурсоёмких вещей.
Но, к ограничению на передачу строки, укладывающууюся в требование к URL и именованию методов/переменных Парсера, добавляется ограничение на вызов метода класса MAIN, что не всегда удобно.

Обработать же, к примеру, BASE64 закодированные данные в теле документа вообще не представляется возможным, передав значение в метод.
Только обходными путями.

Сама идеология расширений штука отличная, и уже нашедшая реализацию в других языках.

Что предлагаю сделать.
Реализовать ассоциацию некоторых пространств имён с вызовом методов классов и передачу им параметров.
В итоге, получить механизм расширений, напоминающий оный в Java.

Т.е. обработка узла с заданным пространсвом имён приведёт к вызову метода класса (с возможным созданием объекта или статическим вызовом) и передаче значения методу.

Библиотека LibXSL, используемая в Паресере, поддерживает расширения, и реализация возможна (со слов воспринимающих исходники людей, к которым я не отношусь).

Как резонно заметил PAF в письме, можно для начала остановиться на string и node-типах данных, которые будут передаваться методу.

Sumo согласился помочь с попыткой реализации подобного механизма.

Если у кого есть мысли, замечания и предложения по существу — было бы любопытно послушать.
Если кто реально работал с расширениями в Java или C#, к вам огромная просьба изложить реальные возможности и возможные недостатки тамошней реализации.