Добрый день, меня зовут Александр Червяк, я являюсь руководителем группы компьютерного обеспечения ГТРК «Саратов», а так же лидером клуба MCP в Саратове.
Сегодня я хотел бы презентовать часть собственных наработок использования XML технологий для построения web-сайтов.
И не смотря на то, что язык XML далеко не новый язык, а сайтостроение, своими корнями, уходит в прошлый век, тема, поднятая мной сегодня, по моему глубокому убеждению, остается актуальной и по сегодняшний день.
В чем же прелести того метода написания сайтов, который я вам буду сегодня представлять?!
1. Независимость от платформы.
2. Декларативность программирования.
3. Гибкость, компактность и прозрачность (в чем вы сможете убедиться прямо сейчас).
Представленный сегодня код будет работать на любой платформе, однако, для его демонстрации я выбрал платформу .NET и редактор Visual Studio 2008. Почему именно их, я думаю, Вы поймете в конце демонстрации. Сейчас лишь добавлю, что реализация класса XslCompiledTransform полностью развеяла мифы, гуляющие в сети Интернет, о том, что XSLT трансформация XML документов не достаточно производительна. Может у каких-то парсеров она и не производительна, но разработчики .NET, в этом вопросе, потрудились на славу, за что им большое, человеческое, спасибо!
Итак, с чего начнем?!
Ну, во первых создадим пустой проект ASP.NET.
И первым делом, к чему приступим, так это создадим xml – файл в котором явно опишем, что мы хотим получить, совершенно не задумываясь о том, как «это» будет реализовано.
В данном случае мы хотим построить «сайт», соответственно так и пишем … «сайт»
Далее, у сайта есть страницы, давайте попробуем создать первую из них … «страница»
У каждой страницы должно быть имя, понятное всем, и путь по которому она должна открываться. Естественно, раз это наша первая страница, назовем ее «Главная» и объявим для нее путь по умолчанию.
Я долго думал, что именно предложить Вам в качестве демонстрации на первой странице, так что бы это, с одной стороны было не громоздко, а с другой стороны достаточно эффективно подчеркнуло возможность использования интерактивных сценариев данной технологии.
Думая о простоте, я выбрал всем знакомый пример под названием «Hello, World!», однако для интерактивности, решил поздороваться не с целым Миром, а только с тем, кто станет тестировать все это «безобразие».
Стало быть, нам нужно выяснить его имя! Как правило, для таких целей, на страницах сайта, размещают формы, что мы сейчас и продемонстрируем …
Вот форма, но куда она будет отправлять данные?! Я предлагаю отправить их, например, по адресу «test.aspx».
Далее, внутри формы есть смысл задать вопрос, «Кто ты?»
И предложить поле по имени «name» для ввода ответа… «поле, по имени name»
Осталось ввести только кнопку отправки данных и определить надпись на ней.
Аналогичным способом создаем принимающую страницу, которая отобразит текст приветствия. Причем, в качестве имени мы будем использовать значение параметра «name», переданного из формы.
Ну, вот, собственно говоря, и все, наш демонстрационный сайт готов. Осталось только ответить на вопрос: - «Как мы собираемся превратить нашу фантазию в реальность?!».
Ведь мы могли бы написать и по другому, вместо слова «кнопка» употребить слово «бутон», вместо слова «имя» - «название», вместо «путь» - «адрес»?!
Для этих целей и существует XSLT трансформация. Замечательно, что сам язык трансформации, является ничем иным, как обычным XML документом, правда, в отличие от нашей бурной фантазии, стандартизованным.
Как раз такая стандартная прослойка между платформой и анархической средой разработки, позволяет абстрагироваться от деталей реализации функциональности.
Грубо говоря, задача XSLT документа и заключается в том, чтобы сообщить процессору как мы собираемся реализовывать ту или иную фантазию декларативного программиста.
Давайте теперь создадим XSLT документ, описывающий каждую из наших фантазий в отдельности.
Ну, во первых, необходимо указать процессору, как следует связывать путь выбранной страницы с той или иной фантазией.
Далее, есть смысл сделать некое подобие «MasterPage», что бы страницы сайта были единообразны. В этом же месте и определяются регионы размещения того или иного контента.
Подобным образом создаем и шаблон формы.
Описываем, как должны выглядеть поле и кнопка этой формы.
Ну и конечно обычный текст.
А на закладку, опишем тег «значение», который подставит нужный параметр на странице.
В этом примере обращение к функции GetParam, происходит дважды, однако реализация этой функции, кастомизирована и от платформы к платформе будет меняться. Этот шаблон из трех строчек, наилучший пример элементарного шлюза между нестандартным тегом «значение» и стандартной реализацией функциональности в каждом конкретном FrameWorke. Как данная функциональность реализована в ASP.NET, я покажу в следующем, заключительном участке кода, написанном на C#, который вместе с тем и оживит все описанные нами фантазии.
Создаем обычный обработчик запросов, в нутрии которого объявляем публичную переменную Request.
Ее мы будем заполнять при каждом обращении, всей необходимой информацией, о текущем запросе.
Например, эта переменная нам пригодится для реализации уже известной Вам функции GetParam.
Или для вычисления абсолютных путей, только что созданных нами файлов.
И вот обещанный лакомый кусочек! Создаем объект XslCompiledTransform!!!
Для начала нам нужно, «загрузить» файл трансформации.
Затем создаем объект предназначенный для передачи аргументов, и в качестве единственного аргумента передаем ссылку на себя.
Для чего? Все очень просто! Как функция GetParam, так и любые другие написанные нами функции в этом классе, станут доступны именно через этот единственный аргумент.
Можно передать и любые другие объекты, расширяющие функционал Вашего «анархического» ФреймВорка, например библиотеки EXSLT более чем достаточны для реализации любых сценариев XSLT трансформаций. Можно использовать и скрипты (в том числе и на C#) в самих XSLT файлах. Однако в нашем примере ни то ни другое не потребуется.
Единственная и самая последняя строчка, дающая четкое понимание того, как работает вся эта «алхимия» - это собственно трансформация.
Именно в этой строке четко видно, что при каждом запросе, используя откомпилированный трансформатор, с учетом переданных аргументов, мы превращаем наши фантазии, непосредственно в исходящий поток.
Теперь, прежде чем нажать кнопочку «старт» и убедиться в том, что Бог создал нас по своему образу и подобию, необходимо и достаточно объявить в конфигурационном файле этого сайта, данный обработчик запросов.
Вот и все! Стартуем!!!
Как мы видим, форма есть, и она приглашает нас ввести информацию о себе.
Подтверждаем ввод, и убеждаемся – что данный код был написан с минимальным количеством ошибок.