Обучение xml с нуля. Язык XML практика и теория

XML был создан для описания данных с прицелом на то, что представляют собой данные.

HTML был создан для отображения данных с прицелом на то, как выглядят отображаемые данные.

Что такое XML?

  • XML расшифровывается как Расширяемый язык разметки (EXtensible Markup Language)
  • XML — это язык разметки , похожий на HTML
  • XML был создан для описания данных
  • Теги XML не предопределены. Вы можете использовать свои теги
  • XML использует Определение Типа Документа (Document Type Definition — DTD) или схему XML (XML Schema) для описания данных
  • XML рекомендован W3С

Главное различие между XML и HTML

XML был разработан для передачи данных.

XML не является заменой HTML.

XML и HTML были разработаны с различными целями:

  • XML был создан для описания данных и основное внимание уделяется тому, какие данные передаются
  • HTML был разработан для отображения данных основное внимание уделяются отображению данных
  • Таким образом, HTML больше связан с отображением информации, в то время как XML — описанием информации.

XML ничего не делает

XML не был создан для выполнения каких-либо действий.

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

Ira

Anton

Напоминание

Не забудь о встрече на этой неделе!

Как видите, язык XML очень лаконичен.

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

XML — свободный расширяемый язык разметки

Теги XML не предопределены. Вы можете вводить свои теги.

Теги и структура документа в HTML заданы заранее. Создатель html-документа может только использовать теги, определенные стандартами.

XML позвволяет вводить свои теги и структуру документа автору xml-документа. Теги, приведенные в примере (например, и ) не определены стандартом XML. Эти теги введены автором документа.

XML является дополнением HTML

XML — это не замена HTML.

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

Мое лучшее определение XML таково: XML — это кроссплатформенный, не зависящий от программного и аппаратного обеспечения инструмент передачи информации.

Заметка: Кроссплатформенный — пригодный для любой операционной системы и любого аппаратного обеспечения.

Если вы знаете, существуют различные операционные системы, кроме знакомой нам Windows. Это ОС Linux, Mac и другие.

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

XML в будущей веб-разработке

XML будет использоваться везде.

