Основы XML для начинающих пользователей. "В жизни все не так, как на самом деле."

(англ. Standard Generalized Markup Language - стандартный обобщённый язык разметки) заявил о себе как гибкий, комплексный и всеохватывающий мета-язык для создания языков разметки. Несмотря на то, что понятие гипертекста появилось в 1965 году , SGML не имеет гипертекстовой модели. Создание SGML можно с уверенностью назвать попыткой объять необъятное, так как он объединяет в себе такие возможности, которые крайне редко используются все вместе. В этом и состоит его главный недостаток - сложность и, как следствие, дороговизна этого языка ограничивает его использование только крупными компаниями, которые могут позволить себе купить соответствующее программное обеспечение и нанять высокооплачиваемых специалистов. Кроме того, у небольших компаний редко возникают настолько сложные задачи, чтобы привлекать к их решению SGML.

Наиболее широко SGML применяется для создания других языков разметки, именно с его помощью был создан язык разметки гипертекстовых документов - HTML , спецификация которого была утверждена в 1992 году . Его появление было связано с необходимостью организации стремительно увеличивающегося массива документов в сети Интернет. Бурный рост количества подключений к Интернету и, соответственно, веб-серверов повлек за собой такую потребность в кодировке электронных документов, с которой не мог справиться SGML вследствие высокой трудности освоения. Появление HTML - очень простого языка разметки - быстро решило эту проблему: лёгкость в изучении и богатство средств оформления документов сделали его самым популярным языком для пользователей Интернет. Но, по мере роста количества и изменения качества документов в Сети, росли и предъявляемые к ним требования, и простота HTML превратилась в его главный недостаток. Ограниченность количества тегов и полное безразличие к структуре документа побудили разработчиков в лице консорциума W3C к созданию такого языка разметки, который был бы не столь сложен, как SGML, и не настолько примитивен, как HTML. В результате на свет появился язык XML, сочетающий в себе простоту HTML, логику разметки SGML и удовлетворяющий требованиям Интернета.

Правильно построенные и действительные документы XML

Стандартом определены два уровня правильности документа XML:

  • Правильно построенный (англ. well-formed ). Правильно построенный документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу. И если, например, начальный тег не имеет соответствующего ему конечного тега, то это неправильно построенный документ XML. Документ, который неправильно построен, не может считаться документом XML; XML-процессор (парсер) не должен обрабатывать его обычным образом и обязан классифицировать ситуацию как фатальная ошибка.
  • Действительный (англ. valid ). Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам, в целях минимизации количества ошибок, например, структуры и состава данного, конкретного документа или семейства документов. Эти правила могут быть разработаны как самим пользователем, так и сторонними разработчиками, например, разработчиками словарей или стандартов обмена данными. Обычно такие правила хранятся в специальных файлах - схемах, где самым подробным образом описана структура документа, все допустимые названия элементов, атрибутов и многое другое. И если документ, например, содержит не определённое заранее в схемах название элемента, то XML-документ считается недействительным ; проверяющий XML-процессор (валидатор) при проверке на соответствие правилам и схемам обязан (по выбору пользователя) сообщить об ошибке.

Данные два понятия не имеют достаточно устоявшегося стандартизированного перевода на русский язык, особенно понятие valid , которое можно также перевести, как имеющий силу , правомерный , надёжный , годный , или даже проверенный на соответствие правилам, стандартам, законам . Некоторые программисты применяют в обиходе устоявшуюся кальку «Валидный ».

Синтаксис XML

В этом разделе рассматривается лишь правильное построение документов XML, то есть их синтаксис.

Рассмотрим пример простого кулинарного рецепта, размеченного с помощью XML:

> Простой хлеб> > Мука> Дрожжи> Тёплая вода> Соль> > > > Смешать все ингредиенты и тщательно замесить.> > Закрыть тканью и оставить на один час в тёплом помещении.> > Замесить ещё раз, положить на противень и поставить в духовку.> > >

Объявление XML

Первая строка XML-документа называется объявление XML (англ. XML declaration ) - это строка, указывающая версию XML. В версии 1.0 объявление XML может быть опущено, в версии 1.1 оно обязательно. Также здесь может быть указана кодировка символов и наличие внешних зависимостей.

Спецификация требует, чтобы процессоры XML обязательно поддерживали Юникод -кодировки UTF-8 и UTF-16 (UTF-32 не обязателен). Признаются допустимыми, поддерживаются и широко используются (но не обязательны) другие кодировки, основанные на стандарте ISO/IEC 8859 , также допустимы другие кодировки, например, русские Windows-1251 , KOI-8 . Часто в тегах принципиально не используют не-латинские буквы, в этом случае UTF-8 является очень удобной кодировкой - объём, как правило, меньше, чем при UTF-16; декодирование может быть выполнено как для всего документа, так и для конкретных атрибутов и текстов; весь документ не содержит запрещённых символов при попытке разбора с неправильной кодировкой.

Корневой элемент

Важнейшее обязательное синтаксическое требование заключается в том, что документ имеет только один корневой элемент (англ. root element ) (также иногда называемый элемент документа (англ. document element )). Это означает, что текст или другие данные всего документа должны быть расположены между единственным начальным корневым тегом и соответствующим ему конечным тегом.

Следующий простейший пример - правильно построенный документ XML:

Следующий пример не является корректным XML-документом, потому что имеет два корневых элемента :

> Сущность №1> > Сущность №2>

Комментарий

В любом месте дерева может быть размещен элемент-комментарий . XML-комментарии размещаются внутри специального тега, начинающегося с символов . Два знака дефис (--) внутри комментария присутствовать не могут.

Теги внутри комментария обрабатываться не должны.

Теги

