Perl and Web – From Template Toolkits to XML/XSLT

Download Report

Transcript Perl and Web – From Template Toolkits to XML/XSLT

Perl и Web –
от Template Toolkits
до XML/XSLT
Георги Пенков,
Марин Маринов
www.devbg.org
sofia.pm.org
perl.phreedom.org
Съдържание
• Въведение в Perl
•
•
•
•
•
•
Какво е Perl
Кратка история на Perl
Предимства на Perl
“Недостатъци” на Perl
CPAN
Успешни истории
• CGI – Common Gateway Interface
• Template Toolkits & Perl
Въведение в Perl
• Какво е Perl
• Practical Extraction and Report Language
• Pathologically Eclectic Rubbish Lister
• Език за генерална употреба, първоначално
разработен за текстова обработка
• В момента се използва за много неща
•
•
•
•
•
Уеб разработка
Системна администрация и интеграция
Мрежово програмиране
Графични интерфейси
и още много...
Кратка история
• Декември 1987 – версия 1.0
• Създаден от Larry Wall като резултат от работата
му по проект на АНС
• Февруари 1993 – версия 4.063 – много стабилна
• Юли 1998 – версия 5.005, обединен Perl
• Април 2001 – версия 5.6.1, модерен Perl
• Юли 2002 – версия 5.8.0, последно главно
разклонение
• Ноември 2004 – версия 5.8.6, последна
стабилна
Предимствата на Perl
• Мощна, много-платформена, оптимизирана
виртуална машина
• Binary дистрибуции за над 85 OS
• Свободният Artistic License
• Голямо общество разработчици, иновативност
• CPAN – свободна библиотека от модули
• Подкрепа от страна на индустрията
•
•
•
•
HP
IBM
Microsoft / ActiveState
O’Reilly
“Недостатъците” на Perl
• There Is More Than One Way To Do It
• Предразполага към трудно четивен, “хакерски
код”
• Свободата плаши “добрите” програмисти
• Свободата плаши “добрите” мениджъри
• Раждат се митове за трудността му
• По-бавна крива на научаване
• Позволява писане на платформено зависим код
• Позволява достъп до “най-дълбоките” ресурси
на системата
CPAN
• Comprehensive
Perl
Archive
Network
(http://www.cpan.org)
3000
2500
2000
1500
• Повече от 5885
модула, около 78% от
които силно
използваеми
• Дава Open Source
модел за разработка
и разпространение на
модули
CPAN Modules
1000
500
0
1995 1997 1999 2001 2003
Успешни истории
• Yahoo.com
• 1996 година David Filo благодари специално на
Larry Wall и му предлага да закупи евтини акции
на компанията
• Amazon.com
• Bugzilla, RequestTracker
• Slashdot.org
• NASA
• Hewlett Packard Open View мениджмънт софтуер
• и много други...
CGI – добрите стари дни
• Разчита на проста схема
за предаване на данните
между web-server-а и CGI
приложението
• Първата стъпка към
“оживяването” на
Интернет страниците
(около 85% CGI
скриптовете са Perl
базирани)
• Стандартен поток на
данните при CGI
server side
• Common Gateway
Interface (CGI) –
стандартния начин за
реализиране на serverside web базирани
приложения
CGI
stdin / stdout
Web Server
HTTP
Browser
CGI.pm
• Прави Perl мощен CGI език, решавайки
стандартни задачи като
• Обработка на POST/GET заявки, импорт на
параметрите в отделен namespace или
променливи
• Работа с cookies
• Работа с header-a
• Генериране на стандартни HTML тагове
• Предлага процедурно ориентиран и OOP
подход
• Не разделя презентация от код
• Не предполага кеширане на данни
CGI.pm пример
#!/usr/bin/perl
use strict; use warnings;
use CGI; use DBI; use Config;
my $cgiObj = new CGI;
$cgiObj->import_params('CGIParams');
print $cgiObj->header();
# Database part
my $dbh = DBI->connect(
$Config->{DB}->{DNSource},
$Config->{DB}->{username},
$Config->{DB}->{password},
$Config->{DB}->{attr}
);
(примерът продължава)
CGI.pm пример
my $statement = "select count(username) from
users where username = ? and password = ?";
my $sth = $dbh->prepare_cached($statement);
my $sth->execute($CGIParams::username,
$CGIParams::password) || die ("Error executing
query: $DBI::errstr");
my @result = $sth->fetchrow_array ();
if ($result[0]) {
print $cgiObj->p("Welcome");
} else {
print $cgiObj->p("Access Denied");
}
$dbh->disconnect();
Fast CGI
• CGI приложенията са подложени на голямо
натоварване
• Всяка CGI заявка се обработва в отделен
процес, което създава проблеми с
производителността
• mod_fastcgi - Apache модул, решава част от
performance проблемите като създаването на
нов процес
• FastCGI – Perl модул, интерфейс към
mod_fastcgi
mod_perl – Apache + Perl
• Еднократна компилация на
кода
• Еднократно установяване
на DB връзка
• Кеширане и предварителна
подготовка на DB заявките
• mod_perl
persistent mod_perl processes
• mod_perl е Apache модул (за
версия 1.х и 2.х)
mod_perl
Web Server
HTTP
• ООП подход
• Високо бързодействие,
сравнимо с PHP
Browser
Template Toolkits
• Разделяне на presentation & logic
• Presentation частта се описва в някакъв файл-шаблон,
който в последствие се попълва от данни
• Логиката може да бъде изнесена в database-а или в кода на
приложението
• Кодът се поддържа по-лесно, външният вид – също
• Съществуват стандартни пакети, чиято употреба
позволява съсредоточаване в бизнес логиката, а не
презентацията
• Вдига се КПД-то при разработка на едни и същи
приложения
• Осезаема разлика при enterprise проекти – по-лесно се
скалират
Template Toolkits & Perl
• There Is More Than One Way To Do It ;)
• Text::Template – достъпни са всички вградени
Perl функции
• HTML::Embperl – mod_perl, CGI, offline, ООП
• HTML::Mason –компоненти, предаващи данни
помежду си, кеширане на данни
• HTML::Template – HTML-подобен синтаксис на
служебните конструкции
• Apache::ASP – Active Server Pages port за
Apache/Perl
• Template Toolkit – голям framework, позволяващ
Template обработка не само за HTML
Mason

Безплатен perl-базиран framework за
разработка на web приложения

С него може да се вплита код в HTML
страниците



Позволява лесно създаване на отделни
компоненти, които се ползват
впоследствие многократно.
Създаден за работа с mod_perl и Apache,
но може да функционира и в CGI режим
или самостоятелно
Работи и под Windows, включително с IIS
Сайтове успешно
използващи Mason
• Amazon.com – един от най-големите магазини
за продажба на стоки online
• AvantGo – софтуер за мобилни устройства
• DynDNS.org – един от водещите фирми,
доставяща услугата динамичен IP адрес и
домейн име
• Live365.com – най-голямата интернет
радиостанция в света
• Salon.com – онлайн списание за технологии,
политика, изкуства, sex и здраве. Носител на
множество награди
Основни положения в
Mason
• Вплитане на код...:
• Между <%perl> и </%perl>
• Цял ред, започващ с %
• С единичен таг <% $eval_me %>
• Пример:
<%perl> my $noun = 'World';
my @time = localtime;
</%perl>
Hello <% $noun %>,
% if ( $time[2] < 12 ) {
good morning.
% } else {
good afternoon.
%}
Template Toolkit – пример (1)
#!/usr/bin/perl
use strict; use warnings;
use Template;
my $config = {
INCLUDE_PATH => '/search/path',
INTERPOLATE => 1,
POST_CHOMP => 1,
PRE_PROCESS => 'header',
EVAL_PERL
=> 1,
};
my $template = Template->new($config);
(примерът продължава)
Template Toolkit – пример (2)
# define template variables for replacement
my $vars = {
var1
var2
var3
var4
var5
=> $value,
=> \%hash,
=> \@list,
=> \&code,
=> $object,
};
my $input = ‘index.html';
$template->process($input, $vars) || die $template->error();
Template Toolkit – пример (3)
file: index.html
[% INCLUDE header title = ‘Perl and Template Toolkit Example' %]
<h1>Perl Rulez!</h1>
<p>[% message %]</p>
[% INCLUDE footer %]
file: header
<html>
<head><title>[% title %]</title></head>
<body bgcolor="#ffffff">
file: footer
<p> © Copyright 2005 by Someone who likes the copyrights ;) </p>
</body> </html>
XSLT трансформации
• XSLT е XML-производен език, с който се описват
правила за преобразуване на даден XML поток към друг
такъв.
• Днес съществуват множество XML-базирани формати
(XHTML, WML, SVG, SMIL)
• С помощта на XSLT презентационната логика се отделя
в transformation шаблон, който оперира върху входни
XML-пакетирани данни и генерира самият резултат
(който е също XML-производен)
DB
Pure data
Perl Code
(add logic)
XML
XSLT/XPath
Tempalte
XHTML
Browser
(reader)
XSLT – предимства и
недостатъци
• С помоща на няколко различни XSLT шаблона и един и
същ XML източник може да се генерира изход към
различни четци
• XSLT често се посочва като труден за учене, но в
действителност синтаксът му е тривиален.
• Веднъж създадени, най-трудните парчета XSLT се вписват
много лесно в нови проекти.
• Комбинацията XML + XSLT + CSS де факто дава пълна
свобода за сглобяване на динамични сайтове.
Включително лесна подмяна на външния вид и
разделение на работата.
• При използване на т.нар. SAX event-и XSLT
трансформаторът може да играе ролята на филтър, през
които преминават с почти нулева латентност данните.
XSLT пример
Входен XML
Примерен XSLT шаблон
<chat_room name=‘#larodi’>
<chatter>
<nick>Aleenah</nick>
<ip>192.168.11.52</ip>
</chatter>
<chatter op=‘true’>
<nick>keyhole</nick>
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match=‘chatter’>
<li>
<xsl:if test=”@op=‘true’”>@</if>
<xsl:value-of select=‘nick’/> / <xsl:value-of select=‘ip’ />
</li>
</xsl:template>
<ip>83.200.27.23</ip>
</chatter>
<chatter>
<nick>gmtb</nick>
<ip>133.220.27.23</ip>
</chatter>
</chat_room>
<xsl:template match=‘/’>
Chatters in room <b> <xsl:value-of select=‘@name’ /> </b>
<ul>
<xsl:apply-template select=“chatter[@op=‘true’]” />
<xsl:apply-template select=“chatter[@op!=‘true’]” />
</ul>
</xsl:template>
Резултат:
(в браузера)
Chatters in room #larodi
•
@keyhole / 83.200.27.23 /
•
Aleenah / 192.168.11.52 /
•
gmbt / 133.200.27.23 /
XSLT – предимства и
недостатъци
• Проектите, които използват XSLT се скалират
успешно до enterprise ниво.
• За по-малки задачи не е подходящ като подход.
• В началото се “губи” време за оформяне
основните за проекта XSLT шаблони.
• Проектът ще трябва задължително да използва
XML транспорт на данните. Възможен оverkill.
• Използването XSLT е желателно, когато се
очаква данните да се доставят до различни
видове крайни устройства
За повече информация
• Perl
• http://www.perl.org
• http://www.perl.com
• Comprehensive Perl Archive Network
http://www.cpan.org
• http://www.activestate.com
• XSLT Related
•
•
•
•
Jenni Tennison’s XSLT Pages
Dimitri Novatchev’s EXSLT Extensions
Nice XSLT Tutorial @ W3Schools
Interactive XSLT Training by Examples
• Stylus Studio – Premium XSLT Suite
За повече информация
• Template Toolkits
• Text::Template
http://www.plover.com/~mjd/perl/Template/
• HTML::Embperl
http://www.ecos.de/
• HTML::Mason
http://www.masonhq.com/
• HTML::Template
http://search.cpan.org/dist/HTML-Template/
• Apache::ASP
http://search.cpan.org/dist/Apache-ASP/
• Template Toolkit 2/3
http://www.template-toolkit.org/
За повече информация
Sofia.pm
http://sofia.pm.org
Perl @ Sofia University
http://perl.phreedom.org
Bulgarian Association of Software
Developers
http://www.devbg.org
[email protected]
[email protected]
Въпроси и отговори ;)
Въпроси?
Si ?