Литмир - Электронная Библиотека
A
A

use DBI; # используем DBI

my $table = "mollusc"; # подключаемся к БД

my $dbh = # через драйвер DBD::SQLite

DBI->connect("dbi:SQLite:dbname=$table","","") or die;

my $sth = # готовим выборку строк таблицы

$dbh->prepare("SELECT id,name,latin,area FROM $table")

or die $dbh->errstr;

$sth->execute() or die $sth->errstr(); # и выполняем запрос

%>

<html> <!-- начало шаблона -->

<head><meta http-equiv="content-type"

content="text/html; charset=windows-1251">

<title>Коллекция раковин</title></head>

<body>

<h3 style="color:blue;">Коллекция раковин</h3>

<table border="1" cellpadding="1" cellspacing="0">

<!-- в цикле заполняем строки таблицы из БД -->

<% while (my $row = $sth->fetchrow_hashref) { %>

<tr>

<td rowspan="2"><img src="<%=$row->{id}%>.jpg"/></td>

<td><b><%=$row->{name}%></b>

<br/><i><%=$row->{latin}%></i></td>

</tr>

<tr><td><%=$row->{area}%></td></tr>

<% } %>

</table>

<% $dbh->disconnect; %> <!-- отсоединяемся от БД -->

<body> <html> <!-- конец шаблона -->

HTML-страница, сформированная в результате выполнения программы, приведена на рис. 18.2. При необходимости несложно расширить функциональность этой программы, например, добавить поиск по любой из колонок таблицы.

Язык программирования Perl - i_1802.png

Рис. 18.2.Web-интерфейс к базе данных

Дальнейшая унификация ресурсов сети Интернет базируется на применении XML - расширяемого языка разметки (eXtensible Markup Language), стандартизованного консорциумом W3C. XML описывает правила создания прикладных языков разметки, называемых XML-приложениями (XML application). К настоящему времени созданы сотни прикладных языков на основе синтаксиса XML. Среди наиболее распространенных языков можно упомянуть CML (описание химических данных), GML (описание географических данных), Jabber (обмен сообщениями), MathML (описание математических формул), RDF (описание информационных ресурсов), SMIL (описание мультимедийных презентаций), RSS (аннотации содержимого сайтов), SVG (масштабируемая векторная графика), WDDX (обмен данными), WebDAV (web-папки), XML/EDI (обмен бизнес-данными), XML-RPC (удаленный вызов процедур), XUL (описание пользовательского интерфейса). Использование единой грамматики XML для прикладных языков разметки позволяет обрабатывать их унифицированными программными средствами. Языки разметки на основе XML создаются преимущественно для описания данных в различных областях знаний. В формате XML данные представлены в текстовом виде, чаще всего с использованием кодировки UTF-8, поэтому они без труда пересылаются по сети и обрабатываются программами на всех компьютерных платформах. Специальный расширяемый язык стилей XSL (eXtensible Style Language) создан для унифицированного преобразования XML в другие форматы, например, для визуального представления XML-данных в виде документов в формате HTML или RTF.

В Perl имеется богатый набор средств для работы с разными языками разметки на основе XML: это и универсальные инструменты, и специализированные модули для конкретных XML-приложений. Использованию XML-технологий в программировании на языке Perl посвящена книга [19] и ее перевод [45], а в книге [30] рассматривается работа с графикой в формате SVG. Для примера познакомимся с библиотекой SVG, предназначенной для программного создания масштабируемых векторных изображений в формате XML. Чтобы составить представление об этом формате и проиллюстрировать возможности этой библиотеки, напишем CGI-программу, динамически формирующую документ SVG. Она будет показывать на простой диаграмме распределение данных о посещаемости сайта по основным доменам:

use CGI qw/:standard/; # применим библиотеку CGI

use SVG; # и SVG

my $p = CGI->new; # создадим объект CGI и зададим

print $p->header(-type=>'image/svg+xml'); # тип документа

# создадим объект SVG размером 400 на 300 пикселей

my $svg= SVG->new(width=>400, height=>300);

# разместим синий текст, начиная с координат 32,32

$svg->text(x=>32,y=>32,

style=>"font-size:15;fill:blue"

)->cdata('Посещаемость сайта: распределение по доменам');

# вызовем подпрограмму для размещения 4-х полос графика

bar(20, 50, 'red', 55, '.RU');

bar(20, 80, 'blue', 24, '.COM');

bar(20, 110, 'green', 12, '.ORG');

bar(20, 140, 'black', 9, 'прочие');

# разместим текст с версиями программных средств:

$svg->text(x=>12,y=>200,

)->cdata("Perl $] + ". # версия Perl

"SVG.pm $SVG::VERSION + ". # версия модуля SVG

"CGI.pm $CGI::VERSION"); # версия модуля CGI

my $out = $svg->xmlify(); # отформатируем текст XML

print $out; # и отправим его браузеру

79
{"b":"569217","o":1}