Остальная часть этого XML-документа состоит из вложенных элементов , некоторые из которых имеют атрибуты и содержимое . Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, , а закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, . Имена элементов, как и имена атрибутов, не могут содержать пробелы , но могут быть на любом языке, поддерживаемом кодировкой XML-документа. Имя может начинаться с буквы, подчёркивания, двоеточия. Остальными символами имени могут быть те же символы, а также цифры, дефис, точка.

В XML есть несколько предопределённых сущностей, таких как lt (ссылаться на неё можно написав <) для левой угловой скобки и amp (ссылка - &) для амперсанда. Возможно также определять собственные сущности. Помимо записи с помощью сущностей отдельных символов, их можно использовать для записи часто встречающихся текстовых блоков.

Ниже приведён пример использования предопределённой сущности для избежания использования знака амперсанда в названии:

> AT& T>

Полный список предопределённых сущностей состоит из & (&), < (<), > (>), " (") и " (") - последние две полезны для записи разделителей внутри значений атрибутов. Определить свои сущности можно в DTD-документе.

Иногда бывает необходимо определить неразрывный пробел, который очень часто используется в HTML и обозначается как. В XML такой предопределённой сущности нет, его записывают, а использование вызывает ошибку. Отсутствие этой весьма распространённой сущности у множества программистов зачастую вызывает удивление и это создаёт некоторые трудности при миграции своих HTML-разработок в XML.

Ссылка по номеру символа (англ. numeric character reference ) выглядит как ссылка на сущность, но вместо имени сущности указывается символ # и число (в десятичной или шестнадцатеричной записи), являющееся номером символа в кодовой таблице Юникод . Это обычно символы, которые невозможно закодировать напрямую, например, буква арабского алфавита в ASCII -кодированном документе. Амперсанд может быть представлен следующим образом:

> AT& T>

Существуют и другие правила, касающиеся составления корректного XML-документа.

Сильные и слабые стороны

Достоинства

Недостатки

  • Неоднозначность моделирования.
  • XML не содержит встроенной в язык поддержки типов данных . В нём нет строгой типизации, то есть понятий «целых чисел», «строк», «дат», «булевых значений» и т. д.
  • Иерархическая модель данных , предлагаемая XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами и сетевой моделью данных.

Отображение XML во Всемирной паутине

Наиболее распространены три способа преобразования XML-документа в отображаемый пользователю вид:

  1. Применение стилей CSS ;
  2. Применение XSL ;
  3. Написание на каком-либо языке программирования обработчика XML-документа.

Для задания XSL трансформации (XSLT) на стороне клиента требуется наличие в XML инструкции следующего вида:

Словари XML

Так как XML является достаточно абстрактным языком, были разработаны словари XML.

Словарь позволяет разработчикам договориться о некотором конечном наборе имен тегов и атрибутов этих тегов. Одним из первых словарей является XHTML , который понимают большинство браузеров. XHTML часто используют для хранения и редактирования контента в CMS .

Были созданы более специализированные словари, например протокол передачи данных SOAP , который не является человеко-ориентированным и достаточно трудно читаем. Есть коммерческие словари, такие как CommerceML , xCBL и cXML которые используются для передачи данных, ориентированных на торговую деятельность, эти словари включают в себя описание системы заказов, поставщиков, продуктов и прочее.

Обычно, описывая какой-либо документ, человек для себя придумывает некоторый словарь, который потом описывается посредством DTD , XSD или просто объясняет «на пальцах» заинтересованным лицам.

Одним из словарей, получивших широкое распространение, является FB2 - словарь, описывающий формат книги, со всевозможными сносками, цитатами, даже картинками.

Версии XML

  • XML 1.0
  • XML 1.1

См. также

Примечания

Литература

  • Дэвид Хантер, Джефф Рафтер, Джо Фаусетт, Эрик ван дер Влист, и др. XML. Работа с XML, 4-е издание = Beginning XML, 4th Edition. - М .: «Диалектика», 2009. - 1344 с. - ISBN 978-5-8459-1533-7
  • Дэвид Хантер, Джефф Рафтер и др. XML. Базовый курс = Beginning XML. - М .: Вильямс, 2009. - 1344 с. - ISBN 978-5-8459-1533-7
  • Роберт Тейбор. Реализация XML Web-служб на платформе Microsoft .NET = Microsoft .NET XML Web Services. - М .: Вильямс, 2002. - 464 с. - ISBN 0-672-32088-6

Ссылки

  • XML на сайте Консорциума Всемирной паутины (W3C)
  • Официальная спецификация стандарта XML 1.0 (англ.)
  • Официальная спецификация стандарта XML 1.1 (англ.)
  • Документация по XML на сайте IBM статьи, форумы

Стандартом определены два уровня правильности документа XML:

  • Правильно построенный (Well-formed). Правильно построенный документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу. И если, например, начальный тег не имеет соответствующего ему конечного тега, то это неправильно построенный документ XML. Документ, который неправильно построен, не может считаться документом XML; XML-процессор (парсер) не должен обрабатывать его обычным образом и обязан классифицировать ситуацию как фатальная ошибка .
  • Действительный (Valid). Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам, в целях минимизации количества ошибок, например, структуры и состава данного, конкретного документа или семейства документов. Эти правила могут быть разработаны как самим пользователем, так и сторонними разработчиками, например, разработчиками словарей или стандартов обмена данными. Обычно такие правила хранятся в специальных файлах - схемах, где самым подробным образом описана структура документа, все допустимые названия элементов, атрибутов и многое другое. И если документ, например, содержит не определённое заранее в схемах название элемента, то XML-документ считается недействительным ; проверяющий XML-процессор (валидатор) при проверке на соответствие правилам и схемам обязан (по выбору пользователя) сообщить об ошибке.

Данные два понятия не имеют достаточно устоявшегося стандартизированного перевода на русский язык, особенно понятие valid , которое можно также перевести, как имеющий силу , правомерный , надёжный , годный , или даже проверенный на соответствие правилам, стандартам, законам . Некоторые программисты применяют в обиходе устоявшуюся кальку «Валидный ».

