Опубликован: 17.08.2006 | Уровень: для всех | Доступ: платный
Лекция 18:

Web-программирование

< Лекция 17 || Лекция 18: 123456

Средства работы с XML

Дальнейшая унификация ресурсов сети Интернет базируется на применении 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;               # и отправим его браузеру

sub bar { # подпрограмма вывода одной строки графика,
# которой передаются координаты, цвет, % и заголовок
   my ($x, $y, $color, $procent, $caption) = @_;
   # выводим прямоугольник пропорционально проценту 
   $svg->rectangle(
      x => $x, y => $y, 
      height => 30, width => $procent*10, 
      style => "opacity:1; fill:$color; fill-opacity:0.4"
   );
   # и пояснительный текст указанного цвета 
   $svg->text(
      x=>$x+5,y=>$y+20,style=>"font-size:15;fill:$color"
   )->cdata("$caption $procent %"); 
}

SVG-документ, сформированный в результате выполнения этой программы, - это текстовый файл в формате XML, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" 
          "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg height="300" width="400">
 <text style="font-size:15;fill:blue" x="32" y="32">
  &#207;&#238;&#241;&#229;&#249;&#224;&#229;&#236;&#238;&#241;&#242;&#252; 
  &#241;&#224;&#233;&#242;&#224;: 
  &#240;&#224;&#241;&#239;&#240;&#229;&#228;&#229;&#235;&#229;&#237;&#232;&#229; 
  &#239;&#238; &#228;&#238;&#236;&#229;&#237;&#224;&#236;
 </text>
 <rect height="30" width="550" x="20" y="50" 
       style="opacity:1; fill:red; fill-opacity:0.4" />
 <text style="font-size:15;fill:red" x="25" y="70">
  .RU 55 %
 </text>
 <rect height="30" width="240" x="20" y="80" 
       style="opacity:1; fill:blue; fill-opacity:0.4" />
 <text style="font-size:15;fill:blue" x="25" y="100">
  .COM 24 %
 </text>
 <rect height="30" width="120" x="20" y="110" 
       style="opacity:1; fill:green; fill-opacity:0.4" />
 <text style="font-size:15;fill:green" x="25" y="130">
  .ORG 12 %
 </text>
 <rect height="30" width="90" x="20" y="140" 
       style="opacity:1; fill:black; fill-opacity:0.4" />
 <text style="font-size:15;fill:black" x="25" y="160">
  &#239;&#240;&#238;&#247;&#232;&#229; 9 %
 </text>
 <text x="12" y="200">
  Perl 5.008007 + SVG.pm 2.33 + CGI.pm 3.10
 </text>
 <!-- 
  Generated using the Perl SVG Module V2.33
  by Ronan Oger
  Info: http://www.roasp.com/
 -->
</svg>

Зная синтаксис описания SVG-графики, можно сформировать подобный документ c помощью одного из модулей Perl, генерирующих документы XML. Библиотека SVG лишь предоставляет для этого наиболее удобные средства. Если нет под рукою нужных модулей, можно даже создавать любые документы XML на чистом Perl. Текстовое представление, понятное человеку и легкое для обработки, стало одним из преимуществ XML по сравнению с применявшимися ранее двоичными форматами. На рис. 18.3 показано, как сформированный в программе SVG-документ выглядит в окне браузера в виде векторного изображения.

Динамически сформированная SVG-графика

Рис. 18.3. Динамически сформированная SVG-графика
< Лекция 17 || Лекция 18: 123456
Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Мария Кравцова
Мария Кравцова
Россия, Сочи, РГПУ им. А.И.Герцена, 1997
Екатерина Архангельская
Екатерина Архангельская
Россия, СПбГУАП