Устройство ПК

Обучение xml с нуля. Основы XML для начинающих пользователей

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

Вступление

Здравствуйте, дорогие читатели моей статьи. Сразу хочу сказать, что это только первая статья в моём цикле из трёх статей. Основная цель всего цикла – посвятить каждого читателя в XML и дать, если не полное разъяснение и понимание, то, хотя бы, хороший такой толчок к нему, объяснив основные моменты и вещи. Весь цикл будет для одной номинации – «Внимание к деталям» , а разделение на 3 статьи сделано для того, чтобы вмещаться в лимит символов в постах и разделить большое количество материала на более маленькие порции для большего понимания. Первая статья будет посвящена самому XML и что это такое, а так же одному из способов составления схемы для XML файлов – DTD. Для начала, хотелось бы высказать небольшое предисловие для тех, кто вообще еще не знаком с XML: не нужно пугаться. XML не очень сложный и с ним нужно разобраться любому программисту, так как это очень гибкий, эффективный и популярный формат файлов на сегодняшний день для хранения разнообразной информации, какой вы только захотите. XML используется в Ant, Maven, Spring. Любому программисту нужно знание XML. Теперь, когда вы собрались силами и мотивацией, давайте приступать к изучению. Весь материал я буду пытаться выложить максимально просто, собрав только самое важное и не вдаваться в дебри.

XML

Для более ясного объяснения, правильней будет визуализировать XML примером. < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee> < name> Maksim< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Ivan< / name> < job> Junior Software Developer< / job> < / employee> < employee> < name> Franklin< / name> < job> Junior Software Developer< / job> < / employee> < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee> < name> Herald< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Adam< / name> < job> Middle Software Developer< / job> < / employee> < employee> < name> Leroy< / name> < job> Junior Software Developer< / job> < / employee> < / employees> < / office> < / offices> < / company> HTML и XML похожи синтаксисом, так как у них общий родитель – SGML. Однако, в HTML есть только фиксированные теги конкретного стандарта, в то время, как в XML вы можете создавать свои собственные теги, атрибуты и, в целом, делать все, что захотите, чтобы хранить данные так, как вам будет удобно. По сути, XML файлы может прочитать любой человек, знающий английский язык. Изобразить данный пример можно с помощью дерева. Корень дерева – Company. Он же – корневой (рут) элемент, от которого идут все остальные элементы. В каждом XML файле может быть только один рут элемент. Он должен объявляться после декларации xml файла (первая строчка в примере) и вмещать в себе все другие элементы. Немного о декларации: она обязательная и нужна для идентификации документа как XML. У неё есть три псевдо-атрибуты (специальные предопределенные атрибуты): version (по стандарту 1.0), encoding (кодировка) и standalone (автономность: если yes и к документу подключаются внешние схемы, то будет ошибка, по умолчанию - no). Элементы – это сущности, которые хранят данные с помощью других элементов и атрибутов. Атрибуты – это дополнительная информация об элементе, которая указывается при добавлении элемента. Если перевести объяснение на ООП-поле, то можно привести такой пример: у нас есть машина, у каждой машины есть характеристики (цвет, вместимость, марка и другое) – это атрибуты, и есть сущности, которые внутри машины: двери, окна, двигатель, руль – это другие элементы. Хранить свойства можно как и отдельными элементами, так и атрибутами в зависимости от вашего желания. Как никак, XML – крайне гибкий формат хранения информации про что-либо. После объяснений, нам достаточно разобрать пример выше, чтобы все встало на свои места. В примере мы описали простую структуру компании: есть компания, у которой есть имя и офисы, а в офисах есть сотрудники. Элементы Employees и Offices – элементы-обертки – они служат для того, чтобы собрать в себе элементы одного вида, по сути, соединив их в одно множество для удобства их обработки. Отдельного внимания заслуживают floor и room. Это – атрибуты офиса (этаж и номер), другими словами – его свойства. Если бы у нас был элемент «картинка», то можно было бы передавать её размеры. Вы можете заметить, что у компании нет атрибута name, но есть элемент name. Просто вы можете описывать структуры так, как захотите. Никто не обязывает вас все свойства элементов записывать только в атрибуты, вы можете использовать и просто элементы и записывать внутри них какие-то данные. Например, мы можем записывать имя и должность наших работников, как атрибуты: < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee name= "Maksim" job= "Middle Software Developer" > < / employee> < employee name= "Ivan" job= "Junior Software Developer" > < / employee> < employee name= "Franklin" job= "Junior Software Developer" > < / employee> < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" > < / employee> < employee name= "Adam" job= "Middle Software Developer" > < / employee> < employee name= "Leroy" job= "Junior Software Developer" > < / employee> < / employees> < / office> < / offices> < / company> Как вы видите, теперь имя и должность каждого работника – это его атрибуты. И можно заметить, что внутри сущности (тега) employee ничего нет, все элементы employee – пустые. Тогда можно сделать employee пустым элементом – закрыть его сразу после объявления атрибутов. Это делается довольно просто, достаточно просто поставить слэш: < ? xml version= "1.0" encoding= "UTF-8" ? > < company> < name> IT- Heaven< / name> < offices> < office floor= "1" room= "1" > < employees> < employee name= "Maksim" job= "Middle Software Developer" / > < employee name= "Ivan" job= "Junior Software Developer" / > < employee name= "Franklin" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Как вы можете заметить, закрыв пустые элементы мы сохранили всю целостность информации и намного сократили запись, сделав информацию более сжатой и читабельной. Для того, чтобы добавить комментарий (текст, который будет пропускаться при парсинге файла) в XML, есть следующий синтаксис: < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > И последняя конструкция – это CDATA , означает «символьные данные». Благодаря данной конструкции, можно записывать текст, который не будет интерпретироваться как разметка XML. Это полезно, если внутри XML файла у вас есть сущность, которая хранит в информации XML разметку. Пример: < ? xml version= "1.0" encoding= "UTF-8" ? > < bean> < information> < ! [ CDATA[ < name> Ivan< / name> < age> 26 < / age> ] ] > < / information> < / bean> Особенность XML в том, что вы можете расширять его так, как захотите: использовать свои элементы, свои атрибуты и структурировать его по своему желанию. Вы можете использовать для хранения данных как атрибуты, так и элементы (как это было показано в примере ранее). Однако нужно понимать, что придумывать свои элементы и атрибуты на ходу и как вы захотите вы можете, но что, если вы будете работать на проекте, где другой программист захочет перенести элемент name в атрибуты, а у вас вся логика программы написана так, чтобы name был элементом? Как же создать свои собственные правила того, какие элементы должны быть, какие атрибуты у них есть и другие вещи, чтобы можно было проводить валидацию XML файлов и быть уверенным, что правила станут стандартными в вашем проекте и никто их нарушать не будет? Для того, чтобы написать все правила вашей собственной XML разметки, есть специальные средства. Самые известные: DTD и XML Schema. В этой статье будет только про первое.

DTD