Синтаксис XML

В этом разделе рассматривается лишь правильное построение документов XML, то есть их синтаксис.

XML - это иерархическая структура, предназначенная для хранения любых данных, визуально структура может быть представлена как дерево . Важнейшее обязательное синтаксическое требование - то, что документ имеет только один корневой элемент (root element) (альтернативно называемый элементом документа ). Это означает, что текст или другие данные всего документа должны быть расположены между единственным начальным корневым тегом и соответствующим ему конечным тегом.

Следующий простейший пример - правильно построенный документ XML: Это книга: "Книжечка" Первая строка XML-документа называется объявлением XML (XML declaration) - это необязательная строка, указывающая версию стандарта XML (обычно это 1.0), также здесь может быть указана кодировка символов и внешние зависимости. Спецификация требует, чтобы процессоры XML обязательно поддерживали Юникод -кодировки UTF-8 и UTF-16 (UTF-32 не обязателен). Признаются допустимыми, поддерживаются и широко используются (но не обязательны) другие кодировки, основанные на стандарте ISO/IEC 8859 , также допустимы другие кодировки, например, русские Windows-1251 , KOI-8 .

Комментарий может быть размещен в любом месте дерева. XML комментарии размещаются внутри пары тегов . Два знака дефис (--) не могут быть применены ни в какой части внутри комментария.

Ниже приведён пример простого кулинарного рецепта, размеченного с помощью XML:

Простой хлеб Мука Дрожжи Тёплая вода Соль

Структура

Остальная часть этого XML-документа состоит из вложенных элементов , некоторые из которых имеют атрибуты и содержимое . Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, « »; закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, « ». Содержимым элемента (content) называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы. Ниже приведён пример XML-элемента, который содержит открывающий тег, закрывающий тег и содержимое элемента:

Замесить ещё раз, положить на противень и поставить в духовку.

Мука

В приведённом примере у элемента « ingredient » есть два атрибута: « amount », имеющий значение «3», и « unit », имеющий значение «стакан». С точки зрения XML-разметки, приведённые атрибуты не несут никакого смысла, а являются просто набором символов.

Кроме текста, элемент может содержать другие элементы:

Смешать все ингредиенты и тщательно замесить. Закрыть тканью и оставить на один час в тёплом помещении. Замесить ещё раз, положить на противень и поставить в духовку.

В данном случае элемент « Instructions » содержит три элемента « step ». XML не допускает перекрывающихся элементов. Например, приведённый ниже фрагмент некорректен, так как элементы « em » и « strong » перекрываются.

Обычный акцентированный выделенный и акцентированный выделенный

Каждый XML-документ должен содержать в точности один корневой элемент (root element или document element ), таким образом, следующий фрагмент не может считаться корректным XML-документом.

Сущность №1 Сущность №2

Для обозначения элемента без содержания, называемого пустым элементом , необходимо применять особую форму записи, состоящую из одного тега, в котором после имени элемента ставится косая черта. Если в DTD элемент не объявлен пустым, но в документе он не имеет содержания, для него допускается применять такую форму записи. Например:

В XML определены два метода записи специальных символов: ссылка на сущность и ссылка по номеру символа. Сущностью (entity) в XML называются именованные данные, обычно текстовые, в частности, спецсимволы. Ссылка на сущность (entity references) указывается в том месте, где должна быть сущность и состоит из амперсанда (« & »), имени сущности и точки с запятой (« ; »). В XML есть несколько предопределённых сущностей, таких как « lt » (ссылаться на неё можно написав « < ») для левой угловой скобки и « amp » (ссылка - « & ») для амперсанда, возможно также определять собственные сущности. Помимо записи с помощью сущностей отдельных символов, их можно использовать для записи часто встречающихся текстовых блоков. Ниже приведён пример использования предопределённой сущности для избежания использования знака амперсанда в названии:

AT&T

Полный список предопределённых сущностей состоит из & («&»), < («<»), > («>»), " («"»), и " («"») - последние две полезны для записи разделителей внутри значений атрибутов. Определить свои сущности можно в DTD -документе.

Иногда бывает необходимо определить неразрывный пробел, который очень часто используется в HTML и обозначается как в XML такой предопределённой сущности нет, его записывают, а использование вызывает ошибку. Отсутствие этой весьма распространённой сущности у множества программистов зачастую вызывает удивление и это создаёт некоторые трудности при миграции своих HTML-разработок в XML.

Ссылка по номеру символа (numeric character reference) выглядит как ссылка на сущность, но вместо имени сущности указывается символ # и число (в десятичной или шестнадцатеричной записи), являющееся номером символа в кодовой таблице Юникод . Это обычно символы, которые невозможно закодировать напрямую, например, буква арабского алфавита в ASCII -кодированном документе. Амперсанд может быть представлен следующим образом:

AT&T

Существует ещё множество правил, касающихся составления корректного XML-документа, но целью данного краткого обзора было лишь показать основы, необходимые для понимания структуры XML-документа.

История

Годом рождения XML можно считать 1996 год , в конце которого появился черновой вариант спецификации языка, или , когда эта спецификация была утверждена. А началось всё с появления в 1986 году языка SGML.

SGML (Standard Generalized Markup Language - стандартный обобщённый язык разметки) заявил о себе как гибкий, комплексный и всеохватывающий мета-язык для создания языков разметки. Несмотря на то, что понятие гипертекста появилось в 1965 году (а основопологающие принципы сформулированы в 1945 году ), SGML не имеет гипертекстовой модели. Создание SGML можно с уверенностью назвать попыткой объять необъятное, так как он объединяет в себе такие возможности, которые крайне редко используются все вместе. В этом и состоит его главный недостаток - сложность и, как следствие, дороговизна этого языка ограничивает его использование только крупными компаниями, которые могут позволить себе купить соответствующее программное обеспечение и нанять высокооплачиваемых специалистов. Кроме того, у небольших компаний редко возникают настолько сложные задачи, чтобы привлекать к их решению SGML.

