Содержание

Половина стандарта лучше, чем его отсутствие

Стандарты и спецификации

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

Питер Сибах
Опубликовано 07.03.2007

Серия контента:

Этот контент является частью # из серии # статей: Стандарты и спецификации

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Стандарты+и+спецификации

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Стандарты и спецификации

Следите за выходом новых статей этой серии.

XML: Половина стандарта лучше, чем его отсутствие

Стандарт Расширяемого Языка Разметки (XML) задает формат данных, но вопрос о том, какие данные следует сохранять, оставляет совершенно открытым. Формат хранения данных весьма гибок, предусматривая отображение произвольно сложных типов данных.

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

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

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

XML, SGML и HTML

Спецификация Стандартного Языка Обобщенной Разметки — SGML (ISO 8879:1986) предусматривает создание новых языков разметки. Он чрезвычайно гибок и достаточно сложен. Стандарт XML — это один из таких языков разметки, сам по себе предусматривающий расширяемость; XML является подмножеством SGML и нацелен на производство подмножества языков, которые будет проще согласованно и эффективно анализировать.

HTML — это еще один язык SGML, он оказал некоторое влияние на развитие XML, будучи одним из самых широко используемых и отображаемых языков SGML. Многие люди используют языки, основанные на XML, которые достаточно похожи на HTML, чтобы ввести в заблуждение случайного читателя. (Например, оригинал этого документа сделан в XML формате, который использует тэги <p> и другую разметку, неотличимую от HTML.)

Дополнительные ограничения, наложенные XML, упрощают разработку, не препятствуя созданию гибких описаний документа. XML документы могут быть использованы для всего, начиная от документации для офисного программного обеспечения и заканчивая системным администрированием. Например, Mac OS X использует XML, чтобы замещать старый текстовый формат на файлы «списка свойств», используемые для системных предпочтений и конфигурации. С гибкостью, которая сделала SGML интересным, все в порядке и в XML.

Спецификации XML

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

Это поднимает вопрос о различии между корректным XML и допустимым XML. Документ, который подчиняется сугубо синтаксическим требованиям (компоновка знаков больше и меньше и использование сущностей (entities)) XML, корректный вне зависимости от содержащихся в нем сущностей или элементов. «Корректность» не зависит от отдельного DTD, это особенность, которую XML документ может иметь без ссылки на DTD, или даже если документ нарушает данный DTD. Документ, который соответствует описаниям элементов конкретного DTD, называется «допустимым».

Допустимый XML может, в принципе, быть использован определенным приложением, которое владеет данным DTD. Знание того, что файл XML корректный, не столь полезно; это гораздо точнее, чем сказать: «формат наших данных — ASCII», но сталкивается с теми же принципиальными ограничениями. Однако даже допустимый XML файл может быть написан для DTD, который может быть недоступен для пользователей, делая его совершенно бесполезным. Мог бы существовать DTD, под которым следующий элемент XML был бы допустимым:

<zz><y/><x>183af892</x><w/></zz>

Спецификации XML сейчас не всегда выражаются через DTD; Microsoft® предложил новый способ выражения тех же типов понятий, называемый XML Схемами. XML Схема стала стандартом W3C в 2001 году. Сами XML Схемы написаны в XML и предназначены, чтобы разобраться с некоторыми проблемами, которые люди имели с традиционными DTD. Возможно, наиболее значительным является больший простор для определения типов данных и семантического содержания. Например, заданные «даты», которые предписывают порядок таких компонентов, как год месяц и день. XML Схемы дают больше семантического содержания, чем традиционные DTD, помогая заполнить пробел между «допустимым» и «понятным». Они также могут определить дальнейшие ограничения на содержание, такие как приемлемый диапазон для числовых значений.

Так стандарт это или нет?

XML это стандарт. Однако это не означает, что «XML файлы » являются стандартом в том смысле, в котором люди обычно думают о стандарте. Если у вас есть две программы, которые обрабатывают «JPEG файлы», вы в большой степени можете предположить, что их файлы взаимозаменяемы. Для XML это не выполняется. Эта проблема всегда существовала для гибких форматов файлов. Например, очень популярный формат файлов «значения, разделенные запятыми» (SCV), используемый дюжинами электронных таблиц и баз данных, кажется достаточно мобильным. Но что вы можете поместить в колонки? Для таблицы, скажем, имен и адресов, формат SCV достаточно портативен. Но как только вы начинаете включать сюда вычисления, форматы начинают резко расходиться; некоторые электронные таблицы могут экспортировать вычисленные значения, другие могут экспортировать формулы в определенном формате. Механистическое описание формата данных не дает полной картины о представлении данных.

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

В некоторых случаях, существуют стандарты для определенных XML форматов. Два или более производителя могут согласиться на определенный XML DTD (или, как теперь принято, Схему) и прекрасно общаться. Однако, если все вы знаете, что они оба используют «XML,», вы никак не можете узнать, используют ли они общую схему. Ясно, что установление этого жизненно важно.

