Язык xml для начинающих. Введение в XML. Структура XML документа. Разделы и их декларации

Язык XML (Extensible Markup Language) был разработан рабочей группой XML Working Group консорциума World Wide Web Consortium (W3C). Вот как описывают его создатели:

«Расширяемый язык разметки Extensible Markup Language (XML) представляет собой составную часть языка SGML... Он предназначен для облегчения использования языка SGML в Web и выполнения задач, которые в настоящее время реализуются с помощью языка HTML. XML разработан с целью усовершенствовать применение и взаимодействие языков SGML и HTML.»

Это выдержка из спецификации версии 1.0 XML, созданной XML Working Group в феврале 1998 г. Весь документ вы можете найти на сайте W3C по адресу http://www.w3.org/TR/REC/-xml .

XML - язык разметки, разработанный специально для размещения информации в World Wide Web, аналогично языку гипертекстовой разметки HTML (Hypertext Markup Language), который изначально стал стандартным языком создания Web-страниц. Поскольку язык HTML полностью удовлетворяет всем нашим потребностям, возникает вопрос: для чего понадобился совершенно новый язык для Web? В чем состоят его преимущества и достоинства? Как он взаимодействует с HTML? Заменит ли он HTML, или только усовершенствует его? Наконец, что собой представляет язык SGML, частью которого является XML, и почему нельзя использовать для Web-страниц собственно SGML? В этой главе я постараюсь ответить на все эти вопросы.

Предназначение XML

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

создания личной домашней страницы. Ниже приведено описание домашней страницы в кодах HTML:

Home Раgе

Michael Young"s Home Page

Welcome to my Web site!

Web Site Contents

Please choose one of the following topics:

  • Writing
  • Family
  • Photo Gallery

Other Interesting Web Sites

