Данный раздел посвящен работе с XML. В нём будет собран, как теоретический, так и практический материал. Будут рассмотрены основные операции с XML файлами, а так же взаимодействие с LINQ и многое другое.
Создание XML файла
XML (Extensible Markup Language) — расширяемый язык разметки, применяется для создания баз данных, web страниц, используется для обмена информацией между программами, применяется в таких технологиях, как Ajax, SOAP, а так же является основой языка XAML, с которым Вы можете встретиться при работе с WPF.
Для создания xml файла нам всего лишь необходимо внести
Структура XML файла
Любой XML файл, начинается с объявления декларации.
Декларация
Декларация xml файла включает в себя:
Версию (version) — номер версии языка XML, 1.0 и 1.1
Если Вы используете , то строку декларации можно не указывать, если Вы используете версию 1.1, то необходимо обязательно указать данную строку.
Кодировку (encoding) — указывает кодировку файла
Данной записью Вы не устанавливаете кодировку физическому файлу! А только лишь даёте понять программе, которая будет обрабатывать данный файл, в какой кодировке, содержаться данные внутри файла. При этом Вы должны гарантировать, что кодировка документа и кодировка, указанная в строке декларации совпадают.
Чтобы установить кодировку документу, Вы можете воспользоваться, к примеру, программой Notepad++
Элементы xml файла
Язык XML состоит из элементов.
Элемент — это строка, которая содержит открывающий и закрывающий теги, а так же данные, помещенные между ними.
значение — элемент
В одном файле может содержаться любое количество элементов.
Теги
Как упоминалось ранее, элемент состоит из тегов.
— тег
Имена тегов могут начинаться с буквы, символа подчеркивания, или знака двоеточие, затем могут указываться любые символы.
Теги бывают: парные и одиночные.
— одиночный
Одиночный тег может применяться, в ситуации, когда между тегами не содержаться какая-либо информация, при этом чтобы не указывать, парный тег и пустоту между ними, используйте одиночный тег, который в любой момент можно будет заменить парным. Одиночный тег обязательно должен быть закрытым!
При построение XML документа очень важно соблюдать правильность вложенности тегов:
- Не правильно
- Правильно
XML регистро-зависимый язык
Комментарии
Комментарии в XML документе, используют такой же синтаксис, как в языке HTML.
После объявления декларации и знакомства с основными составляющими языка XML, переходим к наполнению нашего файла.
Корневой элемент
Первым всегда указывается корневой элемент (root element), в одном XML документе может быть только один корневой элемент!
В данном примере, создано два корневых элемента
- не правильно
- правильно
Во втором примере создан один корневой элемент «Root», который содержит обычный элемент «Admin».
После объявления корневого элемента, Вы можете добавлять любое количество элементов в ваш . Все добавляемые элементы обязательно должны находиться между тегами корневого элемента.
«library» корневой элемент содержащий элемент book, который содержит вложенные элементы: title, author, year.
Атрибуты xml файла
Атрибуты устанавливают в открывающем теге любого элемента.
Синтаксис: имя = «значение», заключенное в двойные кавычки.
Атрибутов может быть любое количество, но они не должны повторяться, а их имена не должны содержать пробелов.
Ошибка, присутствуют два повторяющихся атрибута «id», а так же между id и number содержится пробел.
После того, как XML документ создан, его необходимо сохранить, при этом не забывайте изменить расширение файла.
- имя_файла.xml
XML был создан для описания данных с прицелом на то, что представляют собой данные.
HTML был создан для отображения данных с прицелом на то, как выглядят отображаемые данные.
Что такое XML?
- XML расшифровывается как Расширяемый язык разметки (EXtensible Markup Language)
- XML — это язык разметки , похожий на HTML
- XML был создан для описания данных
- Теги XML не предопределены. Вы можете использовать свои теги
- XML использует Определение Типа Документа (Document Type Definition — DTD) или схему XML (XML Schema) для описания данных
- XML рекомендован W3С
Главное различие между XML и HTML
XML был разработан для передачи данных.
XML не является заменой HTML.
XML и HTML были разработаны с различными целями:
- XML был создан для описания данных и основное внимание уделяется тому, какие данные передаются
- HTML был разработан для отображения данных основное внимание уделяются отображению данных
- Таким образом, HTML больше связан с отображением информации, в то время как XML — описанием информации.
XML ничего не делает
XML не был создан для выполнения каких-либо действий.
Может быть это будет непросто понять, но XML не выполняет никаких действий. Этот язык разметки был создан для структурирования, хранения и передачи информации. Следующий пример является запиской от Антона Ире, представленной в XML:
Как видите, язык XML очень лаконичен.
Записка (
XML — свободный расширяемый язык разметки
Теги XML не предопределены. Вы можете вводить свои теги.
Теги и структура документа в HTML заданы заранее. Создатель html-документа может только использовать теги, определенные стандартами.
XML позвволяет вводить свои теги и структуру документа автору xml-документа. Теги, приведенные в примере (например,
XML является дополнением HTML
XML — это не замена HTML.
Важно понять, что XML не является заменой HTML. В будущем веб-разработчики будут использовать XML для описания данных, в то время как, HTML будет использоваться для форматирования и отображения этих данных.
Мое лучшее определение XML таково: XML — это кроссплатформенный, не зависящий от программного и аппаратного обеспечения инструмент передачи информации.
Заметка: Кроссплатформенный — пригодный для любой операционной системы и любого аппаратного обеспечения.
Если вы знаете, существуют различные операционные системы, кроме знакомой нам Windows. Это ОС Linux, Mac и другие.
Насчет аппаратного обеспечения можно сказать следующее: это могут быть обычные ПК, ноутбуки, карманные компьютеры и т.д.
XML в будущей веб-разработке
XML будет использоваться везде.
Мы являемся свидетелями разработки XML с момента его создания. Было удивительно видеть, как быстро XML стандарт был разработан и как быстро большое количество поставщиков программного обеспечения приняли этот стандарт. Мы твердо убеждены в том, что XML будет столь же важной составляющей будущего Интернет, как HTML, который является основой интернета, и что XML будет самым распространенным инструментом для всех манипуляций с данными и передачи данных.
XML - очень популярный и гибкий формат в наше время. Каждый программист должен понимать его, это просто must have. Многие технологии завязаны сегодня активно его используют, при чем современные в их числе.
Вступление
Здравствуйте, дорогие читатели моей статьи. Сразу хочу сказать, что это только первая статья в моём цикле из трёх статей. Основная цель всего цикла – посвятить каждого читателя в XML и дать, если не полное разъяснение и понимание, то, хотя бы, хороший такой толчок к нему, объяснив основные моменты и вещи. Весь цикл будет для одной номинации – «Внимание к деталям» , а разделение на 3 статьи сделано для того, чтобы вмещаться в лимит символов в постах и разделить большое количество материала на более маленькие порции для большего понимания. Первая статья будет посвящена самому XML и что это такое, а так же одному из способов составления схемы для XML файлов – DTD. Для начала, хотелось бы высказать небольшое предисловие для тех, кто вообще еще не знаком с XML: не нужно пугаться. XML не очень сложный и с ним нужно разобраться любому программисту, так как это очень гибкий, эффективный и популярный формат файлов на сегодняшний день для хранения разнообразной информации, какой вы только захотите. XML используется в Ant, Maven, Spring. Любому программисту нужно знание XML. Теперь, когда вы собрались силами и мотивацией, давайте приступать к изучению. Весь материал я буду пытаться выложить максимально просто, собрав только самое важное и не вдаваться в дебри.XML
Для более ясного объяснения, правильней будет визуализировать XML примером. < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee> < name> Maksim< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Ivan< / name> < job> Junior Software Developer< / job> < / employee> < employee> < name> Franklin< / name> < job> Junior Software Developer< / job> < / employee> < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee> < name> Herald< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Adam< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Leroy< / name> < job> Junior Software Developer< / job> < / employee> < / employees> < / office> < / offices> < / company> HTML и XML похожи синтаксисом, так как у них общий родитель – SGML. Однако, в HTML есть только фиксированные теги конкретного стандарта, в то время, как в XML вы можете создавать свои собственные теги, атрибуты и, в целом, делать все, что захотите, чтобы хранить данные так, как вам будет удобно. По сути, XML файлы может прочитать любой человек, знающий английский язык. Изобразить данный пример можно с помощью дерева. Корень дерева – Company. Он же – корневой (рут) элемент, от которого идут все остальные элементы. В каждом XML файле может быть только один рут элемент. Он должен объявляться после декларации xml файла (первая строчка в примере) и вмещать в себе все другие элементы. Немного о декларации: она обязательная и нужна для идентификации документа как XML. У неё есть три псевдо-атрибуты (специальные предопределенные атрибуты): version (по стандарту 1.0), encoding (кодировка) и standalone (автономность: если yes и к документу подключаются внешние схемы, то будет ошибка, по умолчанию - no). Элементы – это сущности, которые хранят данные с помощью других элементов и атрибутов. Атрибуты – это дополнительная информация об элементе, которая указывается при добавлении элемента. Если перевести объяснение на ООП-поле, то можно привести такой пример: у нас есть машина, у каждой машины есть характеристики (цвет, вместимость, марка и другое) – это атрибуты, и есть сущности, которые внутри машины: двери, окна, двигатель, руль – это другие элементы. Хранить свойства можно как и отдельными элементами, так и атрибутами в зависимости от вашего желания. Как никак, XML – крайне гибкий формат хранения информации про что-либо. После объяснений, нам достаточно разобрать пример выше, чтобы все встало на свои места. В примере мы описали простую структуру компании: есть компания, у которой есть имя и офисы, а в офисах есть сотрудники. Элементы Employees и Offices – элементы-обертки – они служат для того, чтобы собрать в себе элементы одного вида, по сути, соединив их в одно множество для удобства их обработки. Отдельного внимания заслуживают floor и room. Это – атрибуты офиса (этаж и номер), другими словами – его свойства. Если бы у нас был элемент «картинка», то можно было бы передавать её размеры. Вы можете заметить, что у компании нет атрибута name, но есть элемент name. Просто вы можете описывать структуры так, как захотите. Никто не обязывает вас все свойства элементов записывать только в атрибуты, вы можете использовать и просто элементы и записывать внутри них какие-то данные. Например, мы можем записывать имя и должность наших работников, как атрибуты: < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee name= "Maksim" job= "Middle Software Developer" > < / employee> < employee name= "Ivan" job= "Junior Software Developer" > < / employee> < employee name= "Franklin" job= "Junior Software Developer" > < / employee> < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" > < / employee> < employee name= "Adam" job= "Middle Software Developer" > < / employee> < employee name= "Leroy" job= "Junior Software Developer" > < / employee> < / employees> < / office> < / offices> < / company> Как вы видите, теперь имя и должность каждого работника – это его атрибуты. И можно заметить, что внутри сущности (тега) employee ничего нет, все элементы employee – пустые. Тогда можно сделать employee пустым элементом – закрыть его сразу после объявления атрибутов. Это делается довольно просто, достаточно просто поставить слэш: < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee name= "Maksim" job= "Middle Software Developer" / > < employee name= "Ivan" job= "Junior Software Developer" / > < employee name= "Franklin" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Как вы можете заметить, закрыв пустые элементы мы сохранили всю целостность информации и намного сократили запись, сделав информацию более сжатой и читабельной. Для того, чтобы добавить комментарий (текст, который будет пропускаться при парсинге файла) в XML, есть следующий синтаксис: < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > И последняя конструкция – это CDATA , означает «символьные данные». Благодаря данной конструкции, можно записывать текст, который не будет интерпретироваться как разметка XML. Это полезно, если внутри XML файла у вас есть сущность, которая хранит в информации XML разметку. Пример: < ? xml version= "1.0" encoding= "UTF-8" ? > < bean> < information> < ! [ CDATA[ < name> Ivan< / name> < age> 26 < / age> ] ] > < / information> < / bean> Особенность XML в том, что вы можете расширять его так, как захотите: использовать свои элементы, свои атрибуты и структурировать его по своему желанию. Вы можете использовать для хранения данных как атрибуты, так и элементы (как это было показано в примере ранее). Однако нужно понимать, что придумывать свои элементы и атрибуты на ходу и как вы захотите вы можете, но что, если вы будете работать на проекте, где другой программист захочет перенести элемент name в атрибуты, а у вас вся логика программы написана так, чтобы name был элементом? Как же создать свои собственные правила того, какие элементы должны быть, какие атрибуты у них есть и другие вещи, чтобы можно было проводить валидацию XML файлов и быть уверенным, что правила станут стандартными в вашем проекте и никто их нарушать не будет? Для того, чтобы написать все правила вашей собственной XML разметки, есть специальные средства. Самые известные: DTD и XML Schema. В этой статье будет только про первое.DTD
DTD создан для того, чтобы описывать типы документов. DTD уже устаревает и сейчас от него активно отказываются в XML, однако еще много XML файлов используют именно DTD и, в целом, его полезно понимать. DTD – это технология валидации XML-документов . DTD объявляет конкретные правила для типа документа: его элементы, какие элементы могут быть внутри элемента, атрибуты, обязательные они или нет, количество их повторений, а так же сущности (Entity). По аналогии с XML, для более ясного объяснения DTD можно визуализировать примером. < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > Вот такой вот простой пример у нас есть. В данном примере, мы объявили всю нашу иерархию из XML примера: работник, работники, офис, офисы, имя, компания. Для создания DTD файлов служат 3 основные конструкции, чтобы описывать любые XML файлы: ELEMENT (для описания элементов), ATTLIST (для описания атрибутов для элементов) и ENTITY (для подстановки текста сокращенными формами). ELEMENT Служит для описания элемента. Элементы, которые можно использовать внутри описанного элемента, перечисляются в скобках в виде списка. Можно использовать квантификаторы для указания количества (они аналогичны с квантификаторами из регулярных выражений): + значит 1+ * значит 0+ ? значит 0 ИЛИ 1 Если квантификаторов не было добавлено, то считается, что должен быть только 1 элемент. Если бы нам нужен был один из группы элементов, можно было бы написать так: < ! ELEMENT company ((name | offices) ) > Тогда выбирался бы один из элементов: name или offices, но если бы внутри company было сразу два их, то валидация бы не проходила. Так же можно заметить, что в employee есть слово EMPTY – это значит, что элемент должен быть пустым. Есть еще ANY – любые элементы. #PCDATA – текстовые данные. ATTLIST Служит для добавления атрибутов к элементам. После ATTLIST следует название нужного элемента, а после словарь вида «название атрибута – тип атрибута», а в конце можно добавить #IMPLIED (не обязателен) или #REQUIRED (обязателен). CDATA – текстовые данные. Есть и другие типы, однако все они строчные. ENTITY ENTITY служит для объявления сокращений и текста, который будет на них подстваляться. По сути, мы просто сможем использовать в XML вместо полного текста просто название сущности со знаком & перед и; после. Например: чтобы отличать разметку в HTML и просто символы, левую угловую скобочку часто экранируют с помощью lt; , только нужно еще выставить & перед lt. Тогда мы будем использовать не разметку, а просто символ < . Как вы можете видеть, все довольно просто: объявляете элементы, объясняете, какие элементы объявленные элементы способны содержать, добавление атрибутов этим элементам и, по желанию, можете добавить сущности, чтобы сокращать какие-то записи. И тут вы должны были бы спросить: а как использовать наши правила в нашем XML файле? Ведь мы просто объявили правила, но мы не использовали их в XML. Есть два способа использовать их в XML: 1. Внедрение - написание DTD правил внутри самого XML файла, достаточно просто написать корневой элемент после ключевого слова DOCTYPE и заключить наш DTD файл внутри квадратных скобочек. < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company [ < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > ] > < company> < name> IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > < offices> < office floor= "1" room= "1" > < employees> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> 2. Импорт - мы записываем все наши правила в отдельный DTD файл, после чего в XML файле используем DOCTYPE-конструкцию из первого способа, только вместо квадратных скобочек нужно написать SYSTEM и указать абсолютный или относительный до текущего местоположения файла путь. < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company SYSTEM "dtd_example1.dtd" > < company> < name> IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > < offices> < office floor= "1" room= "1" > < employees> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Так же можно использовать ключевое слово PUBLIC вместо SYSTEM, однако оно вряд ли вам пригодится. Если интересно, то почитать про него (и про SYSTEM тоже) можно подробно тут: ссылочка . Теперь мы не можем использовать другие элементы без их объявления в DTD, а весь XML подчиняется нашим правилам. Можете попробовать записать данный код в IntelliJ IDEA в отдельный файл с расширением.xml и попробовать добавить какие-то новые элементы или удалить элемент из нашего DTD и заметите, как IDE будет указывать вам на ошибку. Однако, у DTD есть свои минусы:- У него свой собственный синтаксис, отличный от синтаксиса xml.
- В DTD нет проверки типов данных, а содержать он может только строки.
- В DTD нет пространства имён.
Язык XML (Extensible Markup Language) был разработан рабочей группой XML Working Group консорциума World Wide Web Consortium (W3C). Вот как описывают его создатели:
«Расширяемый язык разметки Extensible Markup Language (XML) представляет собой составную часть языка SGML... Он предназначен для облегчения использования языка SGML в Web и выполнения задач, которые в настоящее время реализуются с помощью языка HTML. XML разработан с целью усовершенствовать применение и взаимодействие языков SGML и HTML.»
Это выдержка из спецификации версии 1.0 XML, созданной XML Working Group в феврале 1998 г. Весь документ вы можете найти на сайте W3C по адресу http://www.w3.org/TR/REC/-xml .
XML - язык разметки, разработанный специально для размещения информации в World Wide Web, аналогично языку гипертекстовой разметки HTML (Hypertext Markup Language), который изначально стал стандартным языком создания Web-страниц. Поскольку язык HTML полностью удовлетворяет всем нашим потребностям, возникает вопрос: для чего понадобился совершенно новый язык для Web? В чем состоят его преимущества и достоинства? Как он взаимодействует с HTML? Заменит ли он HTML, или только усовершенствует его? Наконец, что собой представляет язык SGML, частью которого является XML, и почему нельзя использовать для Web-страниц собственно SGML? В этой главе я постараюсь ответить на все эти вопросы.
Предназначение XML
Язык HTML предоставляет фиксированный набор элементов, которые вы можете использовать для размещения компонентов на типовой Web-стра-нице, Примерами таких элементов являются заголовки, абзацы, списки, таблицы, изображения и связи, Например, HTML отлично подходит для
создания личной домашней страницы. Ниже приведено описание домашней страницы в кодах HTML:
Michael Young"s Home Page
Welcome to my Web site!
Web Site Contents
Please choose one of the following topics:
- Writing
- Family
- Photo Gallery
Other Interesting Web Sites
Click one of the following to explore another Web site:
-
«1. XML должен стать языком прямого использования в Internet.»
Как вы уже могли понять, XML был разработан главным образом для хранения и распространения информации в Web.
«2. XML будет поддерживать большое количество приложений.»
Хотя основным его назначением является распространение информации в Web через серверы и программы-браузеры, XML также разработан для использования его другими программами. Например, XML применяется для обмена информщией между финансовыми программами, для распространения и обновления программных продуктов, а также написания голосовых сценариев при доставке информации по телефону.
«3.XML будет совместим с SGML.»
XML является специализированной ветвью SGML. Преимущество здесь заключается в простоте адаптации программных средств SGML для работы с HTML.
«4. Будет легче писать программы, обрабатывающие XML-документы.»
Для практического использования XML необходимо, чтобы было достаточно просто писать браузеры и другие программы, обрабатывающие XML-документы. На деле основной причиной выделения XML из SGML была доступность написания программ для обработки XML-документов.
«5. Количество дополнительных функций в XML должно быть минимальным, а в идеале - нулевым.»
Минимальное число дополнительных функций в XML упрощает написание программ для обработки XML-документов. Изобилие дополнительных подключаемых функщй в SGML стало основной причиной, обусловившей его практическую непригодность для представления Web-документов. Дополнительные функции SGML требуют переопределения символов-разделителей для тегов (обычно
) и пропуск конечного тега с целью обнаружения процессором конца элемента. При строгом написании программы обработки SGML-документов необходимо учитывать возможность появления всех дополнительных функций, даже если они редко встречаются. «6. XML-документы должны быть понятными и ясными для пользователя.»
XML призван стать lingua franca (универсальным языком) для обмена информацией среди пользователей и программ по всему миру. В соответствии с этой концепцией пользователи, а также специализированные программы, должны иметь возможность создавать и прочитывать XML-документы. Доступность и прозрачность для пользователя выделяют XML из большинства других форматов, применяемых при построении баз данных и текстовых документов.
Пользователь может легко прочесть XML-документ, поскольку он описан простым текстом и имеет логичную иерархическую структуру в виде дерева. Вы можете упростить XML-документы, назначив информативные имена для элементов, атрибутов и объектов, а также добавив полезные комментарии. (Об этом пойдет речь далее в данной главе.)
«7. Разработка XML должна быть завершена достаточно быстро.»
XML станет общепринятым стандартом лишь в том случае, если программисты и пользователи примут его. Следует создать этот стандарт до того, как общество примет альтернативные стандарты, которые все быстрее создаются компаниями-разработчиками программного обеспечения.
«8. Язык XML должен быть формальным и кратким.»
Спецификация XML написана на формальном языке, используемом для представления компьютерных языков, с нотацией, известной как расширенная форма Бакус-Наура (Extended Backus-Naur Form (EBNF)). Этот формальный язык, хотя и достаточно сложен для восприятия, лишен двусмысленности и существенно облегчает написание XML-документов, а в особенности программ для их обработки.
«9. XML-документы будет проще создавать.»
При практическом использовании XML как языка разметки для Web-документов упрощается не только написание обрабатывающих программ, но и процесс создания самих XML-документов.
«10. Сжатая форма при XML-разметке не важна.»
В соответствии с пунктом 6 (XML-документ должен быть ясным и понятным для пользователя), XML-разметка не должна быть излишне сжатой, чтобы не вступать в противоречие с указанной целью.
Стандартные XML-приложения
Вы можете использовать XML не только для описания отдельного документа. Индивидуальный пользователь, компания или комитет по стандартам может определить необходимый набор элементов XML и структуру документа, которые будут применяться для особого класса документов. Подобный набор элементов и описание структуры документа называют XML-приложением или XML-словарем.
Например, организация может определить XML-приложение для создания документов, описывающих молекулярные структуры, человеческие ресурсы, мультимедиа-презентации или содержащих векторную графику. В конце главы приведен список некоторых уже созданных общеупотребительных XML-приложений и приложений, создание которых планируется.
XML-приложение обычно определяется созданием описателя типа документа (DTD), который является допустимым компонентом XML-документа. DTD построен по схеме базы данных: он устанавливает и определяет имена элементов, которые могут быть использованы в документе, порядок, в котором элементы могут появляться, доступные к применению атрибуты элементов и другие особенности документа. Для практического использования XML-приложения вы обычно включаете его DTD в ваш XML-документ; наличие DTD в документе ограничивает круг элементов и структур, которые вы будете использовать, вследствие чего ваш документ отвечает стандартам данного приложения. Описания XML-документов, рассмотренных ранее в этой главе, не включали DTD. О том, как задавать и использовать DTD, вы узнаете в главе 5.
Преимущества применения стандартных XML-приложений при разработке ваших документов состоят в том, что вы можете совместно использовать документы со всеми другими пользователями приложения, а документ может обрабатываться и отображаться с помощью программного обеспечения, которое уже создано для данного приложения.
XML-приложения, повышающие качество XML-документов
Кроме XML-приложений для описания определенных классов документов, имеется несколько XML-приложений, которые вы можете применять внутри XML-документа любого типа. Эти приложения облегчают создание документа и улучшают его качество. Ниже приведены примеры таких приложений.
- Extensible Stylesheet Language (XSL) позволяет вам создавать мощные стилевые таблицы с использованием синтаксиса XML.
- XML Schema позволяет разрабатывать подробные схемы для ваших XML-документов с использованием стандартного синтаксиса XML, что является более мощной альтернативой применения DTD.
- XML Linking Language (XLink) дает возможность связывать ваши XML-документы. Он поддерживает множественные целевые ссылки и другие полезные функции, обеспечивая большую свободу по сравнению с механизмом организации ссылок в HTML.
- XML Pointer Language (XPointer) позволяет определять гибкие целевые ссылки. При совместном использовании XPointer и XLink вы можете организовывать ссылки на любое место в целевом документе -а не только переходы к специально выделенным пунктам.
Об XLS будет рассказано в главе 10. Другие XML-приложения еще не доведены до готовности и не рассматриваются в этой книге. (XLink и XPointer не поддерживаются в Internet Explorer 5).
Как видите, XML является не только полезным инструментом для описания документов, но и служит основой для построения приложений и расширении, которые могут оказаться востребованными по мере развития Internet.
Реальное использование XML
Хотя концепция XML весьма интересна, у вас может возникнуть вопрос, как его применить на практике. В этом разделе приведен перечень примеров такого применения XML, как уже широко используемых, так и перспективных. Если имеются соответствующие XML-приложения для практического использования, они будут приведены в скобках. Например, вы сможете узнать, что XML-приложение MathML позволит вам форматировать математические формулы.
Ссылка . Более полный список текущих и перспективных XML-приложений, включая их подробное описание, вы можете найти на Web-странице Oasis SGML/XML (http://www.oasis-open.arg/cover/ocml . htmW applications).
- Работа с базами данных. Подобно традиционным базам данных, XML может быть использован для присвоения метки каждому полю информации внутри каждой записи базы данных. (Например, можно пометить каждое имя, адрес и номер телефона внутри записей списка адресов.) После этого вы сможете отображать данные различными способами и организовывать поиск, сортировку, фильтрацию и иную обработку данных.
- Структурирование документов. Иерархическая структура XML-до-кументов идеально подходит для разметки структуры таких документов, как романы, научные труды, пьесы. Например, вы можете использовать XML для разметки пьесы на акты, сцены, размечать действующих лиц, сюжетные линии, декорации и т. д. XML-разметка дает возможность программам отображать или распечатывать документ в необходимом формате; находить, извлекать или манипулировать информацией в документе; генерировать оглавления, резюме и аннотации; обрабатывать информацию иными способами.
- Работа с векторной графикой (VML - Vector Markup Language).
- Мультимедиа презентации (SMIL - Synchronized Multimedia Integration Language, HTML + TIME - HTML Timed Interactive Multimedia Extensions).
- Описание каналов. Каналы представляют собой Web-страницы, которые автоматически рассылаются подписчикам. (CDF - Channel Definition Format).
- Описание программных пакетов и их взаимосвязей. Такие описания обеспечивают распространение и обновление программных продуктов в сети (OSD - Open Software Description).
- Взаимодействие приложений через Web с использованием XML-co-общений. Эти сообщения являются независимыми от операционных систем, объектных моделей и компьютерных языков (SOAP - Simple Object Access Protocol).
- Отправка электронных бизнес-карт через e-mail.
- Обмен финансовой информацией. Обмен информацией в открытом и понятном формате осуществляется между финансовыми программами (такими как Quicken и Microsoft Money) и финансовыми институтами (банками, общественными фондами) (OFX - Open Financial Exchange).
- Создание, управление и использование сложных цифровых форм для коммерческих Internet-транзакций. Подобные формы могут включать оцифрованные подписи, которые делают их признанными юридически (XFDL - Extensible Forms Description Language).
- Обмен запросами по приему на работу и резюме (HRMML - Human Resource Management Markup Language).
- Форматирование математических формул и научной информации в
- Web (MathML - Mathematical Markup Language).
- Описание молекулярных структур (CML - Chemical Markup Language).
- Кодирование и отображение информации о ДНК, РНК и цепочках (BSML - Bioinformatic Sequence Markup Language).
- Кодирование генеалогических данных (GeDML - Genealogical Data Markup Language).
- Обмен астрономическими данными (AML - Astronomical Markup Language).
- Создание музыкальных партитур (MusicML -Music Markup Language).
- Работа с голосовыми сценариями для доставки информации по телефону. Голосовые сценарии могут быть использованы, например, для генерирования голосовых сообщений, справок о наличии товаров и прогнозов погоды (VoxML).
- Обработка и доставка информации курьерскими службами. Служба Federal Express, например, уже использует XML для этих целей.
- Представление рекламы в прессе в цифровом формате (AdMarkup).
- Заполнение юридических документов и электронный обмен юридической информацией (XCL - XML Court Interface).
- Кодирование прогнозов погоды (OMF - Weather Observation Markup Format).
- Обмен информацией по операциям с недвижимостью (RETS - Real Estate Transaction Standard).
- Обмен страховой информацией.
- Обмен новостями и информацией с использованием открытых Web-стандартов (XMLNews).
- Представление религиозной информации и разметка текстов богослужений (ThML - Theological Markup Language, LitML - Liturgical Markup Language).
Люсинда Дайкс, Эд Титтель
XML - это язык разметки, который создает веб-страницы. Прежде чем вы начнете использовать XML, изучите разницу между действительным и хорошо сформированным документом, как создать элементы определения DTD (Document Type Definition) и основные объявления схем для создания XML-документа. Вы также захотите понимать регулярно используемые зарезервированные символы, а также какие веб-браузеры лучше всего поддерживают XML и таблицы стилей.
Действительный в сравнении с хорошо сформированным XML-документом
В XML действительный документ должен соответствовать правилам в его DTD (определение типа документа) или схеме, который определяет, какие элементы могут отображаться в документа и того, как элементы могут входить друг в друга. Если документ плохо сформирован, он не продвигается далеко в XML-мире, поэтому при создании XML-документа вам необходимо играть по некоторым очень простым правилам. A хорошо сформированный документ должен иметь следующие компоненты:
Все начальные и конечные теги совпадают. Другими словами, открывающие и закрывающие части всегда должны содержать одно и то же имя в одном и том же случае: … или …, но не ….
Пустые элементы следуют специальному синтаксису XML, например .
Все значения атрибутов встречаются в одинарных или двойных кавычках: id = "value"> или .
Правила создания определения типа документа или DTD, Элементы
В принципе, вы готовите и используете определение типа документа (DTD) для добавления структуры и логики, что упрощает обеспечение присутствия всех необходимых функций - в правильном порядке - в вашем XML-документе. Вы можете разработать множество правил в DTD, которые контролируют, как элементы могут использоваться в XML-документе.
Символ Значение Пример #PCDATA Содержит разобранные символьные данные или текст #PCDATA, имя-элемента Содержит текст и другой элемент; #PCDATA всегда отображается первым в правиле child) *> , (запятая) Необходимо использовать в этом порядке child3)> | (панель труб) Использовать только один элемент из предоставленных вариантов child3)> имя-элемента (само по себе) Использовать только одно имя имя-элемента? child3?)> имя-элемента + Использовать один или несколько раз child3)> имя-элемента * Использовать один раз, много раз или вообще нет child3)> () Указывает группы; может быть вложенным или
child4)>Декларации основных XML-схем
Документ XML Schema построен из серии объявлений, которые дают очень подробную информацию и обеспечивают, чтобы информация, содержащаяся в документе XML, находилась в правильной форме.
Объявление Назначение Синтаксис Схема Определяет язык, который использует схема xmlns: xsd = " // www. w3. org / 2001 / XMLSchema "> Элемент Определяет элемент Атрибут Определяет атрибут type =" type "> Сложный тип Определяет элемент, который содержит другие элементы, содержит атрибуты
или содержит смешанный контент (элементы и текст)Простой тип Создает ограниченный тип данных для элемента или атрибута
значениеПоследовательный компоновщик Указывает, что атрибуты или элементы в сложном типе
должны быть перечислены в порядкеChoice compositor Указывает, что может использоваться любой из атрибутов или элементов в сложном типе All compositor Указывает, что могут быть использованы любые или все атрибуты или элементы в сложном типе Аннотация Содержит элементы документации и / или appInfo, которые предоставляют
дополнительную информацию и комментарии к документу схемыДокументация Предоставляет удобочитаемую информацию в аннотации Информация о приложении Предоставляет читаемую компьютером информацию в пределах
аннотациюОбщие зарезервированные символы в XML
Некоторые объекты зарезервированы для внутреннего использования в XML и должны быть заменены символьными ссылками в вашем контенте. Эти пять обычно используемых внутренних объектов уже определены как часть XML и готовы к использованию:
CSS1?
XSLT 1. 0? Да Да Нет Нет Internet Explorer 6. 0 Да Да Да Да Mozilla 1. 7. 5 Да Да Да Да Mozilla Firefox 1. 0 Да Да Да Да Netscape Navigator 7 Да Да Да Да Opera 7 Да Да Да Нет