Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 18:

XML

Аннотация: В этой лекции рассматривается применение языка XML во Flash. В конце лекции приводится пример создания обозревателя с помощью XML и PHP.

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

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

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

'хвостик, кожура, мягкая корочка, кожица, дольки, маленькие клетки с соком'

Мы что-то забыли? Быть может, это описание и не идеально, но тем не менее лично мне оно напоминает апельсин, даже несмотря на то, что "маленькие клетки с соком" не являются научным названием соковых клеток. Однако, если предоставить такое описание Морку (маленький человечек с планеты Орк), оно даст ему плохое представление об этом плоде. Где находятся дольки? Находятся ли хвостики внутри кожуры? Список компонентов не говорит ему ничего о структуре апельсина. Лучше было бы сказать так:

'кожура окружает кожицу, под которой находится множество долек, объединенных хвостиком, и маленькие клетки с соком'

Теперь Морк гораздо лучше представляет себе, как выглядит апельсин. Все это очень похоже на то, для чего предназначен XML; этот язык структурирует данные таким образом, что они становятся понятными любым приложениям или системам обработки данных.

Что такое XML

Сокращение XML означает eXtensible Markup Language (расширяемый язык разметки) и не является языком программирования. Это язык разметки, предназначенный для описания и структурирования информации. Языки разметки использовались долгое время при подготовке публикаций и традиционно состоят из символов, прибавляемых к содержимому для описания структуры страницы. Скорее всего, вы часто используете HTML для этих же целей при работе с интернетом. XML отличается от HTML, так как HTML может нести информацию по стилю, наряду с информацией, представляющей собой описание и структуру документа. Очевидно, наличие различных типов информации внутри одного и того же документа может вызывать путаницу, поэтому XML несет только описание и структуру документа, в то время как стиль остается на усмотрение внешнего документа.

Теги и элементы

Символы, используемые для переноса информации о стиле и структуре, называются тегами. Существуют открывающие теги, например, тег жирного шрифта в HTML <b>, который означает, что в данном месте должно начаться форматирование текста жирным шрифтом. Есть также закрывающие теги: для отмены жирного форматирования используется тег </b>. Любой текст, расположенный между этими тегами, будет иметь формат жирного шрифта и будет называться содержимым. Структура из двух тегов и содержимого называется элементом. В дополнение к вышеупомянутым, существуют также теги, не несущие никакой информации, например, тег обрыва строки <br/>, также называемый пустым элементом.


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

<апельсин> 
  <кожура>
    <кожица>
      <долька> 
        <хвостик/>
        <клетки с соком/> 
      </долька> 
      <долька>
        <хвостик/>
          <клетки с соком /> 
        </долька> 
    </кожица> 
  </кожура> 
</апельсин>

Здесь мы имеем дело с языком, который объясняет, что "апельсин" состоит из "кожуры", в которой содержится "кожица", окруженная набором сегментов, т.е. долек (в данном случае их только две), с хвостиками и клетками с соком. Можно легко добавить больше сегментов под уже существующими дольками. Таким образом, XML является расширяемым языком, так как мы можем расширять структуру или добавлять новые компоненты, в зависимости от наших требований. Можно даже добавить несколько сегментов без хвостиков, и, тем не менее, все будет по-прежнему корректно.

Атрибуты

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

<tegname attributename='value'>

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

<peel color='orange'>

Пустые теги могут быть изменены аналогичным образом.

<pip color='magnolia'/>

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

Зачем использовать атрибуты при небольшом количестве содержимого?

Множество руководств по XML рассказывают о том, где и когда использовать атрибуты вместо содержимого. Почему мы использовали атрибут для описания оранжевого цвета кожуры, если можно было просто добавить строку <color> orange </color> как элемент внутри элемента <peel>?

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

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

Узлы

Элементы называются узлами, но не все узлы являются элементами. Поскольку мы интересуемся этими объектами, нам нужно различать два типа узлов - узлы элементов и узлы текста. Узлы элементов структурируют данные за счет того, что содержат в себе другие узлы. Они могут использоваться для предоставления информации в виде атрибутов. Текстовые узлы могут содержать только символьные данные (строки или буквы). Так, в документе <color> orange </color>, color является узлом элемента, а orange - текстовым узлом, в то время как orange является дочерним узлом узла элемента. Мы еще вернемся к дочерним узлам.

Объявления

Перед тем, как начать писать код XML, нам понадобится строка для информирования программы-считывателя (в данном случае - это Flash) о том, как его читать. Итак, в начале XML мы добавим следующую строку.

<?xml version='1.0'?>

Она сообщает программе-считывателю, какую версию XML вы используете. При необходимости можно также определить кодировку текста, добавив выражение encoding='ISO-8859-1' после версии. (ISO-8859-1 означает латинский-1/западноевропейский набор символов, который установлен по умолчанию.)

Комментарии

Комментарии также являются частью XML и полностью игнорируются Flash. Они очень полезны для пояснения логики программы, однако рекомендуется удалить их перед окончанием проекта, так как они передаются в клиент Flash и занимают канал связи. Синтаксис комментариев выглядит так.

<!-- This is a comment -->
Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2