• Применение XML во Flash. Как открыть XML-документ – особенности работы с XML-файлами

    Язык 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:

    Home Раgе

    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).

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

      Вот именно для создания структуры и существует язык XML . Простой пример:

      Зелёное яблоко

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

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

      • Файл-настроек . Настройки в XML-файле очень легко считывать и записывать. По этой причине на Вашем компьютере находятся сотни XML-файлов .
      • Мост для обмена данными между программами, написанными на разных языках. Очень важная особенность, следующая из универсальности языка, и это регулярно используется в сложных системах.
      • Хранение данных . Фактически, это некий аналог базы данных, но не требующий СУБД (например, MySQL ). А благодаря языку запросов XPath становится возможным легко общаться с этой "базой данных ".

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

      Зачем он нужен, этот XML ?

      [В последнее время, в связи с появлением этих страничек, самым частым
      вопросом ко мне оказался такой: "Расскажи, а зачем он вообще нужен, XML?
      Разве нам мало HTML? " Не имея многого времени (или ума;) на изготовление собственных публикаций, а также глубоко чтя классиков, я предпочел лучше бегло перевести отличную статью по названной subj
      - возможно, это первый эпизод сериала "в помощь" ]

      Jon Bosak, Tim Bray
      XML and the Second-Generation Web
      из журнала "Scientific American", май 1999

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

      Именно для этого - сделать информацию само-описанной - и был придуман новый язык разметки документов - Extensible Markup Language (XML). Эти легко выговариваемые изменения ("само-описанный" документ, смена правил общения с компьютерами) несут в себе огромный потенциал - роль Internet от среды доставки информации начинает расширяться на другие виды человеческой деятельности. И действительно, с момента утверждения ее W3C в 1998г, XML-спецификация со скоростью лесного пожара стала проникать повсюду - в промышленность и науку, в производство товаров и медицину.

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

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

      Это отражается на сложности разработки web-сайтов, если только эти сайты не должны походить на факсы, рассылающие страницы всем желающим, кто попросит. Более половины людей и компаний во всем мире предпочли бы web-сайты, которые умеют принимать от пользователей заказы, пересылать диагнозы болезней и даже запускать тонкие инструментальные операции в заводских цехах и научных лабораториях. Подобные задачи _НИКОГДА_ не стояли перед HTML!.

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

      бе бе бе

      или бе бе.
      Легендарный Керниган однажды заметил, что вся хитрость принципа WYSIWYG (что вижу, то и получаю) состоит в том, что когда ничего не видно, то обычно и получить удается ровно столько же.

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

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

      и , но не цены с вариантами доставки.

      Добавьте к этому и неудовлетворительное качество возможностей поиска в Web. Поскольку не существует способа как-то особо пометить информацию о ценах, решительно невозможно осуществлять в web поиск страниц по признаку "цена".


      Что-то старое, что-то новое

      В принципе, решение элементарно: в тегах нужно указывать, что это за информация, а не то, как она должна выглядеть. Например, размечать компоненты заказа на рубашку тегами "цена, размер, количество, цвет", а не "bold, paragraph, row, column", как это предлагается в HTML. Тогда программе проще идентифицировать документ как заказ и выполнить остальную часть работы: показать этот заказ в том или ином виде, провести через бухгалтерскую систему, или сделать все так, чтобы назавтра новая рубашка была бы доставлена к вашему порогу.

      Мы, рабочая группа W3C, еще в 1996 г. приступили к разработке такого проекта. Идея была сильная, хотя и не совсем оригинальная. На протяжении поколений редакторы и печатники маркировали рукописные тексты пометками для наборщиков. Подобный "язык разметки" развивался самостийно до 1986г., пока, в результате десятилетней работы, Международная Организация по стандартизации (ISO) не ввела систему создания новых языков разметки.

      Получив имя SGML (Standard Generalized Markup Language), этот язык описания языков - метаязык - доказал свою полезность на примере многих крупных систем подготовки публикаций. И даже HTML получил свое определение через SGML. Единственная трудность с SGML заключалась в его всеядности - там масса заумных вещей для минимизации нажатий на клавиши, так как в ту пору каждый байт был на счету. Вот почему сегодня web-браузеры с ним не в ладах.

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


      <имя пациента> blah blah
      <аллергия на лекарство> blah blah blah

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

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

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

      Правило вкладывания автоматически обуславливает простоту любого XML-документа, производя структуру, известную в информатике как дерево. Аналогично генеалогическому дереву, любой графический или текстовый элемент документа есть отец, сын или брат (parent, child, sibling) какого-то другого элемента, и это отношение родства всегда однозначно. Конечно, деревья не описывают все многообразие структур данных, однако покрывают большую часть типовых случаев применения компьютеров. Кроме того, деревья необычайно удобны для программистов. Нет проблем написать небольшой кусочек кода для переупорядочивания транзакций или вывода на экран вполне понятного чека, когда этот чек представлен в виде дерева.

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


      Конец вселенскому ожиданию (World Wide Wait)

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

      Для иллюстрации представьте себе, как в онлайновом бюро путешествий вам нужно подобрать рейс из Лондона в Нью-Йорк на 4 июля. Скорее всего, вы увидите список в несколько раз длиннее, чем может поместиться на экране. Этот список можно сократить, задав более точные параметры типа времени вылета, цены или авиакомпании, но в этом случае вы просто "нагружаете" сервер бюро путешествий своим запросом и вынуждены дожидаться ответа. Однако если бы этот длинный список рейсов вам предоставили в XML, то бюро могло бы сопроводить его небольшим Java-аплетом, с помощью которого моментально и легко отсортировать и отсеять ненужное, не прибегая к какому-либо взаимодействию с сервером. Помножьте это на миллионы пользователей Web, и общий эффект окажется впечатляющим.

      Чем больше сетевой информации будет размечено "отраслевыми" XML-тегами, тем легче будет найти то, что вы ищете. Сегодня поиск в Internet по запросу "работа для биржевого брокера" захлестнет вас лавиной рекламных объявлений, но вероятно, о работе их там будет всего несколько штук - в основном работа прячется на бесплатных досках объявлений газетных сайтов, с которыми не любят работать поисковые роботы. И сейчас Ассоциация Газет Америки (Newspaper Association of America) создает на XML свой язык разметки объявлений, обещающий сделать процесс поиска намного эффективнее.

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

      Поэтому с самого начала важная роль в XML-проекте отводилась созданию сопутствующего стандарта метаданных. Ту же самую роль, как каталожные карточки для библиотечных книг, для информации в Web должна сыграть февральская Спецификация Описаний Ресурсов (Resource Description Framework, RDF). Распространяясь по Сети, метаданные RDF сделают поиск намного более быстрым и релевантным, чем сейчас. В Сети нет библиотекарей, но каждый веб-мастер, ко всему прочему, стремится к легкой "находимости" его сайта, поэтому мы ожидаем, что RDF, как только людям откроется его мощь, окажет огромное влияние на развитие Internet.

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

      Вероятно, полезнее всего в XLink окажется та часть спецификации, которая позволяет авторам прибегать к опосредованным ссылкам, отсылающим вместо самих страниц в некую сводную БД. Так, если автор изменил адрес страницы, простым авторским редактированием одной записи в такой базе данных легко обновить все ссылки, ведущие на его страницу. Это позволит избавиться от становящихся привычными сообщений "404 File Not Found", сигнализирующих о "сломавшейся" ссылке.

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


      Необходимо сотрудничество

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

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

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

      И такие соглашения будут, поскольку множащаяся несовместимость компьютерных платформ дает нам в результате задержки сроков, финансовые потери и ведет к неразберихе почти во всех сферах деятельности. Люди хотят обмениваться идеями и делать дело, независимо от того, что у всех разные компьютеры - и чтобы это стало реальностью, взаиморазвитию частных (для разных сфер деятельности) языков предстоит еще долгий путь. Однако шквал новых аббревиатур с окончанием "ML" свидетельствует о несомненно прогрессивной (inventiveness) струе, которую XML внес в науку, бизнес и образование.

      Создавая новый язык разметки на XML, его создатели должны договориться о трех вещах: какие там будут теги, как они могут вкладываться друг в друга, и как они должны обрабатываться. Первые два пункта - словарь языка и структура - кодируются сейчас посредством DTD (Document Type Definition). Стандарт XML не обязывает разработчиков языка прибегать к DTD, но у большинства новых языков DTD-описания, по-видимому, будут - программистам так проще писать программы, понимающие данную разметку и извлекающие из нее что-то толковое. Нужны будут также комплекты руководств, где на человеческом языке описаны значения всех тегов. Например, HTML имеет DTD-описание, но по HTML есть и сотни страниц привычных руководств, с которыми сверяются программисты, разрабатывая браузеры и другие программы для Web.


      Эссе о стиле

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

      Для публикаторов, стремящихся написать однажды, а потом постоянно издавать ("write once and publish everywhere"), самое главное - "родить" публикацию, а затем "разливать" ее в мириады видов изданий, как печатных, так и электронных. XML помогает им так: контент размечается описательными тегами, независимыми от среды визуализации. Далее публикатор может оформить правила представления в виде т. н. stylesheets (листов стилей), автоматически "стилизующих" его произведение под разные устройства и среды. Стандарт такого XML-языка, разрабатываемый для этих целей, носит название Extensible Stylesheet Language (XSL).

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

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

      Хотя поначалу ядро Сети составляли научные и образовательные программы, сегодняшняя Сеть - это уже коммерция (ну, или можно сказать, коммерческие ожидания), запасающая топливо для быстрого старта. Все помнят недавний резонанс, вызванный всплеском онлайновых продаж, а стоит ли говорить о том, как стремительно взаимодействуют бизнесмены в сети между собой. Потоки товаров крупных производителей так и напрашиваются на автоматизацию в сети. Но в сегодняшних бизнес-схемах используются сложные взаимодействия program-to-program, и на практике это работает из рук вон плохо, ибо для успеха необходимо единообразие процессов обработки, до которого пока еще далеко.

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

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

      Таким образом, Сеть, усиленная XML, должна стать для своих пользователей быстрым, дружественным и лучшим местом для бизнеса. Еще больше XML необходим web-мастерам и web-дизайнерам. "На полную катушку" потребуется знание новых XML-языков армиям программистов. И хотя дни самообразованных хакеров [авторы имели в виду лучший смысл этого слова] еще длятся, над их популяцией уже нависла угроза.

      Завтрашний web-дизайнер обязан быть сведущ не только в изготовлении текста и графики, но и в строительстве многоуровневых, взаимозависимых систем на основе DTD, деревьев данных, гиперссылочных структурах, метаданных и стилевых компонентах - сильной и передовой инфраструктуре Web второго поколения.

      Рассмотрим технологию использования XML для передачи данных на сервер.

      Мы уже рассмотрели 2 способа передачи данных на сервер: это простой текст с разделителем и JSON. Но у них есть недостатки:

      • Отсутствие типов данных. У JSON есть только строка, число, null, boolean. Т.е. ограниченный набор данных.
      • Сложно контролировать целостность передаваемых данных.
      • Сложно визуализировать данные, т.е. сложные объекты сложно отобразить, например, в виде html кода.
      • Сложно преобразовывать данные, т.е. сложно преобразовать свойства одного объекта в свойства другого объекта.

      Теперь обратимся в XML как способу передачи данных. XML (eXtensible Markup Language) - язык разметки, предназначенный для описания, хранения и передачи структурированных данных. На сегодня XML используют повсеместно.

      На базе XML существует много технологий: DOM (програмное взаимодействие с данными), XLink (указатели и ссылки), XPath (описание и выборка элементов), XSL, XSLT (преобразование XML документа).

      Разбор XML пакета выглядит так:

      //Объект XMLHttpRequest var req= getXmlHttpRequest (); //Установка обработчика req. onreadystatechange= function () { if (req. readyState== 4 ) { //состояние "4 - comlete" var xml= req. responseXML; }}

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

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

      //для IE var str = dom. xml //для Firefox var serializer = new XMLSerializer (); var str = serializer. serializeToString (dom);

      Для IE рабочий код короче, т.к. в него уже встроен объект для сериализации, а в других браузерах только появляется объект XMLSerializer для сериализации.

      При работе с XML данными обычно мы имеем дело с DOM моделью документа. Поэтому стоит вспомнить некоторые моменты DOM (об этом читайте в предыдущих статьях). Напомню только способы доступа к элементу DOM модели:

      //корневой элемент var root = xmlDOM. documentElement; //первый элемент в коллекции var book = root. childNodes[ 0 ]; //дочерний элемент var title = book. childNodes[ 0 ]; //текстовый узел элемента alert (title. firstChild. nodeValue);

      Также из DOM модели документа можно выбирать элементы одного типа. Внимание! Функции getElemensById - нет, т.к. в XML id может означать что угодно, а не только идентификатор, поэтому его не применяют.

      //выборка всех элементов с одним тегом var books = xmlDOM. getElementsByTagName ("book" );

      XML также активно используется не только для представления данных, но и для обмена данными в сервер-ориентированной архитектуре. Это такой подход, при котором мы представляем сложное приложение не как классическое клиент-серверное приложение, а как набор сервисов (служб), каждый из которых отвечает за свои задачи. И каждый сервис имеет точки входа (точки взаимодействия). Здесь нет четкого клиента, т.к. одна служба может быть клиентом другой службы. Получается такая распределенная технология. Есть несколько подходов к построению таких технологий - удаленный вызов процедур, SOAP.

      Чтобы службы разных клиентов могли взаимодействовать, они должны говорить на одном языке (при этом не важно какая операционная система у службы). И такой язык был разработан и назван RPC.

      Протокол XML-RPC

      RPC (Remote Procedure Call) - удаленный вызов процедур. Это протокол взаимодействия между двумя удаленными точками. Он позволяет точке “а” вызвать функцию на удаленной точке “б”.

      Есть несколько реализаций протокола RPC. Рассмотрим реализацию на базе XML.

      По сути, клиент и сервер просто обмениваются какими-то XML фрагментами.

      XML-RPC предоставляет следующие типы данных:

      • boolean.
      • integer.
      • double.
      • string.
      • date/time.
      • base64.
      • array.
      • struct.
      • null.

      Т.е. при передаче определенного типа данных нужно декларировать, что это за тип данных. Структура похожа на объект JSON.

      Преобразование XML данных

      Для преобразования данных, полученных с сервера в виде XML используют XSLT.

      XSLT (eXtendable Stylesheet Language Transformation) - технология, которая помогает получить на вход XML, а на выходе сформировать все, что угодно.

      Преобразование XSLT на javaScript - IE

      var dom = new ActiveXObject ("MSXML2.DOMDocument" ); dom. async = false; dom var xsl = new ActiveXObject ("[email protected]" ); xsl. async = false; xsl. load ("my.xsl" ); //само преобразование var result = dom. transformNode (xsl);

      Преобразование XSLT на javaScript для Firefox. Ghrome, Opera

      var xslStylesheet; var xsltProcessor var myXMLHTTPRequest = mew XMLHttpRequest (); myXMLHTTPRequest. open ("GET" , "example.xsl" , false); myXMLHTTPRequest. send (null); //получение xml xslStileshett = myXMLHTTPRequest. responseXML; xsltProcessor myXMLHTTPRequest = new XMLHttpRequest (); myXMLHTTPRequest. open ("GET" , "example.xml" , false); myXMLHTTPRequest. send (null); //сама трансформация var xmlSource = myXMLHTTPRequest. responseXML; var resultDocument = xsltProcessor. transformToDocument (xmlSource);

      Введение в правильную разметку

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

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

      В XML можно создавать свои собственные элементы, что позволяет точно представлять фрагменты данных. Документы можно не просто разделять на абзацы и заголовки, но и выделять любые фрагменты внутри документа. Чтобы это было эффективно, нужно определить конечный перечень своих элементов и придерживаться его. Элементы можно определять в Описании типа документа (Document Type Definition - DTD) или в схеме, что будет кратко обсуждено ниже. Когда вы освоите и начнете использовать XML, не бойтесь экспериментировать с именами элементов, создавая реальные файлы.

      Построение документа XML

      Как уже упоминалось, файлы XML состоят из текста и разметки. Большая часть текста помещается в элементы, в которых текст окружен тегами. Например, допустим, нужно создать поваренную книгу в формате XML. У нас есть рецепт под названием Ice Cream Sundae , который нужно преобразовать в XML. Чтобы разметить название рецепта, заключим его текст в элемент, который начинается и заканчивается тегами. Этот элемент можно назвать recipename . Чтобы отметить начальный тег элемента, поместим его имя в угловые скобки <>), вот так: . Затем введем текст Ice Cream Sundae . После текста поставим замыкающий тег, который представляет собой имя элемента в угловых скобках, плюс косая черта завершения элемента (/) перед именем элемента, вот так: . Эти теги образуют элемент , в который можно вводить текст и даже другие элементы.

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

      Начало создания файла XML

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

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

      Создание корневого элемента

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

      Листинг 1. Корневой элемент

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

      Наименования элементов

      Соблюдение регистра в тегах

      При создании XML регистры начального и конечного тегов должны совпадать. В противном случае можно получить сообщение об ошибке при использовании или просмотре XML. Например, Internet Explorer не отображает текст в случае несовпадения регистров. Вместо этого он выводит сообщения о несовпадении начального и конечного тегов.

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

      • Пробелы в именах элементов не допускаются.
      • Имена должны начинаться с буквы, а не с цифры или знака. (После этой первой буквы можно использовать любую комбинацию из букв, цифр и допустимых символов.)
      • Регистр не имеет значения, но во избежание путаницы соблюдайте его.
      Листинг 2. Другие элементы
      Ice Cream Sundae 5 minutes

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

      Вложение элементов

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

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

      Пример правильного вложения приведен в . Теги начинаются и завершаются без переплетения с другими тегами.

      Листинг 3. Правильное вложение элементов XML.
      Ice Cream Sundae 3 chocolate syrup or chocolate fudge 1 nuts 1 cherry 5 minutes

      Добавление атрибутов

      К элементам иногда добавляются Атрибуты . Атрибуты состоят из пары имя-значение, где значение берется в двойные кавычки ("), вот так: type="dessert" . Атрибуты позволяют сохранять вместе с элементом дополнительные параметры, меняя значения этих параметров от элемента к элементу в одном и том же документе.

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

      Листинг 4. Наш файл XML с элементами и атрибутами
      Ice Cream Sundae 5 minutes

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

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

      Если вы следуете правилам, определенным в вашей структуре, вы сможете легко создавать правильно построенный код XML. Правильный XML — это код XML, составленный с соблюдением всех правил XML: правильное именование элементов, вложение, именование атрибутов и т.п.

      В зависимости от того, что именно вы делаете с XML, вам может понадобиться работа с правильно построенным XML. Рассмотрим приведенный выше пример сортировки по типу рецептов. Нужно, чтобы элементы содержали атрибут type . Очень важно иметь возможность успешно проверить код и гарантировать постоянное присутствие значения этого атрибута.

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

      Чтобы разрешить проверку, нужно ближе к началу своих XML-документов поместить декларацию типа документа (DOCTYPE). Эта строка содержит ссылку на DTD или схему (перечень элементов и правил), которая будет использоваться для проверки данного документа. Строка DOCTYPE может быть примерно такой, как в .

      Листинг 5. DOCTYPE

      Этот пример означает, что ваш файл списка элементов с именем filename.dtd находится в вашем компьютере (то есть в каталоге SYSTEM , а не в общем каталоге PUBLIC).

      Использование сущностей

      Сущности (entity) могут представлять собой фрагменты текста или специальные символы. Они могут указываться внутри документа или вне его. Во избежание ошибок и для правильности отображения сущности должны быть надлежащим образом объявлены и выражены.

      Нельзя вводить специальные символы прямо в текст. Для использования в тексте специальных символов их нужно сделать сущностями и использовать коды этих символов. В качестве сущностей можно определить фразы, такие как название компании, а затем использовать их по всему тексту. Чтобы создать сущность, назначьте ей имя и вставляйте это имя и вставляйте это имя в текст после знака амперсанда (&) и заканчивая точкой с запятой — например, &coname; (или другое имя). Затем укажите этот код в своей строке DOCTYPE в квадратных скобках(), как в . Этот код определяет текст, который подставляется вместо сущности.

      Листинг 6. Сущность

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

      Как избежать ошибок

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

      Заключение

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

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