Click one of the following to explore another Web site:

  • «1. XML должен стать языком прямого использования в Internet.»

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

    «2. XML будет поддерживать большое количество приложений.»

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

    «3.XML будет совместим с SGML.»

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

    «4. Будет легче писать программы, обрабатывающие XML-документы.»

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

    «5. Количество дополнительных функций в XML должно быть минимальным, а в идеале - нулевым.»

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

    «6. XML-документы должны быть понятными и ясными для пользователя.»

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

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

    «7. Разработка XML должна быть завершена достаточно быстро.»

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

    «8. Язык XML должен быть формальным и кратким.»

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

    «9. XML-документы будет проще создавать.»

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

    «10. Сжатая форма при XML-разметке не важна.»

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

    Стандартные XML-приложения

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

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

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

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

    XML-приложения, повышающие качество XML-документов

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

    • Extensible Stylesheet Language (XSL) позволяет вам создавать мощные стилевые таблицы с использованием синтаксиса XML.
    • XML Schema позволяет разрабатывать подробные схемы для ваших XML-документов с использованием стандартного синтаксиса XML, что является более мощной альтернативой применения DTD.
    • XML Linking Language (XLink) дает возможность связывать ваши XML-документы. Он поддерживает множественные целевые ссылки и другие полезные функции, обеспечивая большую свободу по сравнению с механизмом организации ссылок в HTML.
    • XML Pointer Language (XPointer) позволяет определять гибкие целевые ссылки. При совместном использовании XPointer и XLink вы можете организовывать ссылки на любое место в целевом документе -а не только переходы к специально выделенным пунктам.

    Об XLS будет рассказано в главе 10. Другие XML-приложения еще не доведены до готовности и не рассматриваются в этой книге. (XLink и XPointer не поддерживаются в Internet Explorer 5).

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

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

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

    Ссылка . Более полный список текущих и перспективных XML-приложений, включая их подробное описание, вы можете найти на Web-странице Oasis SGML/XML (http://www.oasis-open.arg/cover/ocml . htmW applications).

    • Работа с базами данных. Подобно традиционным базам данных, XML может быть использован для присвоения метки каждому полю информации внутри каждой записи базы данных. (Например, можно пометить каждое имя, адрес и номер телефона внутри записей списка адресов.) После этого вы сможете отображать данные различными способами и организовывать поиск, сортировку, фильтрацию и иную обработку данных.
    • Структурирование документов. Иерархическая структура XML-до-кументов идеально подходит для разметки структуры таких документов, как романы, научные труды, пьесы. Например, вы можете использовать XML для разметки пьесы на акты, сцены, размечать действующих лиц, сюжетные линии, декорации и т. д. XML-разметка дает возможность программам отображать или распечатывать документ в необходимом формате; находить, извлекать или манипулировать информацией в документе; генерировать оглавления, резюме и аннотации; обрабатывать информацию иными способами.
    • Работа с векторной графикой (VML - Vector Markup Language).
    • Мультимедиа презентации (SMIL - Synchronized Multimedia Integration Language, HTML + TIME - HTML Timed Interactive Multimedia Extensions).
    • Описание каналов. Каналы представляют собой Web-страницы, которые автоматически рассылаются подписчикам. (CDF - Channel Definition Format).
    • Описание программных пакетов и их взаимосвязей. Такие описания обеспечивают распространение и обновление программных продуктов в сети (OSD - Open Software Description).
    • Взаимодействие приложений через Web с использованием XML-co-общений. Эти сообщения являются независимыми от операционных систем, объектных моделей и компьютерных языков (SOAP - Simple Object Access Protocol).
    • Отправка электронных бизнес-карт через e-mail.
    • Обмен финансовой информацией. Обмен информацией в открытом и понятном формате осуществляется между финансовыми программами (такими как Quicken и Microsoft Money) и финансовыми институтами (банками, общественными фондами) (OFX - Open Financial Exchange).
    • Создание, управление и использование сложных цифровых форм для коммерческих Internet-транзакций. Подобные формы могут включать оцифрованные подписи, которые делают их признанными юридически (XFDL - Extensible Forms Description Language).
    • Обмен запросами по приему на работу и резюме (HRMML - Human Resource Management Markup Language).
    • Форматирование математических формул и научной информации в
    • Web (MathML - Mathematical Markup Language).
    • Описание молекулярных структур (CML - Chemical Markup Language).
    • Кодирование и отображение информации о ДНК, РНК и цепочках (BSML - Bioinformatic Sequence Markup Language).
    • Кодирование генеалогических данных (GeDML - Genealogical Data Markup Language).
    • Обмен астрономическими данными (AML - Astronomical Markup Language).
    • Создание музыкальных партитур (MusicML -Music Markup Language).
    • Работа с голосовыми сценариями для доставки информации по телефону. Голосовые сценарии могут быть использованы, например, для генерирования голосовых сообщений, справок о наличии товаров и прогнозов погоды (VoxML).
    • Обработка и доставка информации курьерскими службами. Служба Federal Express, например, уже использует XML для этих целей.
    • Представление рекламы в прессе в цифровом формате (AdMarkup).
    • Заполнение юридических документов и электронный обмен юридической информацией (XCL - XML Court Interface).
    • Кодирование прогнозов погоды (OMF - Weather Observation Markup Format).
    • Обмен информацией по операциям с недвижимостью (RETS - Real Estate Transaction Standard).
    • Обмен страховой информацией.
    • Обмен новостями и информацией с использованием открытых Web-стандартов (XMLNews).
    • Представление религиозной информации и разметка текстов богослужений (ThML - Theological Markup Language, LitML - Liturgical Markup Language).

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

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

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

    Синтаксис XML

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

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

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

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

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

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

    Структура

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

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

    Мука

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

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

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

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

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

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

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

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

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

    AT&T

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

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

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

    AT&T

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

    История

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

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

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

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

    Достоинства

    Недостатки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    В 1986 году, задолго до того, как идея создания сети Веб была воплощена в жизнь, универсальный стандартизированный язык разметки SGML (Standardized Generalized Markup Language ) был утвержден в качестве международного стандарта (ISO 8879 ) определения языков разметки, хотя SGML существовал еще с конца шестидесятых. Он использовался для того, чтобы описывать языки разметки, предоставляя при этом автору возможность давать формальные определения каждому элементу и атрибуту языка .

    Язык HTML первоначально был всего лишь одним из SGML -приложений. Он описывал правила, по которым должна быть подготовлена информация для World Wide Web . Таким образом, язык HTML - это набор предписаний SGML , сформулированных в виде определения типа документа (DTD ), объясняющих, что именно обозначают тэги и элементы. Схема DTD для языка HTML хранится в веб-браузере.

    К недостаткам языка HTML можно отнести следующие:

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

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

    Группа экспертов по языку SGML , возглавляемая Джоном Боузэком (Jon Bosak ) из компании Sun Microsystems , приступила к работе по созданию подмножества языка SGML , которое могло бы быть принято Web -сообществом. Решено было удалить многие несущественные возможности SGML . Перестроенный таким образом язык назвали XML . Упрощенный вариант оказался значительно более доступным, чем оригинал, его спецификации занимали всего 26 страниц по сравнению с более чем 500 страницами спецификаций SGML .

    Рассмотрим более детально структуру и особенности этого языка.

    XML ( eXtensible Markup Language ) - рекомендованный W3C язык разметки . XML - текстовый формат , предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе специализированных языков разметки. XML является упрощённым подмножеством языка SGML .

    Язык XML имеет следующие достоинства :

    • Это человеко-ориентированный формат документа, он понятен как человеку, так и компьютеру.
    • Поддерживает Юникод.
    • В формате XML могут быть описаны основные структуры данных - такие как записи, списки и деревья.
    • Это самодокументируемый формат, который описывает структуру и имена полей также как и значения полей.
    • Имеет строго определённый синтаксис и требования к анализу, что позволяет ему оставаться простым, эффективным и непротиворечивым.
    • Широко используется для хранения и обработки документов;
    • Это формат, основанный на международных стандартах;
    • Иерархическая структура XML подходит для описания практически любых типов документов;
    • Представляет собой простой текст, свободный от лицензирования и каких-либо ограничений;
    • Не зависит от платформы;
    • Является подмножеством SGML , для которого накоплен большой опыт работы и созданы специализированные приложения;

    К известным недостаткам языка можно отнести следующие:

    • Синтаксис XML избыточен.
      • Размер XML документа существенно больше бинарного представления тех же данных (порядка 10 раз).
      • Размер XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON , YAML ) и особенно в форматах данных, оптимизированных для конкретного случая использования.
      • Избыточность XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.
      • Для большого количества задач не нужна вся мощь синтаксиса XML , и можно использовать значительно более простые и производительные решения.
    • Пространства имён XML сложно использовать и их сложно реализовывать в XML парсерах .
    • XML не содержит встроенной в язык поддержки типов данных. В нём нет понятий "целых чисел", "строк", "дат", "булевых значений" и т. д.
    • Иерархическая модель данных , предлагаемая XML , ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.

    Вообще говоря, XML можно рассматривать не только как новый язык разметки , но и как основу для целого семейства технологий:

    Таблица 9.1. Структура семейства XML
    XML Технические рекомендации об использовании XML
    DTD Определение типа документа (схема)
    XDR Формат XML Reduced (схема Microsoft )
    XSD Определение схемы XML (схемы W3C )
    Пространство имен Метод определения имен элементов и атрибутов
    XPath Язык путей XML
    XLink Язык ссылок XML
    XPointer Язык указателей XML
    DOM API для объектной модели документа
    SAX Простой API для XML
    XSL Расширяемый язык таблиц стилей
    XSL -FO Объекты форматирования XSL
    XSLT Язык преобразований XSL
    XInclude Синтаксис XML Include

    При использовании 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> - как <a href="/sozdanie-zagruzochnoi-fleshki-windows-7-64-bit-kak-bystro-i-legko-sozdat.html">обычную строку</a>. У тега <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 <a href="/chto-eto---vypolneno-no-s-oshibkami-na-stranice-oshibki-scenariya-v-internet-explorer.html">Internet Explorer</a> 4/0 и в бэта-версиях IE5. Было заявлено о его поддержке в последующих версиях Netscape Communicator, СУБД Oracle, DB-2, в приложениях MS-Office . Все это дает основания предполагать, что, скорее всего, в ближайшем будущем XML станет основным языком обмена информации для информационных систем, заменив собой, тем самым, HTML. На основе XML уже сегодня созданы такие известные специализированные языки разметки, как SMIL, CDF, MathML, XSL, и список рабочих проектов новых языков, находящихся на рассмотрении W3C, постоянно пополняется.</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <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> </div> <script type="text/javascript"> $(document).ready(function() { $('.highslide-container').on('click', function() { $(this).find('.highslide').click(); }); $('.highslide').magnificPopup({ type: 'image', gallery: { enabled: true, preload: [1, 1], navigateByImgClick: true, tClose: 'Закрыть (Esc)', tPrev: 'Предыдущее фото (стрелка влево)', // title for left button tNext: 'Следующее фото (стрелка вправо)', // title for right button tCounter: '<span class="mfp-counter">Фотография %curr% из %total%</span>' // markup of counter }, }); }); </script> <div> </div> </article> </div> <div class="article_sidebar"> <div class="module module-bordered"> <div class="module-topic" style="color: #e5303b; font-weight: bold; font-size: 15px; padding-bottom: 10px;">Популярное</div> <div class="expert-widget-block"> <a href="/samye-legkie-i-bystrye-brauzery-v-mire-kakoi-brauzer-luchshe-sravnenie.html"> <img src="/uploads/8098dc1044a6e11b29a94bee3ea088af.jpg" class="expert-widget-block-img" / loading=lazy> </a> <a class="expert-widget-block-name" href="/samye-legkie-i-bystrye-brauzery-v-mire-kakoi-brauzer-luchshe-sravnenie.html"> <span>Какой браузер лучше: сравнение веб-обозревателей, работающих на стационарных и мобильных устройствах </span> </a> <span class="expert-widget-block-desc">Ни один пользователь не...</span> </div> <div class="expert-widget-block"> <a href="/chto-takoe-frizy-v-igrah-ustranenie-periodicheskih-frizov-frizy-v-igre.html"> <img src="/uploads/225d22342ebd99f335998622ae091468.jpg" class="expert-widget-block-img" / loading=lazy> </a> <a class="expert-widget-block-name" href="/chto-takoe-frizy-v-igrah-ustranenie-periodicheskih-frizov-frizy-v-igre.html"> <span>Устранение периодических фризов </span> </a> <span class="expert-widget-block-desc">Немного теории Иногда...</span> </div> <div class="expert-widget-block"> <a href="/nuzhnye-programmy-dlya-kompyutera-windows-7-kakie-samye-neobhodimye.html"> <img src="/uploads/58e627561fdf86f490a2090141cfe47b.jpg" class="expert-widget-block-img" / loading=lazy> </a> <a class="expert-widget-block-name" href="/nuzhnye-programmy-dlya-kompyutera-windows-7-kakie-samye-neobhodimye.html"> <span>Какие самые необходимые программы для компьютера? </span> </a> <span class="expert-widget-block-desc">За качественный, полезный и...</span> </div> <div class="expert-widget-block"> <a href="/kak-sozdat-menyu-joomla-kratkaya-instrukciya-kak-sdelat-menyu-v-joomla-tri-sposoba.html"> <img src="/uploads/d067494fa211c1e707bab7b5092dfe66.jpg" class="expert-widget-block-img" / loading=lazy> </a> <a class="expert-widget-block-name" href="/kak-sozdat-menyu-joomla-kratkaya-instrukciya-kak-sdelat-menyu-v-joomla-tri-sposoba.html"> <span>Как сделать меню в Joomla, три способа создания меню в Joomla Создаем пункты меню Joomla </span> </a> <span class="expert-widget-block-desc">Продолжаем знакомиться с...</span> </div> <div class="expert-widget-block"> <a href="/chto-takoe-tv-tyuner-dlya-kompyutera-tv-tyuner-dlya-televizora-chto-eto-takoe-kakoi-iz.html"> <img src="/uploads/98e8166f35a702ac4eb4840c539dda58.jpg" class="expert-widget-block-img" / loading=lazy> </a> <a class="expert-widget-block-name" href="/chto-takoe-tv-tyuner-dlya-kompyutera-tv-tyuner-dlya-televizora-chto-eto-takoe-kakoi-iz.html"> <span>ТВ-тюнер для телевизора: что это такое </span> </a> <span class="expert-widget-block-desc">Как правило, такой слот...</span> </div> </div> <div class="module module-bordered"> <div class="module-topic">Новое на сайте</div> <div class="module-link"><a class="module-icon-link" href="/kak-udalit-skaip-on-ne-udalyaetsya-kak-polnostyu-udalit-skaip-so-svoego.html"><span class="icon-link"><img src="/uploads/efe65a3a33baeafa66b34255993b93b0.jpg" loading=lazy></span>Как полностью удалить скайп со своего устройства</a></div> <div class="module-link"><a class="module-icon-link" href="/radius-deistviya-wifi-routera-tp-link-kak-uvelichit-radius-deistviya-wifi.html"><span class="icon-link"><img src="/uploads/0df3626ec3812096e748b2c0a6065a90.jpg" loading=lazy></span>Как увеличить радиус действия wifi</a></div> <div class="module-link"><a class="module-icon-link" href="/luchshie-materinskie-platy-pod-soket-lga-1155-lga1155-materinskie-platy--.html"><span class="icon-link"><img src="/uploads/c5521cab3fa5e26ea3af3a10b39929bd.jpg" loading=lazy></span>LGA1155 Материнские платы - Socket LGA1155</a></div> <div class="module-link"><a class="module-icon-link" href="/nuzhen-li-plei-market-na-meizu-sposoby-ustanovki-plei-market-na.html"><span class="icon-link"><img src="/uploads/75d35fa194e3c8905c76d953b5f1455a.jpg" loading=lazy></span>Способы установки плей маркет на мейзу</a></div> <div class="module-link"><a class="module-icon-link" href="/kak-vklyuchit-na-androide-rezhim-seti-nastroiki-mobilnoi-seti.html"><span class="icon-link"><img src="/uploads/41014618ef970fc84c71d7a569cf92fc.jpg" loading=lazy></span>Настройки мобильной сети предпочтения</a></div> </div> <div class="module"> </div> <div class="module"> </div> <div id="yandex_sidebar"> <div id="zawale1" style="height:500px;width:298px;" align="center"></div> </div> <script type="text/javascript"> (function() { var a = document.querySelector('#yandex_sidebar'), b = null; var P = 0; var selectorOfBlockToUnStick = '.social-bar'; window.addEventListener('scroll', Ascroll, false); document.body.addEventListener('scroll', Ascroll, false); // create wrapper before iframe loaded (if move DOM element with iframe - content of iframe reloaded - but yandex iframe is empty after reload) if (b == null) { //console.log('Init: childNodes.length = ' + a.childNodes.length); var Sa = getComputedStyle(a, ''), s = ''; for (var i = 0; i < Sa.length; i++) { if (Sa[i].indexOf('overflow') == 0 || Sa[i].indexOf('padding') == 0 || Sa[i].indexOf('border') == 0 || Sa[i].indexOf('outline') == 0 || Sa[i].indexOf('box-shadow') == 0 || Sa[i].indexOf('background') == 0) { s += Sa[i] + ': ' + Sa.getPropertyValue(Sa[i]) + '; ' } } b = document.createElement('div'); b.style.cssText = s + ' box-sizing: border-box; width: ' + a.offsetWidth + 'px;'; a.insertBefore(b, a.firstChild); var l = a.childNodes.length; for (var i = 1; i < l; i++) { b.appendChild(a.childNodes[1]); } //console.log('Init: created wrapper'); } function Ascroll() { //console.log('Ascroll ' + Date.now()); if (a.childNodes.length > 0) { if (b == null) { //console.log('Ascroll: childNodes.length = ' + a.childNodes.length); var Sa = getComputedStyle(a, ''), s = ''; for (var i = 0; i < Sa.length; i++) { if (Sa[i].indexOf('overflow') == 0 || Sa[i].indexOf('padding') == 0 || Sa[i].indexOf('border') == 0 || Sa[i].indexOf('outline') == 0 || Sa[i].indexOf('box-shadow') == 0 || Sa[i].indexOf('background') == 0) { s += Sa[i] + ': ' + Sa.getPropertyValue(Sa[i]) + '; ' } } b = document.createElement('div'); b.style.cssText = s + ' box-sizing: border-box; width: ' + a.offsetWidth + 'px;'; a.insertBefore(b, a.firstChild); var l = a.childNodes.length; for (var i = 1; i < l; i++) { b.appendChild(a.childNodes[1]); } //console.log('created wrapper (scroll)'); } a.style.height = b.getBoundingClientRect().height + 'px'; a.style.padding = '0'; a.style.border = '0'; //console.log('window.height = ' + $(window).height()); //console.log('b.getBoundingClientRect().height = ' + b.getBoundingClientRect().height); var P = ($(window).height() - b.getBoundingClientRect().height) / 2; // margin from window top (vertical center) //console.log('P = ' + P); var Ra = a.getBoundingClientRect(), R = Math.round(Ra.top + b.getBoundingClientRect().height - document.querySelector(selectorOfBlockToUnStick).getBoundingClientRect().bottom); // селектор блока, при достижении нижнего края которого нужно открепить прилипающий элемент if ((Ra.top - P) <= 0) { if ((Ra.top - P) <= R) { b.className = 'stop'; b.style.top = -R + 'px'; } else { b.className = 'sticky'; b.style.top = P + 'px'; } } else { b.className = ''; b.style.top = ''; } window.addEventListener('resize', function() { a.children[0].style.width = getComputedStyle(a, '').width }, false); } else { //console.log('Ascroll: childNodes.length = ' + a.childNodes.length); } } })() </script> </div> <div class="clear"></div> </div> <script type="text/javascript"> Share = { vkontakte: function (purl, ptitle, pimg, text) { url = 'http://vkontakte.ru/share.php?'; url += 'url=' + encodeURIComponent(purl); url += '&title=' + encodeURIComponent(ptitle); url += '&description=' + encodeURIComponent(text); url += '&image=' + encodeURIComponent(pimg); url += '&noparse=true'; Share.popup(url); } , odnoklassniki: function (purl, text) { url = 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1'; url += '&st.comments=' + encodeURIComponent(text); url += '&st._surl=' + encodeURIComponent(purl); Share.popup(url); } , facebook: function (purl, ptitle, pimg, text) { url = 'http://www.facebook.com/sharer.php?s=100'; url += '&p[title]=' + encodeURIComponent(ptitle); url += '&p[summary]=' + encodeURIComponent(text); url += '&p[url]=' + encodeURIComponent(purl); url += '&p[images][0]=' + encodeURIComponent(pimg); Share.popup(url); } , twitter: function (purl, ptitle) { url = 'http://twitter.com/share?'; url += 'text=' + encodeURIComponent(ptitle); url += '&url=' + encodeURIComponent(purl); url += '&counturl=' + encodeURIComponent(purl); Share.popup(url); } , mailru: function (purl, ptitle, pimg, text) { url = 'http://connect.mail.ru/share?'; url += 'url=' + encodeURIComponent(purl); url += '&title=' + encodeURIComponent(ptitle); url += '&description=' + encodeURIComponent(text); url += '&imageurl=' + encodeURIComponent(pimg); Share.popup(url) } , popup: function (url) { var x = screen.width / 2 - 626 / 2; var y = screen.height / 2 - 436 / 2; window.open(url, '', 'toolbar=0,status=0,width=626,height=436,left=' + x + ',top=' + y); } } ; </script> <script type="text/javascript"> $(document).ready(function () { var linkPopupTimeout = null; $('a.perelink').on('mouseenter', function (e) { var linkid = $(this).data("linkid"); var linkOuterHeight = $(this).outerHeight(); var position = $(this).offset(); var top = position.top; var left = e.pageX; var isLeftSide = 1; if (left > ($(window).width() / 2)) { isLeftSide = 0; } var scrollTop = $(window).scrollTop(), distanceFromLinkToTopOfViewport = (top - scrollTop); console.log("scrollTop = " + scrollTop); console.log("distanceFromLinkToTopOfViewport = " + distanceFromLinkToTopOfViewport); var isTopSide = 1; if (distanceFromLinkToTopOfViewport < ($(window).height() / 2)) { isTopSide = 0; // link near top of window } console.log("isTopSide=" + isTopSide); var linkBlockInitailTopPosition = position.top; /*if (isTopSide == 0) { linkBlockInitailTopPosition = position.bottom; } */ console.log("linkBlockInitailTopPosition = " + linkBlockInitailTopPosition); var linkInfo = { LinkID: linkid, PositionTop: linkBlockInitailTopPosition, PositionLeft: left, IsLeftSide: isLeftSide, IsTopSide: isTopSide } ; clearTimeout(linkPopupTimeout); //console.log("link::mouseenter - clear timeout"); if ($(".link-popup").length == 0) { $.ajax({ type: 'POST', url: '/article/linkpopup/', data: JSON.stringify(linkInfo), contentType: 'application/json; charset=utf-8' } ) .success(function (data) { $(".link-popup").remove();// remove if other exists var el = $(data); $("body").append(el); var elCssTop = parseInt($(el).css('top'), 10); if (isTopSide == 1) { elCssTop = elCssTop - $(el).outerHeight(); // move up linkBlock on block height } else { elCssTop = elCssTop + linkOuterHeight; // move down linkBlock on link height } el.css("top", elCssTop + "px"); //var elCssLeft = parseInt($(el).css('left'), 10); //var treugolhikOffsetLeft = 18; //elCssLeft = elCssLeft - treugolhikOffsetLeft; // el.css("left", elCssLeft + "px"); //el.css("display", "block"); el.slideDown(100); } ); } } ).on('mouseleave', function () { //var link = $(this); //console.log("link::mouseleave - create timeout"); linkPopupTimeout = setTimeout(function () { $('.link-popup').remove(); } , 400); //set the timeoutId, allowing us to clear this trigger if the mouse comes back over //link.data('timeoutId', timeoutId); //$('.article-link-popup').remove(); } );; $(document).on("mouseenter", ".link-popup", function () { //console.log("popup::mouseenter - clear timeout"); clearTimeout(linkPopupTimeout); } ); $(document).on("mouseleave", ".link-popup", function () { //console.log("popup::mouseleave - create timeout"); linkPopupTimeout = setTimeout(function () { $('.link-popup').remove(); } , 400); } ); $(document).on("click", ".perelink", function () { return PerelinkClick(); } ); $(document).on("click", ".link-popup a", function () { return PerelinkClick(); } ); function PerelinkClick() { yaCounter31715951.reachGoal('PERELINK'); //console.log("PerelinkClick"); return true; } } ); </script> <div id="link-popup-svg"> <svg width="0" height="0"> <defs> <clipPath id="link-popup-mask"> <polygon points="0 8, 10 8, 18 0, 26 8, 1000 8, 1000 1000, 0 1000"></polygon> </clipPath> <clipPath id="link-popup-mask-flip"> <polygon points="0 8, 274 8, 282 0, 290 8, 1000 8, 1000 1000, 0 1000"></polygon> </clipPath> <clipPath id="link-popup-landscape-mask"> <polygon points="0 8, 174 8, 182 0, 190 8, 1000 8, 1000 1000, 0 1000"></polygon> </clipPath> <clipPath id="link-popup-landscape-mask-flip"> <polygon points="0 0, 1000 0, 1000 242, 190 242, 182 250, 174 242, 0 242"></polygon> </clipPath> </defs> </svg> </div> </div> <footer> <div class="wrapper"> <div class="footer-col"> <ul> <li><a href="/category/program/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Программы</a></li> <li><a href="/category/printers/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Принтеры</a></li> <li><a href="/category/apple/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Apple</a></li> <li><a href="/category/smartphones/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Смартфоны</a></li> <li><a href="/category/windows-7/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Windows 7</a></li> </ul> </div> <div class="footer-col"> <ul> <li><a href="/category/program/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Программы</a></li> <li><a href="/category/printers/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Принтеры</a></li> <li><a href="/category/apple/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Apple</a></li> <li><a href="/category/smartphones/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Смартфоны</a></li> <li><a href="/category/windows-7/" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Windows 7</a></li> </ul> </div> <div class="footer-col"> <ul> <li><a href="" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">О проекте</a></li> <li><a href="/sitemap.xml" onclick="yaCounter31715951.reachGoal('footer_click'); return true;">Карта сайта</a></li> </ul> </div> <div class="footer-col"> <p>«geekpad.ru», 2024</p> <p>Портал компьютерных гиков</p> <p style="margin-top: 15px;"></p> <p></p> </div> </div> </footer> <script type="text/javascript"> $(document).ready(function () { //DisplayNoneContactForm(); $('<div id="up" class="up"></div>').appendTo('footer div.wrapper').click(function () { $('html, body').animate({ scrollTop: 0 } , 700); } ); var win = $(window); var up = $('#up'); win.on('scroll', function () { if (win.scrollTop() > win.height() / 3) { up.fadeIn(); } else { up.fadeOut(); } } ).scroll(); } ); </script> </body> </html>