Наиболее широко SGML применяется для создания других языков разметки, именно с его помощью был создан язык разметки гипертекстовых документов - HTML , спецификация которого была утверждена в 1992 году . Его появление было связано с необходимостью организации стремительно увеличивающегося массива документов в сети Интернет. Бурный рост количества подключений к Интернету и, соответственно, Web -серверов повлек за собой такую потребность в кодировке электронных документов, с которой не мог справиться SGML вследствие высокой трудности освоения. Появление HTML - очень простого языка разметки - быстро решило эту проблему: лёгкость в изучении и богатство средств оформления документов сделали его самым популярным языком для пользователей Интернет. Но, по мере роста количества и изменения качества документов в Сети, росли и предъявляемые к ним требования, и простота HTML превратилась в его главный недостаток. Ограниченность количества тегов и полное безразличие к структуре документа побудили разработчиков в лице консорциума W3C к созданию такого языка разметки, который был бы не столь сложен, как SGML, и не настолько примитивен, как HTML. В результате, сочетая в себе простоту HTML, логику разметки SGML и удовлетворяя требованиям Интернет, появился на свет язык XML.

Сильные и слабые стороны

Достоинства

Недостатки

  • Неоднозначность моделирования.
  • XML не содержит встроенной в язык поддержки типов данных . В нём нет строгой типизации, то есть понятий «целых чисел», «строк», «дат», «булевых значений» и т. д.
  • Иерархическая модель данных , предлагаемая XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами и сетевой моделью данных.

Отображение XML во Всемирной паутине

Наиболее распространены три способа преобразования XML-документа в отображаемый пользователю вид:

  1. Применение стилей CSS ;
  2. Применение преобразования XSLT ;
  3. Написание на каком-либо языке программирования обработчика XML-документа.

Без использования CSS или XSL XML-документ отображается как простой текст в большинстве Web-браузеров. Некоторые браузеры, такие как Internet Explorer , Mozilla и Mozilla Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.

Применение стилей CSS

Процесс аналогичен применению CSS к HTML документу для отображения.

Для применения CSS при отображении в браузере, XML документ должен содержать специальную ссылку на таблицу стилей. Например:

Это отличается от подхода HTML, где используется элемент .

Применение преобразования XSLT

XSL является технологией, описывающей как форматировать или преобразовывать данные XML-документа. Документ трансформируется в формат, подходящий для отображения в браузере. Браузер - это наиболее частое использование XSL, но не стоит забывать, что с помощью XSL можно трансформировать XML в любой формат, например

Мы снова продолжаем изучение XML и в данной статье познакомимся с такими конструкциями XML, как процессинговые инструкции, комментарии, атрибуты и другие элементы XML. Эти элементы являются базовыми и позволяют гибко, в четком соответствии со стандартом размечать документы абсолютно любой сложности.

Некоторые моменты, такие как теги XML, мы уже частично рассматривали в предыдущей статье « ». Теперь мы еще раз затронем эту тему и разберем ее более подробно. Это сделано специально, чтобы вам было проще представить всю картину конструкций XML.

Элементы XML. Пустые и непустые элементы XML

Как уже говорилось в предыдущей статье, теги в XML не просто размечают текст, как это бывает в HTML, а выделяют отдельные элементы (объекты). В свою очередь элементы иерархически организуют информацию в документе, что в свою очередь и сделало их основными структурными единицами языка XML.

В XML элементы могут быть двух типов – пустые и непустые. Пустые элементы не содержат в себе никаких данных, таких как текст или другие конструкции. В отличие от пустых элементов, непустые могут содержать в себе любые данные, такие как текст или другие элементы и конструкции языка XML. Чтобы понять суть вышесказанного, давайте рассмотрим примеры пустых и непустых элементов XML.

Пустой элемент XML

Непустой элемент XML

Содержимое элемента...

Как мы видим с примера выше, главным отличием пустых элементов от непустых является то, что они состоят только из одного тега. Кроме того стоит также заметить, что в XML все имена регистрозависимые. Это означает, что имена myElement, MyElement, MYELEMENT и т.д. различаются между собой, поэтому данный момент стоит сразу запомнить, чтобы избежать ошибок в будущем.
Итак, с элементами мы разобрались. Теперь давайте перейдем к следующему моменту, такому как логическая организация XML-документов.

Логическая организация XML-документов. Древовидная структура XML данных

Как вы помните, основной конструкцией языка XML являются элементы, которые могут содержать в себе другие вложенные конструкции и тем самым формировать иерархическую структуру в виде дерева. В этом случае родительский элемент будет корнем, а все остальные дочерние элементы будут ветками и листьями дерева XML.

Чтобы было проще понять суть вышесказанного, давайте рассмотрим следующее изображение с примером.

Как мы видим, организация XML-документа в виде дерева является довольно простой структурой для обработки. При этом выразительная сложность самого дерева достаточно велика. Именно древовидное представление является наиболее оптимальным способом описания объектов в XML.

Атрибуты XML. Правила записи атрибутов в XML

В XML элементы могут содержать также и атрибуты с присвоенными им значениями, которые помещаются в одинарные или двойные кавычки. Атрибут для элемента задается следующим образом:

В данном случае использовался атрибут с именем «attribute» и значением «value». Тут стоит сразу заметить, что атрибут XML обязательно должен содержать какое-то значение и не может быть пустым. В противном случае код будет некорректным с точки зрения XML.

Также стоит обратить внимание на использование кавычек. Значение атрибутов может заключаться как в одинарные, так и в двойные кавычки. Кроме того возможно также использование одних кавычек внутри других. Для демонстрации рассмотрим следующие примеры.