DTD создан для того, чтобы описывать типы документов. DTD уже устаревает и сейчас от него активно отказываются в XML, однако еще много XML файлов используют именно DTD и, в целом, его полезно понимать. DTD – это технология валидации XML-документов . DTD объявляет конкретные правила для типа документа: его элементы, какие элементы могут быть внутри элемента, атрибуты, обязательные они или нет, количество их повторений, а так же сущности (Entity). По аналогии с XML, для более ясного объяснения DTD можно визуализировать примером. < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > Вот такой вот простой пример у нас есть. В данном примере, мы объявили всю нашу иерархию из XML примера: работник, работники, офис, офисы, имя, компания. Для создания DTD файлов служат 3 основные конструкции, чтобы описывать любые XML файлы: ELEMENT (для описания элементов), ATTLIST (для описания атрибутов для элементов) и ENTITY (для подстановки текста сокращенными формами). ELEMENT Служит для описания элемента. Элементы, которые можно использовать внутри описанного элемента, перечисляются в скобках в виде списка. Можно использовать квантификаторы для указания количества (они аналогичны с квантификаторами из регулярных выражений): + значит 1+ * значит 0+ ? значит 0 ИЛИ 1 Если квантификаторов не было добавлено, то считается, что должен быть только 1 элемент. Если бы нам нужен был один из группы элементов, можно было бы написать так: < ! ELEMENT company ((name | offices) ) > Тогда выбирался бы один из элементов: name или offices, но если бы внутри company было сразу два их, то валидация бы не проходила. Так же можно заметить, что в employee есть слово EMPTY – это значит, что элемент должен быть пустым. Есть еще ANY – любые элементы. #PCDATA – текстовые данные. ATTLIST Служит для добавления атрибутов к элементам. После ATTLIST следует название нужного элемента, а после словарь вида «название атрибута – тип атрибута», а в конце можно добавить #IMPLIED (не обязателен) или #REQUIRED (обязателен). CDATA – текстовые данные. Есть и другие типы, однако все они строчные. ENTITY ENTITY служит для объявления сокращений и текста, который будет на них подстваляться. По сути, мы просто сможем использовать в XML вместо полного текста просто название сущности со знаком & перед и; после. Например: чтобы отличать разметку в HTML и просто символы, левую угловую скобочку часто экранируют с помощью lt; , только нужно еще выставить & перед lt. Тогда мы будем использовать не разметку, а просто символ < . Как вы можете видеть, все довольно просто: объявляете элементы, объясняете, какие элементы объявленные элементы способны содержать, добавление атрибутов этим элементам и, по желанию, можете добавить сущности, чтобы сокращать какие-то записи. И тут вы должны были бы спросить: а как использовать наши правила в нашем XML файле? Ведь мы просто объявили правила, но мы не использовали их в XML. Есть два способа использовать их в XML: 1. Внедрение - написание DTD правил внутри самого XML файла, достаточно просто написать корневой элемент после ключевого слова DOCTYPE и заключить наш DTD файл внутри квадратных скобочек. < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company [ < ! -- Объявление возможных элементов -- > < ! ELEMENT employee EMPTY> < ! ELEMENT employees (employee+ ) > < ! ELEMENT office (employees) > < ! ELEMENT offices (office+ ) > < ! ELEMENT name (#PCDATA) > < ! ELEMENT company (name, offices) > < ! -- Добавление атрибутов для элементов employee и office -- > < ! ATTLIST employee name CDATA #REQUIRED job CDATA #REQUIRED > < ! ATTLIST office floor CDATA #REQUIRED room CDATA #REQUIRED > < ! -- Добавление сущностей -- > < ! ENTITY M "Maksim" > < ! ENTITY I "Ivan" > < ! ENTITY F "Franklin" > ] > < company> < name> IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > < offices> < office floor= "1" room= "1" > < employees> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> 2. Импорт - мы записываем все наши правила в отдельный DTD файл, после чего в XML файле используем DOCTYPE-конструкцию из первого способа, только вместо квадратных скобочек нужно написать SYSTEM и указать абсолютный или относительный до текущего местоположения файла путь. < ? xml version= "1.0" encoding= "UTF-8" ? > < ! DOCTYPE company SYSTEM "dtd_example1.dtd" > < company> < name> IT- Heaven< / name> < ! -- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка. -- > < offices> < office floor= "1" room= "1" > < employees> < employee name= "&M;" job= "Middle Software Developer" / > < employee name= "&I;" job= "Junior Software Developer" / > < employee name= "&F;" job= "Junior Software Developer" / > < / employees> < / office> < office floor= "1" room= "2" > < employees> < employee name= "Herald" job= "Middle Software Developer" / > < employee name= "Adam" job= "Middle Software Developer" / > < employee name= "Leroy" job= "Junior Software Developer" / > < / employees> < / office> < / offices> < / company> Так же можно использовать ключевое слово PUBLIC вместо SYSTEM, однако оно вряд ли вам пригодится. Если интересно, то почитать про него (и про SYSTEM тоже) можно подробно тут: ссылочка . Теперь мы не можем использовать другие элементы без их объявления в DTD, а весь XML подчиняется нашим правилам. Можете попробовать записать данный код в IntelliJ IDEA в отдельный файл с расширением.xml и попробовать добавить какие-то новые элементы или удалить элемент из нашего DTD и заметите, как IDE будет указывать вам на ошибку. Однако, у DTD есть свои минусы:
  • У него свой собственный синтаксис, отличный от синтаксиса xml.
  • В DTD нет проверки типов данных, а содержать он может только строки.
  • В DTD нет пространства имён.
О проблеме собственного синтаксиса: вы должны разбираться в двух синтаксисах сразу: в XML и в DTD синтаксисе. Они разные и это может заставлять вас путаться. Так же, из-за этого же сложней отслеживать ошибки в огромных XML файлах в соединении с такими же DTD схемами. Если у вас что-то не заработало, приходится проверять огромное количество текста разных синтаксисов. Это как читать одновременно две книжки: на русском и английском. И если знание у одного языка у вас хуже, то понимать текст будет так же сложней. О проблеме проверки типов данных: у атрибутов в DTD действительно есть разные типы, но все они, по сути своей, являются строковыми представлениями чего-либо, списками или ссылками. Однако, вы не можете требовать только числа, и, тем более, позитивные или негативные. А про объектные типы можете вообще забыть. Последняя проблема будет обсуждаться уже в следующей статье, которая будет посвящена пространствам имён и XML схемам, так как обсуждение её тут бессмысленно. Спасибо всем за внимание, я проделал большую работу и продолжаю её проделывать, чтобы вовремя закончить весь цикл статей. По сути, мне осталось разобраться с XML схемами и придумать их объяснение более ясными словами, чтобы закончить 2-ю статью. Её половина уже сделана, так что можете ожидать её в ближайшее время. Последняя статья будет полностью посвящена работе с XML файлами средствами Java. Удачи всем и успехов в программировании:) Следующая статья:

В книге содержатся советы, алгоритмы и готовые примеры программ из различных областей: шифрование, файловые и сетевые операции, XML, ASP.NET, взаимодействие с MS Office и Internet Explorer и др. Описаны синтаксис языка С#, вопросы отладки и профилирования приложений, а также проблемы, возникающие при переходе с других языков программирования на язык С#. Рассматриваются примеры наиболее часто используемых регулярных выражений. Отдельная глава посвящена работе с аппаратурой.
Архив содержит саму книгу и CD с исходным кодом.

