Web Programming - Lectures
Web Programming - Lectures
php
Содержание
1. Основы World Wide Web (WWW)
2. Основы HTML
3. Каскадные таблицы стилей
4. Протокол HTTP
5. Динамический HTML. DOM и клиентские скрипты
6. Общий шлюзовый интерфейс (CGI)
7. Модули веб-сервера. ISAPI и apache modules
8. Расширяемый язык разметки XML. Технологии на основе XML.
9. Перспективы развития веб-технологий
Тим Бернерс-Ли
Основной тип ресурсов Всемирной паутины - гипертекстовые страницы. Гипертекст - это обычный
Домен - определенная зона в системе доменных имён (DNS) Интернет, выделенная какой-либо стране,
международной организации, региону, юридическому или физическому лицу для целей обеспечения
доступа к предоставляемой им в Интернете информации. Примеры доменов: .edu, .ru, .com, .org, .net и
т.д.
Доменое имя - в системе DNS символьная строка, состоящая из имени домена ([и субдоменов]) и имени
хоста в этом домене, сопоставленная с сетевым адресом этого хоста. Примеры доменных имен:
example.com, test.example.com, test.test.example.com.
Для доступа к любым сетевым ресурсам необходимо знать где они размещены и как к ним можно
обратиться. Во Всемирной паутине используется стандартизованная схема адресации и идентификации,
учитывающую опыт адресации и идентификации e-mail, Gopher, WAIS, telnet, ftp и т.п. - URL, Uniform
Resource Locator.
URL (Uniform Resource Locator, RFC 1738) - унифицированный локатор (указатель) ресурсов,
стандартизированный способ записи адреса ресурса в WWW и сети Интернет. Адрес URL имеет
гибкую и расширяемую структуру для максимально естественного указания местонахождения ресурсов
в сети. Для представления адреса используется ограниченный набор символов ASCII. Общий вид
адреса можно представить так:
<схема>://<логин>:<пароль>@<хост>:<порт>/<полный-путь-к-ресурсу>
Где:
схема
схема обращения к ресурсу: http, ftp, gopher, mailto, news, telnet, file, man, info, whatis, ldap, wais и
т.п.
логин:пароль
имя пользователя и его пароль, используемые для доступа к ресурсу
хост
доменное имя хоста или его IP-адрес.
порт
порт хоста для подключения
полный-путь-к-ресурсу
уточняющая информация о месте нахождения ресурса (зависит от протокола).
Примеры URL:
Версии HTML
Версия 3.1 официально никогда не предлагалась, и следующей версией стандарта HTML стала 3.2.
В HTML 4.0 добавлены специфичные элементы, а некоторые теги были отмечены как устаревшие и
нерекомендованные.
HTML (HyperText Markup Language — «язык разметки гипертекста») — стандартный язык разметки
документов во Всемирной паутине. Большинство веб-страниц созданы при помощи языка HTML. Язык
HTML интерпретируется браузером и отображается в виде документа, в удобной для человека форме.
HTML является приложением SGML (стандартного обобщённого языка разметки) и соответствует
международному стандарту ISO 8879.
HTML создавался как язык для обмена научной и технической документацией, пригодный для
использования людьми, не являющимися специалистами в области вёрстки. Для этого он представляет
небольшой (сравнительно) набор структурных и семантических элементов — тегов. С помощью HTML
можно легко создать относительно простой, но красиво оформленный документ. Изначально язык
HTML был задуман и создан как средство структурирования и форматирования документов без их
привязки к средствам воспроизведения (отображения). В идеале, текст с разметкой HTML должен
единообразно воспроизводиться на различном оборудовании (монитор ПК, экран органайзера,
ограниченный по размерам экран мобильного телефона, медиа-проектор). Однако современное
применение HTML очень далеко от его изначальной задачи. Со временем основная идея
платформонезависимости языка HTML стала жертвой коммерциализации WWW и потребностей в
мультимедийном и графическом оформлении.
HTTP (HyperText Transfer Protocol, RFC 2616, текущая версия HTTP/1.1) - протокол передачи
гипертекста. Этот протокол изначально был предназначен для обмена гипертекстовыми документами,
HTTP - протокол прикладного уровня, но используется также в качестве «транспорта» для других
прикладных протоколов, таких как SOAP, XML-RPC, WebDAV.
Common Gateway Interface (CGI) - это механизм доступа к программам на стороне сервера.
Спецификация Common Gateway Interface (CGI) была разработана для расширения возможностей
WWW за счет подключения различного внешнего программного обеспечения. При использовании CGI
веб-сервер представляет браузеру доступ к исполнимым программам, запускаемым на его (серверной
стороне) через стандартные потоки ввода и вывода, что упрощает программирование до предела.
Интерфейс CGI используется для создания динамических веб-сайтов, например, когда веб-страницы
формируются из результатов запроса к базе данных. Сейчас популярность CGI снизилась, т.к. появились
более совершенные альтернативные решения (например, модули расширения веб-серверов).
IIS (Internet Information Services) - проприетарный набор серверов для нескольких служб Интернета,
разработанный Майкрософт и распространяемый с ОС семейства Windows NT. Основным компонентом
IIS является веб-сервер, также поддерживаются протоколы FTP, POP3, SMTP, NNTP.
Google Web Server (GWS) - разработка компании Google на основе web-сервера Apache. GWS
оптимизирован для выполнения приложений сервиса Google Applications.
Браузеры
Первые HTTP-клиенты были консольными и работали в текстовом режиме, позволяя читать гипертекст
и перемещаться по ссылкам. Сейчас консольные браузеры (такие, как lynx, w3m или links) практически
не используются рядовыми посетителями веб-сайтов. Тем не менее такие браузеры весьма полезны для
веб-разработчиков, так как позволяют "увидеть" веб-страницу "глазами" поискового робота.
Исторически первым браузером в современном понимании (т.е. с графическим интерфейсом и т.д.) была
программа NCSA Mosaic, разработанная Марком Андерисеном и Эриком Бина. Mosaic имел довольно
ограниченные возможности, но его открытый исходный код стал основой для последующих разработок.
Ныне браузер — комплексное приложение для обработки и вывода разных компонентов веб-страницы.
Google Chrome — браузер с открытым исходным кодом, разрабатываемый компанией Google. Первая
стабильная версия вышла 11 декабря 2008 года. В отличие от многих других браузеров, в Chrome
каждая вкладка является отдельным процессом. В случае если процесс обработки содержимого вкладки
зависнет, его можно будет завершить без риска потери данных других вкладок. Еще одна особенность -
интеллектуальная адресная строка (Omnibox). К возможности автозаполнения она добавляет поисковые
функции с учетом популярности сайта, релевантности и пользовательских предпочтений (истории
переходов). Планируется кроссплатформенность.
Браузер Opera обладает высокой скоростью работы и совместим с основными стандартами WWW.
Отличительными особенностями Opera долгое время являлись многостраничный интерфейс (система
вкладок) и возможность масштабирования веб-страниц целиком, вместе с графикой. Функция Small
Screen Rendering позволяет переформатировать документ для отображения на экранах мобильных
устройств. В Opera, кроме стандартных способов навигации предусмотрены так называемые «жесты
мышью». На разных этапах развития в Opera были интегрированы возможности почтового/новостного
клиента Opera Mail, адресной книги, клиента сети BitTorrent, агрегатора RSS, клиента IRC, менеджера
закачек, WAP-браузера, а также поддержка виджетов — графические модулей, работающих вне окна
браузера.
Специальные редакции, Opera Mobile и Opera Mini, существенно опережают прочие браузеры по числу
установок на мобильные телефоны. Opera также единственный браузер для игровых систем Nintendo
DS и Wii. Движок Opera (Presto) лицензирован Adobe и интегрирован в пакет для веб-разработчиков
Adobe Creative Suite.
До 2005 года Opera распространялся в виде ad-ware, а с 2005 года версии Opera для ПК и устройств
мобильной связи (кроме Opera Mobile) доступны бесплатно.
Основы HTML
Язык разметки гипертекста
HTML (HyperText Markup Language) — язык разметки гипертекста, предназначенный для создания
веб-страниц.
Версии HTML
Перспективы
С 2004 г W3C разрабатывает HTML версии 5. Черновой вариант спецификации языка появился в
Интернете 20 ноября 2007 года. Параллельно ведётся работа по дальнейшему развитию HTML под
названием XHTML (англ. eXtensible Hypertext Markup Language — «расширяемый язык разметки
гипертекста»). Пока XHTML по своим возможностям сопоставим с HTML, однако предъявляет более
строгие требования к синтаксису. Как и HTML, XHTML является подмножеством языка SGML, однако
XHTML, в отличие от предшественника, основан на XML. Вариант XHTML 1.0 был одобрен в качестве
Рекомендации Консорциума всемирной паутины 26 января 2000 года.
Элементы гипертекста
Структура HTML-документа
DOCTYPE
Секция DOCTYPE указывает браузеру тип документа и версию использованного языка разметки. Здесь
также указывается название и область видимости описания этого языка и адрес файла dtd (document
type definition).
Примеры DOCTYPE:
Стандарт требует, чтобы секция DOCTYPE присутствовала в документе, т.к. это позволяет ускорить и
улучшить обработку гипертекста. Это достигается за счет того, что браузер может не делать
предположений о том, как интерпретировать теги, а свериться со стандартным определением (файлом
.dtd). Подробное описание DOCTYPE — на сайте Консорциума W3C.
Мета-теги
Мета-тег HTML — это элемент разметки html, описывающий свойства документа как такового
(метаданные). Назначение мета-тега определяется набором его атрибутов, которые задаются в теге
<meta>.
Теги
Тег (html-тег, тег разметки) — управляющая символьная последовательность, которая задает способ
отображения гипертекстовой информации.
HTML-тег состоит из имени, за которым может следовать необязательный список атрибутов. Весь тег
(вместе с атрибутами) заключается в угловые скобки <>:
<имя_тега [атрибуты]>
Как правило, теги являются парными и состоят из начального и конечного тегов, между которыми и
помещается информация. Имя конечного тега совпадает с именем начального, но перед именем
конечного тега ставится косая черта / (<html>...</html>). Конечные теги никогда не содержат атрибутов.
Некоторые теги не имеют конечного элемента, например тег <img>. Регистр символов для тегов не
имеет значения.
Теги могут быть вложены, при этом форматирование внутреннего тега имеет преимущество перед
внешним. При использовании вложенных тегов их нужно закрывать, начиная с самого последнего и
двигаясь к первому:
<!-- Список как пример использования вложенных тегов -->
<ol>
<li>Элемент списка</li>
<li>Второй элемент списка</li>
</ol>
<div>
<h2>Заголовок второго уровня</h2>
<p>и основной текст</p>
внутри логического блока
</div>
Примечание: Браузеры обычно лояльно относятся к отсутствию конечных тегов у парных элементов и
более-менее правильно отображают парные элементы уровня блока (p, li и т.п.), особенно в простых
веб-документах. Тем не менее, рекомендуется следить за наличием закрывающих тегов и использовать
их, чтобы избежать ошибок при воспроизведении документа.
Полный список тегов можно найти в документации на соответствующую версию языка HTML (см.,
например HTML 3.2, HTML 4.01, XHTML 1.1 и др.).
Атрибуты
Атрибуты — это пары вида «свойство = значение», уточняющие представление соответствующего тега:
<тег атрибут="значение">...</тег>
Атрибуты указывают в начальном теге, несколько атрибутов разделяют одним или несколькими
пробелами, табуляцией или символами конца строки. Значение атрибута, если таковое имеется, следует
за знаком равенства, стоящим после имени атрибута. Порядок записи атрибутов в теге не важен. Если
значение атрибута — одно слово или число, то его можно просто указать после знака равенства, не
выделяя дополнительно. Все остальные значения необходимо заключать в кавычки, особенно если они
содержат несколько разделенных пробелами слов.
Гиперссылки
Гиперссылка - это особым образом помеченный фрагмент веб-страницы (текст, изображение и др.),
который связан с другим документом. Для указания гиперссылок используется тег <a>. Гиперссылки
позволяют перемещаться между связанными веб-страницами.
<a href="http://example.com/">Пример</a>
<a href="ftp://example.com/archive.tar.gz">Скачать файл</a>
<a href="mailto://[email protected]" title="Обратная связь">[email protected]</a>
Переход по ссылкам можно выполнять как на целые документы, так и на специальным образом
помеченные (именованные) фрагменты текста:
<a name="якорь">Привязка к фрагменту текста</a>
<a href="#якорь">Ссылка на якорь</a>
Абсолютные ссылки указывают, как правило, на внешний ресурс. Для них нужно указывать полный
путь:
<a href="http://example.com/page.html">Абсолютная ссылка</a>
<a href="http://example.com/images/figure1.gif">Ссылка на страницу в каталоге</a>
Относительные ссылки, напротив, используют для перехода на внутренние страницы сайта. Для них
нужно указывать путь относительно ссылающейся страницы:
<a href="/index.html">Ссылка на страницу в корневом каталоге</a>
<a href="page.html#seg1">Ссылка на фрагмент страницы в текущем каталоге</a>
Специальные символы
Кросс-браузерность
Гипертекстовые документы обрабатываются специальными приложениями, которые читают код
разметки и выводят документ в отформатированном виде. Такие приложения, называемые «браузерами»
(в терминах спецификации HTML - «пользовательскими агентами», USER-AGENT), обычно
предоставляют пользователю удобный интерфейс для запроса веб-страниц, их просмотра (и вывода на
иные внешние устройства) и, при необходимости, отправки введённых пользователем данных на сервер.
Наиболее популярными на сегодняшний день браузерами являются Internet Explorer, Mozilla Firefox,
Apple Safari, Google Chrome и Opera. Наряду с этими существует масса других браузеров, которые
используют их системные библиотеки (т.н. «движок») или работают на собственном коде.
Каскадные таблицы стилей используются создателями веб-страниц для задания цветов, шрифтов,
расположения и других аспектов представления веб-документа. Основной целью разработки CSS
являлось разделение содержимого (написанного на HTML или другом языке разметки) и оформления
документа (написанного на CSS). Это разделение может увеличить доступность документа,
предоставить большую гибкость и возможность управления его представлением, а также уменьшить
сложность и повторяемость в структурном содержимом. Кроме того, CSS позволяет представлять один
и тот же документ в различных стилях или методах вывода, таких как экранное представление, печать,
чтение голосом (специальным голосовым браузером или программой чтения с экрана), или при выводе
устройствами, использующими шрифт Брайля.
Введение в CSS
Стиль — это совокупность правил, применяемых к элементу гипертекста и определяющих способ его
отображения. Стиль включает все типы элементов дизайна: шрифт, фон, текст, цвета ссылок, поля и
расположение объектов на странице.
Использование каскадных таблиц дает возможность разделить содержимое и его представление и гибко
управлять отображением гипертекстовых документов путем изменения стилей.
Селектор (Selector). Селектор — это элемент, к которому будут применяться назначаемые стили.
Это может быть тег, класс или идентификатор объекта гипертекстового документа.
Свойство (Property). Свойство определяет одну или несколько характеристик селектора. Свойства
задают формат отображения селектора: отступы, шрифты, выравнивание, размеры и т.д.
Значение (Value). Значения — это фактические числовые или строковые константы,
определяющие свойство селектора.
Описание (Declaration). Совокупность свойств и их значений.
Правило (Rule). Полное описание стиля (селектор + описание).
Таким образом, таблица стилей — это набор правил, задающих значения свойств селекторов,
перечисленных в этой таблице. Общий синтаксис описания правила выглядит так:
селектор[, селектор[, ...]] {свойство: значение;}
Правила CSS
Итак, каскадная таблица стилей — это набор правил форматирования тегов HTML. Приведем несколько
примеров написания таких правил:
1. Основной текст с выравниванием по ширине, абзацный отступ 30px, гарнитура (шрифт) — Serif,
кегль (размер шрифта) — 14px:
p {
text-align: justify;
text-indent: 30px;
font-family: Serif;
font-size: 14px;
}
li a {text-decoration: none;}
5. Внутренние отступы слева и справа для блоков (<div>), заголовков таблиц и ячеек таблиц
установить в 10px и залить фон желтым цветом:
div, th, td {
padding-left: 10px;
padding-right: 10px;
background-color: yellow;
}
6. Все ссылки в документе отображать черным цветом и полужирным шрифтом, а в основном тексте
и списках — обычным, а также выделять их зеленым цветом и подчеркивать только при
наведении курсора (в описании правил использован псевдоэлемент a:hover).
a {color: black; font-weight: bold;}
p a, li a {font-weight: normal; text-decoration: none;}
p a:hover, li a:hover {
color: #00FF00; text-decoration: underline;
}
Классы
Стандарт CSS представляет возможности создания именованных стилей — стилевых классов. Это
позволяет ответить на такой, например, вопрос: Как применить разные стили к одному и тому же
селектору?
Предположим, что в документе вам нужны два различных вида основного текста — один без отступа,
второй — с левым отступом и шрифтом красного цвета. Для этого нужно создать правила для каждого
из них, например так:
p {margin-left: 0;}
p.warn {margin-left: 40px; color: #FF00;}
Для применения созданного класса его имя нужно указать в атрибуте class для выбранных абзацев:
<p class=”warn”>Красный текст с отступом слева</p>
селектор.имя_класса {описание}
При создании класса селектор можно не указывать, тогда это правило можно применять к любому
селектору, поддерживающему тот же набор свойств.
Правило:
.solid_blue {color: blue;}
Использование:
Правило:
Использование:
Идентификаторы
В качестве селектора может выступать идентификатор элемента гипертекста, указанный в атрибуте id.
Для назначения стилей таким элементам используется синтаксис, аналогичный описанию классов, но
вместо точки ставится знак # (“решетка”). Например:
div#content {
position: absolute;
top: 10px;
left: 10%;
right: 10%;
border: solid 1px silver;
}
...
<div id="content">Текст</div>
Следует помнить, что идентификаторы элементов должны быть уникальны в пределах документа.
Группировка свойств
Группировка (grouping) состоит в объединении значений родственных свойств. При этом таблица стилей
становится более компактной, но предъявляются более жесткие требования к описанию правил. Ниже
приведен пример обычного стиля, задающего отступы:
div {
margin-left: 10px;
margin-top: 5px;
margin-right: 40px;
margin-bottom: 15px;
}
div {margin: 5px 40px 15px 10px;} /*порядок: top right bottom left*/
Группировка может применяться для таких свойств, как padding, font, border, background и еще
некоторых (см. документацию CSS)
Использование в веб-страницах
Существует три способа применения таблицы стилей к документу HTML:
Встраивание (Inline). Этот метод позволяет применить стиль к заданному тегу HTML.
Встроенные стили
Пример:
Встроенные стили полезны, когда необходима тонкая настройка отображения некоторого элемента
страницы или небольшой веб-страницы.
Внедренные стили
Внедренные стили используют тег <style>, который обычно размещают в заголовке HTML-документа
(<head>...</head>):
<html>
<head>
...
<style>
правила CSS
</style>
...
</head>
<body>
...
Связанные (linked), или внешние (external) таблицы стилей — наиболее удобное решение, когда речь
идет об оформлении целого сайта. Описание правил помещается в отдельный файл (обычно, но не
обязательно, с расширением .css). С помощью тега <link> выполняется связывание этой таблицы стилей
с каждой страницей, где ее необходимо применить, например так:
<link rel=stylesheet href="sample.css" type="text/css">
Любая страница, содержащая такую связь, будет оформлена в соответствии со стилями, указанными в
файле sample.css. Следует отметить, что файл со стилями физически может находиться на другом
веб-сервере, тогда в href нужно указать абсолютный путь к нему.
Проблемы с браузерами
Обязательно просматривайте страницы с таблицами стилей в различных браузерах. Это связано с тем,
что разные браузеры могут по разному интерпретировать одно и то же правило, а некоторые свойства
и/или значения и вовсе не поддерживать. Следует также тестировать страницы с отключенными
стилями (например, в текстовых браузерах), чтобы убедиться, что страница читабельна.
И снова каскадирование
Если вам нужна сотня-другая-третья страниц HTML — используйте внешнюю, глобальную, таблицу
стилей. Если некоторые из этих страниц требуют корректировки общего оформления — используйте
внедренный стиль. А если на странице нужно явно изменить оформление одного-двух элементов, то
применяйте встроенные стили. Именно в таком порядке происходит перекрытие стилей при
каскадировании, схематично это можно представить так: связанные стили -> внедренные стили ->
встроенные стили
Аппаратно-зависимые стили
Таблицы стилей могут применяться для управления отображением содержимого в зависимости от
используемого устройства вывода (монитор, проектор, устройство печати, звуковой синтезатор и т.п.).
Для этого в описание стилей включить тип устройства, например так:
@media print {/* печатающее устройство */
BODY { font-size: 10pt; }
}
@media screen { /* монитор */
BODY { font-size: 12pt; }
}
Как видно из примера, вся таблица разбивается на секции, каждая из которых начинается со слова
@media, за которым следует название класса устройств и далее, в фигурных скобках, непосредственно
описание стилей.
Можно разделить таблицы стилей иначе, указав тип устройства в теге <link>:
<link rel=stylesheet href="sample.css" type="text/css" media=”screen”>
Свойства CSS
В табл.1 перечислены некоторые часто используемые свойства CSS и их назначение.
Позиционирование элементов
Рассмотрим пример, приведенный в Листинге 4 из ЛР №1. В этом примере фрагменты содержимого
размещены в блочных элементах <div>, для которых переопределены стили свойств, определяющих
положение на странице. Если отключить эти стили, то вид страницы сильно изменится (рис. 2).
Такое влияние на внешний вид оказывает свойство position. Это свойство в сочетании со свойствами
left, top, right, bottom, display, clear и ряда других позволяет управлять положением элементов на
странице и порядком их вывода. Свойство position может принимать такие значения:
Протокол HTTP
Стр. 23 из 63 25.05.2011 10:15
Веб-программирование. Конспект лекций http://4stud.asoiu/web-programming/lectures.php
Основным объектом манипуляции в HTTP является ресурс, на который указывает URI (Uniform
Resource Identifier – уникальный идентификатор ресурса) в запросе клиента. Основными ресурсами
являются хранящиеся на сервере файлы, но ими могут быть и другие логические (напр. каталог на
сервере) или абстрактные объекты (напр. ISBN). Протокол HTTP позволяет указать способ
представления (кодирования) одного и того же ресурса по различным параметрам: mime-типу, языку
и т. д. Благодаря этой возможности клиент и веб-сервер могут обмениваться двоичными данными, хотя
данный протокол является текстовым.
Структура протокола
Структура протокола определяет, что каждое HTTP-сообщение состоит из трёх частей (рис. 1), которые
передаются в следующем порядке:
Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так:
Пример запроса:
Например, на предыдущий наш запрос клиентом данной страницы сервер ответил строкой:
HTTP/1.1 200 Ok
Методы протокола
Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и
разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой
короткое английское слово, записанное заглавными буквами (Табл. 1). Названия метода чувствительны к
регистру.
Используется для запроса содержимого указанного ресурса. С помощью метода GET можно
также начать какой-либо процесс. В этом случае в тело ответного сообщения следует
включить информацию о ходе выполнения процесса. Клиент может передавать параметры
выполнения запроса в URI целевого ресурса после символа «?»: GET
/path/resource?param1=value1¶m2=value2 HTTP/1.1
Кроме обычного метода GET, различают ещё условный GET и частичный GET. Условные
запросы GET содержат заголовки If-Modified-Since, If-Match, If-Range и подобные.
Частичные GET содержат в запросе Range. Порядок выполнения подобных запросов
Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело.
Запрос HEAD обычно применяется для извлечения метаданных, проверки наличия ресурса
HEAD (валидация URL) и чтобы узнать, не изменился ли он с момента последнего обращения.
При результатах выполнения 200 (Ok) и 204 (No Content) в тело ответа следует включить
сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует
вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.
Каждый
TRACE сервер обязан поддерживать
Возвращает как минимум
полученный запрос так, чтометоды
клиент GET и HEAD.
может увидеть,Если
что сервер не распознал
промежуточные сервера
указанный клиентом
добавляютметод, то он должен
или изменяют вернуть статус 501 (Not Implemented). Если серверу метод
в запросе.
Коды состояния
Код состояния информирует клиента о результатах выполнения запроса и определяет его дальнейшее
поведение. Набор кодов состояния является стандартом, и все они описаны в соответствующих
документах RFC.
Каждый код представляется целым трехзначным числом. Первая цифра указывает на класс состояния,
последующие - порядковый номер состояния (рис 1.). За кодом ответа обычно следует краткое описание
на английском языке.
Введение новых кодов должно производиться только после согласования с IETF. Клиент может не знать
все коды состояния, но он обязан отреагировать в соответствии с классом кода.
Применяемые в настоящее время классы кодов состояния и некоторые примеры ответов сервера
приведены в табл. 2.
Коды статуса класса 3xx сообщают клиенту, что для успешного выполнения
операции нужно произвести следующий запрос к другому URI. В большинстве
случаев новый адрес указывается в поле Location заголовка. Клиент в этом случае
должен, как правило, произвести автоматический переход (жарг. «редирект»).
Класс кодов 4xx предназначен для указания ошибок со стороны клиента. При
использовании всех методов, кроме HEAD, сервер должен вернуть в теле
сообщения гипертекстовое пояснение для пользователя.
Коды 5xx выделены под случаи неудачного выполнения операции по вине сервера.
5xx Server Error Для всех ситуаций, кроме использования метода HEAD, сервер должен включать в
(Ошибка сервера) тело сообщения объяснение, которое клиент отобразит пользователю.
Заголовки HTTP
Заголовок HTTP (HTTP Header) — это строка в HTTP-сообщении, содержащая разделённую
двоеточием пару вида «параметр-значение». Формат заголовка соответствует общему формату
заголовков текстовых сетевых сообщений ARPA (RFC 822). Как правило, браузер и веб-сервер
включают в сообщения более чем по одному заголовку. Заголовки должны отправляться раньше тела
сообщения и отделяться от него хотя бы одной пустой строкой (CRLF).
Название параметра должно состоять минимум из одного печатного символа (ASCII-коды от 33 до 126).
После названия сразу должен следовать символ двоеточия. Значение может содержать любые символы
ASCII, кроме перевода строки (CR, код 10) и возврата каретки (LF, код 13).
200 OK
Сущности (entity, в переводах также встречается название "объект") — это полезная информация,
передаваемая в запросе или ответе. Сущность состоит из метаинформации (заголовки) и
непосредственно содержания (тело сообщения).
В отдельный класс заголовки сущности выделены, чтобы не путать их с заголовками запроса или
заголовками ответа при передаче множественного содержимого (multipart/*). Заголовки запроса и
ответа, как и основные заголовки, описывают всё сообщение в целом и размещаются только в
начальном блоке заголовков, в то время как заголовки сущности характеризуют содержимое каждой
части в отдельности, располагаясь непосредственно перед её телом.
Тело сообщения
Тело HTTP сообщения (message-body), если оно присутствует, используется для передачи сущности,
связанной с запросом или ответом. Тело сообщения (message-body) отличается от тела сущности
(entity-body) только в том случае, когда при передаче применяется кодирование, указанное в заголовке
Transfer-Encoding. В остальных случаях тело сообщения идентично телу сущности.
Присутствие тела сообщения в запросе отмечается добавлением к заголовкам запроса поля заголовка
Content-Length или Transfer-Encoding. Тело сообщения (message-body) может быть добавлено в запрос
только когда метод запроса допускает тело объекта (entity-body).
Все ответы содержат тело сообщения, возможно нулевой длины, кроме ответов на запрос методом
HEAD и ответов с кодами статуса 1xx (Информационные), 204 (Нет содержимого, No Content), и 304
Контрольные вопросы
1. В каком случае клиент получит от сервера ответ с кодом 418?
DHTML дает возможность создавать элементы Web-страниц (типа текста и графики) интерактивными и
динамическими. При этом Web-страницы DHTML загружаются просто мгновенно.
Теперь в распоряжении Web-дизайнеров есть целая куча новых интерактивных эффектов, включая
возможности организации текста и графики в виде презентаций типа телевизионных заставок.
Эффекты DHTML создаются с помощью трех технологий: HTML, каскадных таблиц стилей и
сценариев.
Хотя все эти технологии существовали уже долгое время, сейчас они используются вместе и
предоставляют дизайнерам возможности создания Web-страниц, которые выглядят и работают лучше,
чем когда-либо прежде.
Самое главное - это научиться мыслить динамически!
Кроме того, существуют эффекты изменения внешнего вида текста и графики на странице - называемые
"фильтры". Фактические возможности фильтров определяются компонентами Web-броузера.
Создание сценариев
С помощью CSS каждый элемент Web-страницы можно не только точно установить в определенное
место, но также сделать доступным для применения специальных операций и задания нужных свойств.
Эти свойства управляются с помощи сценариев (scripts). Сценарий делает элементы Web-страницы
динамическими - кнопки "нажимаются", текст появляется и исчезает, а изображения просто летают по
экрану.
DHTML можно реализовывать с помощью двух языков сценариев: VBScript (Visual Basic Scripting ) и
JavaScript. Visual Basic Scripting и является упрощенной версией языка программирования Microsoft
Visual Basic. JavaScript - это версия языка программирования Java (от фирмы Sun Microsystems) для
создания сценариев.
Совет
Хотя для создания DHTML можно использовать любой язык сценариев, JavaScript все же является
наиболее многосторонним, так как сейчас он поддерживается броузерами и от Microsoft, и от Netscape.
Кроме того, синтаксис JavaScript аналогичен синтаксису языков Java и C++, которые знакомы многим
Web-разработчикам. Microsoft и Netscape поддерживают JavaScript, но они находятся на различных
стадиях реализации.
Будьте осторожны при работе с DHTML на разных платформах. Если вы создаете страницы для
определенного броузера, как при разработках для корпоративной сети, выбор становится вопросом
личных вкусов.
Некоторые Web-разработчики используют комбинацию JavaScript и VBScript, чтобы сделать свои узлы
динамическими.
Написание сценариев требует больших усилий, чем создание обычного кода HTML. С другой стороны,
работа с сценариями совсем не так сложна, как реальный язык программирования, так как в этом случае
не выполняется компиляция.
Ядро JavaScript может быть расширено путём предоставления дополнительных объектов; например:
Клиентский JavaScript расширяет ядро языка за счёт объектов, управляющих браузером (Navigator
или другой подобный web-браузер) и его Document Object Model (DOM). Например, клиентские
расширения позволяют приложению размещать элементы на HTML-форме и отвечать на
пользовательские события, такие как щелчок мышью, ввод данных в форму и навигация по
страницам.
Серверный JavaScript расширяет ядро языка за счёт объектов, имеющих отношение к работе
JavaScript на сервере. Например, серверные расширения позволяют подключиться к реляционной
БД, поддерживать непрерывность информации между вызовами приложения или работать с
файлами на сервере.
JavaScript даёт Вам возможность создавать приложения, работающие в Internet. Клиентские приложения
работают в браузере, таком как Netscape Navigator, а серверные приложения запускаются на сервере,
таком как Netscape Enterprise Server. Используя JavaScript, Вы можете создавать динамические
HTML-страницы, которые обрабатывают пользовательский ввод и работают с данными через
использование специальных объектов, файлов и реляционных баз данных.
Ядро JavaScript
Ключевые слова
Синтаксис и грамматику операторов
Требования к выражениям, переменным и литералам
Объектную модель (хотя клиентский и серверный JavaScript имеют разные наборы
предопределённых объектов)
Предопределённые объекты и функции, такие как Array, Date и Math
Клиентский JavaScript
Web-браузеры, такие как Navigator (2.0 и более поздние версии), могут интерпретировать операторы
клиентского JavaScript, внедрённые в HTML-страницу. Если браузер (или клиент) запрашивает такую
страницу, сервер высылает полное содержимое документа, включая HTML и операторы JavaScript,
клиенту по сети. Браузер читает страницу сверху вниз, отображая результирующий HTML и выполняя
операторы JavaScript по мере из обнаружения. Этот процесс, показанный на следующем рисунке,
выдает пользователю конечный результат.
Разные версии JavaScript работают с конкретными версиями Navigator'а. Например, JavaScript 1.2
предназначен для Navigator 4.0. Некоторые возможности JavaScript 1.2 недоступны в JavaScript 1.1 и,
следовательно, недоступны в Navigator 3.0. О версиях JavaScript и Navigator Серверный JavaScript
На первом этапе, показанном на Рисунке 1.3, Вы создаёте HTML-страницы (которые могут содержать
операторы клиентского и серверного JavaScript) и JavaScript-файлы. Затем Вы компилируете все эти
файлы в единый исполняемый файл.
В отличие от стандартных программ Common Gateway Interface (CGI), весь исходный JavaScript
интегрируется непосредственно в HTML-страницы, ускоряя разработку и облегчая обслуживание.
Служба Session Management Service серверного JavaScript содержит объекты, которые Вы можете
использовать для обслуживания данных, существующих в промежутке между клиентскими запросами,
JavaScript и Java
JavaScript и Java похожи, но имеют фундаментальные отличия. Язык JavaScript напоминает Java, но не
имеет статической типизации и строгой проверки типов Java. JavaScript в основном поддерживает
синтаксис выражений Java и базовые конструкции управления потоком.
JavaScript намного более свободен по форме по сравнению с Java. Вы не должны объявлять все
переменные, классы и методы. Вы не должны учитывать, какие методы являются public, private или
protected и Вы не должны реализовывать интерфейсы. Возвращаемые значения переменных,
параметров и функций не являются явно типизированными.
Java это язык программирования на основе классов, созданный для быстрого выполнения и строгой
проверки типов. Строгая проверка типов означает, к примеру, что Вы не можете привести/cast целое
число Java к ссылке на объект или получить доступ к private-памяти, нарушив байт-коды Java. Модель
классов Java означает, что программы состоят исключительно из классов и их методов. Наследование
классов Java и строгая типизация обычно требуют плотно выстроенной иерархии объектов. Эти
требования делают программирование на Java более сложным, чем авторизация в JavaScript.
JavaScript по духу происходит от небольших, динамически типизируемых языков, таких как HyperTalk и
dBASE. Эти языки программирования являются утилитами программирования для широкой аудитории,
так как имеют упрощённый синтаксис, специализированную встроенную функциональность и
минимальные требования при создании объектов.
JavaScript Java
объекту. динамически.
Тип данных переменной не объявляется Тип данных переменной обязан быть объявлен
(динамическая типизация). (статическая типизация).
Отладка в JavaScript
JavaScript позволяет создавать сложные компьютерные программы. Как и в других языках, Вы можете
ошибаться при написании скриптов. Отладчик Netscape JavaScript Debugger позволяет отлаживать Ваши
скрипты. Об использовании Отладчика/Debugger см. следующие документы:
Вы можете загрузить Debugger с указанного URL. Загружаемый файл это SmartUpdate .jar. Для
установки Debugger загрузите этот .jar-файл в Navigator: используйте процедуру, описанную в
вышеуказанном URL, или введите URL к .jar-файлу в поле location (адресную строку).
Getting Started with Netscape JavaScript Debugger объясняет, как пользоваться Отладчиком.
Visual JavaScript
Netscape Visual JavaScript это утилита визуальной разработки на базе компонентов для платформы
Netscape Open Network Environment (ONE). Она предназначена в основном для использования
разработчиками, которые хотят создавать платформонезависимые web-приложения на основе
стандартов из готовых к использованию компонентов с минимальными затратами на
программирование. Эти приложения основаны на HTML, JavaScript и Java.
Одновременно Netscape работает совместно с ECMA (European Computer Manufacturers Association) над
созданием стандартизованного международного языка программирования на основе ядра JavaScript.
ECMA это международная ассоциация стандартов для информационных и коммуникационных систем.
эта стандартизованная версия JavaScript, называемая ECMAScript, работает совершенно одинаково во
всех приложениях, поддерживающих данный стандарт. Компании могут использовать этот открытый
стандартный язык для разработки своих реализаций JavaScript. Первая версия стандарта ECMA
документирована в спецификации ECMA-262.
Стандарт ECMA-262 одобрен также ISO (International Organization for Standards) как ISO-16262. Вы
можете найти PDF-версию ECMA-262 на сайте Netscape DevEdge Online. Вы можете также найти эту
спецификацию на web-сайте ECMA. Спецификация ECMA не описывает Document Object Model
(DOM), которая стандартизована консорциумом World Wide Web Consortium (W3C). DOM определяет
способ, которым HTML-объекты документа экспонируются Вашему скрипту.
Версия
Сравнение с версией ECMA
JavaScript
В JavaScript 1.3 устранено несоответствие JavaScript 1.2 с ECMA-262 при сохранении всех
дополнительных возможностей JavaScript 1.2, исключая == и !=, которые были изменены
JavaScript 1.3 для обеспечения соответствия ECMA-262. Эти дополнительные возможности, включая
некоторые новые из JavaScript 1.3, не являющиеся частью ECMA, рассматриваются при
создании второй версии спецификации ECMA.
ECMA-262. Вторая версия спецификации ECMA не была закончена, когда JavaScript 1.3
был опубликован.
В книге Клиентский JavaScript. Справочник. указано, какие возможности языка совместимы с ECMA.
JavaScript всегда будет иметь возможности, не являющиеся частью спецификации ECMA; JavaScript
совместим с ECMA, предоставляя дополнительные возможности.
Спецификация ECMA это набор требований по реализации ECMAScript; она может использоваться,
если Вы хотите определить, поддерживается ли возможность JavaScript в ECMA. Если Вы планируете
писать JavaScript-код, который использует только поддерживаемые ECMA возможности, Вам
понадобится просмотреть спецификацию ECMA.
Документ ECMA не предназначен для помощи программистам скриптов; о написании скриптов см.
документацию JavaScript.
Среди недостатков — трудности при отладке ISAPI-приложений. Незамеченная ошибка может привести
NSAPI
NSAPI (Netscape Server API) — это спецификация серверных расширений компании Netscape,
разработанная для их же веб-сервера. Со снижением доли Netscape на рынке веб-серверов актуальность
технологии снизилась, а в последствии компания и вовсе приняла и стала использовать спецификацию
Microsoft ISAPI в своих веб-ориентированных разработках.
Для статического подключения модулей Apache должен быть скомпилирован вместе с кодом нужных
модулей. Динамически подключаемые модули добавляют свою функциональность при их загрузке во
время запуска/перезапуска веб-сервера. Для динамического подключения модуль должен быть
представлен в виде DSO (Dynamic Shared Object, Динамический Разделяемый Объект). Для поддержки
DSO Apache использует опять же модуль, mod_so, который загружает модули в виде разделяемых
библиотек или разделяемых файлов. Способ загрузки DSO указывается в конфигурационном файле
веб-сервера Apache (httpd.conf) соответствующими директивами:
Где filename — абсолютный путь к файл[у|ам] или относительный путь от корня веб-сервера
(ServerRoot). Пример:
LoadFile libexec/libxmlparse.so
Модули взаимодействуют с сервером Apache через единый интерфейс. Они регистрируют свои
обработчики в ядре Apache или в других модулях. Ядро Apache обращается к этим обработчикам когда
это требуется. С другой стороны, модули могут обращаться к функциям и структурам данных ядра
через Apache API. Это может потребоваться, например, при передаче данных или выделении памяти.
Модуль Apache прозрачен для пользователя, т.е. не является конечной точкой клиентского запроса, чем
напоминает ISAPI-фильтр. Модуль может представлять функции обработки программных прерываний
(handlers for hooks), связывания директив конфигурации, фильтрации запроса и дополнительные
функции.
к фактическому виду:
http://example.com/news.php?date=20090503
Это далеко не полный перечень модулей Apache, но даже он позволяет дать представление о гибкости
этого самого распространенного веб-сервера.
Словари, основанные на XML (например, RDF, RSS, MathML, XHTML, SVG), сами по себе формально
описаны на том же XML, что позволяет программно изменять и проверять документы на основе этих
словарей, не зная их семантики, то есть не зная смыслового значения элементов. Важной особенностью
XML также является применение так называемых пространств имён (англ. namespace).
Годом рождения XML можно считать 1996 год, в конце которого появился черновой вариант
спецификации языка, или 1998 года, когда эта спецификация была утверждена. А началось всё с
появления в 1986 году языка SGML (англ. Standard Generalized Markup Language — стандартный
обобщённый язык разметки) - гибкого и всеохватывающего мета-языка для создания языков разметки.
Этот язык настолько универсален, что включает такие возможности, которые крайне редко
используются. Ценой универсальности является сложность и, как следствие, дороговизна применения
языка в практических разработках. В итоге большинство возможностей SGML попросту
невостребованны.
Однако SGML нашел свое применение в качестве основы для создания других языков разметки, в
частности HTML - не в пример более простого и легкого в освоении языка. Но, по мере роста
количества и изменения качества документов в Сети, росли и предъявляемые к ним требования, и
простота HTML превратилась в его главный недостаток. Ограниченность количества тегов и полное
безразличие к структуре документа побудили разработчиков в лице консорциума W3C к созданию
такого языка разметки, который был бы не столь сложен, как SGML, и не настолько примитивен, как
HTML. В результате на свет появился язык XML, сочетающий в себе простоту HTML, логику SGML и
удовлетворяющий требованиям Интернета.
XML (eXtensible Markup Language) — это упрощенный диалект языка SGML, предназначенный для
описания иерархических структур данных в World Wide Web. Он разрабатывается рабочей группой
W3C с 1996 г.; в настоящее время принятой рекомендацией является вторая редакция языка XML 1.0
(октябрь 2000 г.), на которую и ориентируется дальнейшее изложение.
XML, несомненно, входит в обойму наиболее перспективных технологий WWW, чем объясняется
интерес, который уделяется ему и корпорациями-разработчиками, и широкой публикой. Прежде чем
перейти к его описанию, представляется уместным обсудить причины его появления и последующего
бурного развития. Попытаемся для этого взглянуть на те проблемы WWW, которые должны быть
решены средствами нового поколения Веб-технологий.
XML — это попытка решить перечисленные проблемы путем создания простого языка разметки,
описывающего произвольные структурированные данные. Точнее говоря, это метаязык, на котором
пишутся специализированные языки, описывающие данные определенной структуры. Такие языки
называются XML-словарями. В отличие от HTML, XML не содержит никаких указаний на то, как
описанные в XML-документе данные должны отображаться. Способ отображения данных для
различных устройств задается языком описания стилей XSL, который играет для XML примерно ту же
роль, что CSS дл HTML. Другое принципиальное его отличие от HTML состоит в том, что XML может
содержать любые теги, которые сочтут нужным использовать создатели XML-словаря. Приведем список
лишь нескольких специализированных языков на базе XML, которые сегодня находятся в разных
стадиях разработки рабочими группами W3C:
Применения XML
Структура XML-документа
Элементы и атрибуты
XML — это теговый язык разметки документов. Иными словами, любой документ на языке XML
представляет собой набор элементов, причем начало и конец каждого элемента обозначается
специальными пометками, называемыми тегами.
Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это текст,
заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но
начинается с косой черты "/". Пример XML-элемента:
<author>Сергей Довлатов</author>
Имена элементов зависят от регистра, т. е. <author>, <Author> и <AUTHOR> — это имена различных
элементов. Наличие закрывающего тега всегда обязательно. Если тег является пустым, т. е. не имеет
содержимого и закрывающего тега, то он имеет специальную форму:
<элемент/>
Аттрибут обязан иметь значение, которое всегда должно быть заключено в одинарные или двойные
кавычки. Имена атрибутов также зависят от регистра. Пример элемента, имеющего атрибут:
<author country="USA">Сергей Довлатов</author>
Элементы должны либо следовать друг за другом, либо быть вложены один в другой:
<books>
<book isbn="5887821192">
<title>Часть речи</title>
<author>Бродский, Иосиф</author>
<present/>
</book>
<book isbn="0345374827">
<title>Марш одиноких</title>
<author>Довлатов, Сергей</author>
<present/>
</book>
</books>
Здесь элемент books (книги) содержит два вложенных элемента book (книга), которые, в свою очередь,
имеют атрибут isbn и содержат три последовательных элемента: title (название), author (автор) и
present (есть в наличии), причем последний пуст, т. к. в данном случае соответствует логическому
флажку.
Из приведенного описания видно, что синтаксис XML напоминает синтаксис HTML (что естественно,
т. к. оба они являются диалектами одного языка SGML), но требования к оформлению правильных
XML-документов выше. Еще одним очень важным отличием XML от HTML является то, что
содержимое элементов, т. е. все, что содержится между начальным и конечным тегами, считается
данными. Это означает, что XML не игнорирует символы пробела и разрыва строк, как это делает
HTML.
<?xml version="1.0"?>
<books>
<book isbn="0345374827">
<title>Марш одиноких</title>
<author>Довлатов, Сергей</author>
<present/> </book>
</books>
В этом примере пролог сводится к единственной директиве (первая строка документа), указывающей
версию XML. За ней следует XML-элемент с уникальным именем, который содержит в себе все
остальные элементы и называется корневым. Директива (processing instruction) — это выражение,
заключенное в специальные теги "<?" и "?>", которое содержит указания программе, обрабатывающей
XML-документ.
Стандарт XML резервирует только одну директиву <?xml version="1.0"?>, указывающую на версию
языка XML, которой соответствует данный документ (второй версии XML пока нет). В
действительности, эта директива несколько богаче и в самом общем виде выглядит так:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
Здесь атрибут encoding задает кодировку символов документа. По умолчанию считается, что
XML-документы должны создаваться в формате UTF-8 или UTF-16. Если же используется какая-либо
другая кодировка символов, то ее название согласно Таблицы П7.1 должно быть указано в данном
атрибуте, как показано в примере. Атрибут standalone говорит о том, содержит ли данный документ
внешние разделы. Значение yes означает, что таких разделов нет, значение no — что они есть.
Комментарии
Пример комментариев:
Имена и данные
Все имена элементов, атрибутов и разделов должны начинаться с буквы Unicode и состоять из букв,
цифр, символов точки (.), подчеркивания (_) и дефиса (-). Единственное ограничение состоит в том, что
они не должны начинаться с комбинации букв xml в любом регистре; подобные имена зарезервированы
для будущих расширений языка. Существенно, что стандарт допускает использование в именах не
только английских букв, но и любых других, хотя существующие XML-процессоры часто ограничены
теми системами кодировок, которые в них заложены создателями. Поэтому мы в своих примерах пишем
имена по-английски.
Данные, т. е. содержимое элементов и значения атрибутов, могут состоять из любых символов, кроме
перечисленных в следующем разделе.
Специальные символы
При желании можно пользоваться числовой кодировкой символов в стандарте Unicode. При этом
символ может быть задан своим десятичным кодом (&#код;) или шестнадцатеричным кодом (&#xкод;).
Например © представляет символ авторского права ©, а А – русскую букву А. Как мы
увидим в дальнейшем, XML гораздо богаче, чем HTML, в использовании подобных конструкций,
поскольку позволяет осуществлять подстановку в текст документов любых символьных выражений.
Секции CDATA
<layout>
<H1>Заголовок</H1>
</layout>
Подобная конструкция неверна, т. к. HTML-тег H1 будет в данном случае воспринят как тег XML. Для
того, чтобы все содержимое элемента layout воспринималось как данные, мы должны заключить его в
секцию CDATA:
<layout>
<![CDATA[<H1>Заголовок</H1>]]>
</layout>
Как мы видим из этого примера, секция CDATA заключается в ограничители <![CDATA[ и ]]>. Все
внутри этой секции считается символьными данными; в частности, секции CDATA не могут
вкладываться друг в друга.
Разделы и их декларации
Разделы XML-документа
Физически XML-документ может состоять из несколько разделов (entities). При этом корневой элемент
документа также является разделом, который называется разделом документа, хотя он никак
специально не оформлен. Все разделы имеют содержимое; все они, кроме раздела документа и внешней
DTD, имеют имя.
Внутренние разделы
Она включает в себя содержимое объекта (параметр значение) и используется для подстановки этого
значения вместо имени раздела. Мы можем, например, ввести в пример с книгами атрибут жанр и
использовать для задания жанра внутренние разделы:
<!DOCTYPE spec [ <!ENTITY pr "проза"> <!ENTITY po "поэзия">]>
<books>
<book genre="&po;">
<title>Часть речи</title>
<author>Бродский, Иосиф</author>
</book> <book genre="≺">
<title>Марш одиноких</title>
<author>Довлатов, Сергей</author>
</book>
</books>
Из этого примера видно, что ссылка на раздел (entity reference) выглядит точно так же, как ссылка на
специальный символ, т. е. имеет вид &имя;. На самом деле, специальные символы — это точно такие
же ссылки, но соответствующие разделы заданы неявно во внутренней декларации языка XML.
Подобные текстовые подстановки удобны для задания сокращений, позволяющих уменьшить объем
документа, и для введения обозначений для часто изменяемых полей документа. Так, например, мы
можем вынести во внутренний раздел дату очередной ревизии публикации и затем изменять только
значение этого раздела.
Внешние разделы
Первый вариант называется системным разделом, второй — публичным разделом. Они оба связывают
имя раздела с внешним ресурсом, заданным своим URI, который должен иметь кодированную форму и
не содержать закладок. URI внешнего ресурса называется системным идентификатором раздела.
Использование внешнего ресурса зависит от нескольких факторов:
Если декларация содержит параметр NDATA, задающий нотацию раздела, то раздел является
неанализируемым.
Если параметр NDATA не задан, то раздел анализируемый, и соответствующий ресурс должен
быть XML-документом. Это означает, что вместо ссылки на раздел в текст документа будет
включаться текст соответствующего ресурса.
Публичный раздел может содержать строку, задающую публичный идентификатор раздела.
XML-процессор может использовать этот идентификатор для генерации альтернативного URI
данного раздела. Если ему это не удалось, то он должен использовать системный идентификатор
для загрузки содержимого раздела.
Внешний анализируемый раздел должен начинаться с директивы <?xml …?>, которая может не содержать
номера версии, но обязана содержать кодировку символов. Эта директива не входит в состав
подставляемого текста.
Декларация типа XML-документа (document type declaration) содержит определение типа документа
(document type definition, DTD) или указывает на него. DTD — это специальная грамматика,
описывающая синтаксис определенного класса документов; правила создания DTD рассмотрены в гл.
8.2. Здесь же приводится только описание деклараций, которые обеспечивают доступ к DTD.
Декларация типа документа, как и декларация раздела, может быть внутренней или внешней.
Внутренняя декларация имеет вид:
<!DOCTYPE имя [ тело ]>
Таким образом, отличие декларации типа документа от декларации раздела состоит только в том, что:
Имя такой декларации должно совпадать с именем корневого элемента, который она описывает, а тело
должно соответствовать правилам построения DTD и будет описано в гл. 8.2. Пока отметим, что оно
может содержать декларации разделов. Примеры внешних деклараций:
<!DOCTYPE spec SYSTEM "xml/1998/06/xmlspec-v20.dtd">
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.0//EN"
"/XML/1998/06/xmlspec-v20.dtd">
Отметим, что внешняя декларация типа документа может содержать и ссылку на DTD, которая
называется внешним подмножеством DTD, и тело, которое описывает дополнения к внешней DTD (оно
Пример XML-документа
Чтобы собрать все описанные выше понятия в единое целое, приведем пример законченного
XML-документа, содержащего прейскурант книжного магазина.
<?xml version='1.0' encoding="windows-1251" standalone="yes"?>
<!DOCTYPE bookstore [
<!ENTITY po "поэзия">
<!ENTITY pr "проза">
<!ENTITY dr "драматургия"> ]>
<!-- Этот файл содержит фрагмент базы данных книжного магазина -->
<bookstore>
<book genre="≺">
<title>Марш обреченных</title>
<author>
<first-name>Сергей</first-name>
<last-name>Довлатов</last-name>
</author>
<price>60.00</price>
</book>
<book genre="&po;">
<title>Часть речи</title>
<author>
<first-name>Иосиф</first-name>
<last-name>Бродский</last-name>
</author>
<price>55.00</price>
</book>
<book genre="&dr;">
<title>Антигона</title>
<author>
<name>Софокл</name>
</author>
<price>103.50</price>
</book>
</bookstore>
[схабрено]
Небольшой (по историческим меркам) срок существования сервиса WWW показал его
востребованность все возрастающему числу пользователей. Это стало хорошим стимулом для развития
веб-ориентированных концепций и технологий, увеличивающих возможности пользователей. Массовое
внедрение и использование этих решений - причина качественных изменений во Всемирной паутине,
своего рода смена «версии» Web. На текущий момент аналитики Интернет выделяют три таких
«версии» — Web 1.0, Web 2.0 и Web 3.0 (стоит отметить, что деление это условное и часто
критикуемое).
Web 1.0
Понятие Web 1.0 — это общий термин, описывающий состояние Всемирной Паутины за первое
десятилетие ее существования. Для 90-х годов XX века были характерны низкая компьютерная
грамотность пользователей, медленные типы подключения и ограниченное число сервисов Интернет.
Веб-сайтам того времени были присущи следующие основные черты:
Гостевые книги, форумы или чаты — как инструменты обратной связи и придания
интерактивности.
Использование графических и текстовых информеров (погода, курс доллара и т.п.) для
агрегирования информации.
Условное окончание эпохи «Web 1.0» датируется 2001 годом, когда произошел обвал акций интернет-
компаний (об этом говорят так: «лопнул пузырь доткомов» (от англ. .com)). Собственно,
существовавшие сайты никуда не делись, но вот вновь создаваемые сайты все больше и больше
отличались от типичных «веб-один-нольных».
Web 2.0
Web 2.0 — совокупность веб-технологий, ориентированная на активное участие пользователей в
создании контента веб-сайтов.
Появление названия Web 2.0 принято связывать со статьёй Тима О’Рейли «What Is Web 2.0» от 30
Веб-сервисы
Веб-служба находится на серверах компании, которая её создала (рис. 1). Поэтому в любой
момент пользователю доступна самая свежая версия программы и ему не приходится заботиться
об обновлениях и вычислительных мощностях, требуемых для выполнения операции.
Инструменты для работы с HTTP и XML есть в любом современном языке программирования,
поэтому веб-службы являются платформонезависимыми.
AJAX
Веб-синдикация
Одновременное распространение информации в том числе аудио- и видео- на различные страницы или
web-сайты, как правило, с использованием технологий RSS или Atom. Принцип заключается в
распространении заголовков материалов и ссылки на них (например, последние сообщения форумов, и
т. п.). Первоначально эта технология использовалась на новостных ресурсах и в блогах, но постепенно
сфера применения расширилась.
Mash-up
Веб mash-up (дословный перевод — «смешение») — сервис, который полностью или частично
использует в качестве источников информации другие сервисы, предоставляя пользователю новую
функциональность для работы. В результате такой сервис может становиться также новым источником
информации для других веб mash-up сервисов. Таким образом образуется сеть зависимых друг от друга
сервисов, интегрированных друг с другом.
Например, сайт транспортной фирмы может использовать карты сервиса Google Maps для
отслеживания местонахождения перевозимого груза.
Метки (теги)
Ключевые слова, описывающие рассматриваемый объект, либо относящие его к какой-либо категории.
Это своего рода метки, которые присваиваются объекту, чтобы определить его место среди других
объектов. С понятием меток тесно связано понятие фолксономии — термина, о котором широко
заговорили именно в связи с ростом сервисов Веб 2.0, таких как Flickr, del.icio.us, и, в дальнейшем,
Wink.
Появление и быстрое распространение блогов тоже вписывается в концепцию Веб 2.0, создавая так
называемую «редактируемую Паутину» (writable web).
Возможность пометить документ ключевыми словами существует и в языке HTML (англ. keywords),
однако этот способ был полностью скомпрометирован широким его использованием в целях поискового
спама.
Социализация
Дизайн
Понятие Веб 2.0 также отразилось и в дизайне. Предпочтительными стали округлость, имитация
выпуклых поверхностей, имитация отражений на манер глянцевого пластика современных hi-end
устройств (к примеру, плееры). В целом, восприятие внешнего вида на глаз кажется более приятным.
Графика таких сайтов занимает больший объём, нежели при использовании аскетичного дизайна.
Отчасти эта тенденция связана с совпавшим по времени выходом новых версий операционных систем
использующих вышеупомянутые идеи.
Однако однообразие таких сайтов явно и в последнее время считается, графический облик
классического дизайна веб 2.0, устаревшим и не креативным. Особенно это отражается в современной
тенденции создания информативных сайтов, где главную роль играет простота, изящество, графичность
и юзабилити. В дизайне не должно быть ограничений, но веб 2.0 их прививает.
При использовании технологий web 2.0 вы становитесь арендатором сервиса и/или дискового
пространства у какой-то сторонней компании. Возникающая при этом зависимость формирует ряд
недостатков новых сервисов:
Фактически сайт эпохи Веб 2.0 на первый взгляд интерактивен и дружелюбен, позволяет себя легко
настраивать. Однако сбор статистики о пользователях, их предпочтениях и интересах, личной жизни,
карьере, круге друзей могут помочь владельцу сайта манипулировать сообществом. По самым
пессимистичным прогнозам многочисленные сайты Веб 2.0 вкупе с другими современными
технологиями дают прообраз тоталитарной системы «Большого брата».
Web 3.0
Web 3.0 — это принципиально новый подход к обработке информации, представленной во Всемирной
паутине. Web 3.0 в первую очередь подразумевает под собой иной подход к обработке информации
сообществом пользователей. Если Web 1.0 предполагает веб-мастера в качестве поставщика контента, а
Web 2.0 — сообщество равноправных пользователей, генерирующих контент в рамках тематического
проекта, то Web 3.0 уже позволяет этим самым равноправным пользователям "выбирать" экспертов в
заданной области (или в нескольких областях) и "наделять его властью". Такие общепризнанные
эксперты-выдвиженцы постепенно расширяют свое влияние на сообщество, могут выступать его
модераторами, управлять сообществом при помощи дополнительных прав и расширенных
возможностей в рамках интернет-проекта. Это исключает возможность управления сообществом
некомпетентных и малозначимых его участников, что является очень важным вещью — достаточно
вспомнить «вебдванольное» равноправие на проекте Wikipedia, из-за которого ее создатель должен был
более десятка раз исправлять свою собственную (!) биографию – пользователи считали, что в ней есть
неточности и честно ее исправляли.
Также термином Web 3.0 часто называют концепцию семантической паутины (Semantic Web).
Semantic Web
Семантическая паутина (англ. Semantic Web) — часть глобальной концепции развития сети Интернет,
целью которой является реализация возможности машинной обработки информации, доступной во
Всемирной паутине. Основной акцент концепции делается на работе с метаданными, однозначно
характеризующими свойства и содержание ресурсов Всемирной паутины, вместо используемого в
настоящее время текстового анализа документов. Термин впервые введён Тимом Бернерсом-Ли в мае
2001 года в журнале «Scientific American», и называется им «следующим шагом в развитии Всемирной
паутины». В семантической паутине предполагается повсеместное использование, во-первых,
унифицированных идентификаторов ресурсов (URI), а во-вторых — онтологий и языков описания
метаданных.
Эта концепция была принята и продвигается Консорциумом W3 (Рис. 2). Для её внедрения
предполагается создание сети документов, содержащих метаданные о ресурсах Всемирной паутины и
существующей параллельно с ними. Тогда как сами ресурсы предназначены для восприятия человеком,
метаданные используются машинами (поисковыми роботами и другими интеллектуальными агентами)
для проведения однозначных логических заключений о свойствах этих ресурсов.
Основная идея
Семантическая паутина — это надстройка над существующей Всемирной паутиной, которая призвана
сделать размещённую в ней информацию более понятной для компьютеров. Машинная обработка
возможна в семантической паутине благодаря двум её важнейшим характеристикам:
Критика
Практическая нереализуемость
Разные комментаторы высказывают различные причины, которые могут быть препятствием к этому,
начиная с человеческого фактора (люди склонны избегать работы по поддержке документов с
метаданными, открытыми остаются проблемы истинности метаданных, и т. д.), и заканчивая
сложностью определения онтологии верхнего уровня (корня иерархии), критической для семантической
паутины.
Дублирование информации
Необходимость описания метаданных так или иначе приводит к дублированию информации. Каждый
документ должен быть создан в двух экземплярах: размеченным для чтения людьми, а также в
машинно-ориентированном формате.
Реализация
Языки описания
Логический вывод
Особенно сильно это относится к языку OWL. Базовым формализмом для него являются
дескрипционные логики, а сам язык разбит на три вложенных подмножества (в порядке вложенности):
OWL Lite, OWL DL и OWL Full. Доказано, что логический вывод на метаданных с выразительностью
OWL Lite выполняется за полиномиальное время (другими словами, задача вывода принадлежит к
классу P). OWL DL описывает максимальное разрешимое в данный момент подмножество
дескрипционных логик, но некоторые запросы по таким данным могут требовать экспоненциального
времени выполнения. OWL Full реализует все существующие конструкторы дескрипционных логик, но
не каждый запрос в этом подмножестве языка может быть разрешён (слово «разрешён» здесь
употребляется в значении, основанном на корне «решать»).
Простая структура предикатов языка RDF, в свою очередь, позволяет использовать при его обработке
опыт из теорий логических баз данных, логики предикатов, и т. д.
Проекты
Дублинское ядро
Версии 0.90 и 1.0 формата RSS основаны на RDF. Информация в нём представляется как и в RDF,
тройками субъект-отношение-объект. Необходимо отметить, что несмотря на то, что ему присущи
многие недостатки семантической паутины (дублирование информации, например), этот простейший
формат быстро стал чрезвычайно популярным за счёт узкой категоризации подмножества используемых
метаданных. Отличие RSS от RDF состоит в том, что субъектом тройки всегда является сайт-источник
RSS-файла, а в качестве отношений используются самые очевидные свойства документов, имеющие
отношение к часто обновляющимся источникам информации: дата написания, автор, постоянная
ссылка, и т. д. Другими словами, RSS — узкоспециализированное подмножество RDF.
Заметим, что формат RSS версии 2.0, хотя и не является форматом, основанным на RDF, позволяет
внедрение произвольного XML-содержимого, находящегося в собственных пространствах имён XML.
Это позволяет использовать RDF-описания также и в нём (используя пространство имён rdf).
FOAF
Проект «Friend of a Friend» («Друг друга») позволяет описывать отношение знакомства с помощью RDF.
Любой его участник может идентифицировать себя уникальным образом с помощью URI (например,
mailto-адресом электронной почты, адресом блога, и т. п.), создать свой профиль, используя
предопределённые для FOAF отношения на языке RDF, и перечислить идентификаторы людей, которых
этот участник знает. Это описание может обрабатываться автоматически; на его основе можно строить
сети доверия, анализировать структуру социальных групп, и т. д.
Семантические веб-сервисы
Вместо эпилога
Для более полного представления о том, какие перспективы несет семантический веб выделим ряд
факторов сравнения и выведем сводную таблицу, характеризующую прошлое, настоящее и будущее
Всемирной паутины (Табл.1).
точны)
Фактор участия
низкий средний высокий
пользователя
Фактор
удовлетворенности
низкий средний высокий
пользователя от
использования сайта
Фактор ссылаемости
на данные высокий (документы и их
низкий (документы) средний (документы)
(обращения по отдельные части)
ссылкам)
средний (возможность
выбора партнеров (friend низкий (каждый может
Фактор
высокий lists) или установления обратиться к ресурсу
субъективности
ограничений на доступ к через URI)
данным в блогах)
Уровень средний ("смешивание" высокий ("смешивание"
трансклюзивности низкий данных, управляемое кодом данных, управляемое
содержимого приложения) данными)
Уровень соответствия
видимого
высокий (настраиваемое
предпочитаемому
низкий средний описание представления
(What You See Is What
ресурсов)
You Prefer
(WYSIWYP))
Доступность данных средняя (доступ через
(открытый доступ к низкая бункеры данных — высокая (прямой доступ)
данным) серверные приложения)
Средства
идентификации слабые средние (OpenID) сильные (FOAF+SSL)
пользователей
Централизованная, с
делегированием части
Распределенная, с
Модель полномочий пользователем
выделенными
развертывания Централизованная (регистрация нового
централизованными
системы пользователя автоматически
функциями
приводит к созданию среды
для него )
Логическая
Логическая (иерархическая, Концептуальная (графы
Модель данных (иерархическая, на
на основе XML) RDF)
основе DOM)
Динамически генерируемый
Динамически Полностью динамический
(server-side), с
генерируемый интерфейс,
Пользовательский возможностью частичного
(server-side) представляемый
интерфейс изменения на стороне
статичный интерфейс возможностью
клиента (XSLT,
(client-side) самоописания RDF
XQuery/XPath)
Полнотекстовый поиск +
поиск в графовых
Возможности Полнотекстовый
Полнотекстовый поиск структурах с помощью
запросов данных поиск
SPARQL (Structured Graph
Pattern Query Language)
Отражает мнение Представляет мнение
Web как средство
Представляет мнение социальной группы, социальной группы,
массовой
автора/издателя состоящей из равноправных подкрепленное
информации
авторов и комментаторов экспертными оценками