Прежде чем приступить к рассмотрению других конструкций XML стоит также заметить, что при создании атрибутов в качестве значений не могут использоваться такие специальные символы, как амперсанд «&» или угловые скобки «<>». Данные символы зарезервированы в качестве управляющих («&» — сущность, а «<» и «>» открывают и закрывают тег элемента) и не могут быть использованы в «чистом виде». Для их использования нужно прибегать к замене спецсимволов.

Инструкции по обработке XML (процессинговые инструкции). XML-декларация

В языке XML есть возможность включения в документе инструкций, которые несут определенную информацию для приложений, которые будут обрабатывать тот или иной документ. Инструкции по обработке в XML создаются следующим образом.

Как видно с примера выше, в XML инструкции по обработке заключаются в угловые кавычки со знаком вопроса. Это немного напоминает обычный , который мы рассматривали в первых уроках по PHP. В первой части процессинговой инструкции определяется приложение или система, которой предназначена вторая часть этой инструкции или ее содержимое. При этом инструкции по обработке действительны только для тех приложений, которым они адресованы. Примером процессинговой инструкции может быть следующая инструкция.

Стоит заметить, что в XML есть особая конструкция, которая очень сильно похожа на инструкцию по обработке, но сама она такой не является. Речь идет об XML-декларации, которая передает обрабатывающему программному обеспечению некоторую информацию о свойствах XML-документа, таких как кодировка, версия языка в соответствии с которым написан данный документ и т.д.

Как видно с примера выше, XML-декларация содержит так называемые псевдоатрибуты, которые очень похожи на обычные атрибуты, о которых мы говорили чуть выше. Дело в том, что по определению XML-декларация и инструкции по обработке не могут содержать атрибутов, поэтому данные объявления назвали псевдоатрибутами. Это стоит запомнить на будущее во избежание разнообразных ошибок.

Поскольку мы разобрались с псевдоатрибутами, то давайте рассмотрим, что же они означают.

  • Encoding – отвечает за кодировку XML документа. Обычно используется кодировка UTF8.
  • Version – версия языка XML, на котором написан данный документ. Обычно это XML версии 1.0.

Ну а теперь перейдем к заключающей части статьи и рассмотрим такие конструкции XML как комментарии и секции CDATA.

XML (eXtensible Markup Language) — это упрощенный диалект языка SGML, предназначенный для описания иерархических структур данных в World Wide Web. Он разрабатывается рабочей группой W3C с 1996 г.; в настоящее время принятой рекомендацией является вторая редакция языка XML 1.0 (октябрь 2000 г.), на которую и ориентируется дальнейшее изложение.

XML, несомненно, входит в обойму наиболее перспективных технологий WWW, чем объясняется интерес, который уделяется ему и корпорациями-разработчиками, и широкой публикой. Прежде чем перейти к его описанию, представляется уместным обсудить причины его появления и последующего бурного развития. Попытаемся для этого взглянуть на те проблемы WWW, которые должны быть решены средствами нового поколения Веб-технологий.

HTML не выражает смысла документов. Язык HTML был создан для описания структуры документов (название, заголовки, списки, абзацы и т. п.) и, в некоторой степени, правил их отображения (полужирный шрифт, курсивный шрифт и т. п.). Он ни в коей мере не предназначен для описания смысла написанных на нем документов, а во многих случаях именно данные составляют существо документа, будь-то биржевая сводка или научная публикация. Поэтому появилась необходимость в языке описания данных, причем данных, организованных в иерархические структуры. HTML громоздок и негибок. За последние годы HTML превратился в нагромождение тегов, которые часто дублируют друг друга и отнюдь не вносят ясности в текст документа. Если добавить сюда еще и нестандартные расширения HTML, которыми грешат все разработчики обозревателей, то создание мало-мальски сложных HTML-документов становится серьезной задачей. С другой стороны, раз и навсегда зафиксированный набор тегов часто оказывается недостаточно гибким для выражения нужного нам содержания. Концепция Веб-обозревателя слишком ограничена. С появлением Java-аплетов, сценарных языков и элементов ActiveX Веб-обозреватели перестали быть простыми "отображателями" HTML-документов; сегодня скорее они выглядят как программы, запускающие конкретные приложения. Тем не менее, сама концепция обозревателя накладывает излишние ограничения на пользователя; во многих случаях нам нужны Веб-ориентированные приложения , т. е. программы, способные читать специализированную информацию с Веб-узлов и выдавать нам ее в привычном виде, например, в виде электронных таблиц. Поиск документов возвращает слишком много ссылок. Все мы постоянно пользуемся поисковыми системами и постоянно клянем их за неудобство работы. Допустим, что мне нужны все тексты книг Сергея Довлатова, имеющиеся в Сети. Попытка поиска по имени автора приведет к тому, что я получу список всех ссылок с этим именем, включая воспоминания о Довлатове, рецензии на его книги и т. д. Намного удобнее было бы воспользоваться специальным тегом , чтобы указать, что именно я ищу. Невозможно найти взаимосвязанные ресурсы. Допустим теперь, что я все же нашел несколько рассказов Довлатова, которые явно составляют единый сборник. Хорошо, если они содержат ссылку на оглавление, но часто это не так. Поэтому необходим способ указания того, что данная группа страниц составляет единый ресурс и должна обрабатываться соответственно. Для этого необходима стандартизованная и развитая система метаописателей Веб-страниц.

XML — это попытка решить перечисленные проблемы путем создания простого языка разметки, описывающего произвольные структурированные данные. Точнее говоря, это метаязык, на котором пишутся специализированные языки, описывающие данные определенной структуры. Такие языки называются XML-словарями . В отличие от HTML, XML не содержит никаких указаний на то, как описанные в XML-документе данные должны отображаться. Способ отображения данных для различных устройств задается языком описания стилей XSL, который играет для XML примерно ту же роль, что CSS дл HTML. Другое принципиальное его отличие от HTML состоит в том, что XML может содержать любые теги, которые сочтут нужным использовать создатели XML-словаря. Приведем список лишь нескольких специализированных языков на базе XML, которые сегодня находятся в разных стадиях разработки рабочими группами W3C:

  • MathML — язык математических формул;
  • SMIL — язык интеграции и синхронизации мультимедийных средств;
  • SVG — язык двумерной векторной графики;
  • RDF — язык метаописаний ресурсов;
  • XHTML — переформулировка HTML в терминах XML.