Пособие предназначено для программистов, начинающих и продолжающих изучение технологий Java SE, JEE и других. В его первой части рассматриваются основы языка Java и концепции объектно-ориентированного программирования. Во второй части изложены аспекты применения библиотек классов языка Java, включая файлы, коллекции, сетевые и многопоточные приложения, а также взаимодействие с ХМL. В третьей части приведены основы программирования распределенных информационных систем с применением сервлетов, JSP и собственных тегов разработчика. В четвертой части даны основы практического применения шаблонов проектирования.
В конце каждой главы даются тестовые вопросы по материалу главы и задания для выполнения.
В приложениях приведены дополнительные материалы, относящиеся к использованию UML, SQL, Ant, XML, а также краткое описание популярных технологий Log4J, JUnit, JPA и Hibernate.

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

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

Описание книги Advanced Applications and Structures in Xml Processing: Label Streams, Semantics Utilization and Data Query Technologies :
Applications and Structures in XML Processing: Label Streams, Semantics Utilization and Data Query Technologies reflects the significant research results and latest findings of scholars’ worldwide, working to explore and expand the role of XML. This collection represents an understanding of XML processing technologies in connection with both advanced applications and the latest XML processing technologies that is of primary importance. It provides the opportunity to understand topics in detail and discover XML research at a comprehensive level.

Описание книги XML: разработка Web-приложений :
В книге предлагается полное описание языка XML в совокупности с языками XSLT и XPath, представленное в первой части. Вторая часть книги содержит практическое руководство по применению материала, изложенного в первой части книги. Помимо XML затрагиваются вопросы, возникающие при построении реальных Web-приложений, а именно передача параметров HTTP-запроса серверу, проектирование форм, представление данных с помощью каскадных стилевых таблиц, обработка действий пользователя с помощью JavaScript.

Часть I. XML от А до Я

  • Язык XML
  • Язык XSLT
  • Язык XPath
  • Комплексный пример
  • Необходимые дополнения

Часть II. Практическая разработка web-приложений

  • Средства создания Web-приложения
  • Каскадные стилевые таблицы
  • Методика обработки данных
  • Представление данных

Описание книги Python & XML :
If you are a Python programmer who wants to incorporate XML into your skill set, this is the book for you. Python has attracted a wide variety of developers, who use it either as glue to connect critical programming tasks together, or as a complete cross-platform application development language. Yet, because it is object-oriented and has powerful text manipulation abilities, Python is an ideal language for manipulating XML.

Python & XML gives you a solid foundation for using these two languages together. Loaded with practical examples, this new volume highlights common application tasks, so that you can learn by doing. The book starts with the basics then quickly progresses to complex topics, like transforming XML with XSLT, querying XML with XPath, and working with XML dialects and validation. It also explores the more advanced issues: using Python with SOAP and distributed web services, and using Python to create scalable streams between distributed applications (like databases and web servers).

The book provides effective practical applications, while referencing many of the tools involved in XML processing and Python, and highlights cross-platform issues along with tasks relevant to enterprise computing. You will find ample coverage of XML flow analysis and details on ways in which you can transport XML through your network.

Whether you are using Python as an application language, or as an administrative or middleware scripting language, you are sure to benefit from this book. If you want to use Python to manipulate XML, this is your guide.

Описание книги XML Bible :
The emergence of XML is having an enormous impact on Web development, and scaling the learning curve of this new technology is a priority for many developers. The XML Bible offers a superb introduction to the subject and the groundwork to understand XML"s future developments.

Author Elliotte Rusty Harold uses a patient, step-by-step discussion that clearly points out the potential of XML without boring his readership with tons of SGML spec-speak. Harold opens quickly with a "Hello World" example to get the reader coding early, and follows that with a simple but powerful example of XML"s data management benefits—presenting baseball statistics. Once you"ve coded your first XML documents, you"ll be hooked on the technology and motivated to learn about the more sophisticated topics.

Style sheet languages are covered comprehensively to illustrate the presentation possibilities and pitfalls. An unusually long list of real-life XML applications also shows how XML is already being used, and there is in-depth coverage of the Resource Description Framework, Channel Definition Format, and Vector Markup Language. The book wraps up with a section that helps you design your own XML application from scratch.

Описание книги XSLT. Сборник рецептов :
Язык XSLT (Extensible Stylesheet Language Transformation) стал основным инструментом обработки XML-документов, но многие разработчики все еще не освоили его в полной мере и потому считают, что проще модифицировать имеющийся код, чем писать новый с нуля. В версии 2.0 многие проблемы решены, но появился ряд новых возможностей, которые еще надо изучить. К тому же она пока недостаточно поддержана.

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

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

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

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

Описание книги XML. Справочник :
"XML. Справочник" — это источник информации для разработчиков в быстро развивающемся мире XML. Читатели, поняв суть базового стандарта XML, смогут быстро разобраться в тонкостях DTD, пространств имен, соблюдения корректности документов XML и поддержки Unicode.

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

Обзор ключевых технологий, используемых в основном для повествовательных XML-документов, таких как веб-страницы, книги и статьи, поможет вам получить практические знания по XSLT, XPath, XLink, XPointer, CSS и XSL-FO. Наверняка многие заинтересуются применением XML для интенсивной обработки данных.

Несколько глав посвящены утилитам и API, необходимым для написания программ обработки XML, таким как SAX — простому API для XML, и DOM — объектной модели документов консорциума W3C.

В книгу также включен материал, образующий основу любого справочника издательства O"Reilly. В этих главах приведены подробные синтаксические правила (сопровождаемые примерами) основных технологий XML, в том числе DTD, XPath, XSLT, SAX и DOM. В данном справочнике описаны правила, которых должны придерживаться авторы всех XML-документов — как веб-дизайнеры, создающие анимации с помощью SMIL, так и программисты C++, применяющие SOAP для сериализации объектов в удаленную базу данных.

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

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

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

Решением всех описанных выше проблем стал утвержденный в 1998 году международной организацией W3C (EN) язык XML. XML (eXtensible Markup Language) - это расширяемый язык разметки, предназначенный для описания в текстовой форме структурированных данных. Этот текстовый (text-based) формат, во многом схожий с HTML, разработан специально для хранения и передачи данных.

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

  • отдельные документы;
  • метаданные, описывающие содержимое какого-либо узла интернета;
  • объекты, содержащие данные и методы работы с ними (например, элементы управления ActiveX или объекты Java);
  • отдельные записи (например, результаты выполнения запросов к базам данных);
  • всевозможные веб-ссылки на информационные и людские ресурсы интернета (адреса электронной почты, гипертекстовые ссылки и пр.).

Создание XML-документов

Данные, описанные на языке XML, называются XML-документами. Язык XML легко читаем и достаточно прост для понимания. Если вы были знакомы с HTML, то научиться составлять XML-документы не составит для вас никакого труда.

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

Доброе утро НОВОСТИ Сериал Нежный яд Поле чудес (повтор) М. ф. Здоровье НОВОСТИ С легким паром! М. ф. Вместе НОВОСТИ Звездный час НОВОСТИ Погода Спокойной ночи, малыши ВРЕМЯ Взгляд

Этот текст может быть создан в обычном текстовом формате и сохранен в файле с расширением XML.

Любой элемент XML-документа может иметь атрибуты, уточняющие его характеристики. Атрибут - это пара имя="значение", которая задается при определении элемента в начальном тэге. В приведенном выше примере у элемента имеется атрибут date="25 декабря", а у элемента - атрибут name="ОРТ".

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

