|
|
|||||||||||||||||||||||||||||
|
Вопросы XML: Еще легче, чем микроформаты: пикоформаты (исходники)Источник: IBM developerWorks Россия Дит Элза (Dethe Elza), Дэвид Мертц (David Mertz)
В прошлом выпуске колонки Вопросы XML Дэвид Мертц объяснял, что reStructured Text - это облегченный язык разметки для форматирования преимущественно текстовых документов, а до этого был рассмотрен YAML, облегченный язык разметки для документов, которые содержат преимущественно данные. Являются ли эти технологии полезными и сейчас, с появлением AJAX и микроформатов, иными словами - достаточно ли "легки" микроформаты? Посмотрите, как можно использовать JSON (который проще, чем YAML) при помощи MochiKit для AJAX без X, и примените reStructured Text для генерирования микроформатов. XML всегда использовался для разметки как документов, так и структурированных данных, что в зависимости от точки зрения конкретного автора интерпретировалось то как самое большое достоинство этого языка, то как самый большой недостаток. В тех случаях, когда нет резких границ между документом и данными, XML может быть лучшим вариантом, но в качестве общего решения XML может быть и более сложным, чем любое имеющееся частное решение проблемы. Ранее Дэвид рассказывал о YAML. YAML ("Ain't Markup Language" (тоже язык разметки) или, по-другому, "Yet Another Markup Language" (еще один язык разметки) - это диалект, предназначенный для того, чтобы упростить транспорт данных (чисел, строк, списков, простых структур) по сравнению с XML. В данной статье мы будем говорить о стандарте JSON (JavaScript Object Notation), который является подмножеством YAML, но при этом проще в разработке и синтаксическом разборе. В JavaScript и Python, если JSON поступил от надежного источника, он может быть просто обработан механизмом выполнения сценариев, но синтаксические анализаторы, которые существуют для JSON, происходят от менее надежных источников. Поскольку мы будем использовать JSON, чтобы подойти к спектру "документ-данные" со стороны данных, вы можете использовать структурированные текстовые форматы, не обращая внимания на свойства микроформата как документа. Существует три основных подхода к структурированию текста (если не учитывать многие разновидности разметки Wiki): reStructured Text, Markdown и Textile. Мы рассмотрим каждый из этих подходов, чтобы посмотреть, как они смогут справиться с нашим примером микроформата, хотя бы теоретически. Какие типы данных может содержать микроформат? Суть микроформата заключается в том, чтобы разместить небольшой (как правило) объем данных в форме, которая легко может быть обработана человеком или компьютером, поэтому можно получить некоторые преимущества, если проигнорировать это условие и закодировать данные только для человека или только для компьютера, а не для обоих случаев, а затем обработать данные, чтобы получить микроформатированную версию. В общем случае пример календаря hCalendar включает следующие фрагменты информации:
На самом деле придется написать не очень большой код. В листинге 1 показан пример события hCalendar:
Если вы просмотрите этот листинг от начала до конца, чтобы понять суть данных, вы сможете написать подобный код при помощи JSON. Обратите внимание на то, что для даты, времени и временной зоны используется кодировка ISO8601, стандартный способ форматирования даты и времени, которые сами по себе являются микроформатом. Следующий пример (листинг 2) - это корректный код в языках JavaScript или Python: Листинг 2. Код с использованием JSON
Этот формат, как вы увидите далее, также легко может передаваться через интернет. Сюжет развивается.... Вы внесли данные в мои документы!Использование JSON для контента микроформата представляет подход с точки зрения данных. Что касается документа, в микроформатах мы можем идти от структурированного текста. Как выглядел бы календарь hCalendar, написанный при помощи reStructured Text? Известно, что reST позволяет создавать подключаемые модули расширения при помощи директив, поэтому директива о проведении синтаксического разбора данных hCalendar будет выглядеть примерно так:
Интересно, что данный вид hCalendar представляет собой отображение более раннего стандарта iCalendar на подмножество HTML. Но на что же похож этот загадочный iCalendar? В листинге 3 показано то же событие в iCalendar: Листинг 3. Событие в iCalendar
Да, iCalendar - это текстовый формат, который относительно прост для синтаксического разбора, можно найти соответствующие библиотеки, а с результатом работать в том языке программирования, который вы предпочитаете. Поэтому, хотя и допустимо создать для reStructured Text директиву, которая будет извлекать все элементы данных hCalendar, лучше изменить директиву Это легче воздуха, но дышится труднееХотя JSON предоставляет более простой способ форматирования данных, чем YAML или XML, reStructured Text может быть довольно сложным инструментом. Документ в reStructured Text может читаться проще, чем XML, и может быть проще в использовании, если вы не станете пытаться использовать все его функции. Но когда вы начнете добавлять большое количество директив, таблиц и других функций, Измеритель сложности, предложенный Дитом, будет зашкаливать. Поскольку JSON добивается простоты за счет специализации (известный компромисс, который восходит к Domain Specific Languages, или DSL), можно и дальше упрощать структурированный текст, если вы не боитесь пожертвовать некоторыми функциями и гибкостью reStructured Text. И оказывается, что такое еще более легкое и ориентированное на документ форматирование существует. Мы рассмотрим Textile и MarkDown, два облегченных варианта структурированного текста, которые упрощают микроформатирование данных. К сожалению, те же свойства, которые делают эти инструменты столь подходящими для создания контента на основе документа, приводят к их непригодности для решения задач с подходом на основе данных, таких, как hCalendar. Textile не имеет разметки для Отсутствие поддержки микроформатов в этих облегченных языках разметки понятно. Микроформаты - это, по своей сути, данные, а языки Textile и MarkDown создавались как инструменты, предназначенные для того, чтобы писать в интернете. Они пытаются упростить получение слов, которые вам нужны, за счет минимального форматирования, но игнорируют проблемы вставки данных, предназначенных для чтения машиной. Одна из самых старых проблем XML - это то, что язык используется как для данных (информации, которая предназначена для чтения машиной) так и для контента (текста, который предназначен для чтения человеком). Форматы структурированного текста теряют преимущества там, где начинается содержимое , тогда как YAML и JSON плавно теряют преимущества, когда речь заходит о данных. Каждый из них может делать свою работу так же хорошо или даже лучше, чем XML, но в тех случаях, когда граница между данными и содержимым стерта, как в микроформатах, эти языки могут столкнуться с затруднениями на переходе. REST - JSONМногие примеры, в которых используется язык JSON, показывают, как браузер может получать сообщения JSON от сервера, использующего метод GET. Но парадигма REST состоит из четырех глаголов: GET, POST, PUT и DELETE, и для этого есть причина. GET следует использовать для того, чтобы выполнять стандартные запросы к Web-ресурсу (то есть, метод GET должен быть идемпотентом), POST, чтобы создавать новые ресурсы, PUT, чтобы обновлять существующие ресурсы, и DELETE для удаления ресурса. Поскольку мы хотим быть верными приверженцами REST, давайте создадим простую инфраструктуру для перемещения данных JSON, воспользовавшись всеми четырьмя глаголами. Ниже приводится код программы CGI на языке Python, которая инкапсулирует простейший каркас для перемещения по битам воображаемого кода JSON. Программа использует библиотеку Боба Ипполито (Bob Ippolito)
Программа листинга 4 предназначена для обработки основного кода REST и JSON на стороне сервера. Для стороны клиента Дит написал небольшой фрагмент на JavaScript, который можно встроить в Web-страницу. В этом примере тоже используется код Боба Ипполито (Bob Ippolito) - библиотека MochiKit JavaScript, которой мы остались очень довольны. В листинге 5 приводится код простейшего клиента JSON/REST: Листинг 5. Простейший клиент JSON/REST
JSON и микронавтыПри помощи программ из листингов 4 и 5 вы можете перемещаться по битам кода JSON достаточно свободно, но вам все еще нужно что-то делать для этого. Учитывая все, что было сказано раньше, естественным желанием будет конвертировать данные обратно в формат hCalendar или iCalendar, в зависимости от того, обрабатываются ли данные на стороне клиента или на стороне сервера, а также от конкретных задач. Например, можно использовать MochiKit (особенно функции быстрого вызова DOM) на стороне клиента, чтобы создать пример шаблона для данных JSON в листинге 2 и переформатировать их в формат hCalendar прямо в браузере, заменив функцию Листинг 6. Замена функции handleSuccess()
Из примера не вполне понятно, какие функции выполняет код в листинге 6; MochiKit определяет множество функций быстрого вызова HTML DOM, которые позволяют достаточно легко создать структуру DOM фрагмента hCalendar. Если нет встроенных ярлыков для элементов Теперь вы можете переслать данные JSON браузеру при помощи AJAX и форматировать их в формат hCalendar при помощи шаблонов браузера. Помимо того, что этот подход полностью соответствует тому, что о нем говорят. Он предлагает то, что может оказаться действительно полезным . Прополка в саду ветвящихся тропинокКакую выгоду от всего этого можете получить именно вы? Действительно ли удобнее включить iCalendar в код reStructured Text или лучше переслать биты кода JSON не в hCalendar, а в браузер? Почему просто не написать двоичный код, или XML, и покончить с этим? В действительности, окажется ли методика, описанная здесь, полезной для вас или нет, описывается старой поговоркой специалистов по информационным технологиям: поживем увидим. Если вы создаете Web-сервисы на основе REST, то передача данных через JSON, а не через XML, может быть более быстрой и более удобной. Если вы используете язык reStructured Text для упрощенного (и более читабельного) создания HTML-контента, то возможность непосредственного включения микроформатов, либо в виде HTML (hCalendar), либо в виде простого текста (iCalendar) может упростить задачу. При создании новой системы стоит подумать об обеих технологиях. Конечная задача микроформатов - сделать данные проще для человеческого восприятия, в то же время сохраняя их дружественными к машинному синтаксическому разбору. Философия микроформатов состоит в многократном использовании уже имеющихся семантических форматов, в частности, HTML, везде, где это возможно. AJAX, JSON и REST упрощают и обогащают создание систем для микроформатов и другого контента, в то время как облегченная разметка делает создание и редактирование контента для таких систем более простым, быстрым и дружественным для человеческого восприятия. Поэтому все упомянутые технологии имеют право на существование, и вы можете заметить синергетический эффект, если будете применять их в сочетаниях друг с другом. Ссылки по теме
Файлы для загрузки
|
|