Процесс обработки XML-документа состоит в следующем. Его текст анализируется специальной программой, которая называется XML-процессором . XML-процессор ничего не знает о семантике данных в документе; он только производит синтаксический разбор (parsing) текста документа и проверяет его правильность с точки зрени правил XML. Если документ правильно оформлен (well-formed), то результаты разбора текста передаются XML-процессором прикладной программе, которая выполняет их содержательную обработку; если же документ оформлен неверно, т. е. содержит синтаксические ошибки, то XML-процессор должен сообщить о них пользователю.

8.1.2. Применения XML

Возникает вопрос: а какой смысл в использовании "пустого языка", лишенного собственного содержания? Дело в том, что, несмотря на внешнюю простоту, XML обладает достаточно изощренными механизмами контроля правильности данных, позволяет производить проверку иерархических отношений внутри документа, и, самое главное, устанавливает единый стандарт для документов, хранящих данные, какова бы ни была природа этих данных. Остановимся подробнее на некоторых сферах применения языка XML.

Традиционная обработка данных Перечисленные выше возможности позволяют рассматривать XML как платформо-независимый стандарт хранения и представления информации, который в сочетании с другими современными технологиями (в частности, с технологиями Java) способен стать основой для создания любых машинно-независимых приложений, в т. ч. для обмена данными между сервером и клиентом. Кроме того, активно разрабатываемые сегодня языки запросов на базе XML могут составить серьезную конкуренцию языку SQL. Программирование, управляемое документом XML-документы могут служить контейнерами для построения приложений из существующих интерфейсов и компонентов. В этом случае документ состоит из ссылок на компоненты пользовательского интерфейса и модули обработки данных, которые связываются в процессе отображения страницы на экране. Архивирование компонентов Современное программирование базируется на использовании компонентов, которые в идеале должны легко собираться в единое целое с помощью несложного дополнительного кодирования. Основой для этого служит архивирование компонентов, которое, в свою очередь, требует единообразного подхода к их хранению и последующему использованию. Есть все основания полагать, что в ближайшем будущем XML-документы окажутся альтернативой распространенному сегодня хранению компонентов в виде двоичных модулей. Внедрение данных После того, как мы определили структуру данных XML, принципиально несложно написать генератор кода, обрабатывающего эти данные. По мере развития подобных программных средств вся рутинная обработка данных (включая проверку их правильности, представление в нужном формате и т. п.) может быть автоматизирована, позволяя разработчикам сосредоточиться на нестандартных частях создаваемого продукта.

8.1.3. Структура XML-документа

XML-документ состоит из деклараций, элементов, комментариев, специальных символов и директив. Все эти составляющие документа описаны в данной главе.

8.1.3.1. Элементы и атрибуты

XML — это теговый язык разметки документов. Иными словами, любой документ на языке XML представляет собой набор элементов , причем начало и конец каждого элемента обозначается специальными пометками, называемыми тегами .

Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это текст, заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но начинается с косой черты "/". Пример XML-элемента:

Сергей Довлатов

Имена элементов зависят от регистра, т. е. , и — это имена различных элементов. Наличие закрывающего тега всегда обязательно. Если тег является пустым , т. е. не имеет содержимого и закрывающего тега, то он имеет специальную форму:

<элемент/>

Любой элемент может иметь атрибуты , содержащие дополнительную информацию об элементе. Атрибуты всегда включаются в начальный тег элемента и имеют вид:

Имя_атрибута="значение_атрибута"

Аттрибут обязан иметь значение, которое всегда должно быть заключено в одинарные или двойные кавычки. Имена атрибутов также зависят от регистра. Пример элемента, имеющего атрибут:

Сергей Довлатов

Элементы должны либо следовать друг за другом, либо быть вложены один в другой:

Часть речи Бродский, Иосиф Марш одиноких Довлатов, Сергей

Здесь элемент books (книги) содержит два вложенных элемента book (книга), которые, в свою очередь, имеют атрибут isbn и содержат три последовательных элемента: title (название), author (автор) и present (есть в наличии), причем последний пуст, т. к. в данном случае соответствует логическому флажку.

Из приведенного описания видно, что синтаксис XML напоминает синтаксис HTML (что естественно, т. к. оба они являются диалектами одного языка SGML), но требования к оформлению правильных XML-документов выше. Еще одним очень важным отличием XML от HTML является то, что содержимое элементов, т. е. все, что содержится между начальным и конечным тегами, считается данными. Это означает, что XML не игнорирует символы пробела и разрыва строк, как это делает HTML.

8.1.3.2. Пролог и директивы

Любой XML-документ состоит из пролога и корневого элемента , например:

Марш одиноких Довлатов, Сергей

В этом примере пролог сводится к единственной директиве (первая строка документа), указывающей версию XML. За ней следует XML-элемент с уникальным именем, который содержит в себе все остальные элементы и называется корневым. Директива (processing instruction) — это выражение, заключенное в специальные теги "", которое содержит указания программе, обрабатывающей XML-документ.

Стандарт XML резервирует только одну директиву , указывающую на версию языка XML, которой соответствует данный документ (второй версии XML пока нет). В действительности, эта директива несколько богаче и в самом общем виде выглядит так:

Здесь атрибут encoding задает кодировку символов документа. По умолчанию считается, что XML-документы должны создаваться в формате UTF-8 или UTF-16 . Если же используется какая-либо другая кодировка символов, то ее название согласно Таблицы П7.1 должно быть указано в данном атрибуте, как показано в примере. Атрибут standalone говорит о том, содержит ли данный документ. Значение yes означает, что таких разделов нет, значение no — что они есть.

