JsonML
Тип интернет-СМИ | application/jsonml+json (неофициальный) |
---|---|
Тип формата | Язык разметки и система веб-шаблонов |
Расширено с | XML , JSON и JavaScript |
JsonML , язык разметки JSON , представляет собой облегченный язык разметки, используемый для сопоставления XML (расширяемый язык разметки) и JSON (нотация объектов JavaScript). Он преобразует документ или фрагмент XML в структуру данных JSON для удобства использования в средах JavaScript , таких как веб-браузер , что позволяет манипулировать данными XML без дополнительных затрат на анализатор XML.
JsonML наиболее применим в веб-приложениях Ajax (асинхронный JavaScript и XML). Он используется для передачи XHTML (расширяемого языка разметки гипертекста) клиенту, где он может быть детерминированно реконструирован в элементы DOM (объектная модель документа). Стратегию прогрессивного улучшения можно использовать во время построения, чтобы привязать динамическое поведение к статичным элементам. [1]
JsonML также можно использовать в качестве базовой структуры для создания сложных шаблонов на стороне клиента, называемых JBST (JsonML+шаблоны на стороне браузера). [2] Синтаксически JBST выглядит как пользовательские элементы управления JSP (JavaServer Pages) или ASP.NET (Active Server Pages .NET). Интерактивные примеры доступны на сайте jsonml.org.
Синтаксис
[ редактировать ]Преобразование XML в JsonML частично обратимо. Пространства имен XML обрабатываются путем добавления к имени элемента префикса пространства имен, например: <myns:myElement/>
становится ["myns:myElement"]
.
Пример преобразования
[ редактировать ]JsonML позволяет однозначно представить любой XML-документ в виде строки JSON. Синтаксис использует:
- JSON Массивы для представления элементов XML;
- JSON Объекты для представления атрибутов;
- JSON Строки для представления текстовых узлов.
JsonML в кодировке | Исходный XML |
---|---|
["person",
{"created":"2006-11-11T19:23",
"modified":"2006-12-31T23:59"},
["firstName", "Robert"],
["lastName", "Smith"],
["address", {"type":"home"},
["street", "12345 Sixth Ave"],
["city", "Anytown"],
["state", "CA"],
["postalCode", "98765-4321"]
]
]
|
<!-- XML representation of a person record -->
<person created="2006-11-11T19:23" modified="2006-12-31T23:59">
<firstName>Robert</firstName>
<lastName>Smith</lastName>
<address type="home">
<street>12345 Sixth Ave</street>
<city>Anytown</city>
<state>CA</state>
<postalCode>98765-4321</postalCode>
</address>
</person>
|
«Обычное» преобразование JSON создает более компактное представление, но теряет часть структурной информации документа, поскольку оно не определяет, является ли пара ключ-значение атрибутом или узлом:
{"person": {
"address": {
"city": "Anytown",
"postalCode": "98765-4321",
"state": "CA",
"street": "12345 Sixth Ave",
"type": "home"
},
"created": "2006-11-11T19:23",
"firstName": "Robert",
"lastName": "Smith",
"modified": "2006-12-31T23:59"
}}
Неправильное употребление «формы объекта»
[ редактировать ]В ветке группы пользователей JSON Дуглас Крокфорд неправильно использовал термин «JsonML» для описания двух вариантов: «форма массива» и «форма объекта». [3] Это было неправильное использование термина JsonML, который всегда означал то, что Крокфорд называл «формой массива». [4]
Валидация
[ редактировать ]JsonML можно проверить с помощью следующей схемы JSON:
{
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": [
{"type": "string"},
{"oneOf": [
{"type": "object"},
{"type": "string"},
{"type": "array", "items":{"$ref": "#"}}
]},
{"oneOf": [
{"type": "string"},
{"type": "array", "items":{"$ref": "#"}}
]}
]
}
Сравнение с аналогичными технологиями
[ редактировать ]XML/XSLT
[ редактировать ]XML и XSLT (преобразования расширяемого языка таблиц стилей) также могут создавать шаблоны на стороне клиента, и оба позволяют кэшировать шаблон отдельно от данных. JBST изначально использует JavaScript в шаблоне, а не требует смешивания различных типов языков управления.
ВнутреннийHTML
[ редактировать ], казалось бы, используются для выполнения схожих задач, Несмотря на то, что JsonML и InnerHTML они совершенно разные. InnerHTML требует, чтобы вся разметка была в точной форме, а это означает, что либо сервер отображает разметку, либо программист выполняет дорогостоящие конкатенации строк в JavaScript.
JsonML использует шаблоны на стороне клиента через JBST, что означает, что HTML преобразуется в шаблон JavaScript во время сборки . Во время выполнения данные передаются, а результатом являются элементы DOM. Полученные элементы DOM можно вставить или заменить существующий элемент, что InnerHTML не может легко сделать без создания лишних элементов DOM. Для повторной привязки требуется только запрос дополнительных данных, размер которых меньше, чем у полностью развернутой разметки. В результате часто достигается значительный прирост производительности, поскольку разметка запрашивается или кэшируется отдельно от данных.
Шаблон HTML-сообщения/шаблоны на стороне браузера
[ редактировать ]Для простоты внутренний HTML был предпочтительным методом для шаблона HTML-сообщение. [5] стиль Аякса. Однако такие инструменты, как JsonFx [6] цель упростить реализацию JsonML и JBST, сохраняя при этом полный шаблон Ajax для шаблонов на стороне браузера. [7]
Ссылки
[ редактировать ]- ^ МакКейми, Стивен М. (3 февраля 2007 г.). «JsonML — привязка поведения к элементам DOM» . Официальный сайт . JsonML.org. Архивировано из оригинала 14 августа 2010 года . Проверено 7 января 2011 г.
- ^ МакКейми, Стивен М. (3 августа 2008 г.). «JsonML + Шаблоны на стороне браузера (JBST)» . Официальный сайт . JsonML.org . Проверено 7 января 2011 г.
- ^ «Json: Сообщение: Org.json.JSONML.java» . Архивировано из оригинала 27 апреля 2012 г. Проверено 12 февраля 2009 г.
- ^ «JsonML (язык разметки JSON)» .
- ^ «HTML-сообщение» . О AjaxPatterns.org . AjaxPatterns.org. Архивировано из оригинала 1 июля 2012 года . Проверено 7 января 2011 г.
- ^ «Добро пожаловать в JsonFx.NET» . Официальный сайт JsonFx.NET . Стивен М. МакКейми . Проверено 7 января 2011 г.
- ^ «Шаблоны на стороне браузера» . AjaxPatterns.org. Архивировано из оригинала 7 июля 2012 года . Проверено 7 января 2011 г.
Внешние ссылки
[ редактировать ]- JsonML.org
- Статья IBM DeveloperWorks
- Реализация Java JSONML , написанная Дугласом Крокфордом.
- JsonFx.NET — C#/.NET JBST Framework
- C++ JDX XPath 2.0 для XML, JSON и JsonML