Вы можете написать плохую программу на любом языке

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

Мой любимый пример этого — XML файл, на который я случайно наткнулся в конфигурации для стратегической игры. С ранних дней компьютерных стратегических игр многие разработчики предпочли сделать многие параметры подстраиваемыми. (Фактически, первая игра с подстраиваемыми установками, которую я увидел, была Космические Захватчики (Space Invaders) — аналог Heathkit H89 — см. Ресурсы.) Вскоре, они бы просто определили формат файла и позволили вам бездельничать; любая опечатка, конечно, развалит всю программу.

Введите XML. Это тот вид проблем, которые XML призван решать. Достаточно хорошей XML Схемы, и вы сможете сделать нечто подобное:

           <team>
             <name>Editors</name>
             <bonuses>
               <economic>20</economic>
             </bonuses>
           </team>
           <team>
             <name>Critics</name>
             <bonuses>
               <military>20</military>
             </bonuses>
           </team>

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

<editor_economic_bonus>20</editor_economic_bonus>
<critic_military_bonus>20</critic_military_bonus>

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

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

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

На некоторых языках вы можете писать хорошие программы

Несмотря на то, что плохую программу можно написать на любом языке, некоторые языки, кажется, действительно поощряют написание хороших программ. Я долго относился скептически к возможности XML это сделать; XML DocBook — прекрасный язык, но я прекрасно себя чувствовал и с SGML DocBook. Однако, недавний пример убедил меня, что у XML есть потенциал, чтобы осчастливить множество людей.

Этот пример — это формат XML «список свойств», разработанный Apple. Списки свойств — это продуманный пример использования XML. Они предоставляют довольно обобщенный способ хранения данных о предметах. Списки свойств широко используются в Mac OS X для выражения предпочтений и других данных. Каждое приложение может определять точный набор искомых ключей в списке свойств, но общий формат предусматривает ряд преимуществ; например, для сохранения одного свойства в списке свойств достаточно единственной строки Objective-C. В качестве интересного примера можно привести launchd производства Apple (замена классическим программам запуска init, cron и inetd производства UNIX®), который использует списки свойств для описания заданий, со страницей руководства (man page), описывающей конкретные пары ключ/значение, которые она поддерживает.

До недавнего времени, Apple была единственной организацией, использующей этот формат. Однако, в апреле 2006 NetBSD приобрела библиотеку для чтения и написания списков свойств. В интересах эффективности библиотека читает и пишет только достаточное подмножество полного XML для управления списками свойств; она не является полным синтаксическим анализатором XML. Что касается этого способа записи, две реализации не являются полностью совместимыми; однако, стандарт с двумя совершенно независимыми реализациями — это очень полезная вещь.

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

Так стандарт это или нет?

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

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

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

<bytes>ff ff 00 03 [. . .]</bytes>

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

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

Ресурсы для скачивания
Похожие темы

Подпишите меня на уведомления к комментариям

www.ibm.com

Основы XML — разметка и структура XML документов

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

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

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

Разметка XML документов

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

<books>
  <book>
    <author>Автор 1</author>
    <name>Название 1</name>
    <price>Цена 1</price>
  </book>
  <book>
    <author>Автор 2</author>
    <name>Название 2</name>
    <price>Цена 2</price>
  </book>
  <book>
    <author>Автор 3</author>
    <name>Название 3</name>
    <price>Цена 3</price>
  </book>
</books>

Как видно с примера выше, все очень банально и просто. При этом XML-документ несет куда более подробную информацию по сравнению с обычным HTML-документом. В нашем примере очень просто понять, что тег <author> отвечает за автора книги, тег <name> — за название, тег <price> — за цену и т.д. Таким образом, каждый тег имеет свой смысл.

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

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

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

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

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

Структура XML документов

Для того чтобы представить структуру XML документов давайте рассмотрим самый простой пример документа XML.

<?xml version="1.0" encoding="utf-8"?>
<pricelist>
  <book>
    <title>Книга 1</title>
    <author>Автор 1</author>
    <price>Цена 1</price>
  </book>
  <book>
    <title>Книга 2</title>
    <author>Автор 2</author>
    <price>Цена 2</price>
  </book>
  <book>
    <title>Книга 3</title>
    <author>Автор 3</author>
    <price>Цена 3</price>
  </book>
</pricelist>

Итак, мы видим, что данный пример практически ничем не отличается от предыдущего за исключением немного изменившихся тегов и нескольких атрибутов. Главное отличие здесь заключается в первой строчке, которая определяет файл как XML документ, построенный в соответствии с первой версией языка. Более подробно об этом мы поговорим в следующих статьях рубрики «Уроки XML и XSLT».

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

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

На этом все. Удачи вам и успехов в изучении основ XML.