8.1.3.3. Комментарии

XML-документы могут содержать комментарии , которые игнорируются приложением, обрабатывающим документ. Комментарии строятся по тем же правилам, что и в HTML:

  • начинайте комментарий с символов "",
  • не используйте внутри комментария символов "--".

Пример комментариев:

8.1.3.4. Имена и данные

Все имена элементов, атрибутов и разделов должны начинаться с буквы Unicode и состоять из букв, цифр, символов точки (.), подчеркивания (_) и дефиса (-). Единственное ограничение состоит в том, что они не должны начинаться с комбинации букв xml в любом регистре; подобные имена зарезервированы для будущих расширений языка. Существенно, что стандарт допускает использование в именах не только английских букв, но и любых других, хотя существующие XML-процессоры часто ограничены теми системами кодировок, которые в них заложены создателями. Поэтому мы в своих примерах пишем имена по-английски.

Данные , т. е. содержимое элементов и значения атрибутов, могут состоять из любых символов, кроме перечисленных в следующем разделе.

8.1.3.5. Специальные символы

Ряд символов в языке XML зарезервирован и должен представляться специальным образом:

При желании можно пользоваться числовой кодировкой символов в стандарте Unicode. При этом символ может быть задан своим десятичным кодом (код ; ) или шестнадцатеричным кодом (код ; ). Например © представляет символ авторского права © , а А – русскую букву А . Как мы увидим в дальнейшем, XML гораздо богаче, чем HTML, в использовании подобных конструкций, поскольку позволяет осуществлять подстановку в текст документов любых символьных выражений.

8.1.3.6. Секции CDATA

Еще одним способом включения в содержимое XML-элементов недопустимых символов является использование т. н. секций CDATA (сокр. от Character DATA, т. е. символьные данные). Допустим, что мы хотим сделать содержимым элемента layout фрагмент HTML-текста, например:

Заголовок

Подобная конструкция неверна, т. к. HTML-тег H1 будет в данном случае воспринят как тег XML. Для того, чтобы все содержимое элемента layout воспринималось как данные, мы должны заключить его в секцию CDATA:

Как мы видим из этого примера, секция CDATA заключается в ограничители . Все внутри этой секции считается символьными данными; в частности, секции CDATA не могут вкладываться друг в друга.

8.1.4. Разделы и их декларации

8.1.4.1. Разделы XML-документа

Физически XML-документ может состоять из несколько разделов (entities). При этом корневой элемент документа также является разделом, который называется разделом документа , хотя он никак специально не оформлен. Все разделы имеют содержимое; все они, кроме раздела документа и внешней DTD, имеют имя.

С точки зрения синтаксического разбора документа разделы подразделяются на анализируемые и неанализируемые. Неанализируемый раздел (unparsed entity) — это ресурс, содержимое которого XML-процессор воспринимает как внешние данные без их синтаксического анализа (например, текст, не являющийся XML-документом). Неанализируемые разделы всегда имеют нотацию , указывающую на их формат. Анализируемые разделы (parsed entities) предназначены для текстовой подстановки: всякий раз, когда XML-процессор встречает в документе имя такого раздела, он заменяет его на содержимое этого раздела.

8.1.4.2. Внутренние разделы

Декларации разделов подразделяются на внутренние и внешние. Декларация внутреннего раздела выглядит так:

Она включает в себя содержимое объекта (параметр значение) и используется для подстановки этого значения вместо имени раздела. Мы можем, например, ввести в пример с книгами атрибут жанр и использовать для задания жанра внутренние разделы:

]> Часть речи Бродский, Иосиф Марш одиноких Довлатов, Сергей

Из этого примера видно, что ссылка на раздел (entity reference) выглядит точно так же, как ссылка на специальный символ, т. е. имеет вид &имя; . На самом деле, специальные символы — это точно такие же ссылки, но соответствующие разделы заданы неявно во внутренней декларации языка XML. Подобные текстовые подстановки удобны для задания сокращений, позволяющих уменьшить объем документа, и для введения обозначений для часто изменяемых полей документа. Так, например, мы можем вынести во внутренний раздел дату очередной ревизии публикации и затем изменять только значение этого раздела.

8.1.4.3. Внешние разделы

Существуют два варианта деклараций внешнего раздела :

Первый вариант называется системным разделом , второй — публичным разделом . Они оба связывают имя раздела с внешним ресурсом, заданным своим URI , который должен иметь кодированную форму и не содержать. URI внешнего ресурса называется системным идентификатором раздела . Использование внешнего ресурса зависит от нескольких факторов:

  • Если декларация содержит параметр NDATA, задающий нотацию раздела, то раздел является неанализируемым.
  • Если параметр NDATA не задан, то раздел анализируемый, и соответствующий ресурс должен быть XML-документом. Это означает, что вместо ссылки на раздел в текст документа будет включаться текст соответствующего ресурса.
  • Публичный раздел может содержать строку, задающую публичный идентификатор раздела . XML-процессор может использовать этот идентификатор для генерации альтернативного URI данного раздела. Если ему это не удалось, то он должен использовать системный идентификатор для загрузки содержимого раздела.

Примеры деклараций внешних ресурсов:

Внешний анализируемый раздел должен начинаться с директивы , которая может не содержать номера версии, но обязана содержать кодировку символов. Эта директива не входит в состав подставляемого текста.

8.1.5. Декларация типа документа

Декларация типа XML-документа (document type declaration) содержит определение типа документа (document type definition, DTD) или указывает на него. DTD — это специальная грамматика, описывающая синтаксис определенного класса документов; правила создания DTD рассмотрены в гл. 8.2 . Здесь же приводится только описание деклараций, которые обеспечивают доступ к DTD. Декларация типа документа, как и декларация раздела, может быть внутренней или внешней. Внутренняя декларация имеет вид:

