XML
в системе и сам по себе
Реальный XML-документ
существует и реализует свои возможности в пугающе
сложной структурированной взаимосвязанной системе, включающей:
-
XML Schema,
-
XSLT
-
XSL-F
-
XPath
-
RTF
-
NameSpace XML
-
SOAP и др.
Однако, сам по себе
XML-документ очень прост.
|
Составляющие
XML-документа
XML-документ
может включать:
-
пролог и
директивы,
-
элементы,
-
комментарии,
-
специальные
символы
-
разделы
|
Пролог и директивы
Любой XML-документ состоит из пролога и корневого
элемента, например:
<?xml version="1.0"?>
<books>
<book isbn="0345374827">
<title>Название книги</title>
<author>Фамилия Имя Отчество</author>
<present/>
</book>
</books>
В примере пролог сводится к единственной директиве (первая
строка документа), указывающей версию 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.
Атрибут standalone говорит
о том, содержит ли документ внешние разделы:
yes -
разделов нет, no -
они есть.
За директивой следует
XML-элемент с уникальным именем, который содержит в себе все
остальные элементы и называется корневым.
В примере корневым элементом является
<books></books>
<books>
<book isbn="0345374827">
<title>Название книги</title>
<author>Фамилия Имя Отчество</author>
<present/>
</book>
</books>
В примере корневой элемент содержит в себе элементы
<title>Название книги</title>
<author>Фамилия Имя Отчество</author>
<present/>
</book>
|
Элементы и атрибуты
Любой документ на языке XML представляет собой набор элементов
ограниченных тегами.
Пример XML-элемента: <author>Концевой Михаил
Петрович</author>
Имена элементов зависят от регистра: <author>, <Author> и <AUTHOR> —
это имена различных элементов.
Наличие закрывающего тега всегда обязательно.
Пустой элемент имеет специальную форму:
<элемент/>
Любой элемент может иметь атрибуты, содержащие дополнительную
информацию об элементе.
Атрибуты всегда включаются в начальный тег элемента и имеют вид:
имя_атрибута="значение_атрибута"
Атрибут обязан иметь значение, которое всегда должно быть заключено
в одинарные или двойные кавычки. Имена атрибутов также зависят от
регистра.
Пример элемента, имеющего атрибут:
<author country="BY">Концевой Михаил
Петрович</author>
Элементы должны либо следовать друг за другом, либо быть вложены
один в другой:
<books> <book isbn="5887821192"> <title>Название1</title> <author>ФИО1</author>
<present/> </book> <book isbn="0345374827"> <title>Название2</title> <author>ФИО2</author> <present/> </book>
</books>
Здесь элемент books (книги) содержит два вложенных элемента book (книга),
которые, в свою очередь, имеют атрибут isbn и содержат три
последовательных элемента: title (название), author (автор) и
present (есть в наличии), причем последний пуст, т. к. в данном
случае соответствует логическому флажку.
XML не игнорирует символы пробела и разрыва строк, как это делает
HTML !
|
Комментарии
XML-документы
могут содержать комментарии, которые игнорируются приложением,
обрабатывающим документ. Комментарии строятся по тем же правилам,
что и в HTML:
-
начинается комментарий с символов
"<!--",
-
завершаестчя комментарий символами "-->",
-
в комментариях не
используются символы "--".
Пример
комментариев:
<!-- это
комментарий -->
<!-- а вот ещё комментарий, который может занимать и более одной
строки -->
|
Имена и данные
Все имена элементов,
атрибутов и разделов должны начинаться с буквы Unicode и не
должны начинаться с комбинации букв xml в любом регистре.
Ряд символов в языке XML зарезервирован: угловые скобки ("<" и
">"), кавычки (" и ') способом включения их
в содержимое XML-элементов являются
заключение в ограничители <![CDATA[ и ]]>.
Все внутри этой
секции считается символьными данными.
Секции CDATA
не могут вкладываться друг в друга.
Например:
<layout> <![CDATA[<H1>Заголовок</H1>]]> </layout>
|
Разделы XML-документа
XML-документ может состоять из несколько разделов (entities).
Корневой элемент документа также является разделом но никак
специально не оформлен. Все разделы имеют имя и содержимое.
Неанализируемый раздел (unparsed
entity) — ресурс, содержимое которого XML-процессор воспринимает
как внешние данные без их синтаксического анализа (например,
текст, не являющийся XML-документом). Неанализируемые разделы
всегда имеют нотацию,
указывающую на их формат.
Анализируемые разделы (parsed
entities) предназначены для текстовой подстановки: всякий раз,
когда XML-процессор встречает в документе имя такого раздела, он
заменяет его на содержимое этого раздела.
Декларация внутреннего разделавы глядит так: <!ENTITY
имя значение>
Она включает в себя содержимое объекта (параметр значение)
и используется для подстановки этого значения вместо имени
раздела.
Например, внутренниие разделы на основе жанров:
<!DOCTYPE spec [ <!ENTITY pr "проза"> <!ENTITY po "поэзия">]>
<books>
<book genre="&po;">
<title>Название1</title>
<author>ФИО1</author>
</book> <book genre="≺">
<title>Название2</title>
<author>ФИО2</author>
</book>
</books>
Ссылка на раздел (entity reference) имеет вид &имя;.
Существуют варианты деклараций внешних разделов....
|
XSL
XSL (eXtensible
Stylesheet Language) — язык стилей (преобразования
и визуализации) XML-документов.
XSL
включает:
-
XSLT
(XSL
Transformations)
— язык преобразований XML-документов
-
XSL-FO
(XSL
Formatting Objects)
— язык разметки типографских макетов и иных предпечатных
материалов
-
XPath
— язык путей и выражений, используемый в XSLT для доступа к
отдельным частям XML-документа
XSL
и CSS
—
принципиально разные языки и технологии.
Таблица стилей (Stylesheet) —
это XML-документ специального вида (обычно это файл с
расширением «xsl»), содержащий набор правил преобразования
исходного XML-документа, написанных на языке XSLT и
предназначенных для XSLT-процессора (программs, которая
выполняет преобразование исходного XML-документа на основе
таблицы стилей)
CSS-форматирование HTML-документа применяется браузером на
клиентской стороне, а XSL-преобразование выполняется, как правило,
на сервере, затем его результат отправляется в браузер клиента.
Языком,
лежащим в основе XSL, является XML и XSL более гибок, универсален.
|
XSLT
(как и CSS) отделяет данные от
их представления и описывает каким именно образом представленный
XML-документ преобразуется из одной XML-схемы в другую.
XSLT
определяет стиль XML документа, используя XSLT чтобы описать, ,
использующий данный словарь форматирования. XSLT построен так, чтобы
использоваться независимо от XSL, но не позиционируется как
полноценный универсальный язык преобразований XML.
При
применении таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу
(исходное дерево) образуется конечное дерево, которое может быть
сериализовано в виде XML-документа, XHTML-документа , HTML-документа
или простого текстового файла.
Правила
выбора и преобразования данных из исходного дерева пишутся на языке
запросов
XPath. |
XML
Schema
DTD
(Document Type Definition — определение типа документа) - язык схем DTD
(DTD schema language) и
описание схемы документа языком схем DTD.
DTD
ужасен (особый синтаксис, нет поддержки пространства имен...) и заменен
XML Schema.
XML
Schema
(или
XSD
=
XML Schema definition)
— язык описания структуры XML-документа.
XML Schema :
-
определяет элементы, которые могут появляться в документе
-
определяет атрибуты, которые могут появиться в документе
-
определяет, какие элементы являются дочерними элементами
-
определяет порядок дочерних элементов
-
определяет число дочерних элементов
-
определяет, является ли элемент пустым или может содержать текст
-
определяет типы данных для элементов и атрибутов
-
определяет по умолчанию и фиксированные значения элементов и
атрибутов
XML Schema
была задумана для определения правил, которым должен подчиняться
документ? но разработана так, чтобы её можно
было использовать в создании программного обеспечения для обработки
документов XML.
При использовании XML Schema XML парсер может проверить не только
правильность синтаксиса XML документа, но также его структуру, модель
содержания и типы данных.
После
проверки документа на соответствие XML Schema читающая программа может
создать модель данных документа, которая включает:
Каждый
элемент в этой модели ассоциируется с определённым типом данных,
позволяя строить в памяти объект, соответствующий структуре
XML-документа.
Языкам
объектно-ориентированного программирования гораздо легче иметь дело с
таким объектом, чем с текстовым файлом.
В
XML Schema
один словарь может ссылаться на другой, что позволяет использовать уже
существующие словари и легче устанавливать и распространять стандарты
XML структуры для определённых задач.
Файл, содержащий
XML Schema,
обычно имеет расширение «.xsd».
|
NameSpace
XML
XML предоставляет
возможность использовать элементы и атрибуты с любыми названиями (при
соблюдении синтаксических правил), а для предупреждения неоднозначности
(в т.ч. в результате омонимии) используется Пространство имен.
Пространство имён XML
(NameSpace
XML) — стандарт, описывающий именованную совокупность имён
элементов и атрибутов, служащую для обеспечения их уникальности в
XML-документе.
Все имена элементов в пределах пространства имён должны быть уникальны.
Все имена элементов,
атрибутов и разделов должны начинаться с буквы Unicode (но не
с комбинации букв xml в любом регистре)
и состоять из букв, цифр, символов точки (.), подчеркивания (_) и дефиса
(-).
XML-документ может содержать имена элементов и атрибутов из нескольких
словарей XML.
В
каждом словаре задано своё пространство имён — так разрешается проблема
неоднозначности имён элементов и атрибутов.
Задание пространства имен в XML документе
При задании пространства имен в XML документе:
Область действия пространства имен может распространяться:
-
на весь документ (оно
задано в корневом элементе XML документа);
-
контейнери все, вложенные
в него элементы и атрибуты (когда оно задано в элементе верхнего
уровня контейнера);
-
отдельный элемент или
атрибут (когда оно задано непосредственно для данного элемента и
атрибута).
Существует два способа декларации пространства имен:
-
декларация по умолчанию
-
явная
декларация.
Декларация
по умолчанию объявляет пространство имен для всех элементов и их
атрибутов, которые содержатся в данном элементе и имеет вид:
xmlns=URI
где?
xmlns — ключевое слово XML, а URI — это адрес ресурса, содержащего
соответствующий словарь.
URI
пространства имен не обязан указывать на реальный ресурс и просто служит
идентификатором данного пространства, т. к. два пространства имен
считаются одинаковыми тогда и только тогда, когда их URI текстуально
совпадают.
Явная
декларация содержат дополнительно префикс (:имя),
уточняющий, к какому пространству относится то или иное имя и имеет вид:
xmlns:имя=UR
Спецификация NameSpace
XML:
http://www.w3.org/TR/xml-names/ |
Пример
задания
NameSpace XML
<?xml version="1.0" encoding="Windows-1251"?>
<network xmlns:net ="http://www.network.com/lan"
xmlns ="http://www.server.com">
<softlan>
<net:protocol> … </net:protocol>
<protocol> … <protocol>
<firm_protocol xmlns:frm="http://firm.network.com">
<frm:protocol> … </frm:protocol>
<protocol> … </protocol>
</firm_protocol>
<server> … <server>
</softlan>
<hardlan xmlns:hard="http://www.hard.com/lan"
xmlns="http://www.firm.com">
<hard:protocol>
<protocol net:lan="Ethernet">CSMA/CD</protocol>
</hard:protocol>
</hardlan>
</network>
|
Строки 2 и 3 представляют корневой элемент документа network, в котором
заданы два пространства имен. Их действие распространяется на весь XML
документ. Первое пространство имен идентифицируется префиксом net,
второе пространство имен префикса не имеет, т.е. является пространством
имен по умолчанию.
Строка 5
описывает элемент protocol, входящий в пространство имен http://www.network.com/lan,
которое задано в строке 2, поскольку он идентифицируется префиксом net.
Строка 6 также описывает элемент protocol, но он не имеет префикса,
следовательно, относится к пространству имен по умолчанию http://www.server.com,
которое задано в строке 3.
Строка 7 задает пространство имен, идентифицируемое префиксом frm.
Данное пространство имен распространяется на элемент firm и вложенные в
него элементы и атрибуты.
Строка 8 описывает элемент protocol, который относится к пространству
имен http://firm.network.com, которое задано в строке 7, т.к.
идентифицируется префиксом frm.
Строка 9 описывает элемент protocol. Данный элемент protocol не имеет
префикса, следовательно, он относится к пространству имен по умолчанию
http://www.server.com, которое задано в строке 3.
Строки 13 и 14 представляют элемент hardlan, в котором заданы два
пространства имен, действие которых распространяется элемент hardlan и
все и вложенные в него элементы и атрибуты. Первое пространство имен
идентифицируется префиксом hard. Второе пространство является
пространством имен по умолчанию, которое в контейнере hardlan
переопределяет пространство имен по умолчанию, заданное в строке 3.
Строка 15 описывает элемент protocol, который относится к пространству
имен http://www.hard.com/lan, которое задано в строке 13, т.к.
идентифицируется префиксом hard.
Строка 16 описывает элемент protocol. Данный элемент protocol не имеет
префикса, следовательно, он относится к пространству имен по умолчанию.
В этом месте XML документа действует пространство имен по умолчанию http://www.firm.com,
которое задано в строке 14. Атрибут lan со сначением Ethernet относится
к пространству имен net.мента и атрибута). |
XML-инструментарий
Существует множество типов программного обеспечения для работы с
XML, в
том числе:
-
Генераторы
XML-схем
-
Программы
для разработки и проверки XML-карт сайтов
-
Программы
для проверки корректности XML (валидаторы)
-
Программы
форматирования XML
-
Инструментальные средства с открытыми исходными кодами для
работы с XML
-
Интегрированные среды разработки XML
-
Средства
сравнения XML
-
Инструментальные средства для работы с XQuery
-
Инструментальные средства для работы с XPath
-
Редакторы XML
и многие многие другие... см перечень:
http://www.ahds.ac.uk/creating/information-papers/xml-editors/
|
XML- редакторы
Для создания xml-файла необходим всего лишь стандартный
текстовый редактор (например, Блокнот), так как он
представляет из себя обычный текстовый документ, в которой при помощи тегов
описывается вся структура основных данных.
Существует множество специализированных
XML-редакторов
(автономных и в составе сред программирования):
|
XmlNotepad
- бесплатный простой
XML-редактор от
Криса Ловетта.
См. интервью с Chris
Lovett:
Архив с portable-версией
XmlNotepad
здесь
|
|
Всё будет XML ?
|