Языки разметки
🕛 05.07.2006, 11:03
В начале февраля 1998 года международная организация W3C утвердила спецификацию "Extensible Markup Language (XML) 1.0", которая положила начало разработке множества новых языков разметки для передачи информации через Интернет на основе стандарта XML. По сути дела, это означало новый шаг в развитии языков гипертекстовой разметки. За четыре года своего существования XML не только привлек к себе довольно значительное внимание со стороны как обыкновенных пользователей, так и множества веб-дизайнеров, но и стал неотъемлемой чатью Интернета. Уже сегодня практически не существует серверов, которые в той или иной степени не использовали бы эту технологию как аналог HTML. Однако говорить о том, что XML именно сейчас становится основным способом трансляции гипертекста через глобальную сеть, пока еще по крайней мере преждевременно. Сам язык еще достаточно молод, и некоторые его элементы до сих пор находятся в стадии разработки. Пока что создан лишь общий каркас того, что, возможно, в будущем заменит Html, но в каком конкретно виде это будет - пока сказать невозможно. От начала В ноябре 1990 года, когда пользователи Интернета впервые услышали о новой технологии, название которой вполне легко смогло уместиться всего в три буквы, почти никто не мог представить себе, что пройдет совсем немного времени и технология эта станет практически единственным способом передачи информации в глобальной сети. Сегодня уже для многих неопытных пользователей слово Интернет прочно ассоциируется с WWW, хотя на самом деле вещи эти, конечно, друг с другом связанные, но все же немного разные. По большому счету, именно невероятная популярность World Wide Web и ее неотъемлемой части, HTML, безусловно, стала причиной крайне повышенного внимания к структурам гипертекстовой разметки документов. Впервые понятие гипертекста было введено В.Бушем еще в 1945 году. Однако реальные приложения, использующие подобные структуры данных, стали использоваться только начиная с 60-х годов, а поистине необычайный всплеск активности вокруг этой технологии начался лишь тогда, когда возникла реальная необходимость в механизме объединения множества информационных ресурсов, обеспечения возможности создания, просмотра нелинейного текста. И примером реализации этого механизма послужила та самая паутина WWW. Непосредственно язык разметки документов - это набор специальных инструкций, называемых тэгами (в некоторых переводных изданиях тэги называют ярлыками), предназначенных для создания в документах какой-либо структуры и определения отношений соответственно между различными элементами этой структуры. Тэги языка разметки, или, как их иногда называют, управляющие дескрипторы, в таких документах кодируются совершенно определенным образом, выделяются относительно основного содержимого документа, после чего служат в качестве инструкций для программы, производящей интерпретацию и показ содержимого документа, собственно говоря, тому, кто его просматривает, если пытаться найти аналогии с Интернетом, то этим некто является клиент, а программой-интерпретатором в самом распространенном случае является броузер). Уже в самых первых системах для обозначения этих команд было решено использовать символы "<" и ">", внутри которых помещать названия инструкций и их параметры. На сегодняшний день такой способ обозначения тэгов является общепризнанным стандартом. Само использование гипертекстовой разбивки текстового документа в современных информационных системах связано во многом с тем, что гипертекст позволяет создавать механизм так называемого нелинейного просмотра информации. Это означает, что в системах данные представляются не в виде непрерывного потока текстовых структур, а набором взаимосвязанных компонентов, переход по которым осуществляется с помощью гиперссылок. Наиболее популярный и известный на сегодняшний день язык гипертекстовой разметки - HTML, был создан специально для структурирования и передачи информации, находящейся в сети Интернет, и является, несомненно, ключевой составляющей технологии WWW. С использованием гипертекстовой модели документа способ представления разнообразных информационных ресурсов в сети стал более упорядочен, а пользователи получили удобный механизм поиска и просмотра нужной информации. Однако первой ласточкой в этом деле все же принято считать значительно более старый язык - SGML. SGML SGML (Standard Generalized Markup Language) был официально принят в 1986 году в качестве международного стандарта (ISO 8879:1986) для описания независимых от устройств ввода/вывода и от вычислительной среды методов представления текстовой информации в электронной форме. Основой для его создания послужил довольно старый язык разметки GML(Generalized Markup Language), разработанный компанией IBM еще во времена первых персональных копьютеров. Если быть точным, то SGML - это метаязык, предназначенный для описания других языков разметки. Изначально слово разметка, как правило, использовалось для описаний аннотаций или других обозначений внутри текста, которые предназначались для указаний составителю документа или, как его иногда называют, "верстальщику" того, как именно конкретное место должно быть напечатано. Подобные способы могут включать в себя подчеркивание волнистой чертой, обозначающее курсив, какие-либо специальные значки для пропуска отдельных фраз или их печати конкретным шрифтом, и так далее. Когда с течением времени форматирование и печать стали автоматизированными, этот термин уже охватывал все виды специальных кодов разметки, которые вставлялись в электронные текстовые документы для управления форматированием, печатью либо другой обработкой. Под языком разметки, таким образом, понимают набор соглашений о принципах форматирования, которые применяются для кодирования текстовых блоков. Язык разметки должен четко обозначать, какая разметка допустима именно в данном документе, какая разметка обязательна, как отличить ее элементы от простого текста и что разметка значит. SGML был способен решать первые три задачи, решение последней предполагало наличие неформального описания. SGML, в отличие от всех других языков разметки, созданных на его основе, использует принцип так называемой описательной разметки вместо процедурной. Подобная система использует элементы разметки, которые попросту предоставляют названия для отнесения отдельных частей документа к определенным категориям. Другими словами, тэги, такие как <para> или \end{list}, просто идентифицируют порцию документа и утверждают, что "эта часть является параграфом" или что "эта часть является концом начатого списка", и т.п. Система же, использующая процедурную разметку (сюда попадают текстовые процессоры, например, Microsoft Word) определяет, какая непосредственно обработка будет выполняться в конкретной точке текстового документа: "в этом месте вызвать такую-то процедуру с параметрами 5, е и z" или "передвинуть границу документа на 7 мм правее относительно какого-либо элемента, пропустить одну строку начать следующую с красной строки" и т.д. В SGML инструкции, которые необходимы для обработки документа с определенной конкретной целью (например, для форматирования), четко отделяются от описательной разметки, которая встречается внутри документа. Обычно они собраны вне документа в отдельных процедурах или программах. При использовании описательной, а не процедурной разметки один и тот же документ может быть обработан разными программами, каждая из которых может применять свои собственные инструкции обработки к тем его частям, которые она считает важными. Например, программа анализа содержимого может полностью игнорировать сноски, тогда как программа форматирования может извлекать и собирать их для печати в конце каждой части. Различные виды инструкций обработки могут ассоциироваться с одной и той же частью файла. Например, одна программа может извлекать из документа фамилии людей и географические названия для создания индекса или базы данных, тогда как другая, обрабатывающая тот же самый текст, может печатать фамилии и названия отличающимся шрифтом. SGML вводит также понятие типа документа, и, соответственно, способы его определения (document type definition, DTD). Документы считаются типизированными, так же как и другие обрабатываемые компьютерами объекты. Тип документа формально определяется его составными частями и их структурой. Скажем, можно определить тип документа таким образом, что он должен состоять из заголовка и, возможно, имени автора, за которыми следует аннотация и последовательность одного или более абзацев. Любой документ в отсутствие заголовка, в соответствии с этим формальным определением, не будет являться отчетом, так же как не будет им являться и последовательность абзацев, за которой следует аннотация, невзирая на то, насколько похож на отчет такой документ с точки зрения читателя-человека. Поскольку документы относятся к известным типам, можно использовать специальную программу, называемую анализатором (parser), для того чтобы обработать документ, утверждающий, что он относится к конкретному типу, и проверить, действительно ли все элементы, требуемые для данного типа документов, присутствуют и находятся в правильной последовательности и корректно структурированы. Что еще более важно, разные документы одного типа могут обрабатываться унифицированным образом. Можно писать программы, использующие знания, заключенные в информационной структуре документа, которые, таким образом, могут быть более интеллектуальными. SGML, как метаязык, позволяет определять конкретные языки (часто называемые "приложениями SGML"), ориентированные на конкретное применение. Пример тому - язык HTML, широко использующийся на WWW. Каждый такой язык описывается в виде DTD, определяя элементы и их атрибуты. Получив такой DTD, программное обеспечение для работы с SGML может корректно обрабатывать документы, написанные в соответствии с этим DTD. HTML Даже в проекте этот язык задумывался специально для реализации той модели передачи информации в глобальную сеть, которую мы имеем сейчас. Другими словами HTML - это порождение Интернета. Хотя, по сути дела, HTML является упрощенной версией стандартного общего языка разметки - SGML (Standart Generalised Markup Language), который был утвержден ISO в качестве стандарта еще в 80-х годах прошлого столетия. SGTML - это не язык в чистом виде, а скорее набор каких-то правил и описаний для создания других языков, он определяет допустимый набор тэгов, их атрибуты и внутреннюю структуру документа. Контроль за правильностью использования дескрипторов осуществляется при помощи специального набора правил, называемых DTD-описаниями, которые используются программой-интерпретатором клиента при разборе документа. Для каждого класса документов определяется свой набор правил, описывающих грамматику соответствующего языка разметки. С помощью SGML можно организовывать информацию, содержащуюся в документах, описывать структурированные данные, представлять эту информацию в некотором стандартизованном формате для последующего использования. Однако ввиду некоторой своей сложности, SGML использовался, в основном, для описания синтаксиса других языков (наиболее известным из которых является HTML), и немногие приложения работали с SGML-документами напрямую. HTML - язык значительно более удобный и простой в использовании, чем SGML. Он не позволяет определять дополнительные языки на своей основе. Использование HTML предполагает разметку документа по стандарту, который определяется довольно ограниченным набором инструкций или тэгов. Такие инструкции предназначаются, в первую очередь, для управления процессом вывода содержимого документа на экране программы-клиента и тем самым для определения способа представления документа, но не его целостной структуры. В большинстве случаев данные HTML представляются в обычном текстовом файле, который можно легко передавать по сети с использованием протокола http. Однако время идет и предъявляет все более жесткие требования к популярным технологиям, современные приложения нуждаются не только в языке представления данных на экране клиента, но и в механизме, позволяющем определять структуру документа, описывать содержащиеся в нем элементы. HTML обладает несложным набором команд и вполне успешно справляется с задачей описания текстовой информации и отображением ее на экране программы просмотра - броузера. Однако сами отображаемые данные никак не связаны с теми тэгами, которые используются для форматирования, поэтому у программ-анализаторов нет возможности использовать тэги HTML для поиска нужных нам фрагментов документа. Т.е. встретив, например, такое описание
<font color="red">rose</font>,программа просмотра будет знать, каким цветом отобразить текст, содержащийся внутри тэгов <font></font> и, вероятнее всего, отобразит его правильно, но ей абсолютно безразлично, в каком месте документа встретился этот тэг, в какие другие тэги заключен текущий фрагмент, существуют ли вложенные в него фрагменты, правильно ли построены отношения между объектами. Такое "безразличие" к структуре документа приводит к тому, что поиск или анализ информации внутри него ничем не будет отличаться от работы со сплошным, не разбитым на элементы текстовым файлом. А это, как известно, не самый эффективный способ работы с информацией. Другим существенным недостатком самой идеи, реализуемой в HTML, можно назвать ограниченность набора его тэгов. DTD-правила для HTML определяют фиксированный набор дескрипторов и поэтому у разработчика нет возможности вводить собственные, специальные тэги. Хотя время от времени появляются новые расширения языка (на сегодняшний день последней версией HTML является HTML 4.0), но долгий путь их стандартизации, сопровождаемый постоянными разногласиями между основными производителями броузеров, делают практически невозможной быструю адаптацию языка, его использование для отображения специализированной информации(например, мультимедийной, математических, химических формул и т.д.). Подводя итог всему сказанному, можно утверждать, что HTML уже сегодня не удовлетворяет в полной мере требованиям, предъявляемым современными разработчиками к языкам подобного рода. И ему на смену был предложен новый язык гипертекстовой разметки: мощный, гибкий, и, одновременно с этим, удобный язык XML. XML XML (Extensible Markup Language[1]) - это язык разметки, описывающий целый класс объектов данных, называемых XML-документами. Этот язык используется в качестве средства для описания грамматики других языков и контроля за правильностью составления документов. Т.е. сам по себе XML не содержит никаких тэгов, предназначенных для разметки, он просто определяет порядок их создания. Таким образом, если, например, мы считаем, что для обозначения элемента rose в документе необходимо использовать тэг <flower>, то XML позволяет свободно использовать определяемый нами тэг, и мы можем включать в документ фрагменты, подобные следующему:
<flower>rose</flower>Набор тэгов может быть легко расширен. Если, предположим, мы хотим также указать, что описание цветка должно по смыслу идти внутри описания оранжереи, в которой он цветет, то просто задаем новые тэги и выбираем порядок их следования:
<conservatory> <flower>rose</flower> </conservatory>Если мы хотим посадить туда еще несколько цветочков, то должны внести следующие изменения:
<conservatory> <flower>rose</flower> <flower>tulip</flower> <flower>cactus</flower> </conservatory>Как видно, сам процесс создания XML-документа очень прост и требует от нас лишь базовых знаний HTML и понимания тех задач, которые мы хотим выполнить, используя XML в качестве языка разметки. Таким образом, у разработчиков появляется уникальная возможность определять собственные команды, позволяющие им наиболее эффективно определять данные, содержащиеся в документе. Автор документа создает его структуру, строит необходимые связи между элементами, используя те команды, которые удовлетворяют его требованиям, и добивается такого типа разметки, которое необходимо ему для выполнения операций просмотра, поиска, анализа документа. Еще одним из очевидных достоинств XML является возможность использования его в качестве универсального языка запросов к хранилищам информации. Сегодня в глубинах W3C находится на рассмотрении рабочий вариант стандарта XML-QL(или XQL), который, возможно, в будущем составит серьезную конкуренцию SQL. Кроме того, XML-документы могут выступать в качестве уникального способа хранения данных, который включает в себя одновременно средства для разбора информации и представления ее на стороне клиента. В этой области одним из перспективных направлений является интеграция Java- и XML-технологий, позволяющая использовать мощь обеих технологий при построении машинно-независимых приложений, использующих, кроме того, универсальный формат данных при обмене информацией.
XML позволяет также осуществлять контроль за корректностью данных, хранящихся в документах, производить проверки иерархических соотношений внутри документа и устанавливать единый стандарт на структуру документов, содержимым которых могут быть самые различные данные. Это означает, что его можно использовать при построении сложных информационных систем, в которых очень важным является вопрос обмена информацией между различными приложениями, работающими в одной системе. Создавая структуру механизма обмена информации в самом начале работы над проектом, менеджер может избавить себя в будущем от многих проблем, связанных с несовместимостью используемых различными компонентами системы форматов данных. Также одним из достоинств XML является то, что программы-обработчики XML-документов несложны, и уже сегодня свободно распространяются всевозможные программные продукты, предназначенные для работы с XML-документами. XML поддерживается сегодня во всех броузерах семейства Microsoft Internet Explorer, начиная с версии 4.0. Было заявлено о его поддержке в последующих версиях Netscape Communicator, СУБД Oracle, DB-2, в приложениях MS-Office. Все это дает основания предполагать, что, скорее всего, в ближайшем будущем XML станет основным языком обмена информации для информационных систем, заменив собой, тем самым, HTML. На основе XML уже сегодня созданы такие известные специализированные языки разметки, как SMIL, CDF, MathML, XSL, и список рабочих проектов новых языков, находящихся на рассмотрении W3C, постоянно пополняется. Как выглядит XML-документ? Если вы знакомы с HTML, изучение XML не потребует от вас особых усилий. Хотя XML, безусловно, сильно отличается по своим возможностям и предназначению от языка гипертекстовой разметки, оба эти языка являются подмножествами SGML, и, следовательно, наследуют его базовые принципы.
Структура документа Простейший XML-документ может выглядеть так, как это показано в Примере 1
<?xml version="1.0"?> <list_of_items> <item id="1"><first/>Первый</item> <item id="2">Второй <sub_item>подпункт 1</sub_item></item> <item id="3">Третий</item> <item id="4"><last/>Последний</item> </list_of_items>Обратите внимание на то, что этот документ очень похож на обычную HTML-страницу. Так же, как и в HTML, инструкции, заключенные в угловые скобки, называются тэгами и служат для разметки основного текста документа. В XML существуют открывающие, закрывающие и пустые тэги (в HTML понятие пустого тэга тоже существует, но специального его обозначения не требуется). Тело документа XML состоит из элементов разметки (markup) и непосредственно содержимого документа - данных (content). XML-тэги предназначены для определения элементов документа, их атрибутов и других конструкций языка. Более подробно о типах применяемой в документах разметки мы поговорим чуть позже. Любой XML-документ должен всегда начинаться с инструкции <?xml?>, внутри которой также можно задавать номер версии языка, номер кодовой страницы и другие параметры, необходимые программе-анализатору в процессе разбора документа. Правила создания XML-документа В общем случае XML-документы должны удовлетворять следующим требованиям: - В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация. - Каждый открывающий тэг, определяющий некоторую область данных в документе обязательно должен иметь своего закрывающего "напарника", т.е., в отличие от HTML, нельзя опускать закрывающие тэги. - В XML учитывается регистр символов. - Все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки. - Вложенность тэгов в XML строго контролируется, поэтому необходимо следить за порядком следования открывающих и закрывающих тэгов. - Вся информация, располагающаяся между начальным и конечными тэгами, рассматривается в XML как данные, и поэтому учитываются все символы форматирования (т.е. пробелы, переводы строк, табуляции не игнорируются, как в HTML). Если XML-документ не нарушает приведенные правила, то он называется формально-правильным и, все анализаторы, предназначенные для разбора XML-документов, смогут работать с ним корректно. Однако кроме проверки на формальное соответствие грамматике языка, в документе могут присутствовать средства контроля над содержанием документа, за соблюдением правил, определяющих необходимые соотношения между элементами и формирующих структуру документа. Например, следующий текст, являясь вполне правильным XML-документом, будет абсолютно бессмысленным: <country><title>Russia</title><city> <title>Novosibirsk</country></title></city> Для того чтобы обеспечить проверку корректности XML-документов, необходимо использовать анализаторы, производящие такую проверку и называемые верифицирующими. На сегодняшний день существует два основных способа контроля правильности XML-документа: DTD-определения(Document Type Definition) и схемы данных(Semantic Schema). Более подробно об использовании DTD и схемах мы поговорим в следующий раз. В отличие от SGML, определение DTD-правил в XML не является необходимостью, и это обстоятельство позволяет нам создавать любые XML-документы, не ломая пока голову над весьма непростым синтаксисом DTD. Основной принцип Элемент - это основная структурная единица XML-документа. Заключая слово rose в в тэги <flower> </flower> , мы определяем непустой элемент, называемый <flower>, содержимым которого является rose. В общем случае в качестве содержимого элементов могут выступать как просто какой-то текст, так и другие, вложенные, элементы документа, секции CDATA, инструкции по обработке, комментарии, - т.е. практически любые части XML- документа. Любой непустой элемент должен состоять из начального, конечного тэгов и данных, между ними заключенных. Набором всех элементов, содержащихся в документе, задается его структура и определяются все иерархическое соотношения. Плоская модель данных превращается с использованием элементов в сложную иерархическую систему со множеством возможных связей между элементами. Производя впоследствии поиск в каком-либо документе, программа клиента будет опираться на информацию, заложенную в его структуру, - используя элементы документа. Т.е. если, например, требуется найти нужный университет в нужном городе, то необходимо будет просмотреть содержимое конкретного элемента <university>, находящегося внутри конкретного элемента <city>. Поиск при этом, естественно, будет гораздо более эффективен, чем нахождение нужной последовательности по всему документу. В XML-документе, как правило, определяется хотя бы один элемент, называемый корневым, и с него программы-анализаторы начинают просмотр документа. В приведенном примере этим элементом является <country>. В некоторых случаях тэги могут изменять и уточнять семантику тех или иных фрагментов документа, по-разному определяя одну и ту же информацию и тем самым предоставляя приложению-анализатору этого документа сведения о контексте использования описываемых данных. Например, прочитав фрагмент <city>Holliwood</city>, мы можем догадаться, что речь в этой части документа идет о городе, а вот во фрагменте <restaurant>Holliwood</restaurant> - о забегаловке. Заключение Язык форматирования Web-страниц HTML изначально вводился как приложение SGML. Позже, с бурным развитием WWW, HTML начал всячески расширяться с целью дать автору больший контроль над внешним представлением информации. Новые элементы и атрибуты, такие как <FONT> или <BGCOLOR>, ориентировались на визуальное форматирование. Появились и стали активно использоваться средства, не входящие собственно в язык разметки: imagemaps, Java и JavaScript, plugins, и прочее. Много появилось также элементов HTML, поддерживаемых только определенным броузером, или по-разному работающих в разных броузерах. Поэтому сейчас уже сложно утверждать, является ли HTML приложением SGML или нет. Очень немногие страницы создаются в соответствии со спецификациями на HTML и соответствующими DTD. Эту проблему отчасти призваны облегчить каскадируемые стили, стандарт на которые принят W3-консорциумом. CSS1 отделяет стиль, задающий визуальное представление элементов, от разметки элементов. Большой интерес представляет язык XML, предположительно идущий на смену HTML в качестве языка разметки Web-cтраниц. Это - вариант SGML, ориентированный в первую очередь на применение на WWW. Он не требует обязательного наличия DTD, упрощен и сам язык за счет редко используемых сложных конструкций. Это позволит сделать простыми анализаторы, что сделает возможным активное применение XML в броузерах. (Вероятность чего довольно велика, учитывая реверансы обоих основных игроков на поле броузеров в сторону XML).