а внешняя — те же два варианта, что и внешние разделы:

Таким образом, отличие декларации типа документа от декларации раздела состоит только в том, что:

  • она начинается с ключевого слова!DOCTYPE , а не!ENTITY ;
  • она может иметь тело, заключенное в квадратные скобки.

Имя такой декларации должно совпадать с именем корневого элемента, который она описывает, а тело должно соответствовать правилам построения DTD и будет описано в гл. 8.2 . Пока отметим, что оно может содержать декларации разделов. Пример внутренней декларации был приведен в. Примеры внешних деклараций:

Отметим, что внешняя декларация типа документа может содержать и ссылку на DTD, которая называется внешним подмножеством DTD, и тело, которое описывает дополнения к внешней DTD (оно называется внутренним подмножеством DTD).

8.1.6. Пример XML-документа

Чтобы собрать все описанные выше понятия в единое целое, приведем пример законченного XML-документа, содержащего прейскурант книжного магазина.

]> Марш обреченных Сергей Довлатов 60.00 Часть речи Иосиф Бродский 55.00 Антигона Софокл 103.50

В данной статье мы начинаем изучение языка XML и подробно рассмотрим такие моменты, как разметка и структура XML-документа. Данная информация есть базовой в изучении XML, поэтому рекомендую тщательно проработать этот материал, чтобы не оставалось никаких вопросов. От этого зависит ваш успех в будущем и скорость изучения как самого XML, так и XSLT, который мы будем изучать сразу после освоения XML.

Итак, XML (eXtensible Markup Language) – это язык для текстового выражения информации в стандартном виде. Сам по себе он не имеет операторов и не выполняет никаких вычислений. Таким образом, XML – это метаязык, главной задачей которого есть описание новых языков документа.

Чтобы лучше понять суть вышесказанного, давайте перейдем непосредственно к примерам и первым делом рассмотрим разметку XML-документов.

Разметка XML документов

Разметка XML-документа практически ничем не отличается от разметки обычного HTML-документа ( . ). Одним из преимуществ XML являет то, что он позволяет создавать неограниченное количество тегов. Таким образом, каждый тег имеет свою семантику, то есть несет определенный смысл. Для наглядности давайте рассмотрим XML-документ со списком книг.

Автор 1 Название 1 Цена 1 Автор 2 Название 2 Цена 2 Автор 3 Название 3 Цена 3

Как видно с примера выше, все очень банально и просто. При этом XML-документ несет куда более подробную информацию по сравнению с обычным HTML-документом. В нашем примере очень просто понять, что тег отвечает за автора книги, тег — за название, тег — за цену и т.д. Таким образом, каждый тег имеет свой смысл.

Одной из самых важных особенностей XML-документов является то, что их можно легко обрабатывать программно. Например, обработав пример вышеприведенного текста, можно с легкостью получить нужную информацию по книгам, вывести цены на книги по их названиям и т.д. При этом полностью сохраняется возможность визуального представления документа. Для этого достаточно лишь определить, как будет выглядеть тот или иной элемент.

Таким образом, XML позволяет отделять данные от их представления и создавать в текстовом виде документы со структурой, указанной явным образом. Если быть точным, то только лишь за счет расширения количества тегов мы сделали следующее:

  1. Явным образом выделили в XML-документе структуру, что в свою очередь сделало возможным дальнейшую программную обработку документа, например, при помощи технологии XSLT, которую мы будем изучать чуть позже. При этом одной из главных особенностей является то, что данный документ по прежнему остается понятным обычному человеку.
  2. Отделили данные в XML-документе от того, каким образом они должны быть представлены визуально. Это в свою очередь дало широкие возможности для публикации данных на разных носителях, например, на бумаге или в сети интернет.

Подводя итог вышесказанному, можно сделать вывод, что синтаксически в XML практически нет ничего нового по сравнению с HTML. XML является таким же текстом, размеченным тегами. Единственная разница лишь в том, что XML позволяет создавать любую разметку, которая может понадобиться для описания документа, при том как в HTML существует лишь ограниченный набор тегов, которые можно использовать.

Одним словом, XML является очень простым языком с небольшим набором основных конструкций, но в то же время он предоставляет неограниченные возможности для описания данных. Таким образом, каждый разработчик как бы сам изобретает свой собственный язык, который ограничивается лишь фантазией самого разработчика.

Структура XML документов

Для того чтобы представить структуру XML документов давайте рассмотрим самый простой пример документа XML.

Книга 1 Автор 1 Цена 1 Книга 2 Автор 2 Цена 2 Книга 3 Автор 3 Цена 3

Итак, мы видим, что данный пример практически ничем не отличается от предыдущего за исключением немного изменившихся тегов и нескольких атрибутов. Главное отличие здесь заключается в первой строчке, которая определяет файл как XML документ, построенный в соответствии с первой версией языка. Более подробно об этом мы поговорим в следующих статьях рубрики «Уроки XML и XSLT».

На данный момент нам важнее всего понять, что это очень простой язык, который очень похож на обычный HTML. В примере выше мы видим, что XML тоже имеет теги, которые могут быть вложенными, то есть содержать внутри себя другие теги. При этом теги в XML не просто ограничивают часть текста, а формируют отдельный элемент. Исходя из этого, то, что выделено тегами, в XML принято называть элементами.

Стоит также заметить, что в XML есть также атрибуты, комментарии и множество других элементов и конструкций. К сожалению одной статьи недостаточно для того чтобы обо всем подробно написать, поэтому будут написаны отдельные статьи по каждой теме. Если вы не хотите их пропустить, то рекомендую подписаться на новостную рассылку любым удобным для вас способом в пункте « » либо воспользоваться формой ниже.

На этом все. Удачи вам и успехов в изучении основ XML.