- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Технология XSLT - Алексей Валиков
Шрифт:
Интервал:
Закладка:
Напомним, что GEDecl соответствует объявлению обычной, a PEDecl — параметризованной сущности.
Определение нотации
С точки зрения физической модели, XML-документы являются не более чем текстом. Содержимое документов и их разметка имеет исключительно текстовый вид. Вместе с тем, во многих случаях документы должны включать данные других форматов, например, графические изображения или двоичные файлы. Несовместимость физической реализации XML и внешних данных такого типа не позволяет включать их в документ посредством обычных сущностей — для этих целей используются неразбираемые сущности и нотации.
Нотация — это ни что иное, как определение формата неразбираемой сущности. Нотация дает формату имя и предоставляет некоторую информацию о приложении, которое следует использовать для обработки этого формата.
ПримерПредположим, что мы используем графические изображения в формате GIF, для просмотра которых используется приложение gif-viewer.exe. Определение нотации будет иметь следующий вид:
<!NOTATION GIF SYSTEM "gif-viewer.ехе">
Эта запись определяет нотацию с именем GIF и указывает имя приложения, которое может быть использовано для обработки внешних сущностей этого формата.
Информация о вспомогательном приложении-обработчике (англ. helper application) указывается при определении нотации системным или публичным идентификатором. В отличие от определения внешней сущности, публичный идентификатор в нотации может указываться без системного идентификатора. Фактически, нотация имеет три варианта определения:
<!NOTATION имя SYSTEM "системный ид-р">
<!NOTATION имя PUBLIC "публичный ид-р" "системный ид-р">
<!NOTATION имя PUBLIC "публичный ид-р">
Если информация о вспомогательном приложении несущественна, можно воспользоваться определением следующего вида:
<!NOTATION имя SYSTEM "">
Существует два основных способа применения нотаций. Первый — объявление неразбираемых сущностей и использование их имен в атрибутах типа ENTITY или ENTITIES, второй — указание имени нотации в атрибуте типа NOTATION для того, чтобы задать формат данных, который содержит данный элемент.
Первый способ можно продемонстрировать простым документом, который задает меню (листинг 1.5).
Листинг 1.5. Использование неразбираемых сущностей в атрибутах элементов<!DOCTYPE menu [
<!ELEMENT menu (menuitem*)>
<!ELEMENT menuitem EMPTY>
<!ATTLIST menuitem
image ENTITY #REQUIRED
title CDATA #REQUIRED
href CDATA #REQUIRED>
<!NOTATION gif SYSTEM "gif-viewer.exe">
<!NOTATION jpg SYSTEM "jpg-viewer.exe">
<!ENTITY news SYSTEM "news.gif" NDATA gif>
<!ENTITY products SYSTEM "prod.jpg" NDATA jpg>
<!ENTITY support SYSTEM "support.gif" NDATA gif>
]>
<menu>
<menuitem image="news" title="News" href="news.htm"/>
<menuitem image="products" title="Products" href="prods.htm"/>
<menuitem image="support" title="Support" href="support.htm"/>
</menu>
Проанализируем декларацию типа этого документа.
□ Декларация типа <!DOCTYPE menu [..] > говорит о том, что корневым элементом этого документа является элемент menu.
□ В соответствии с определением <!ELEMENT menu (menuitem* )> этот элемент состоит из нескольких субэлементов menuitem.
□ В соответствии с определением <!ELEMENT menuitem EMPTY> элемент menuitem должен быть пустым.
□ Запись <!ATTLIST menuitem ... > определяет в элементе menuitem следующие атрибуты:
• обязательный атрибут image, в котором должно указываться имя сущности;
• обязательный атрибут title, содержащий символьные данные;
• обязательный атрибут href, содержащий символьные данные.
□ Запись <!NOTATION gif SYSTEM "gif-viewer.exe"> определяет нотацию с именем gif и закрепляет за ней приложение gif-viewer.exe.
□ Запись <!NOTATION jpg SYSTEM "jpg-viewer.ехе"> определяет нотацию с именем jpg и закрепляет за ней приложение jpg-viewer.exe.
□ Запись <!ENTITY news SYSTEM "news.gif" NDATA gif> определяет внешнюю неразбираемую сущность с именем news, которая имеет формат (нотацию) gif.
□ Запись <!ENTITY products SYSTEM "prod.jpg" NDATA jpg> определяет внешнюю неразбираемую сущность с именем products, которая имеет нотацию jpg.
□ Запись <!ENTITY support SYSTEM "support.gif" NDATA gif> определяет внешнюю неразбираемую сущность с именем support, которая имеет нотацию gif.
Посмотрим теперь, какую информацию нам дают такие громоздкие определения. Обратимся к записи одного из элементов menuitem:
<menuitem image="products" title="Products" href="prods.htm"/>
С атрибутами title и href все ясно: они содержат простые символьные данные. Атрибут image несколько сложнее, он предоставляет гораздо больше информации. Типом этого атрибута является ENTITY, значит текст, который он содержит, является не просто символьными данными: он задает имя сущности, связанной с данным атрибутом. Иначе говоря, с атрибутом image связывается сущность.
Анализируя определение сущности products, обрабатывающая программа может понять, что это — неразбираемая внешняя сущность формата jpg, которая хранится в файле prod.jpg и для обработки которой можно использовать приложение jpg-viewer.exe.
Вторым способом использования нотаций является присвоение определенного формата содержимому элемента. Один (но не более чем один) из атрибутов элемента может иметь тип NOTATION. Значением этого атрибута должно быть имя нотации, которое и будет задавать формат содержимого элемента.
Пример Листинг 1.6. Использование нотаций для определения формата содержимого элемента<!DOCTYPE root [
<!ELEMENT root (#PCDATA)>
<!ATTLIST root
type NOTATION (rtf|htm|txt) #REQUIRED>
<[NOTATION rtf SYSTEM "winword.exe">
<!NOTATION htm SYSTEM "iexplore.exe">
<!NOTATION txt SYSTEM "notepad.exe">
]>
<root type="htm">
<![CDATA[
<html>
<head>
...
</head>
<body>
...
</body>
</html>]]>
</root>
В этом документе определяется три нотации, три формата данных: rtf, htm и txt. Атрибут type элемента root указывает формат данных, которые содержатся в этом элементе — в данном случае это "htm" (что, очевидно, соответствует HTML-документу).
Несмотря на то, что нотации являются довольно мощным механизмом, ввиду очевидной сложности, широкого распространения их использование не получило. Почти того же самого эффекта можно добиться более простыми способами, например, используя в элементах дополнительные атрибуты.
Символьные данные в XML-документах
Каковы бы ни были структура и синтаксис текстового документа, основой его всегда являются символы. Для хранения и обработки текста на компьютерах, которые по своей природе являются цифровыми устройствами, каждому символу нужно поставить в соответствие числовой код.
Проблема многих языков заключается в том, что для них существует несколько альтернативных кодировок символов. Например, для кириллицы существуют такие кодировки, как CP-866, KOI8-R, CP-1251, ISO-8859-5, кодовая страница Macintosh и другие, но вместе с тем не существует единого стандарта, принятого де-факто. В итоге, для того, чтобы быть уверенным, что документ будет прочтен, его нужно представлять в трех или четырех кодировках, что очень неудобно.
Для того чтобы решить эти и некоторые другие проблемы, был создан стандарт Unicode. Unicode присваивает уникальный код любому символу, независимо от платформы, независимо от программы, независимо от языка. Символам кириллицы Unicode присваивает коды в диапазоне от #x400 до #x4ff. Таблица кодов для кириллицы может быть найдена в формате PDF на Web-сайте Unicode:
http://www.unicode.org/charts/PDF/U0400.pdf.
Использование Unicode
Для описания символов сотен языков всего мира, а также других символьных обозначений (например, математических символов) Unicode позволяет использовать три формы кодирования — UTF-8, UTF-16 и UTF-32.
UTF-8В UTF-8 символы разных диапазонов кодируются последовательностями, состоящими из разного количества байт в соответствии со следующими правилами.
□ Символы с кодами в интервале #x0–#x7F кодируются одним байтом, первый бит которого равен нулю.