Мы являемся свидетелями разработки XML с момента его создания. Было удивительно видеть, как быстро XML стандарт был разработан и как быстро большое количество поставщиков программного обеспечения приняли этот стандарт. Мы твердо убеждены в том, что XML будет столь же важной составляющей будущего Интернет, как HTML, который является основой интернета, и что 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).
    1. Введение

    Если кто-либо из вас когда-нибудь пытался изучить XML своими силами, Вы возможно встречались со многими сбивающими с толку понятиями, обрушившимися и на меня в свое время. DTD, XML Schema, пространства имен (namespaces), XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, Все, я сдаюсь. Добавлю лишь, что большинство из этих материалов основано на реализациях, код которых может содержать ошибки. Наверняка существуют миллионы способов реализации и использования XML, но они все могут быть достаточно сложны. А знаете, XML может быть и очень простым. Если мы забудем про DTD, XML Schemas, пространства имен (namespaces), и т.п.
    Стараясь быстрее обучить вас работе с XML, я буду по возможности игнорировать приличную долю информации, которую вы и так сможете прочитать в соответствующей литературе. И первое что я собираюсь проигнорировать, это пространства имен (namespaces) и схемы (schemas). Вам это может показаться странным, так как большинство книг начинаются именно с объяснения этих понятий, но постарайтесь думать об XML как о средстве решить конкретную задачу, как, например, о молотке. Для того чтобы пользоваться молотком, разве обязательно знать, как построить дом? Что если все что мне нужно, это просто вбить гвоздь чтобы повесить на него картину? То же самое и с XML, он может быть и очень сложным, достаточно универсальным для использования в сотнях, если не в тысячах приложений, и очень простым, если не обращать внимания на некоторые вещи. В этой статье, я буду концентрироваться на решении конкретных проблем с помощью XML.
    Так в чем же собственно проблема? Давайте предположим, что я хочу описать простой объект, например стакан, используя XML. Зачем я собираюсь использовать XML для этого? Ну, во-первых, это как раз то, для чего и предназначен XML. XML описывает данные. В моем примере, стакан, это и есть данные. В жизни, данными могут быть документы Word, листы электронных таблиц, изображения, книга, запись базы данных, или даже классы C++ или Visual Basic. Во вторых, XML расширяем. XML позволяет мне создавать столько признаков, сколько необходимо для описания данных и эти признаки будут такими, какими я захочу. И, наконец, потому что XML быстро становится стандартом. Если на Марсе есть жизнь, то можете не сомневаться, что они там смогут понять мой XML файл.

    Какие основные свойства позволяют описать стакан?

    Как бы то же самое выглядело в формате XML?

    glass 6 16 ice cube straw water yes

    Заметьте, что первая строка файла () имеет специальный вид, пока, просто запомните, что она должна быть тут. Прелесть формата XML в том, что любой может понять, о чем в нем говориться, просто внимательней взглянув на него. Понятно также, что это не единственное из возможных XML описаний стакана. Если я попрошу 10 человек разработать XML описание стакана с одинаковыми свойствами, возможно, все они создадут разные, но верные описания. Вот тут как раз и кроется проблема. Возможно не для нас, людей, но когда компьютер читает XML файл, то было бы отличной идеей, дать ему знать, о чем этот файл. Вот тут и всплывает пространство имен (namespaces) и схемы (schemes). Проще говоря, схемы используются для определения адекватной структуры для XML файла.
    Теперь настало время поговорить о нескольких простых правилах XML, которым необходимо придерживаться:

    Правило XML #1 : Адекватный XML файл должен в точности соответствовать своей схеме. Но для простоты понимания материала, ни один из моих примеров не будет использовать схемы. Таким образом, строго говоря, ни один из моих примеров не "адекватный". Но, честно говоря, мне все равно. Я не собираюсь строить дом, мне нужно всего лишь повесить картину. Я подробней расскажу об этом позже, когда будем обсуждать объектную модель документов XML.

    Правило XML #2 : Если вы программируете на VB, запомните: XML чувствителен к регистру. XML чувствителен к регистру. XML чувствителен к регистру. XML чувствителен к регистру. Напишите это предложение 1000 раз и никогда не забудете.

    Правило XML #3 : Тэги принято называть элементами и каждый открывающийся тэг, должен иметь соответствующий ему закрывающийся тэг. Следуя этому правилу, у вас получится правильный XML файл. Это очень важно, потому что до тех пор, пока XML файл не будет правильно оформлен, он не будет проанализирован и не загрузится в объектную модель документов. Заметьте, если элемент не содержит значений и не содержит других (вложенных) элементов, закрывающий тэг может иметь вид вместо более громоздкой конструкции . Можете увидеть такой подход в предыдущем примере ().

    Правило XML #4 : Элементы могут содержать атрибуты, а значения атрибутов должны быть заключены в кавычки (одинарные или двойные).

    Правило XML #5 : Можно несколько раз использовать имена атрибутов, но имена элементов должны быть уникальны для всего файла. В предыдущем примере, атрибут qty имел различное значение в зависимости от того, в каком элементе он используется ,, или . Значение атрибута зависит от контекста его использования. Тогда как значение элемента всегда означает одно и то же, независимо от того, в каком месте файла атрибут находится. В предыдущем примере, элемент и всегда имеет одно и то же значение во всем нашем документе. например, всегда используется для описания высоты стакана.

    Правило XML #6 : В XML есть несколько специальных символов, которые не могут быть использованы напрямую, потому что являются зарезервированными в синтаксисе XML. Поэтому, для использования таких символов, придется использовать зарезервированную конструкцию, начинающуюся с символа & и специального кода, (символ & должен писаться как &) (символ " должен писаться как ") (символ < должен писаться как <) (символ > должен писаться как >) и (символ " должен писаться как "). Вместо этого, также можно использовать инструкцию , где на месте "...." может быть любая последовательность символов, кроме "]]>". Такая конструкция может встречаться в любом месте, но она не может быть вложенной.

    2. Объектная модель документов XML

    Объектная модель документов XML позволяет программистам загружать содержимое XML файла в память. Как только XML файл загружен таким образом, с ним можно работать, используя свойства, методы и события объектной модели документов. Вот где как раз и проявляется польза XML. Объектная модель документов значительно облегчает выборку и обработку информации XML файла. Я не буду тут рассказывать обо всех возможностях объектной модели документов, расскажу лишь о некоторых основных возможностях, которые помогут в достижении цели этой статьи. Я возьму только что созданный XML файл с описанием стакана, загружу его в объектную модель документов и проделаю несколько действий с ним. Остальные особенности и возможности объектной модели документов я приберегу для следующей статьи, рассказывающей о клиентском XML. Заметьте, не смотря на то, что объектная модель документов очень хороша и удобна для разработчиков, она требует довольно значительного объема системных ресурсов. Поэтому существует еще один метод анализа XML файлов, известный как SAX. Моя статья не претендует на исчерпывающий источник информации по этому вопросу, поэтому было бы полезно также воспользоваться XML SDK.

    Давайте посмотрим на пример, используя анализатор Microsoft"s XML версии 3.0 (Microsoft"s XML parser version 3.0 (msxml3.dll)) чтобы разобраться, как же это все работает. Если у вас нет анализатора, то последнюю версию можно скачать с сайта Microsoft.
    Предположим, я сохранил пример описания стакана в формате XML в файл "http://web_server/xml/cup.xml" (локальный путь C:\inetpub\wwwroot\xml\cup.xml) и теперь хочу загрузить его в объектную модель документов. Следующий код предполагает, что анализатор уже загружен и работает.

    Код на Visual Basic 6.0: (устанавливаем связь с Microsoft XML, v3.0) Dim xmlDoc as MSXML2.DOMDocument30 Set xmlDoc = New DOMDocument30 xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load ("c:\inetpub\wwwroot\xml\cup.xml") msgBox xmlDoc.xml ASP Server-Side код на Visual Basic: Dim xmlDoc Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0") xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load "/xml/cup.xml" ASP Server-Side код на Java Script: var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false; xmlDoc.validateOnParse = false; xmlDoc.load ("/xml/cup.xml");

    Пояснение приведённого кода - пройдемся по коду на VB6

    Строка 1: Dim xmlDoc as MSXML2.DOMDocument30

    В этой первой строке определяем ссылку на "Microsoft XML, v3.0". В этой строке я определил переменную xmlDoc как ссылку на XML документ. MSXML2 это библиотека (используйте это название, не пытайтесь написать MSXML3, это не будет работать). DOMDocument30 определяет объект XML документа соответствующий версии 3.0. Вы также можете встретить такой код: dim xmlDoc as MSXML2.DOMDocument. Такой конструкцией обычно пользуются, когда не хотят указывать конкретную версию XML документа. В этом случае будет использоваться зарегистрированный по умолчанию в системе анализатор. Проблема может быть только в том, что версия анализатора, зарегистрированная по умолчанию, может отличаться на разных компьютерах. Если вы хотите быть уверенными в том, что написанный вами код будет работать с любой версией анализатора, то не используйте в нем специфических для конкретных версий анализатора конструкций. Потому, что нет никакой гарантии, что у пользователя, который будет пользоваться вашим кодом, установлена имена та версия анализатора, под которую вы писали свой код. Еще одно преимущество разработки кода, независимого от версии анализатора в том, что когда выходит более новая версия анализатора, у нее обязательно будет обратная совместимость с предыдущими версиями, и вам не придется перекомпилировать ваш код.

    Строка 2: Set xmlDoc = new DOMDocument30

    В этой строке происходит инициализация переменной xmlDoc как нового экземпляра объекта XML документа версии 3.0.

    Строка 3: xmlDoc.async = False

    Файлы XML могут быть загружены либо в синхронном, либо в асинхронном режиме. Если xmlDoc.async = False, то значит, что содержимое XML фала будет загружено, и только после этого управление будет передано вызывающему процессу. Если xmlDoc.async = True, то значит, что управление будет передано вызывающему процессу сразу, не дожидаясь, пока содержимое XML файла будет полностью загружено.

    Строка 4: xmlDoc.validateOnParse = False

    Этот код сообщает о том, что анализатор не должен проверять загружаемый XML файл на соответствие своей схеме (validateOnParse = False). Для того, чтобы включить проверку на соответствие схемы, нужно написать validateOnParse = True.

    Строка 5: xmlDoc.load ("C:\inetpub\wwwroot\xml\cup.xml")

    В этой строке вызывается метод загрузки указанного XML файла. Существует два вида метода загрузки. Первый, который написан в строке 5, загружает файл в объектную модель документов, и при этом нужно обязательно передавать полный путь до XML файла. Второй вариант загрузки предусматривает передачу в качестве параметра xml строку. Такой вид загрузки мог бы быть вызван, например, так: xmlDoc.loadXML("корректная xml строка"). Я покажу, как пользоваться этим способом позже.

    Строка 6: MsgBox xmlDoc.xml

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

    2.2. Исследование объектной модели документов XML

    Создайте в Visual Basic новый проект и назовите его standard.exe. Вставьте приведенный выше код в метод загрузки главного окна вашего проекта. Убедитесь, что вы объявили ссылку именно на "Microsoft XML v3.0". Для того, чтобы это сделать, нажмите Project-->References, затем пролистайте появившийся список вниз и найдите в нем нужную ссылку. Заметьте, анализатор версии 3.0 должен быть установлен на вашем компьютере, иначе в списке его не будет. Установите точки остановки на последней строке кода (msgbox xmlDoc.xml). Запустите приложение в режиме отладки. Когда процесс выполнения дойдет до точки остановки, вызовите окно "Locals" и посмотрите объектную модель документов. Можно многое узнать, просматривая то, что отображено в этом окне. Окно "Locals" должно быть похоже на то, что изображено на рисунке ниже. Вот некоторые интересные свойства объектной модели документов.

    Объектная модель документов XML всегда содержит два узла верхнего уровня:

    • Item1 это корень ветви элементов документа (не обращайте на нее внимания)
    • Item2 на самом деле первый элемент документа (запомните это)

    nodeName или baseName - могут быть использованы при поиске имени элемента или атрибута.
    nodeType - используйте для того, чтобы получить тип текущего узла.
    nodeValue - используете для того, чтобы узнать значение данных узла.
    childNodes - это коллекция узлов-потомков. Они могут быть узлами элементов, текстовыми узлами и узлами CDATA. Могут быть и другие типы узлов, про которые я сейчас рассказывать не стану, но вы сможете узнать все про них в XML SDK.
    attributes - это коллекция узлов атрибутов текущего элемента.
    length - используется для определения количества узлов в дереве непосредственно принадлежащих текущему.
    xml - это свойство присутствует во всех узлах и может быть использовано для представления текущей позиции в документе. XML строка начинается с текущего узла и проходит вниз до конца дерева. Это очень полезное свойство. Поэкспериментируете с ним и увидите, что получится.

    2.2.2. Узлы элементов

    Узел элементов может содержать узлы потомки элементов, атрибутов, текста или CDATA. Из рисунка ниже видна следующая информация об узле "SOLID":

    nodeType - Тип текущего узла = NODE_ELEMENT - т.е. текущий узел является элементом.
    nodeName или baseName или tagName - Название текущего узла (элемента) = SOLID.
    Его родительский элемент CONTENTS имеет 4 потомков.
    Это можно увидеть на следующем рисунке, но SOLID имеет одного потомка, который имеет текстовый тип данных.
    text - "ice cube" это сокращенный метод, позволяющий получить значение текущего узла без перемещения к текстовому узлу потомка.

    2.2.3. Узлы атрибутов

    Узлы атрибутов могут состоять только из текстовых или CDATA узлов-потомков. На следующем рисунке показано, какая информация может быть получена об узле "qty":

    nodeType - Тип текущего узла = NODE_ATTRIBUTE - текущий узел является атрибутом.
    nodeName или baseName - Имя текущего узла (Атрибутов) = qty

    Из следующего рисунка также понятно, что qty имеет одного потомка, который имеет текстовый тип данных.
    text или value - "2" это сокращенный метод, позволяющий получить значение текущего узла без перемещения к текстовому узлу потомка.

    2.2.4. Текстовые узлы и узлы CDATA

    Текстовые или CDATA узлы не содержат потомков. Текстовые узлы содержат обработанные текстовые данные своего родительского узла. CDATA содержат необработанные текстовые данные своего родительского узла. CDATA узлы создаются, когда данные в XML файле специальным образом обрамлены. Метка CDATA говорит анализатору не разбирать данные и принимать символы внутри этой метки как данные. Секция CDATA особенно полезна, когда нужно вставить код внутрь XML файла. На следующем рисунке показано, какая информация может быть получена из текущего текстового узла:

    nodeType - Тип текущего узла = NODE_TEXT - текущий узел содержит текстовые данные.
    nodeName - Имя текущего узла (текстового) = #text - все текстовые узлы называются #text
    data или text или value - "2" - это текущие данные узла.

    2.2.5. Ошибки при загрузке документа

    Секция parseError объектной модели документов может оказаться полезно при выявлении проблем, возникающих при загрузке XML документа. Если я удалю закрывающий тег от OTHER в файле нашего примера и попытаюсь запустить программу еще раз, то получу следующий результат. Первая часть полезной информации, это то, что наш nextSibling теперь содержит значение Nothing. Теперь, если вы посмотрите на childNodes, вы можете увидеть, что поле length теперь равно 0. Оба этих признака говорят о том, что наш XML документ не был загружен. Чтобы разобраться почему, я открываю узел parseError и получаю всю информацию об ошибках.

    Итак, я показал вам, как загрузить XML файл в объектную модель документов, но что с ним там делать? Одна из основных возможностей, которой вы сможете пользоваться это выполнять различные запросы к XML документу. Для этого вы конечно можете просматривать весь документ до тех пор, пока не найдете информацию которую ищите. Но наиболее предпочтительный способ, это использование одного из двух методов класса DOMDocument. Два метода используемые для поиска узлов в нашем предыдущем примере могли бы выглядеть как xmlDoc.SelectSingleNode(patternString) - для получения искомого узла, или xmlDoc.SelectNodes(patternString) - для получения списка искомых узлов. Параметр patternString как раз и является запросом. Он может быть сформирован одним из двух способов. Либо как XSL запрос, либо как XPath запрос. Более новый и предпочтительный способ создавать запросы к XML документу, это XPath. Формат patternString должен быть установлен заранее, перед первым вызовом любого из двух методов запроса данных, иначе по умолчанию будет использоваться XSL способ формирования запросов. Для установки типа формирования patternString используйте setProperty("SelectionLanguage", "format"). Для того, чтобы изменить запросы в нашем примере таким образом, чтобы использовался способ XPath, я добавлю следующую команду: setProperty("SelectionLanguage","XPath"). По-моему, XPath это самая важная технология в XML которую следует изучить. Я приведу несколько простых XPath запросов. Хорошим началом для изучения этой технологии может служить Microsoft XML SDK. Еще одним способом для объяснения этого, могло бы быть написание простого приложения на Visual Basic, которое позволяет вводить запросы и выводить результат. Вы, возможно, найдете какие-нибудь бесплатные приложения, которые делают то же самое, но XPath довольно новый и может не вполне поддерживаться этими приложениями.

    2.3.1. Использование XPATH для выполнения запросов к объектной модели документов

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

    ОТЛИЧНО! Давайте теперь добавим еще один запрос, который позволит нам определить, есть ли у стакана крышка или нет. Добавьте следующий код в конец предыдущего:

    Set objNode = xmlDoc.selectSingleNode("/CUP/LID") if objNode.text="yes" then MsgBox "We have a lid" else MsgBox "No lid on this cup" end if

    Пройдемся по коду строка за строкой:

    Строка 1 : Dim objNode As IXMLDOMNode

    В этой строке определяется переменная objNode типа узел XML документа. Важно понимать, что узел XML документа это тоже объект. Это не значение. Он состоит сам из себя, также как и его атрибуты и потомку (childNodes). Этим способом вы можете отсекать ненужные ветви дерева, выбирая только нужные.

    Строка 2 : Dim objListOfNodes As IXMLDOMNodeList

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

    Строка 3 : xmlDoc.setProperty "SelectionLanguage", "XPath"

    Эта строка устанавливает способ формирования patternString как XPath.

    Строка 4 : MsgBox "Your cup contains the following items:"

    Строка 5 : Set objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]")

    Эта строка выполняет XPath запрос, который вернет группу узлов и сохранит их в переменной objListOfNodes. Запрос разбит на следующие части:

    • //CONTENTS - взять все элементы CONTENTS в XML документе. Заметьте: // - это краткое обозначение для всего содержимого XML документа.
    • /* - из списка элементов CONTENTS взять все (* - используется для указания всех) элементы-потомки. Это сокращает полученный результат до четырех узлов элементов (). Эти четыре узла попадают напрямую под узел CONTENTS.
    • [@qty>0] - проверить каждый элемент-потомок на то, чтобы его атрибут qty (@ - означает атрибут) был больше 0. Если это условие не выполняется, узел отбрасывается. Все, что внутри в XPath запросе может принимать значения True или False. Если результат True, то узел сохраняется. Если результат False, то узел отбрасывается. После этого наш результат сокращается до трех узлов (

    Строка 6-8 : For Each objNode In objListOfNodes / MsgBox objNode.Text / Next

    Эти строки отображают значения каждого узла элемента, которые соответствуют запросу. ("ice cube" , "straw" , "water").

    Строка 9 : Set objNode = xmlDoc.selectSingleNode("/CUP/LID")

    Эта строка возвращает все элементы LID, которые принадлежат элементу CUP, который, в свою очередь, порожден от корня дерева (когда запрос начинается с /, то это означает что начинать нужно с корня). Это очень похоже на путь к файлу или папке. В нашем примере, этот запрос вернет элемент LID, который содержит значение "yes". Важно тут то, что я указал запросу начинать с корневого элемента XML документа. Запросы не всегда начинают выполняться с корневых элементов, обычно они начинаются с текущего узла. В нашем примере это не имеет значения, поскольку текущим узлом (xmlDoc) и является корневой элемент XML документа (но не во всех случаях это так).

    Строка 10-15 : if objNode.text="yes" then / MsgBox "We have a lid" /
    else / MsgBox "No lid on this cup" /end if

    Эта строка отображает сообщение "We have a lid" потому, что текстовое свойство элемента LID "yes".

    3. Преобразование ADO в XML

    Теперь, когда вы поняли основы XML, давайте создадим элемент управления ActiveX, который будет конвертировать набор данных ADO в XML формат. Цель в том, чтобы получить наименования книг из таблицы Titles базы данных Pubs и вернуть их в формате XML. Результат, который получится я буду использовать в своей следующей статье. Вы можете сказать, ADO имеет свои собственные методы для сохранения результата в формате XML, правильно? Да, но если доверить это ADO, то в итоге я получу XML файл в таком ужасном формате, что с ним невозможно будет работать. ADO создаст XML файл с использованием пространства имен, а мне сейчас это совсем не нужно. Во-вторых, ADO создаст XML файл, который будет представлен в форме атрибутов. Иными словами, каждая запись станет элементом и каждое поле - атрибутом:

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

    data from table data from table data from table data from table data from table datafrom table datafromtable

    Кстати, то, что я только что сделал, это создал схему для моей XML строки. Теперь, если мне нужно сверить структуру XML документа со схемой, все что мне останется сделать, это преобразовать схему в правильный формат. То есть в синтаксис DTD или XDR. Заметьте, что я добавил некоторые атрибуты к каждому элементу . Одна из причин этого в том, что эта информация может быть использована клиентом. Prettyname могут быть использованы как метки данных. Атрибут datatype мог бы быть использован для проверки данных на стороне клиента. Но чтобы быть честным, истина причина того, что появились эти атрибуты в том, что они имеют особое назначение в шаблоне XSL фала, который я часто использую для построения секции where SQL запросов. Может быть, я скоро опубликую статью, демонстрирующую этот подход. Шаблон на самом деле очень полезный. Когда XML структура применяется к данным из таблицы Titles, результат будет выглядеть следующим образом:

    The Busy Executive"s Database Guide BU1032 The Busy Executive"s Database Guide business 19.99 4095 An overview of available database systems with emphasis on common business applications. Illustrated. 6/12/1991 Cooking with Computers: Surreptitious Balance Sheets BU1111 Cooking with Computers: Surreptitious Balance Sheets business 11.95 3876 Helpful hints on how to use your electronic resources to the best advantage. 6/9/1991

    Теперь я получил что-то, с чем можно работать!

    Листинг 1 - CUP.XML

    glass 6 16 ice cube straw water yes

    Dim xmlDoc As MSXML2.DOMDocument30 Set xmlDoc = New DOMDocument30 xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.Load ("c:\inetpub\wwwroot\xml\cup.xml") MsgBox xmlDoc.xml Dim objNode As IXMLDOMNode Dim objListOfNodes As IXMLDOMNodeList xmlDoc.setProperty "SelectionLanguage", "XPath" MsgBox "Your cup contains the following items" Set objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]") For Each objNode In objListOfNodes MsgBox objNode.Text Next Set objNode = xmlDoc.selectSingleNode("/CUP/LID") If objNode.Text = "yes" Then MsgBox "We have a lid" Else MsgBox "No lid on this cup" End If

    Листинг 3 - Элемент управления ActiveX: ADO в XML (WebClass.dll)(xmlControl.cls)

    Option Explicit "Declare Database variables Private m_dbConnection As New ADODB.Connection Private m_dbCommand As ADODB.Command Private m_adoRs As ADODB.Recordset Private m_adoErrors As ADODB.Errors Private m_adoErr As Error Public nCommandTimeOut As Variant Public nConnectionTimeOut As Variant Public strConnect As Variant Public strAppName As String Public strLogPath As String Public strDatabase As String Public strUser As String Public strPassword As String Public strServer As String Public strVersion As String Public lMSADO As Boolean "Private Global Variables Private gnErrNum As Variant Private gstrErrDesc As Variant Private gstrErrSrc As Variant Private gstrDB As String Private gstrADOError As String Private Const adLeonNoRecordset As Integer = 129 Private gtableName(6) As String Private gcolumnName(6) As String Private gprettyName(6) As String Private gdatatype(6) As String Private gfilter(6) As String Private Function OpenDatabase() If Len(strConnect) = 0 Then "устанавливаем значения по умолчанию If Len(strDatabase) = 0 Then strDatabase = "pubs" End If If nConnectionTimeOut = 0 Then nConnectionTimeOut = 600 End If If nCommandTimeOut = 0 Then nCommandTimeOut = 600 End If If Len(strAppName) = 0 Then strAppName = "xmlControl" End If If Len(strUser) = 0 Then strUser = "sa" End If If Len(strPassword) = 0 Then strPassword = "" End If strConnect = "Provider=SQLOLEDB.1; " & _ "Application Name=" & strAppName & _ "; Data Source=" & strServer & "; Initial Catalog=" & strDatabase & "; " & _ " User ID=" & strUser & "; Password=" & strPassword & ";" End If "подключаемся к SQL Server и открываем базу данных On Error GoTo SQLErr "Включаем обработчик ошибок With m_dbConnection .ConnectionTimeout = nConnectionTimeOut .CommandTimeout = nCommandTimeOut .Open strConnect "открываем базу данных, используя строку подключения End With On Error GoTo 0 "выключаем обработчик ошибок OpenDatabase = True "база данных открыта успешно Exit Function SQLErr: Call logerror("OPEN") OpenDatabase = False End Function Private Function BuildSQLwhere(tmpWhere) As String "Это на будущее End Function Public Function GetTitlesXML(Optional xmlWhere As Variant) As String Dim whereClause As String Dim strSQL As String Call OpenDatabase "открываем базу данных pubs If IsMissing(xmlWhere) Then "когда запрос не прошел whereClause = "" Else whereClause = BuildSQLwhere(xmlWhere)"конвертируем запрос в правильный sql End If "инициализируем sql выражение которое будет запрашивать заголовки книг strSQL = "select title_id,title,type,price,ytd_sales,notes,pubdate from titles " & whereClause Call NewRecordSet "создаем набор данных "устанавливаем cursorlocation m_adoRs.CursorLocation = adUseClient "открываем набор записей m_adoRs.Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText "отключаемся от набора данных Set m_adoRs.ActiveConnection = Nothing On Error GoTo 0 "выключаем обработчик ошибок "закрываем базу данных и освобождаем подключение Call CloseDatabase If m_adoRs.EOF Then GetTitlesXML = "" "запрос не вернул ни одного значения Else If lMSADO Then GetTitlesXML = msado(m_adoRs) "конвертируем набор данных в Microsoftado-->xml Else GetTitlesXML = ADOtoXML(m_adoRs, True) "convert the ado recordset to custom xml End If End If "закрываем набор данных Call CloseRecordset Exit Function SQLErr: Call logerror(strSQL) End Function Private Function ADOtoXML(tmprs As ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields As ADODB.Fields "объявляем коллекцию для хранения полей Dim adoField As ADODB.Field "используется для получения каждого поля из коллекции Dim xmlDoc As msxml2.DOMDocument30 Dim tmpLine As String "хранит xml представление каждой книги Dim tmpXML As String "служит для конкатенации xml строк Dim i As Integer If tmprs.EOF Then "запрос не вернул ни одну запись ADOtoXML = "" Exit Function Else Set adoFields = tmprs.Fields "создаем коллекцию полей End If tmpXML = "" "все книги будет заключены в тег Do Until tmprs.EOF "цикл по каждой строке в наборе данных i = 0 " I - индекс ado поля, который начинается с 0 - первое поле будет field(0) tmpLine = "" & tmprs("title") & vbCrLf For Each adoField In adoFields "цикл по всем полям "строим xml тег и его атрибуты для текущего поля tmpLine = tmpLine & "" & adoField.Value tmpLine = tmpLine & "" & vbCrLf i = i + 1 "переходим на следующее поле Next tmpXML = tmpXML & tmpLine & "" & vbCrLf "закрывающий тег после последнего поля tmprs.MoveNext "следующий заголовок Loop Set adoField = Nothing "уничтожаем объект-поле Set adoFields = Nothing "уничтожаем объект-коллекцию полей tmpXML= tmpXML & "" & vbCrLf "закрывающий тег Set xmlDoc = New msxml2.DOMDocument30 "создание xmlDOM xmlDoc.async = False "ждем когда документ загрузится xmlDoc.validateOnParse = False "не сверяемся со схемой xmlDoc.loadXML(tmpXML) "загружаем строку в объектную модель документов On Error Resume Next "если файл не существует, то обрабатываем эту ошибку Kill("c:\temp\custom.xml") "стираем файл если он существует On Error GoTo 0 "говорим обработчику ошибок прерываться при обнаружении ошибки xmlDoc.save ("c:\temp\custom.xml") "сохраняем xml в файл ADOtoXML=xmlDoc.xml "возвращает xml строку Set xmlDoc=Nothing "уничтожаем объектную модель документов End Function Private Function msado(tmprs As ADODB.Recordset) As String Dim xmlDoc As msxml2.DOMDocument30 On Error Resume Next "если файла не существует, получаем ошибку Kill ("c:\temp\msado.xml") "стираем файл, если он существует On Error GoTo 0 " говорим обработчику ошибок прерываться при обнаружении ошибки tmprs.save "c:\temp\msado.xml", adPersistXML " сохраняем xml в файл Set xmlDoc = New msxml2.DOMDocument30 "создаем объектную модель документов xml xmlDoc.async = False "ждем загрузки xml документа xmlDoc.validateOnParse = False "не сверяемся со схемой xmlDoc.Load ("C:\temp\msado.xml") "загружаем файл в объектную модель документов msado = xmlDoc.xml "возвращаем xml строку Set xmlDoc = Nothing "уничтожаем объектную модель документов End Function Private SubCloseRecordset() "закрываем набор данных m_adoRs.Close Set m_adoRs =Nothing End Sub Private Sub NewRecordSet() Set m_adoRs= Nothing Set m_adoRs=New ADODB.Recordset End Sub Private Sub CloseDatabase() m_dbConnection.Close Set m_dbConnection =Nothing End Sub Private Sub logerror(errSQL As String) Dim hFile As Integer Dim expFile As String On Error GoTo 0 gnErrNum = Err.Number gstrErrDesc =Err.Description gstrErrSrc = Err.Source Set m_adoErrors = m_dbConnection.Errors For Each m_adoErr In m_adoErrors gstrADOError = m_adoErr.Description & "," & CStr(m_adoErr.NativeError) _ & "," & CStr(m_adoErr.Number) & "," & m_adoErr.Source _ & "," & CStr(m_adoErr.SQLState) Next hFile =FreeFile If Len(strLogPath) = 0 Then strLogPath = "C:\temp\" End If expFile = strLogPath & strAppName & ".err" Open expFile For Append As #hFile Print #hFile,"**********************************" Print #hFile, Now() Print#hFile, "**********************************" Print #hFile,"Subroutine: " & tmpPro Print #hFile, "Error Number:" & gnErrNum Print#hFile, "Error Description: " & gstrErrDesc Print #hFile, "Error Source:" & gstrErrSrc Print #hFile, "Ado error String: " & gstrADOError Print #hFile, "Bad SQL: " & errSQL Close #hFile End Sub Private Sub Class_Initialize() strVersion = "xmlControl Version 1.1" "title_id,title,type,price,ytd_sales,notes,pubdate gtableName(0) = "titles" gcolumnName(0) = "title_id" gprettyName(0) = "Title Identification Number" gdatatype(0) = "number" gfilter(0) = "" gtableName(1) = "titles" gcolumnName(1) = "title" gprettyName(1) = "Title of the Book" gdatatype(1) = "text" gfilter(1) = "" gtableName(2) = "titles" gcolumnName(2) = "type" gprettyName(2) = "Type of Book" gdatatype(2) = "text" gfilter(2) = "" gtableName(3) = "titles" gcolumnName(3) = "price" gprettyName(3) = "Price of the Book" gdatatype(3) = "number" gfilter(3) = "" gtableName(4) = "titles" gcolumnName(4) = "ytd_sales" gprettyName(4) = "Year to date sales" gdatatype(4) = "number" gfilter(4) = "" gtableName(5) = "titles" gcolumnName(5) = "notes" gprettyName(5) = "Notes about the book" gdatatype(5) = "memo" gfilter(5) = "" gtableName(6) = "titles" gcolumnName(6) = "pubdate" gprettyName(6) = "Date Published" gdatatype(6) = "date" gfilter(6) = "" End Sub

    Листинг 4 - Тестовое приложение на VB для проверки WebClass

    Private Sub Command1_Click() Dim objWC As xmlControl Dim xml As String Set objWC = New xmlControl objWC.strDatabase = "pubs" objWC.strServer = "ltweb" objWC.strUser = "sa" objWC.strPassword = "" objWC.lMSADO = Option2.Value objWC.strAppName = "Article1" Text1.Text = objWC.getTitlesXML End Sub

    Листинг 5 - ASP для тестирования WebClass

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

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

    Определение языка XML

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

    Как Вы знаете, языков разметки существует достаточно много, например, язык HTML , но все они, так или иначе, зависят от обработчика, например, тот же самый html, код которого парсит браузер, является стандартизированным и не расширяемым, там есть четкие теги, синтаксис который нельзя нарушать, а в xml Вы можете сами создавать свои теги, т.е. свою разметку. Главным отличием HTML и XML является то, что html всего лишь описывает разметку для отображения данных, а xml — это абстрактная структура данных, которую можно обработать и отобразить как угодно и где угодно и поэтому сравнивать эти языки не нужно, у них абсолютно разное назначение.

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

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

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

    Также мне один раз пришлось хранить данные xml в базе MS SQL 2008, для того чтобы лучше представлять эти самые данные и обмениваться ими между сервером и клиентской частью приложения, это мы рассматривали в статье — Transact-sql – работа с xml .

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

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

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

    XML теги

    Язык XML для разметки использует теги (теги регистрозависимы ), но не такие теги как в html, а те, которые Вы придумаете сами, но у xml документа есть также четкая структура, т.е. есть открывающий тег и закрывающий, есть вложенные теги и есть, конечно же, значения, которые расположены в этих тегах. Другими словами, все, что нужно для начальных знаний xml — это просто придерживаться этим правилам. Все вместе открывающий, закрывающий тег и значение называется элементом и весь xml документ состоит именно из элементов, которые в совокупности образуют структуру данных. У xml документа может быть только один корневой элемент, это запомните, так как если Вы напишите два корневых элемента, то это будет ошибка.

    И пришло время привести пример xml разметки, и первый пример пока для синтаксиса:

    <Начало элемента> <Начало вложенного элемента> Значение вложенного элемента

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

    Теперь давайте приведем пример, настоящего xml документа:

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

    Книга 1 Иван Просто книга 1 Книга 2 Сергей Просто книга 2 Книга 3 Роман Просто книга 3

    Где первая строка и есть объявление декларации о том, что это документ XML и его необходимо читать в кодировке UTF-8.

    Эти данные без обработки будут выглядеть, например, в браузере (Mozilla Firefox) следующим образом:

    Надеюсь, Вы понимаете, что здесь catalog — это корневой элемент, который состоит из элементов book, который в свою очередь состоит из элементов name, author и comment, также для примера я задал несколько атрибутов у элемента catalog и у элемента book.

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