В марте XML 1.0, как предполагается, получит статус рекомендации W3C, то есть наравне с HTML станет стандартом. Язык XML, который часто называют "младшим братом" Java, открывает разработчикам Web целый ряд новых возможностей. В этой статье мы поговорим об этом нарождающемся стандарте и обсудим, почему XML так важен для разработчиков Java.
Консорциум W3C (World Wide Web Consortium) был создан в 1994 г. для разработки общих протоколов, необходимых для развития World Wide Web. W3C - это международная организация, занимающаяся утверждением стандартов, которая подарила вам HTML. Сейчас W3C проводит, помимо других технологий, экспертизу XML (eXtensible Markup Language) 1.0, так называемой "мета-грамматики", которая необходима для автоматизации Web и обмена данными между различными платформами и приложениями.
Так почему вы, как разработчик Java, должны быть заинтересованы в этой новой технологии? Да, Java и XML дополняют друг друга. Java обеспечивается независимость от платформы, а XML - независимость от приложений; Java позволяет пользователю выбирать платформу, а XML - выбирать приложение. XML поддерживает Java, поскольку предполагает свободу выбора.
Java обеспечивает независимую от платформы среду программирования, а XML предлагает аналогичную универсальность в представлении и форматировании данных. По существу XML предоставляет грамматику, которая может быть использована для создания самоопределяющихся форматов файлов данных. Таким образом, Java можно рассматривать как универсальную виртуальную машину (Virtual Machine), а XML - как универсальный виртуальный документ (Virtual Document). Java - это прекрасная архитектура и одновременно язык для обработки этой архитектуры и документов, которым может пользоваться любой производитель.
Я не специалист по XML, но довольно основательно подготовился к написанию этой статьи - прочитал спецификации XML 1.0, побеседовал с членами рабочей группы, занимающейся XML и немало размышлял над XML прочитанными материалами. XML переполнен новыми, сбивающими с толку терминами, а язык изложения его основ довольно своеобразен. Цель этой статьи - не обучить вас языку XML (вы сами можете это сделать с помощью нескольких неплохих руководств, приведенных во врезке "Ресурсы"). Моя цель - максимально раскрыть вам возможности этого языка и объяснить значимость XML для вас как программиста Java.
Но сначала я должен признать, что связи между Java и XML были превосходно разъяснены Джоном Босаком в его основополагающей статье "XML, Java, and the future of the Web" ("XML, Java и будущее Web"). Я же просто намерен представить свое видение этой новой технологии.
Определение XML: аналогия с вязанием
XML - это упрощенный диалект SGML (Standard Generalized Markup Language). Для тех из вас, кто не знаком с SGML, могу сказать, что это международный стандарт (ISO-8879) для определения описаний структуры и содержимого документов в электронной форме. XML упрощает SGML, поскольку содержит около 80% функций SGML и только 20% его сложности.
HTML, который представляет собой описание структуры и содержимого одного типа документов, получившего название "страница Web", - всего лишь один из примеров того, что может быть создано с помощью SGML. Другими словами, если HTML - это вязаный свитер, то SGML и XML - это руководства по вязанию. Изучая XML, вы можете вязать свитера, носки, гетры или любые другие вязанные вещи, какие хотите!
Как я уже заметил ранее, XML сейчас рассматривается в W3C с целью утверждения в качестве стандарта. Более подробную информацию о том, что это означает для XML, вы найдете во врезке "W3C оценивает XML".
Основные характеристики
В моей собственной (по общему признанию упрощенной) версии основных характеристик XML, я разбил предлагаемые возможности на четыре категории. Таким образом, XML -
Давайте рассмотрим каждую из этих характеристик более подробно.
Структурированность
XML - это спецификация очень структурированного языка. Хороший XML-код может одновременно быть хорошо структурированным и достоверным. Более подробно об этих характеристиках я остановлюсь ниже.
Как и в SGML, к XML-документам применяется DTD (определение типа документа, document type definition) для описания синтаксиса, грамматики и структуры данных XML-документов. DTD также определяет, является ли каждый из декларированных вами элементов обязательным, дополнительным или условным, а также определен ли диапазон допустимых значений параметра, имеется значение по умолчанию, или допустим ли пустой тег.
С помощью DTD синтаксический анализатор XML определяет, является ли документ хорошо структурированным, то есть содержит ли он должным образом определенные теги начала и конца, и достоверным, то есть полностью согласуется с DTD. Разногласия недопустимы, и даже одна единственная ошибка не позволит обработать весь документ. Лексический анализатор может автоматически проверять правильность документа с помощью встроенного DTD, с помощью определенных внешним образом DTD, описывающих применение HTML-элемента
Так что же Java-хакеры получают от создания более жесткой структуры данных? Одно из наиболее значительных преимуществ подобной структуры - это легкость, с которой вы можете определить соответствие атрибутов документа структурам базы данных или иерархиям объектов. Это обеспечивает надежный механизм для передачи документов между клиентским модулем визуализации и базой данных, или различный экспорт данных между двумя базами данных, где документ XML выполняет роль посредника. То есть, мы получаем возможность применять надежные средства извлечения информации из документов (что мы бесцеремонно называем лексическим анализом). Не имея хорошо структурированных документов нам приходилось, чтобы провести лексический анализ элементов плохо структурированного документа, проверять его на соответствие образцам.
Еще одно преимущество структуризации состоит в том, что XML допускает машинное считывание документов. Благодаря этому различные компании могут автоматизировано считывать информацию с Web, используя стандартный формат. Используя DTD, который описывает грамматику новых элементов в документе, вы можете даже связывать различные форматы через общее описание. К примеру, такие медицинские документы, как карточка пациента, могут содержать данные о наличие аллергии или параметры кровяного давления, или другие специализированные данные, описанные как специальные DTD-атрибуты.
Такого рода совместное использование данных идеально подходит для приложений EDI (Electronic Data Interchange) и интеграции цепочки поставки. Впервые пример такой технологии на Java реализовала компания webMethods. Ее Web Automation Toolkit использует "чистый" Java-код для интеграции и объединения источников данных Web в приложения всех видов. Вы можете загрузить и использовать его бесплатно в течение 30 дней (см. "Ресурсы").
Самоопределение
Еще одно важное неотъемлемое свойство XML - это возможность использования самоопределяющейся информации. Хотя XML-документы не требуют самоопределения (они должны быть лишь хорошо структурированными), описания увеличивают возможности автоматизации и навигации в Web. Эти описания, известные как метаданные (Metadata), могут содержать такую информацию о документе как защита (кто может его читать), популярность, а также - о чем этот документ, на каком он составлен языке, кто его автор и другие данные. HTML позволяет добавлять тег метаданных , но формат для обмена между различными атрибутами метаданных плохо определен. К примеру, узел, который использует атрибут "author" (автор) не сможет разделять эти данные с узлом, где используется атрибут "writer" (писатель).
В языке XML могут быть созданы различные форматы метаданных, в том числе:
Метаданные позволяют создать значительно более мощные навигационные системы. Пример тому - механизм поиска, который мог бы ответить на следующий запрос: "Пожалуйста, найдите мне собачью конуру стоимостью 100 долл., которую можно купить в Калифорнии". Заметьте, что я иллюстрирую сложность запроса, а не возможность XML поддерживать обработку запросов на естественном языке.
Еще одна форма сбора данных, которую обеспечивают метаданные - это использование программных агентов. Я настороженно отношусь к этому термину, поскольку его порой используют для описания чего угодно - от апплета до поисковых "пауков" в Web. В этой статье я называю агентом потоковый объект, который собирает информацию с нескольких машин в сети от имени пользователя; другими словами, я определил агента как представителя человека. Агентов часто называют "интеллектуальными", "мобильными" и/или "настраиваемыми". Метаданные XML позволяют агенту быть более настраиваемом в том смысле, что он получает доступ к описаниям данных, помогающих ему найти то, что он ищет (к примеру, недорогую собачью конуру). XML не делает агента более мобильным (хотя Java это обеспечивает) или более интеллектуальным. Поскольку я получил докторскую степень по нейросистемам, я не очень-то верю в "интеллектуальность" программного обеспечения. Мой агент собирает все вместе и позволяет мне принимать решение - и на том спасибо.
Настройка информационного наполнения Web не ограничивается только XML. Прекрасными примерами настройки Web на основе Java являются Affinicast Interaction Manager (AIM) и система Dynamo компании Art Technology Group, которые дают вам представление о том, как Metadata настраивает Web. Получение информации из Web для некоторых из нас сродни попытке напиться из работающего пожарного шланга. Настройка Web на основе Java сокращает бурный поток информации до равномерного ручейка, силу струи которого можно регулировать.
Удивительный (и ориентированный на XML) пример навигации с использованием Java - это навигатор Perspecta Ispace. Это ПО на Java позволяет как будто "летать" в информационном пространстве XML, "управляя" ключами метаданных. Допустим, вы читает статью о Java и захотели посмотреть все другие статьи, написанные тем же автором. Навигация в Perspecta позволяет вам "полетать" в новых статьях и справочной информации как душе угодно. Это мощное навигационное ПО дает пользователям возможность пойти туда, куда они хотят, а не ограничиваться ссылками, предлагаемыми автором страницы Web.
Расширяемость
Одна из основных возможностей XML указана в его названии - расширяемость, т.е. возможность развиваться и настраиваться. Расширяемость была в HTML камнем преткновения даже когда Netscape начала изобретать новые теги, такие как
Язык Java мог бы сыграть большую роль, помогая создать динамически расширяемые браузеры для XML. Когда такие браузеры неожиданно встречаются с новым определенным тегом, как, к примеру <3DMOLECULE>, модуль визуализации мог бы загрузить апплет Java, который подходит для показа элемента этого нового типа. Jumbo, прототип браузера/редактора/механизма поиска/визуализатора для XML - пример такого браузера, созданного на Java.
Адаптируемость к средству просмотра
Одна из новых возможностей хорошо структурированных документов состоит в том, что такие данные могут адаптироваться к различным средствам просмотра. К примеру, поскольку XML - это диалект SGML, теоретически информация могла бы быть передана непосредственно в формате публикуемой книги, предполагая, что у вашего издателя есть корректный DTD. Но помимо различных возможностей печати, XML дает возможность адаптироваться к различиям аппаратного и программного обеспечения и к особенностям восприятия читателей.
С точки зрения аппаратного обеспечения, одно из приложений, разработанных на XML - это "упрощенная" версия Web, предназначенная для использования небольшого экрана сотового телефона. Этот тип документов допускает простую навигации (к примеру, "нажмите 1, чтобы выбрать FAQ, нажмите 2, чтобы выбрать Company Info"), используя стандартный телефонный интерфейс, а также способ эффективного преобразования текста в голосовой формат, если необходимо. Точно так же вы могли бы использовать Web Automation Toolkit (продукт компании webMethods, созданный на "чистом" Java для интеграции и объединения источников данных на Web в приложения всех видов) для поиска в различных узлах новостей и пересылки любых, связанных с Java, заголовков новостей на ваш пейджер или по электронной почте. Структура XML позволяет разбить страницы Web на части, которые могут быть переданы в сеть любого типа, к которой присоединено устройство.
Программное обеспечение имеет возможность просматривать XML-документы дискретными компонентами. Я могу легко организовать передачу котировки акций в ячейку электронной таблицы и обеспечить динамический подсчет стоимости моего пакета акций - и все это без участия браузера. Специализированные приложения XML еще больше увеличивают возможности ПО. Например, CDF (Channel Definition Format) - это технология "принудительного распространения" информационного наполнения, и OSD (Open Software Description) допускает модернизацию программных приложений, обычно вместе с XML-приложением DRP (Distribution and Replication Protocol), определяя при этом иерархию распространяемых файлов и уникальные байтовые идентификаторы, используя контрольные суммы MD5.
Наконец, люди тоже могут воспользоваться настраиваемыми представлениями данных. Сейчас, чтобы отобразить информацию, получаемую из файла XML, дополненного адаптированными представлениями на стороне клиента, вы должны сгенерировать HTML, HDML (для PDA), или HTML с CSS (Cascading Style Sheets). В то же время CSS 2, следующая версия CSS, как предполагается, будет использовать таблицы XML для визуализации нескольких колонок текста и документов на различных языках с разным направлением написания (для таких языков как японский, который читается сверху вниз и справа налево). С помощью нескольких механизмов стиля можно создать много представлений тех же самых данных.
Заключение
Если XML - универсальная грамматика для форматирования данных, то просто необходимо, чтобы для обработки этих данных был использован универсальный язык, такой как Java. Джон Босак отметил это особо, когда сказал, что "XML готовит работу для Java". А поскольку Java - мощный и универсальный язык разработки программ для Web, то их взаимодействие будет весьма плодотворным. Если Java - это голодная собака, то XML - сахарная кость. Естественное объединение обоих должно обеспечить разнообразные возможности программирования для разработчиков Java. Врезка "Ресурсы" предлагает прекрасную стартовую площадку для ваших дальнейших исследований.
Мико Матсумура (Miko Matsumura) имеет степень доктора наук по нейросистемам, полученную в Йельском университете и степень бакалавра психологии Мичиганского университета. Прежде чем стать проповедником Java в компании Sun Microsystems, он работал в компании HotWired на должности директора по исследованию и разработке, в WELL над Woodstock '94 и в Branson School. С Мико можно связаться по адресу miko.matsumura@javaworld.com.
W3C оценивает XML
В конце прошлого года рабочая группа по XML консорциума W3C представила спецификацию XML 1.0 в качестве предполагаемой рекомендации (Proposed Recommendation). Это означает, что спецификация XML 1.0 стабильна, способствует интероперабельности в Web, ее можно рекомендовать для распространения в отрасли и предоставить на обсуждение и голосование всем 229 организациям, являющимся членами W3C. Процесс обсуждения должен завершиться в феврале, когда XML будет присвоен статус Recommendation ("Рекомендация"). Это будет означать признание W3C того факта, что эта спецификация соответствует описанным выше критериям.
Этими вопросами занимается немалое число рабочих групп W3C, в состав которых, в свою очередь, входят сотрудники W3C, независимые эксперты и представители компаний-производителей ПО, исследовательских организаций, правительственных институтов и академий со всего мира. Рабочую группу, представившую XML 1.0, возглавляет Джон Босак из Sun Microsystems. В ее состав также входят сотрудники Microsoft (Джин Паоли), Netscape (ее представляет консультант Тим Брей из компании Textuality), а также Иллинойского университета (Майкл Сперберг-Маккуин).
Кроме того, в работе группы принимают участие члены заинтересованных в XML неформальных групп - как принадлежащих, так и не принадлежащих к W3C. Предложения официальной рабочей группы, а также отзывы и комментарии многочисленных работающих в этой отрасли экспертов и членов XML Special Interest Group, были объединены в документ, получивший название XML 1.0 Proposed Recommendation.
Ресурсы
http://www.w3.org/TR/PR-xml.html
http://www.w3.org/TR/NOTE-widl.html
http://www.w3.org/TR/NOTE-drp
http://www.w3.org/TR/NOTE-OSD.html
http://www.webmethods.com/products/toolkit/userguide/demos.html
http://webMethods.com/technology/automating.html
http://www.ltg.ed.ac.uk/software/xml/
http://208.204.84.117/XMLTreeViewer/deploy/index.html
http://www.w3.org/TR/NOTE-XSL.html
http://www.w3.org/TR/NOTE-CDFsubmit.html
http://www.w3.org/TR/WD-CSS2/
http://www.w3.org/TR/WD-math/
http://www.w3.org/TR/WD-DOM/level-one-xml-971209.html
http://www.w3.org/TR/NOTE-MCF-XML/MCF-tutorial.html
http://www.w3.org/TR/WD-smil