Россия Санкт-Петербург Доброе утро НОВОСТИ Сериал Нежный яд Поле чудес (повтор) М. ф. Здоровье НОВОСТИ С легким паром! М. ф. Вместе НОВОСТИ Звездный час НОВОСТИ Погода Спокойной ночи, малыши ВРЕМЯ Взгляд М. ф. Погода Почта РТР Доброе утро, страна! Сам себе режиссер Сиреневый туман ЗОЛОТОЙ КЛЮЧ Федерация Секретные агенты Боярский Двор Моя семья Аншлаг ВЕСТИ АСТЕРОИД (США) УЖИН У ФРЕДА (США) Погода

Теперь из этого XML-описания можно извлечь программу телепередач каналов ОРТ и РТР на 25 декабря по городу Санкт-Петербург, Россия.

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

Управлять отображением элементов в окне программы-клиента (например, в окне броузера) можно с помощью специальных инструкций - стилевых таблиц XSL (eXstensible Stylesheet Language). Эти таблицы XSL позволяют определять оформление элемента в зависимости от его месторасположения внутри документа, то есть к двум элементам с одинаковым названием могут применяться различные правила форматирования. Кроме того, языком, лежащим в основе XSL, является XML, а это означает, что таблицы XSL более универсальны, а для контроля корректности составления таких стилевых таблиц можно использовать DTD-описания или схемы данных, рассмотренные ниже.

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

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

Если XML-документ не нарушает приведенные выше правила, то он называется формально-правильным .

На сегодняшний день существует два способа контроля правильности XML-документа: DTD-определения (Document Type Definition) и схемы данных (Semantic Schema). Если XML-документ создается и пересылается с использованием DTD-описаний или схем (Schemas), то он называется валидным .

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

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

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

Эта XML-схема должна быть сохранена в файле TV-ProgramSchema.XML. Корневым элементом этого XML-файла является элемент , атрибутами которого является название схемы TV-ProgramSchema и ссылка на пространства имен, которые определяют встроенные типы данных, используемые в этой схеме: xmlns="urn:schemas-microsoft-com:xml-data" . Атрибуты элементов этой схемы minOccurs и maxOccurs задают соответственно минимально и максимально возможное количество таких элементов в схеме. Например, строчка означает, что количество элементов типа item (то есть самих телепередач) в схеме может быть от 0 до бесконечности.

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

Россия Санкт-Петербург Доброе утро НОВОСТИ Сериал Нежный яд Поле чудес (повтор) М. ф. Здоровье НОВОСТИ С легким паром! М. ф. Вместе НОВОСТИ Звездный час НОВОСТИ Погода Спокойной ночи, малыши ВРЕМЯ Взгляд

Теперь корневой элемент этого XML-описания имеет атрибут xmlns="x-schema:TV-ProgramSchema.xml", являющийся ссылкой на используемую XML-схему.

Анализ XML-документов

Получение данных из XML-документа, а также проверка корректности XML-документов обеспечивается анализаторами (parsers) XML-документов. Если XML-документ является формально-правильным, то все анализаторы, предназначенные для разбора XML-документов, смогут работать с ним корректно.

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

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

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

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

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

В некоторых анализаторах способ представления структуры документа основывается на спецификации DOM (Document Object Model), что позволяет использовать строгую иерархическую модель DOM при создании XML-документов.

Примером XML-анализатора может служить встроенный в Microsoft Internet Explorer версии 5.0 XML-анализатор MSXML. Он позволяет читать данные из XML-файла, обрабатывать их, генерировать дерево элементов, отображать данные с использованием стилевых таблиц XSL, а также, используя DOM, представлять все элементы данных в виде объектов.

Использование XML

Многие специалисты рассматривают XML как новую технологию интеграции программных компонент. Основными преимуществами использования XML являются:

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

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

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

Инструменты обработки данных, полученных в формате XML, могут быть разработаны в среде Visual Basic, Java или C++.

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

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

Язык XML привлекает к себе много внимания со стороны разработчиков и пользователей Интернет. Появляются новые языки, созданные на основе XML, возникают Web-сервера, использующие эту технологию для организации хранящейся на них информации. Полные спецификации XML и связанных с ним языков доступны на официальной странице W3C - www.w3.org

Годом рождения XML можно считать 1998 год, когда спецификация языка была утверждена. А началось всё с появления в 1986 году языка SGML. Хотя понятие гипертекста было введено В.Бушем еще в 1945 году и, начиная с 60-х годов, стали появляться приложения, использующие гипертекстовые данные, всплеск активности вокруг этой технологии начался тогда, когда возникла реальная необходимость в механизме объединения множества информационных ресурсов, обеспечения возможности создания, просмотра текста. С помощью SGML можно описывать структурированные данные, организовывать информацию, содержащуюся в документах, представлять эту информацию в некотором стандартизованном формате. Язык SGML предназначен для создания других языков разметки, он определяет допустимый набор тэгов, их атрибуты и внутреннюю структуру документа. Контроль за правильностью использования дескрипторов осуществляется при помощи специального набора правил, называемых DTD- описаниями, которые используются программой клиента при разборе документа. Для каждого класса документов определяется свой набор правил, описывающих грамматику соответствующего языка разметки. Но в виду своей сложности, SGML использовался, в основном, для описания синтаксиса других языков, наиболее известным из которых является HTML.

HTML является упрощенной версией языка разметки SGML. Гораздо более простой и удобный, чем SGML, язык HTML позволяет определять оформление элементов документа и имеет некий ограниченный набор инструкций - тэгов, при помощи которых осуществляется процесс разметки. Инструкции HTML, в первую очередь, предназначены для управления процессом вывода содержимого документа на экране программы-клиента и определяют этим самым способ представления документа, но не его структуру. В качестве элемента гипертекстовой базы данных, описываемой HTML, используется текстовый файл, который может легко передаваться по сети с использованием протокола HTTP. Эта особенность, а также то, что HTML является открытым стандартом и огромное количество пользователей имеет возможность применять возможности этого языка для оформления своих документов, безусловно, повлияли на рост популярности HTML и сделали его сегодня главным механизмом представления информации в Web

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

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

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

rose,

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

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

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

Что такое XML?

Термин XML обозначает особую разновидность гипертекстовых документов. Чем же плохи обычные текстовые документы и что особенного есть в XML-документах?

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

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

Пример типичного XML-документа

ПРАЙМ-ТАСС

</p><p>Первый серийный самолет "Ту-214" производства КАПО</p><p>совершил первый испытательный полет</p><p>самолета Ту-214, выпущенный в серийном исполнении</p><p>на Казанском авиационно-производственном объединении</p><p>/КАПО/, совершил первый испытательный полет. Об</p><p>этом ПРАЙМ-ТАСС сообщили в Финансовой лизинговой</p><p>компании /ФЛК/.</p><p>Самолет изготовлен для хабаровской авиакомпании</p><p>"Дальавиа" в рамках соглашения, заключенного в 2000</p><p>году между "Дальавиа" и ФЛК, предусматривающего передачу в</p><p>лизинг двух Ту-214, производимых на КАПО. Ту-214</p><p>предназначен для перевозки 164 пассажиров на расстояние</p><p>7,2 тыс км на маршрутах Москва-Хабаровск, а также в Корею</p><p>Общие затраты на подготовку производства самолета составили</p><p>1,2 млрд руб. Из бюджета страны на эти цели было выделено</p><p>всего 1,5 млн руб. Подготовка к производству велась за счет</p><p>средств КАПО и бюджета Татарстана, а также полного</p><p>освобождения предприятия от республиканского и местных</p><p>налогов. Из республиканского бюджета на сертификацию</p><p>самолета было выделено 97 млн руб, а также 275 млн руб</p><p>для запуска механизма лизинга.</p><p>Предварительная стоимость Ту-214 составляет 22-25 млн долл.</p><p></InfoItem></p><p></InfoPacket></p> </td> </tr></table><p>Первые две строчки в этом примере должны присутствовать. Первая строчка означает, что данный документ является XML-документом, а вторая указывает на специальный ресурс <u>http://xml.prime-tass.ru/dtd/UIF.dtd </u>, в котором содержатся правила оформления данного XML-документа). Более подробную информацию по этим "волшебным словам" и не только можно получить на сайте <u>http://www.w3.org </u>.</p><p>Остальные строчки имеют явно выраженную иерархическую структуру, в которой есть один корневой тег <b><InfoPacket> </b>, а остальные теги вложены в него. Все эти теги встечаются парами, например, <b><InfoPacket> </b> и <b></InfoPacket> </b>, или <b><Text> </b> и <b></Text> </b>. Первые - обозначают открывающийся тег, вторые - парный ему закрывающийся. В XML-документе каждый открывающийся тег обязан иметь парный ему закрывающийся.</p><p>Тег <b><InfoPacket> </b> является самым главным тегом - корнем иерархической структуры и предназначен для хранения вложенных в него остальных тегов. Таким образом, он представляет собой своеобразный "конверт" или "обертку" - информационный пакет. В него вложены теги <b><Source> </b>, <b><Time> </b> и <b><InfoItem> </b>. Тег <b><Source> </b> содержит сведения об источнике информации, заключенной в данном информационном пакете ("адрес отправителя"). В теге <b><Time> </b> указано время создания информационного пакета ("время заклеивания конверта"). И, наконец, в теге <b><InfoItem> </b> находится собственно "письмо" - фактическое смысловое наполнение информационного пакета. Что же содержится в этом "письме"? В нем находятся теги <b><Time> </b>, <b><Title> </b> и <b><Text> </b>. В теге <b><Time> </b>, вложенном в тег <b><InfoItem> </b> указано когда наше "письмо" было написано, т.е. время написания содержимого <b><InfoItem> </b>. Не следует путать это время с моментом "заклеивания конверта" (созданием информационного пакета <b><InfoPacket> </b>). Обычно сначала пишут "письмо", а потом "заклеивают конверт" с ним. Кстати, если получателей несколько, то придется "заклеить" несколько "конвертов" с одинаковыми копиями "письма". Или возможна ситуация, когда нужно положить в один конверт несколько "писем" для одного получателя. В этом случае придется поместить внутри тега <b><InfoPacket> </b> несколько тегов <b><InfoItem> </b>. Кроме тега <b><Time> </b> в <b><InfoItem> </b> вложен тег <b><Title> </b>, в котором написан заголовок документа или "письма", если продолжить нашу аналогию. И, наконец, остался тег <b><Text> </b>, который несколько раз встречается внутри тега <b><InfoItem> </b>. Этот тег <b><Text> </b> обозначает просто абзацы документа.</p><p>Осталось только сказать, что означают и для чего нужны записи, типа <b>type="datetime" </b> или <b>type="string" </b> внутри названий тегов <b><Source> </b>, <b><Time> </b> и <b><Title> </b> и почему их нет в тегах <b><Text> </b>. Такого рода записи в XML называются атрибутами тегов. В данном случае мы имеем один атрибут <b>type </b>, который принимает значения <b>"datetime" </b> и <b>"string" </b>. Значения атрибутов в XML всегда заключаются в кавычки. Атрибут <b>type </b> нужен для того, чтобы точно указать как следует интерпретировать последовательность символов, заключенную внутри тега с этим атрибутом. Значение <b>"datetime" </b> означает, что значение тега нужно интерпретировать как дату и время, а значение <b>"string" </b> - как обычную строку. У тега <b><Text> </b> атрибут <b>type </b> отсутствует, т.к. по смыслу этого тега и так ясно, что в этом теге содержится текстовая строка.</p><p>XML - это язык разметки, описывающий целый класс объектов данных, называемых XML- документами. Этот язык используется в качестве средства для описания грамматики других языков и контроля за правильностью составления документов. Т.е. сам по себе XML не содержит никаких тэгов, предназначенных для разметки, он просто определяет порядок их создания. Таким образом, если, например, мы считаем, что для обозначения элемента <i>rose </i>в документе необходимо использовать тэг <i><flower> </i>;, то XML позволяет свободно использовать определяемый нами тэг и мы можем включать в документ фрагменты, подобные следующему:</p><p><flower>rose</flower></p><p>Набор тэгов может быть легко расширен. Если, предположим, мы хотим также указать, что описание цветка должно по смыслу идти внутри описания оранжереи, в которой он цветет, то просто задаем новые тэги и выбираем порядок их следования:</p><p><conservatory></p><p><flower>rose</flower></p><p></conservatory></p><p>Если мы хотим посадить туда еще несколько цветочков, то должны внести следующие изменения:</p><p><conservatory></p><p><flower>rose</flower></p><p><flower>tulip</flower></p><p><flower>cactus</flower></p><p></conservatory></p><p>Как видно, сам процесс создания XML документа очень прост и требует от нас лишь базовых знаний HTML и понимания тех задач, которые мы хотим выполнить, используя XML в качестве языка разметки. Таким образом, у разработчиков появляется уникальная возможность определять собственные команды, позволяющие им наиболее эффективно определять данные, содержащиеся в документе. Автор документа создает его структуру, строит необходимые связи между элементами, используя те команды, которые удовлетворяют его требованиям и добивается такого типа разметки, которое необходимо ему для выполнения операций просмотра, поиска, анализа документа.</p><p>Еще одним из очевидных достоинств XML является возможность использования его в качестве универсального языка запросов к хранилищам информации. Сегодня в глубинах W3C находится на рассмотрении рабочий вариант стандарта XML-QL(или XQL), который, возможно, в будущем составит серьезную конкуренцию SQL. Кроме того, XML-документы могут выступать в качестве уникального способа хранения данных, который включает в себя одновременно средства для разбора информации и представления ее на стороне клиента. В этой области одним из перспективных направлений является интеграция Java и XML - технологий, позволяющая использовать мощь обеих технологий при построении машинно-независимых приложений, использующих, кроме того, универсальный формат данных при обмене информации.</p><p>XML позволяет также осуществлять контроль за корректностью данных, хранящихся в документах, производить проверки иерархических соотношений внутри документа и устанавливать единый стандарт на структуру документов, содержимым которых могут быть самые различные данные. Это означает, что его можно использовать при построении сложных информационных систем, в которых очень важным является вопрос обмена информацией между различными приложениями, работающими в одной системе. Создавая структуру механизма обмена информации в самом начале работы над проектом, менеджер может избавить себя в будущем от многих проблем, связанных с несовместимостью используемых различными компонентами системы форматов данных.</p><p>Также одним из достоинств XML является то, что программы-обработчики XML- документов не сложны и уже сегодня появились и свободно распространяются всевозможные программные продукты, предназначенные для работы с XML-документами. XML поддерживается сегодня в Microsoft Internet Explorer 4/0 и в бэта-версиях IE5. Было заявлено о его поддержке в последующих версиях Netscape Communicator, СУБД Oracle, DB-2, в приложениях MS-Office . Все это дает основания предполагать, что, скорее всего, в ближайшем будущем XML станет основным языком обмена информации для информационных систем, заменив собой, тем самым, HTML. На основе XML уже сегодня созданы такие известные специализированные языки разметки, как SMIL, CDF, MathML, XSL, и список рабочих проектов новых языков, находящихся на рассмотрении W3C, постоянно пополняется.</p> <p><i>В последнее время аббревиатура «XML» все чаще встречается в статьях, книгах и разговорах профессионалов (и дилетантов). Многое уже было сказано, и многое еще будет сказано об этой универсальной технологии. Основная цель данной статьи состоит в том, чтобы ввести читателя в мир расширяемого языка разметки и показать некоторые средства, используемые для представления знаний посредством XML-технологий и последующей визуализации этих знаний. Я не собираюсь утомлять читателя пространными описаниями стандартов на документы XML, рекомендуемых консорциумом W3C (зайдите в гости к консорциуму, проживающему по адресу http://www.w3.org ; здесь расположена вся официальная документация). О некоторых стандартах и их реализации мы поговорим в следующих статьях, а сейчас наша основная задача - понять, из-за чего, собственно говоря, начался весь этот шум вокруг XML. </i></p> <p>Прежде всего, необходимо отметить, что высказывания вроде «XML позволит решить все проблемы электронной коммерции» или «XML скоро полностью вытеснит HTML» являются в корне неверными и показывают неведение их авторов относительно роли XML в электронном бизнесе и месте расширяемого языка разметки в сфере интернет-технологий. По мнению ведущих экспертов, XML можно использовать как дополнение к HTML. Вероятно, в будущем XML будет применяться для описания данных, тогда как прерогативой HTML останется форматирование и презентация этих данных.</p> <p>Судя по наметившимся тенденциям, в будущем XML будет служить связующим звеном между различными платформами и приложениями. Что же касается применения XML в бизнесе, то наилучшей областью для этого специалисты считают <i> B2B </i>(business-to-business). Уже сейчас многие компании, специализирующиеся в электронной коммерции, активно применяют расширяемый язык разметки для улучшения взаимодействия с партнерами.</p> <p>Что же такое XML? Если <a href="/for-beginners/sistemnye-trebovaniya-destiny-sistemnye-trebovaniya-destiny-o-chem.html">речь идет</a> о формальном определении, я бы предложил следующее: <i>XML - это универсальный, не зависящий от платформы язык разметки, который можно использовать для представления иерархических данных и унификации передаваемой информации </i>. Сама аббревиатура расшифровывается как Extensible Markup Language, что в переводе означает «расширяемый язык разметки». Как и HTML (Hypertext Markup Language), XML является потомком SGML (Standard General Markup Language) - «дедушки» языков разметки, который в течение многих лет используется в издательском деле. Иногда говорят, что XML - это не язык, а скорее метаязык, с помощью которого можно определять другие языки. Действительно, путем создания новых тэгов и определения новых структур с помощью этих тэгов мы фактически создаем новые языки с их собственным синтаксисом и семантикой.</p> <p>Предвижу давно напрашивающийся вопрос: чем же был плох HTML? Последние версии этого языка в сочетании с каскадными таблицами стилей (<i>CSS </i>) позволяют создавать очень красивые web-сайты и обладают практически неограниченными возможностями форматирования гипертекстовых документов. Зачем же нам морочить голову, изобретать и добавлять новые тэги, когда и стандартных элементов (плюс возможности стилевых таблиц) хватает даже для самого причудливого оформления Web-страницы? Дело в том, что XML в его «чистом» виде слабо связан с форматированием документов. Альфа и омега этого языка - возможность семантически и синтаксически корректно описывать сложные структурированные данные. Правильно же представленные данные легче обрабатывать, передавать и представлять пользователю.</p> <p>Представим себе, что нам необходимо описать некоторые данные о человеке, например, его имя и возраст. Следующий фрагмент HTML-документа выполняет эту задачу:</p> <form name="2" method="post"> </form> <p>Теперь попробуем сделать то же самое с помощью XML:</p> <form name="2" method="post"> <p><name>Ivan</name> <age>36</age>.</p> </form> <p>Этот тривиальный пример хорошо демонстрирует различия в представлении данных с помощью HTML и XML. Действительно, то, что относилось к тексту в HTML-представлении (слова «Name» и «Age»), относится к структуре в XML-документе (тэги <name> и <age>). Таким образом, XML позволяет лучше структурировать хранимую и передаваемую информацию. Если в традиционном HTML понятия «представление» и «визуализация» часто смешиваются, то при работе с XML мы четко разделяем эти понятия. Все, что относится к описанию предметной области, делается средствами XML, а то, что относится к визуализации, мы оставляем специальным программам и стилевым таблицам.</p> <h4>Синтаксис прост, но строг…</h4> <p>Рассмотрим следующий простой документ XML:</p> <form name="2" method="post"> <p><?xml version="1.0"?> <people> <person class="children"> <name> <first_name>Ivan</first_name> <second_name>Ivanovich</second_name> <surname>Ivanov</surname> </name> <age>8</age> <hobby>football</hobby> </person> <person> <name> <first_name>Pyotr</first_name> <second_name>Petrovich</second_name> <surname>Petrov</surname> </name> <age>25</age> <hobby>chess</hobby> </person> <person> <name> <first_name>Nikolay</first_name> <second_name>Nikolayevich</second_name> <surname>Nikolayev</surname> </name> <age>45</age> <hobby>swimming</hobby> </person> </people></p> </form> <p>Первая строка:</p> <form name="2" method="post"> <p><?xml version="1.0"?></p> </form> <p>является декларацией используемой версии языка. В данном случае это версия <i>1.0 </i>. Не пропускайте эту строку в ваших документах!</p> <p>Вторая строка</p> <form name="2" method="post"> </form> <p>описывает <i>корневой элемент </i>документа (the root element). Составитель как бы предупреждает: «этот документ содержит информацию о людях».</p> <p>Элементы, представленные тэгами <person>И </person> являются <i> дочерними узлами </i>(child nodes) корневого узла <people>Слово «class» представляет собой имя атрибута, значение которого равно children. Узлы <name>, <age> и <hobby> являются потомками (descendants) узла <people>И дочерними узлами для <person>Наконец, тэги <first_name>, <second_name> и <surname> - это «дети» для <name>, «внуки» для <person>И «правнуки» для <p>Последняя строка</p> <form name="2" method="post"> </form> <p>определяет конец корневого элемента.</p> <p>Отметим некоторые особенности <i>синтаксиса </i>XML.</p> <p>В отличие от HTML, все элементы XML должны иметь <i>закрывающий тэг </i>(closing tag). В HTML следующая запись допустима:</p> <form name="2" method="post"> <p><p>Это мой первый параграф <p>Это мой второй параграф</p> </form> <p>В XML опускать закрывающие тэги нельзя. Для данного примера представление текста в формате XML могло бы выглядеть так:</p> <form name="2" method="post"> <p><p>Это мой первый параграф</p> <p>Это мой второй параграф</p></p> </form> <p>Впрочем, вместо <p>Мы могли бы использовать другой тэг, например, отсутствующий в HTML тэг <prgrph>Благо XML позволяет нам изобретать наши собственные тэги. Заметим, что первая, «декларативная» строка документа не содержит закрывающего тэга. Это не ошибка. Дело в том, что декларации не являются элементами XML и не имеют закрывающих тэгов.</p> <p>В отличие от HTML, тэги XML <i>чувствительны к регистру </i>(case sensitive). Если в HTML строки символов <IMG>, <img> и <Img> представляют собой один и тот же тэг, то в XML эти тэги не эквивалентны. Примеры:</p> <form name="2" method="post"> <p><Letter>Это неправильная запись!</letter> <letter>Это правильная запись</letter></p> </form> <p>В HTML иногда можно нарушить правила вложения тэгов без тяжелых последствий (в виде сообщения об ошибке). В XML это невозможно. Например, код</p> <form name="2" method="post"> <p><b><i>Это жирный курсив</b></i></p> </form> <p>в HTML допускается. В XML такая запись ошибочна. Правильный код выглядел бы так:</p> <form name="2" method="post"> <p><b><i>Это жирный курсив</i></b></p> </form> <p>В отличие от HTML, все документы XML должны иметь корневой элемент. Все остальные элементы являются «потомками» корневого. При этом строгие правила вложения не должны нарушаться.</p> <p>В отличие от HTML, XML сохраняет пробелы. Строка</p> <form name="2" method="post"> </form> <p>в HTML будет показана так:</p> <form name="2" method="post"> </form> <p>В XML все пробелы будут сохранены.</p> <p>В HTML значения атрибутов элементов часто могут не заключаться в кавычки. В XML все значения атрибутов непременно должны быть заключены в кавычки. Нарушение этого правила обязательно приведет к ошибке. Если в нашем примере третью строку изменить следующим образом:</p> <form name="2" method="post"> <p> </form> <p>синтаксис XML будет нарушен.</p> <h4>«Хорошие» и «плохие» документы</h4> <p>Документы XML, удовлетворяющие всем требованиям синтаксиса, называют <i>правильными </i>(well-formed). С этой точки зрения построенный нами документ с корневым элементом <people>Является правильным. Я надеюсь, что на вашем компьютере заблаговременно был установлен Microsoft Internet Explorer 5.0. Если так, то мы можем проверить «правильность» нашего документа прямо сейчас. Сохраните текст документа в файле myFirstXML.xml и откройте этот файл в Internet Explorer. Если вы правильно скопировали текст, получится нечто вроде этого (рис. 1).</p> <p>Если бы мы допустили какую-нибудь синтаксическую ошибку, например, забыли закрыть какой-нибудь тэг, программа-анализатор сообщила бы нам об этом через окно Internet Explorer.</p> <p>Следует отметить, что я перечислил лишь основные правила синтаксиса XML, акцентируя внимание читателя на их отличии от правил построения документов HTML. Кроме правильных документов различают также <i>действительные </i>(valid) документы, которые удовлетворяют специальным определениям типа документа (Document Type Definition, <i>DTD </i>). Определение типа документа представляет собой описание логической структуры, в соответствии с которой строится документ. DTD определяет части документа и указывает, какие элементы и в каком порядке в них могут размещаться. Определение типа документа - это, по сути дела, набор правил, который передается специальной программе-анализатору (parser) для обработки документа и определения его соответствия правилам построения.</p> <p>Детальные определения типа документа не являются обязательными (хотя рекомендуются) для построения XML-документов. В настоящее время разрабатываются новые, быть может, более эффективные средства задания структуры документа (например, так называемые схемы). Обсуждение деталей DTD выходит за рамки данной статьи. Хочу лишь отметить, что первая строка рассмотренного нами ранее документа</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> <hr /> <p style="text-align: center;"> <div class="clearfix multiple-recommended-posts multiple-recommended-3"> <article class="recommended-post"> <a href="/for-beginners/podstavki-pod-noutbuk-svoimi-rukami-ohlazhdayushchaya-podstavka-dlya-noutbuka-svoimi.html"> <header> <p>Для начинающих</p> </header> <figure> <img width="400" height="240" src="/uploads/4439b1979fd4de7e7b9b1262e3c0ded7.jpg" class="attachment-recommended size-recommended wp-post-image" alt="Охлаждающая подставка для ноутбука своими руками Как самому сделать охлаждающую подставку" / loading=lazy> </figure> <h1>Охлаждающая подставка для ноутбука своими руками Как самому сделать охлаждающую подставку</h1> </a> </article> <article class="recommended-post"> <a href="/programs/usb-mysh-gorit-ne-rabotaet-ne-dvigaetsya-kursor-myshi-no-mysh.html"> <header> <p>Программамы</p> </header> <figure> <img width="400" height="240" src="/uploads/4f2f0ba07f25d35a7a60c5e3f3033889.jpg" class="attachment-recommended size-recommended wp-post-image" alt="Не двигается курсор мыши, но мышь работает" / loading=lazy> </figure> <h1>Не двигается курсор мыши, но мышь работает</h1> </a> </article> <article class="recommended-post"> <a href="/pc-device/kak-udalit-zablokirovannyi-process-papku-ili-programmu-unlocker.html"> <header> <p>Устройство ПК</p> </header> <figure> <img width="400" height="240" src="/uploads/88955fb5efe00ab0758dad45db182c28.jpg" class="attachment-recommended size-recommended wp-post-image" alt="Как пользоваться программой unlocker" / loading=lazy> </figure> <h1>Как пользоваться программой unlocker</h1> </a> </article> </div> </p> </div> </div> <div class="share-buttons"> <div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><div class="sd-content"> <ul> <li class="share-facebook"><a class="share-facebook sd-button share-icon" href="" target="_blank" title="Поделиться на Facebook"><span>Facebook</span></a></li> <li class="share-twitter"><a class="share-twitter sd-button share-icon" href="" target="_blank" title="Поделиться на Twitter"><span>Twitter</span></a></li> <li class="share-google-plus-1"><a class="share-google-plus-1 sd-button share-icon" href="" target="_blank" title="Поделиться на Google+"><span>Google</span></a></li> <li class="share-reddit"><a class="share-reddit sd-button share-icon" href="" target="_blank" title="Поделиться на Reddit"><span>Reddit</span></a></li> <li class="share-end"></li> </ul> </div></div></div> </div> <footer class="entry-footer"> </footer> </article> <section class="four-col-articles"> <div class="row"> <article class="medium-6 large-3 columns entry entry--one-fourth"> <div class="entry--one-fourth__container"> <figure> <a href="/working-with-files/luchshie-programmy-dlya-montazha-audio-zvukovoi-redaktor.html" title="Лучшие программы для монтажа аудио"> <img width="800" height="500" src="/uploads/0c047968b61028bbd2be9061bf76eacc.jpg" class="attachment-medium size-medium wp-post-image" alt="Лучшие программы для монтажа аудио" / loading=lazy> </a> </figure> <header class="entry--one-fourth__meta clearfix"> <div class="entry-categories"> <a href="/category/working-with-files/"><span class="catParent">Работа с файлами </span></a> </div> </header> <h1 class="entry-title entry-title--small"><a href="/working-with-files/luchshie-programmy-dlya-montazha-audio-zvukovoi-redaktor.html">Лучшие программы для монтажа аудио</a></h1> <span class="entry-date">2023-08-07 01:24:51</span> </div> </article> <article class="medium-6 large-3 columns entry entry--one-fourth"> <div class="entry--one-fourth__container"> <figure> <a href="/windows/chto-delat-esli-android-ne-sohranyaet-prilozheniya-na-kartu-pamyati.html" title="Исправить чтение и запись на карте памяти в KitKat Фикс для доступа к sd карте"> <img width="800" height="500" src="/uploads/57e4354f9469e75230ce7524c20776d3.jpg" class="attachment-medium size-medium wp-post-image" alt="Исправить чтение и запись на карте памяти в KitKat Фикс для доступа к sd карте" / loading=lazy> </a> </figure> <header class="entry--one-fourth__meta clearfix"> <div class="entry-categories"> <a href="/category/windows/"><span class="catParent">Windows </span></a> </div> </header> <h1 class="entry-title entry-title--small"><a href="/windows/chto-delat-esli-android-ne-sohranyaet-prilozheniya-na-kartu-pamyati.html">Исправить чтение и запись на карте памяти в KitKat Фикс для доступа к sd карте</a></h1> <span class="entry-date">2023-08-06 01:23:18</span> </div> </article> <article class="medium-6 large-3 columns entry entry--one-fourth"> <div class="entry--one-fourth__container"> <figure> <a href="/programs/armada-mody-luchshie-onlain-igry-mod-umnaya-karta-k-armored-warfare.html" title="Армада моды. Лучшие онлайн игры. Мод Умная Карта к Armored Warfare"> <img width="800" height="500" src="/uploads/48f68b0e93fa3e79da8c98036acf65c5.jpg" class="attachment-medium size-medium wp-post-image" alt="Армада моды. Лучшие онлайн игры. Мод Умная Карта к Armored Warfare" / loading=lazy> </a> </figure> <header class="entry--one-fourth__meta clearfix"> <div class="entry-categories"> <a href="/category/programs/"><span class="catParent">Программамы </span></a> </div> </header> <h1 class="entry-title entry-title--small"><a href="/programs/armada-mody-luchshie-onlain-igry-mod-umnaya-karta-k-armored-warfare.html">Армада моды. Лучшие онлайн игры. Мод Умная Карта к Armored Warfare</a></h1> <span class="entry-date">2023-08-05 01:34:30</span> </div> </article> <article class="medium-6 large-3 columns entry entry--one-fourth"> <div class="entry--one-fourth__container"> <figure> <a href="/security/nomera-7-vin-mobail-v-krymu-krymskaya-intriga.html" title="Номера 7 вин мобайл в крыму"> <img width="800" height="500" src="/uploads/6ed9c83a16cf97e023f72f347be7a8f8.jpg" class="attachment-medium size-medium wp-post-image" alt="Номера 7 вин мобайл в крыму" / loading=lazy> </a> </figure> <header class="entry--one-fourth__meta clearfix"> <div class="entry-categories"> <a href="/category/security/"><span class="catParent">Безопасность </span></a> </div> </header> <h1 class="entry-title entry-title--small"><a href="/security/nomera-7-vin-mobail-v-krymu-krymskaya-intriga.html">Номера 7 вин мобайл в крыму</a></h1> <span class="entry-date">2023-08-03 01:20:16</span> </div> </article> </div> </section> </main> </div> </div> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="row"> <div class="medium-3 columns"> <aside id="text_icl-3" class="widget widget_text_icl"> <div class="textwidget"></div> </aside> <p class="copyright">© 2024 drophunter.ru. Windows. Железо. Интернет. Безопасность. Операционные системы.</p> </div> <div class="medium-6 columns"> <div class="footer-logo-container"> <div class="footer-logo"> <img src="/logo/logo.svg" loading=lazy> </div> <h2 class="site-description site-description--footer">Windows. Железо. Интернет. Безопасность. Операционные системы</h2> <div class="footer-social"> <a href="https://www.facebook.com/sharer/sharer.php?u=https://drophunter.ru/pc-device/obuchenie-xml-s-nulya-osnovy-xml-dlya-nachinayushchih-polzovatelei-xml-v-budushchei-veb-razrabotke.html" class="facebook"><span class="icon-facebook"></span></a><a href="https://www.twitter.com/share?url=https://drophunter.ru/pc-device/obuchenie-xml-s-nulya-osnovy-xml-dlya-nachinayushchih-polzovatelei-xml-v-budushchei-veb-razrabotke.html" class="twitter"><span class="icon-twitter"></span></a><a href="https://youtube.com/" class="youtube"><span class="icon-youtube"></span></a> </div> </div> </div> <div class="medium-3 columns"> <aside id="nav_menu-2" class="widget widget_nav_menu"><div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/windows/">Windows</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/security/">Безопасность</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/for-beginners/">Для начинающих</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/setting/">Настройка </a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/programs/">Программамы</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/working-with-files/">Работа с файлами</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/devices/">Устройства</a></li> <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-"><a href="/category/pc-device/">Устройство ПК</a></li> </ul></div></aside> </div> </div> </footer> <a href="#" class="js-back-to-top"><span class="icon-arrow-up"></span></a> </div> <div style="display:none"> </div> <script type="text/javascript"> window.WPCOM_sharing_counts = { "https:\/\/www.drophunter.ru\/2017\/12\/ecb_cash_report\/":13856} ; </script> <link rel='stylesheet' id='gravityformsmailchimp_form_settings-css' href='/wp-content/plugins/gravityformsmailchimp/css/form_settings.css?ver=4.2' type='text/css' media='all' /> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.70'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=3.2.5'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=3.2.5'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/gravityforms/js/jquery.json.min.js?ver=2.2.5'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/gravityforms/js/gravityforms.min.js?ver=2.2.5'></script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/gravityforms/js/placeholders.jquery.min.js?ver=2.2.5'></script> <script type='text/javascript'> /* <![CDATA[ */ var sharing_js_options = { "lang":"en","counts":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://drophunter.ru/wp-content/plugins/jetpack/modules/sharedaddy/sharing.js?ver=5.5.1'></script> <script type='text/javascript'> var windowOpen; jQuery( document.body ).on( 'click', 'a.share-facebook', function() { // If there's another sharing window open, close it. if ( 'undefined' !== typeof windowOpen ) { windowOpen.close(); } windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcomfacebook', 'menubar=1,resizable=1,width=600,height=400' ); return false; } ); var windowOpen; jQuery( document.body ).on( 'click', 'a.share-twitter', function() { // If there's another sharing window open, close it. if ( 'undefined' !== typeof windowOpen ) { windowOpen.close(); } windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcomtwitter', 'menubar=1,resizable=1,width=600,height=350' ); return false; } ); var windowOpen; jQuery( document.body ).on( 'click', 'a.share-google-plus-1', function() { // If there's another sharing window open, close it. if ( 'undefined' !== typeof windowOpen ) { windowOpen.close(); } windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcomgoogle-plus-1', 'menubar=1,resizable=1,width=480,height=550' ); return false; } ); var windowOpen; jQuery( document.body ).on( 'click', 'a.share-linkedin', function() { // If there's another sharing window open, close it. if ( 'undefined' !== typeof windowOpen ) { windowOpen.close(); } windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcomlinkedin', 'menubar=1,resizable=1,width=580,height=450' ); return false; } ); </script> <script type='text/javascript'> _stq = window._stq || []; _stq.push([ 'view', { v:'ext',j:'1:5.5.1',blog:'92060137',post:'13856',tz:'2',srv:'www.drophunter.ru'} ]); _stq.push([ 'clickTrackerInit', '92060137', '13856' ]); </script> </body> </html>