XML
Расширяемый язык разметки | |
Аббревиатура | XML |
---|---|
Статус | Опубликовано, рекомендация W3C |
Год начался | 1996 год |
Впервые опубликовано | 10 февраля 1998 г |
Последняя версия | 1.1 (2-е изд.) 29 сентября 2006 г |
Организация | Консорциум Всемирной паутины (W3C) |
Редакторы | Тим Брэй , Жан Паоли , Майкл Сперберг-МакКуин , Ив Малер, Франсуа Йержо, Джон В. Коуэн |
Базовые стандарты | СГМЛ |
Сопутствующие стандарты | XML-схема W3C |
Домен | Сериализация |
Расширение имени файла |
.xml |
---|---|
Тип интернет-СМИ | application/xml , text/xml [1] |
Единый идентификатор типа (UTI) | public.xml |
конформация ИМВП | public.text |
Магическое число | <?xml |
Разработано | Консорциум Всемирной паутины |
Тип формата | Язык разметки |
Расширено с | СГМЛ |
Распространено на | Многочисленные языки , включая XHTML , RSS , Atom и KML. |
Стандартный |
|
Открытый формат ? | Да |
Свободный формат ? | Да |
Расширяемый язык разметки ( XML ) — это язык разметки и формат файлов для хранения, передачи и восстановления произвольных данных. Он определяет набор правил для кодирования документов в формате, который является одновременно читаемым человеком и машиной . Консорциума Всемирной паутины Спецификация XML 1.0 [2] 1998 года [3] и ряд других сопутствующих характеристик [4] — все они являются свободными открытыми стандартами — определяют XML. [5]
Цели разработки XML подчеркивают простоту, универсальность и удобство использования в Интернете . [6] Это текстовый формат данных с мощной поддержкой Unicode для различных языков . Хотя дизайн XML ориентирован на документы, этот язык широко используется для представления произвольных структур данных . [7] например, те, которые используются в веб-сервисах .
Существует несколько систем схем, помогающих определять языки на основе XML, а программисты разработали множество интерфейсов прикладного программирования (API), облегчающих обработку данных XML.
Обзор [ править ]
Основная цель XML — сериализация , т. е. хранение, передача и восстановление произвольных данных. Чтобы две разрозненные системы могли обмениваться информацией, им необходимо согласовать формат файла. XML стандартизирует этот процесс. Таким образом, это аналог лингва-франка для представления информации. [8] : 1
Будучи языком разметки , XML маркирует, классифицирует и структурно организует информацию. [8] : 11 Теги XML представляют структуру данных и содержат метаданные . Внутри тегов содержатся данные, закодированные в соответствии со стандартом XML. [8] : 11 Дополнительная схема XML (XSD) определяет необходимые метаданные для интерпретации и проверки XML. (Это также называется канонической схемой.) [8] : 135 XML-документ, который соответствует основным правилам XML, является «правильным»; тот, который придерживается своей схемы, является «действительным». [8] : 135
IETF RFC 7303 (который заменяет более старый RFC 3023 ) предоставляет правила для создания типов мультимедиа для использования в сообщениях XML. Он определяет три типа мультимедиа: application/xml
( text/xml
это псевдоним), application/xml-external-parsed-entity
( text/xml-external-parsed-entity
это псевдоним) и application/xml-dtd
. Они используются для передачи необработанных файлов XML без раскрытия их внутренней семантики . RFC 7303 далее рекомендует, чтобы языки на основе XML имели типы мультимедиа, оканчивающиеся на +xml
, например, image/svg+xml
для СВГ .
Дополнительные рекомендации по использованию XML в сетевом контексте содержатся в RFC 3470 , также известном как IETF BCP 70, документе, охватывающем многие аспекты проектирования и развертывания языка на основе XML.
Приложения [ править ]
XML стал широко использоваться для обмена данными через Интернет. Были разработаны сотни форматов документов с использованием синтаксиса XML. [9] включая RSS , Atom , Office Open XML , OpenDocument , SVG , COLLADA и XHTML . XML также предоставляет базовый язык для таких протоколов связи , как SOAP и XMPP . Это один из форматов обмена сообщениями, используемый в технике программирования асинхронного JavaScript и XML (AJAX) .
Многие отраслевые стандарты данных, такие как Health Level 7 , OpenTravel Alliance , FpML , MISMO и National Information Exchange Model , основаны на XML и богатых возможностях спецификации схемы XML. В издательском деле Дарвинская архитектура типизации информации является отраслевым стандартом данных XML. XML широко используется для поддержки различных форматов публикации.
Одним из применений XML является передача информации оперативной метеорологии (OPMET) на основе стандартов IWXXM . [10]
Основная терминология [ править ]
Материал в этом разделе основан на спецификации XML . Это не исчерпывающий список всех конструкций, встречающихся в XML; он представляет собой введение в ключевые конструкции, наиболее часто встречающиеся в повседневном использовании.
- Характер
- XML-документ представляет собой строку символов . Любой допустимый символ Юникода (кроме Null) может присутствовать в XML-документе (1.1) (хотя некоторые из них не рекомендуются).
- Процессор и приложение
- Процессор информацию анализирует разметку и передает структурированную приложению . Спецификация предъявляет требования к тому, что процессор XML должен делать, а что нет, но приложение выходит за рамки ее области применения. Процессор (как его называет спецификация) часто в разговорной речи называют XML парсером .
- Разметка и контент
- Символы, составляющие XML-документ, делятся на разметку и содержимое , которые можно отличить с помощью простых синтаксических правил . Обычно строки, составляющие разметку, начинаются с символа
<
и закончить на>
, или они начинаются с символа&
и закончить на;
. Строки символов, которые не являются разметкой, являются содержимым. Однако в разделе CDATA разделители<![CDATA[
и]]>
классифицируются как разметка, а текст между ними классифицируется как контент. Кроме того, пробелы до и после самого внешнего элемента классифицируются как разметка.
- Ярлык
- Тег — это конструкция разметки, которая начинается с
<
и заканчивается>
. Существует три типа тегов:- начальный тег , например
<section>
; - конечный тег , например
</section>
; - тег пустого элемента , например
<line-break />
.
- начальный тег , например
- Элемент
- Элемент — это логический компонент документа , который либо начинается с начального тега и заканчивается соответствующим конечным тегом, либо состоит только из тега пустого элемента. Символы между начальным и конечным тегом, если таковые имеются, являются содержимым элемента и могут содержать разметку, включая другие элементы, которые называются дочерними элементами . Примером является
<greeting>Hello, world!</greeting>
. Другой<line-break />
.
- Атрибут
- Атрибут пары — это конструкция разметки, состоящая из имя-значение , которая существует внутри тега начального тега или тега пустого элемента. Примером является
<img src="madonna.jpg" alt="Madonna" />
, где имена атрибутов — «src» и «alt», а их значения — «madonna.jpg» и «Madonna» соответственно. Другой пример:<step number="3">Connect A to B.</step>
, где имя атрибута — «число», а его значение — «3». Атрибут XML может иметь только одно значение, и каждый атрибут может появляться не более одного раза в каждом элементе. В обычной ситуации, когда требуется список из нескольких значений, это необходимо сделать путем кодирования списка в правильно сформированный атрибут XML. [я] с некоторым форматом, выходящим за рамки того, что XML определяет сам. Обычно это список, разделенный запятыми или точками с запятой, или, если известно, что отдельные значения не содержат пробелов, [ii] можно использовать список, разделенный пробелами.<div class="inner greeting-box">Welcome!</div>
, где атрибут «class» имеет значение «внутренний блок приветствия», а также указывает два имени CSS- класса «внутренний» и «коробка приветствия».
- XML-декларация
- Документы XML могут начинаться с объявления XML , описывающего некоторую информацию о себе. Примером является
<?xml version="1.0" encoding="UTF-8"?>
.
Символы и экранирование [ править ]
XML-документы полностью состоят из символов из репертуара Unicode . За исключением небольшого количества специально исключенных управляющих символов , любой символ, определенный Unicode, может появляться в содержимом XML-документа.
XML включает средства для определения кодировки символов Юникода, составляющих документ, и для выражения символов, которые по той или иной причине не могут быть использованы напрямую.
Допустимые символы [ править ]
Кодовые точки Юникода в следующих диапазонах допустимы в документах XML 1.0: [11]
- U+0009 (горизонтальная табуляция), U+000A (перевод строки), U+000D (возврат каретки): это единственные элементы управления C0 , принятые в XML 1.0;
- U+0020–U+D7FF, U+E000–U+FFFD: исключаются некоторые несимволы в BMP (все суррогаты, U+FFFE и U+FFFF запрещены);
- U+10000–U+10FFFF: сюда входят все кодовые точки в дополнительных плоскостях, включая несимвольные.
XML 1.1 расширяет набор разрешенных символов, включив в него все вышеперечисленное, а также остальные символы в диапазоне U+0001–U+001F. [12] Однако в то же время он ограничивает использование управляющих символов C0 и C1 , кроме U+0009 (горизонтальная табуляция), U+000A (перевод строки), U+000D (возврат каретки) и U+0085 (следующая строка). ), требуя, чтобы они были записаны в экранированной форме (например, U+0001 должен быть записан как 
или его эквивалент). В случае символов C1 это ограничение является обратной несовместимостью; он был введен для обнаружения распространенных ошибок кодирования.
Кодовая точка U+0000 (Null) — единственный символ, который не разрешен ни в одном документе XML 1.1.
Обнаружение кодировки [ править ]
Набор символов Юникода может быть закодирован в байты для хранения или передачи различными способами, называемыми «кодировками». Сам Юникод определяет кодировки, охватывающие весь репертуар; наиболее известные из них включают UTF-8 (который стандарт XML рекомендует использовать без спецификации ) и UTF-16 . [13] Существует множество других текстовых кодировок, предшествовавших Unicode, например ASCII и различные ISO/IEC 8859 ; их репертуар символов в каждом случае является подмножеством набора символов Юникода.
XML позволяет использовать любую кодировку, определенную в Юникоде, а также любые другие кодировки, символы которых также присутствуют в Юникоде. XML также предоставляет механизм, с помощью которого процессор XML может надежно, без каких-либо предварительных знаний, определить, какая кодировка используется. [14] Кодировки, отличные от UTF-8 и UTF-16, не обязательно распознаются всеми анализаторами XML (а в некоторых случаях даже не UTF-16, хотя стандарт также требует их распознавания).
Побег [ править ]
XML предоставляет средства escape для включения символов, которые проблематично включить напрямую. Например:
- Символы «<» и «&» являются ключевыми синтаксическими маркерами и никогда не могут появляться в содержимом за пределами раздела CDATA . Разрешено, но не рекомендуется использовать «<» в значениях объектов XML. [15]
- Некоторые кодировки символов поддерживают только часть Unicode. Например, разрешено кодировать XML-документ в ASCII, но в ASCII отсутствуют кодовые точки для символов Юникода, таких как «é».
- Возможно, на компьютере автора невозможно ввести символ.
- Некоторые символы имеют глифы , которые невозможно отличить визуально от других символов, например неразрывный пробел (
 
) " " и пробел ( 
) " ", и заглавную кириллическую букву А (А
) «А» и латинская заглавная буква А (A
) «А».
Существует пять предопределенных объектов :
<
представляет «<»;>
представляет собой «>»;&
представляет "&";'
представляет собой " ' ";"
представляет ' " '.
Все разрешенные символы Юникода могут быть представлены с помощью числовой ссылки на символ . Рассмотрим китайский иероглиф «中», числовой код которого в Юникоде — шестнадцатеричный 4E2D или десятичный 20 013. Пользователь, чья клавиатура не предлагает способа ввода этого символа, все равно может вставить его в XML-документ, закодированный как 中
или 中
. Аналогично, строка «I <3 Jörg» может быть закодирована для включения в XML-документ как I <3 Jörg
.
�
не разрешено, поскольку нулевой символ является одним из управляющих символов, исключенных из XML, даже при использовании ссылки на числовой символ. [16] альтернативный механизм кодирования, такой как Base64 Для представления таких символов необходим .
Комментарии [ править ]
Комментарии могут появляться в любом месте документа за пределами другой разметки. Комментарии не могут появляться перед объявлением XML. Комментарии начинаются с <!--
и закончить на -->
. Для совместимости с SGML строка «--» (двойной дефис) не допускается внутри комментариев; [17] это означает, что комментарии не могут быть вложенными. Амперсанд не имеет особого значения в комментариях, поэтому ссылки на объекты и символы не распознаются как таковые, и невозможно представить символы вне набора символов кодировки документа.
Пример корректного комментария:
<!--no need to escape <code> & such in comments-->
Международное использование
XML 1.0 (пятое издание) и XML 1.1 поддерживают прямое использование практически любых символов Юникода в именах элементов, атрибутах, комментариях, символьных данных и инструкциях обработки (кроме тех, которые имеют специальное символическое значение в самом XML, например, меньшее значение). - чем знак «<»). Ниже приведен правильно сформированный XML-документ, включающий китайские , армянские и кириллические символы:
<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>
Синтаксическая корректность и обработка ошибок [ править ]
Спецификация XML определяет XML-документ как правильно сформированный текст, то есть он удовлетворяет списку синтаксических правил, представленных в спецификации. Некоторые ключевые моменты в довольно длинном списке включают в себя:
- Документ содержит только правильно закодированные символы Юникода.
- Ни один из специальных синтаксических символов, таких как
<
и&
появляются, за исключением случаев, когда они выполняют свою роль по разметке. - Начальный тег, конечный тег и тег пустого элемента, разделяющие элементы, правильно вложены, ни один из них не пропущен и не перекрывается.
- Имена тегов чувствительны к регистру; начальный и конечный тег должны точно совпадать.
- Имена тегов не могут содержать ни одного символа.
!"#$%&'()*+,/;<=>?@[\]^`{|}~
, ни пробела и не может начинаться с «-», «.» или цифровой цифры. - Один корневой элемент содержит все остальные элементы.
Определение XML-документа исключает тексты, содержащие нарушения правил корректности; они просто не являются XML. Процессор XML, обнаруживший такое нарушение, обязан сообщить о таких ошибках и прекратить нормальную обработку. Эта политика, иногда называемая « драконовской обработкой ошибок», резко контрастирует с поведением программ, обрабатывающих HTML , которые предназначены для получения разумного результата даже при наличии серьезных ошибок разметки. [18] Политика XML в этой области подвергалась критике как нарушение закона Постела («Будьте консервативны в том, что отправляете; будьте либеральны в том, что принимаете»). [19]
Спецификация XML определяет действительный XML-документ как правильно сформированный XML-документ , который также соответствует правилам определения типа документа (DTD). [20] [21]
Схемы и проверка [ править ]
XML-документ не только правильно сформирован, но и может быть действительным . Это означает, что он содержит ссылку на определение типа документа (DTD) и что его элементы и атрибуты объявлены в этом DTD и соответствуют грамматическим правилам для них, указанным в DTD.
Процессоры XML классифицируются как проверяющие или непроверяющие в зависимости от того, проверяют ли они XML-документы на достоверность. Процессор, обнаруживший ошибку достоверности, должен иметь возможность сообщить об этом, но может продолжать нормальную обработку.
DTD — это пример схемы или грамматики . С момента первой публикации XML 1.0 была проведена значительная работа в области языков схем для XML. Такие языки схем обычно ограничивают набор элементов, которые могут использоваться в документе, какие атрибуты могут быть к ним применены, порядок их появления и допустимые родительские/дочерние отношения.
Определение типа документа [ править ]
Самым старым языком схемы XML является определение типа документа (DTD), унаследованное от SGML.
DTD имеют следующие преимущества:
- Поддержка DTD является повсеместной благодаря ее включению в стандарт XML 1.0.
- DTD более кратки по сравнению с языками схем на основе элементов и, следовательно, предоставляют больше информации на одном экране.
- DTD позволяют объявлять стандартные наборы общедоступных объектов для публикации символов.
- DTD определяют тип документа, а не типы, используемые пространством имен, группируя таким образом все ограничения для документа в одной коллекции.
DTD имеют следующие ограничения:
- У них нет явной поддержки новых функций XML, особенно пространств имен .
- Им не хватает выразительности. XML DTD проще, чем SGML DTD, и существуют определенные структуры, которые невозможно выразить с помощью обычных грамматик. DTD поддерживают только элементарные типы данных.
- Им не хватает читабельности. Разработчики DTD обычно активно используют сущности параметров (которые ведут себя по сути как текстовые макросы ), что упрощает определение сложных грамматик, но в ущерб ясности.
- они используют синтаксис, основанный на синтаксисе регулярных выражений Для описания схемы , унаследованный от SGML. Типичные XML API, такие как SAX, не пытаются предложить приложениям структурированное представление синтаксиса, поэтому он менее доступен для программистов, чем синтаксис на основе элементов.
Двумя особенностями, которые отличают DTD от других типов схем, являются синтаксическая поддержка внедрения DTD в документы XML и определения сущностей , которые представляют собой произвольные фрагменты текста или разметки, которые процессор XML вставляет в само DTD и в документ XML, где бы они ни находились. ссылаются, как и escape-символы.
Технология DTD до сих пор используется во многих приложениях из-за ее повсеместного распространения.
Схема [ править ]
Более новый язык схемы, описанный W3C как преемник DTD, — это XML Schema , часто называемый инициализмом экземпляров XML-схемы, XSD (XML Schema Definition). XSD гораздо более эффективны, чем DTD, при описании языков XML. Они используют богатую систему типизации данных и допускают более подробные ограничения логической структуры XML-документа. XSD также используют формат на основе XML, что позволяет использовать обычные инструменты XML для их обработки.
элемент xs:schema, определяющий схему:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>
РАССЛАБИТЬСЯ [ править ]
RELAX NG (Регулярный язык для XML следующего поколения) изначально был указан OASIS и теперь является стандартом (Часть 2: на основе регулярной грамматики Проверка ISO /IEC 19757 – DSDL ). Схемы RELAX NG могут быть написаны либо в синтаксисе на основе XML, либо в более компактном синтаксисе, отличном от XML; эти два синтаксиса изоморфны , и Джеймса Кларка инструмент преобразования — Trang — может конвертировать между ними без потери информации. RELAX NG имеет более простую структуру определения и проверки, чем XML-схема, что упрощает его использование и реализацию. Он также имеет возможность использовать типов данных структуры плагины ; Например, автор схемы RELAX NG может потребовать, чтобы значения в документе XML соответствовали определениям в типах данных схемы XML.
Схематрон [ править ]
Schematron — это язык, позволяющий делать утверждения о наличии или отсутствии шаблонов в XML-документе. Обычно он использует выражения XPath . Schematron теперь является стандартом (Часть 3: Валидация на основе правил ISO /IEC 19757 – DSDL ).
DSDL и другие языки схем [ править ]
DSDL (языки определения схемы документа) — это многочастный стандарт ISO/IEC (ISO/IEC 19757), который объединяет полный набор малых языков схем, каждый из которых нацелен на решение конкретных задач. DSDL включает полный и компактный синтаксис RELAX NG , язык утверждений Schematron и языки для определения типов данных, ограничений набора символов, переименования и расширения объектов, а также маршрутизации фрагментов документов на основе пространства имен к различным средствам проверки. Языки схем DSDL пока не имеют поддержки XML-схем со стороны поставщиков и в некоторой степени являются массовой реакцией промышленных издателей на отсутствие полезности XML-схем для публикации .
Некоторые языки схем не только описывают структуру определенного формата XML, но также предлагают ограниченные возможности влияния на обработку отдельных файлов XML, соответствующих этому формату. И DTD, и XSD имеют такую возможность; они могут, например, предоставить возможность расширения информационного набора и атрибутов по умолчанию. RELAX NG и Schematron намеренно не предоставляют их.
Сопутствующие характеристики [ править ]
Группа спецификаций, тесно связанных с XML, была разработана вскоре после первой публикации XML 1.0. Часто термин «XML» используется для обозначения XML вместе с одной или несколькими другими технологиями, которые стали рассматриваться как часть ядра XML.
- Пространства имен XML позволяют одному и тому же документу содержать элементы и атрибуты XML, взятые из разных словарей, без каких-либо конфликтов имен . Хотя пространства имен XML сами по себе не являются частью спецификации XML, практически все программное обеспечение XML также поддерживает пространства имен XML.
- База XML определяет
xml:base
атрибут, который можно использовать для установки основы для разрешения относительных ссылок URI в пределах одного элемента XML. - XML Information Set или XML Infoset — это абстрактная модель данных для XML-документов с точки зрения информационных элементов . Информационный набор обычно используется в спецификациях языков XML для удобства описания ограничений на конструкции XML, которые допускают эти языки.
- XSL (расширяемый язык таблиц стилей) — это семейство языков, используемых для преобразования и отображения XML-документов, разделенное на три части:
- XSLT (преобразования XSL), язык XML для преобразования документов XML в другие документы XML или другие форматы, такие как HTML, обычный текст или XSL-FO. XSLT очень тесно связан с XPath, который используется для обращения к компонентам входного XML-документа, главным образом к элементам и атрибутам.
- XSL-FO (объекты форматирования XSL), язык XML для рендеринга XML-документов, часто используемый для создания PDF-файлов.
- XPath (язык путей XML), не-XML-язык для обращения к компонентам (элементам, атрибутам и т. д.) XML-документа. XPath широко используется в других базовых спецификациях XML и в библиотеках программирования для доступа к данным, закодированным в XML.
- XQuery (XML Query) — это язык запросов XML, основанный на XPath и XML-схеме. Он предоставляет методы для доступа, манипулирования и возврата XML и в основном задуман как язык запросов для баз данных XML .
- XML Signature определяет синтаксис и правила обработки для создания цифровых подписей на XML-контенте.
- Шифрование XML определяет синтаксис и правила обработки для шифрования содержимого XML.
- Модель XML (Часть 11: схем Ассоциация ISO/IEC 19757 – DSDL ) определяет средства связывания любого документа XML с любым из типов схем, упомянутых выше .
Некоторые другие спецификации, задуманные как часть «XML Core», не получили широкого распространения, включая XInclude , XLink и XPointer .
Интерфейсы программирования [ править ]
Цели разработки XML включают следующее: «Должно быть легко писать программы, обрабатывающие документы XML». [6] Несмотря на это, спецификация XML почти не содержит информации о том, как программисты могут выполнять такую обработку. Спецификация XML Infoset предоставляет словарь для обозначения конструкций в документе XML, но не дает никаких указаний о том, как получить доступ к этой информации. Были разработаны и использованы различные API-интерфейсы для доступа к XML, некоторые из них стандартизированы.
Существующие API для обработки XML обычно попадают в следующие категории:
- Потоковые API, доступные из языка программирования, например SAX и StAX .
- API обхода дерева, доступные из языка программирования, например DOM .
- Привязка данных XML , которая обеспечивает автоматический перевод между документом XML и объектами языка программирования.
- Языки декларативного преобразования, такие как XSLT и XQuery .
- Расширения синтаксиса языков программирования общего назначения, например LINQ и Scala .
Потоковые средства требуют меньше памяти и для определенных задач, основанных на линейном обходе XML-документа, выполняются быстрее и проще, чем другие альтернативы. API-интерфейсы обхода дерева и привязки данных обычно требуют использования гораздо большего объема памяти, но часто оказываются более удобными для использования программистами; некоторые включают декларативное извлечение компонентов документа с помощью выражений XPath.
XSLT предназначен для декларативного описания преобразований XML-документов и широко реализован как в серверных пакетах, так и в веб-браузерах. XQuery перекрывает XSLT по своей функциональности, но предназначен больше для поиска в больших базах данных XML .
Простой API для XML [ править ]
Простой API для XML (SAX) — это лексический API , управляемый событиями , в котором документ считывается последовательно, а его содержимое передается в виде обратных вызовов различным методам объекта -обработчика пользовательского дизайна. SAX быстро и эффективно реализовать, но его сложно использовать для случайного извлечения информации из XML, поскольку он обременяет автора приложения отслеживанием того, какая часть документа обрабатывается. Он лучше подходит для ситуаций, в которых определенные типы информации всегда обрабатываются одинаково, независимо от того, где они встречаются в документе.
Вытягивающий анализ [ править ]
Анализ по запросу рассматривает документ как серию элементов, считываемых последовательно с использованием шаблона проектирования итератора . Это позволяет писать анализаторы рекурсивного спуска , в которых структура кода, выполняющего анализ, отражает структуру анализируемого XML, а промежуточные результаты анализа могут использоваться и доступны как локальные переменные внутри функций, выполняющих анализ, или передаваться ( как параметры функции) в функции более низкого уровня или возвращаются (как возвращаемые значения функции) в функции более высокого уровня. [22] Примеры анализаторов по запросу включают Data::Edit::Xml в Perl , StAX на языке программирования Java , XMLPullParser в Smalltalk , XMLReader в PHP , ElementTree.iterparse в Python , SmartXML в Red , System.Xml.XmlReader в .NET Framework. и API обхода DOM (NodeIterator и TreeWalker).
Анализатор запроса создает итератор, который последовательно посещает различные элементы, атрибуты и данные в XML-документе. Код, использующий этот итератор, может проверить текущий элемент (чтобы определить, например, является ли он начальным или конечным тегом или текстом) и проверить его атрибуты (локальное имя, пространство имен , значения атрибутов XML, значение текст и т. д.), а также может переместить итератор к следующему элементу. Таким образом, код может извлекать информацию из документа по мере его прохождения. Подход рекурсивного спуска имеет тенденцию сохранять данные в виде типизированных локальных переменных в коде, выполняющем синтаксический анализ, в то время как SAX, например, обычно требует, чтобы анализатор вручную поддерживал промежуточные данные в стеке элементов, которые являются родительскими элементами элемента. подвергается анализу. Код разбора по запросу может быть более простым для понимания и обслуживания, чем код синтаксического анализа SAX.
Объектная модель документа [ править ]
Объектная модель документа (DOM) — это API, который позволяет осуществлять навигацию по всему документу, как если бы это было дерево узловых объектов, представляющих содержимое документа. Документ DOM может быть создан анализатором или вручную (с ограничениями). Типы данных в узлах DOM абстрактны; реализации предоставляют свои собственные привязки , специфичные для языка программирования . Реализации DOM, как правило, требуют большого объема памяти , поскольку обычно требуют, чтобы весь документ был загружен в память и построен в виде дерева объектов, прежде чем доступ будет разрешен.
Привязка данных [ править ]
Привязка данных XML — это метод, упрощающий разработку приложений, которым необходимо работать с документами XML. Он предполагает сопоставление XML-документа с иерархией строго типизированных объектов вместо использования универсальных объектов, созданных анализатором DOM. Полученный код часто легче читать и поддерживать, и он может помочь выявить проблемы во время компиляции, а не во время выполнения. Привязка данных XML особенно хорошо подходит для приложений, в которых структура документа известна и фиксирована на момент написания приложения. Создавая строго типизированное представление данных XML, разработчики могут воспользоваться преимуществами современных интегрированных сред разработки (IDE), которые предоставляют такие функции, как автозаполнение, рефакторинг кода и подсветка кода. Это может облегчить написание правильного и эффективного кода и снизить риск возникновения ошибок и ошибок. Примеры систем привязки данных включают архитектуру Java для привязки XML (JAXB), сериализацию XML в .NET Framework , [23] и сериализация XML в gSOAP .
XML как тип данных [ править ]
XML появился как первоклассный тип данных в других языках. языка ECMAScript Расширение ECMAScript for XML (E4X) / JavaScript явно определяет два конкретных объекта (XML и XMLList) для JavaScript, которые поддерживают узлы документов XML и списки узлов XML как отдельные объекты и используют точечную нотацию, определяющую отношения родитель-потомок. . [24] E4X поддерживается браузерами Mozilla 2.5+ (хотя сейчас он устарел) и Adobe Actionscript , но не получил широкого распространения. Подобные обозначения используются в реализации Microsoft LINQ для Microsoft .NET 3.5 и выше, а также в Scala (которая использует виртуальную машину Java). Приложение xmlsh с открытым исходным кодом, которое предоставляет Linux-подобную оболочку со специальными функциями для манипулирования XML, аналогичным образом рассматривает XML как тип данных, используя нотацию <[ ]>. [25] Структура описания ресурсов определяет тип данных rdf:XMLLiteral
для хранения завернутого канонического XML . [26] Facebook выпустил расширения для языков PHP и JavaScript , которые добавляют XML к основному синтаксису аналогично E4X, а именно XHP и JSX соответственно.
История [ править ]
XML — это профиль приложения ( ISO SGML 8879). [27]
Универсальность SGML для динамического отображения информации была понята первыми издателями цифровых медиа в конце 1980-х годов, до появления Интернета. [28] [29] К середине 1990-х годов некоторые специалисты по SGML приобрели опыт работы с тогда еще новой Всемирной паутиной и полагали, что SGML предлагает решения некоторых проблем, с которыми Сеть, вероятно, столкнется по мере своего роста. Дэн Коннолли добавил SGML в список видов деятельности W3C, когда присоединился к команде в 1995 году; работа началась в середине 1996 года, когда Sun Microsystems инженер Джон Босак разработал устав и нанял сотрудников. Босак имел хорошие связи в небольшом сообществе людей, имевших опыт работы как с SGML, так и с Интернетом. [30]
XML был составлен рабочей группой из одиннадцати членов, [31] при поддержке (примерно) 150-членной группы интересов. Технические дебаты проходили в списке рассылки заинтересованных групп, а вопросы решались консенсусом или, если это не удалось, большинством голосов Рабочей группы. Запись проектных решений и их обоснований была составлена Майклом Спербергом-МакКуином 4 декабря 1997 года. [32] Джеймс Кларк занимал должность технического руководителя рабочей группы, внося, в частности, вклад в создание пустых элементов. <empty />
синтаксис и имя «XML». Другие названия, которые были предложены на рассмотрение, включали «MAGMA» (минимальная архитектура для приложений обобщенной разметки), «SLIM» (структурированный язык для интернет-разметки) и «MGML» (минимальный язык обобщенной разметки). Соредакторами спецификации изначально были Тим Брэй и Майкл Сперберг-МакКуин . В середине проекта Брэй согласился на консалтинговое соглашение с Netscape , что спровоцировало громкие протесты со стороны Microsoft. Брея временно попросили уйти с поста редактора. Это привело к ожесточенному спору в Рабочей группе, который в конечном итоге разрешился назначением Жана Паоли из Microsoft третьим соредактором.
Рабочая группа XML общалась в основном посредством электронной почты и еженедельных телеконференций. Основные проектные решения были приняты в ходе короткого периода интенсивной работы с августа по ноябрь 1996 года. [33] когда был опубликован первый рабочий проект спецификации XML. [34] Дальнейшая работа по проектированию продолжалась до 1997 года, и W3C 10 февраля 1998 года XML 1.0 стал рекомендацией .
Источники [ править ]
XML — это профиль стандарта ISO SGML, и большая часть XML исходит из SGML без изменений. Из SGML происходит разделение логических и физических структур (элементов и сущностей), наличие проверки на основе грамматики (DTD), разделение данных и метаданных (элементов и атрибутов), смешанный контент, отделение обработки от представления ( обработка). инструкции ) и синтаксис угловых скобок по умолчанию. Декларация SGML была удалена; таким образом, XML имеет фиксированный набор разделителей и принимает Unicode документа в качестве набора символов .
Другими источниками технологии XML были TEI (Инициатива по кодированию текста), которая определила профиль SGML для использования в качестве «синтаксиса передачи» и HTML . Проект ERCS (Extended Reference Concrete Syntax) проекта SPREAD (Проект стандартизации восточноазиатских документов) экспертной группы по обработке документов Китая, Японии и Кореи, связанной с ISO, был основой правил именования XML 1.0; SPREAD также представил ссылки на шестнадцатеричные числовые символы и концепцию ссылок, позволяющую сделать доступными все символы Юникода. Для лучшей поддержки ERCS, XML и HTML стандарт SGML IS 8879 был пересмотрен в 1996 и 1998 годах с адаптацией WebSGML.
Идеи, возникшие в ходе обсуждения и являющиеся новыми для XML, включали алгоритм обнаружения кодировки и заголовок кодировки, цель инструкции обработки, атрибут xml:space и новый закрывающий разделитель для тегов пустых элементов. Понятие правильности формы в отличие от достоверности (которая обеспечивает синтаксический анализ без схемы) было впервые формализовано в XML, хотя оно было успешно реализовано в программном обеспечении Dynatext для технологии электронных книг; [35] программное обеспечение из проекта Нового Оксфордского словаря английского языка Университета Ватерлоо; текстовый процессор RISP LISP SGML в Uniscope, Токио; гипертекстовая система IADS ракетного командования армии США; Графический контекст наставника; Издательская система Interleaf и Xerox.
Версии [ править ]
1.0 и 1.1 [ править ]
Первый (XML 1.0) был первоначально определен в 1998 году. С тех пор он претерпел незначительные изменения без присвоения нового номера версии и в настоящее время находится в пятом издании, опубликованном 26 ноября 2008 года. Он широко реализован и до сих пор рекомендуется для общего использования.
Второе издание (XML 1.1) было первоначально опубликовано 4 февраля 2004 г., в тот же день, что и третье издание XML 1.0. [36] и в настоящее время находится во втором издании, опубликованном 16 августа 2006 г. Он содержит функции (некоторые спорные), которые призваны упростить использование XML в определенных случаях. [37] Основные изменения заключаются в том, чтобы разрешить использование символов конца строки, используемых на платформах EBCDIC , а также использование скриптов и символов, отсутствующих в Unicode 3.2. XML 1.1 не получил широкого распространения и рекомендуется к использованию только тем, кому нужны его особые возможности. [38]
До выпуска пятой редакции XML 1.0 отличался от XML 1.1 более строгими требованиями к символам, доступным для использования в именах элементов и атрибутов, а также уникальным идентификаторам: в первых четырех редакциях XML 1.0 символы нумеровались исключительно с использованием определенной версии Стандарт Unicode (от Unicode 2.0 до Unicode 3.2). Пятое издание заменяет механизм XML 1.1, который более ориентирован на будущее, но уменьшает избыточность . Подход, использованный в пятом издании XML 1.0 и во всех выпусках XML 1.1, заключается в том, что в именах запрещены только определенные символы, а все остальное разрешено для размещения подходящих символов имени в будущих версиях Unicode. В пятом издании имена XML могут содержать символы балийского , чамского или финикийского алфавитов , а также многие другие символы, добавленные в Unicode начиная с Unicode 3.2. [37]
Почти любая кодовая точка Юникода может использоваться в символьных данных и значениях атрибутов документа XML 1.0/1.1, даже если символ, соответствующий кодовой точке, не определен в текущей версии Юникода. В символьных данных и значениях атрибутов XML 1.1 позволяет использовать больше управляющих символов , чем XML 1.0, но для «надежности» большинство управляющих символов, представленных в XML 1.1, должны быть выражены в виде числовых ссылок на символы (и от #x7F до #x9F). , которые были разрешены в XML 1.0, в XML 1.1 даже должны быть выражены в виде числовых ссылок на символы. [39] ). Среди поддерживаемых управляющих символов в XML 1.1 есть два кода разрыва строки, которые следует рассматривать как символы пробела, которые являются единственными управляющими кодами, которые можно записать напрямую.
2.0 [ править ]
Обсуждался XML 2.0, хотя ни одна организация не объявила о планах работы над таким проектом. XML-SW (ПО для skunkworks ), который написал один из первоначальных разработчиков XML, [40] содержит некоторые предложения о том, как может выглядеть XML 2.0, включая исключение DTD из синтаксиса, а также интеграцию пространств имен XML , базы XML и набора информации XML в базовый стандарт.
МикроXML [ править ]
В 2012 году Джеймс Кларк (технический руководитель рабочей группы XML) и Джон Коуэн (редактор спецификации XML 1.1) сформировали группу сообщества MicroXML в рамках W3C и опубликовали спецификацию для значительно сокращенного подмножества XML. [41]
Двоичный XML [ править ]
Консорциум World Wide Web также имеет рабочую группу по двоичной характеристике XML, которая проводит предварительное исследование вариантов использования и свойств двоичного кодирования набора информации XML. Рабочая группа не уполномочена разрабатывать какие-либо официальные стандарты. Поскольку XML по определению основан на тексте, МСЭ-Т и ISO используют название Fast Infoset для своего собственного двоичного формата (Рекомендация МСЭ-Т X.891 и ISO/IEC 24824-1), чтобы избежать путаницы.
Критика [ править ]
XML и его расширения регулярно подвергались критике за многословие, сложность и избыточность. [42]
Сопоставление базовой древовидной модели XML с системами типов языков программирования или базами данных может оказаться затруднительным, особенно когда XML используется для обмена высокоструктурированными данными между приложениями, что не было его основной целью разработки. Однако системы привязки данных XML позволяют приложениям получать доступ к данным XML непосредственно из объектов, представляющих структуру данных на используемом языке программирования, что обеспечивает безопасность типов , а не использовать DOM или SAX для извлечения данных из прямого представления XML. сам. Это достигается путем автоматического создания сопоставления между элементами схемы XML XSD документа и членами класса, которые должны быть представлены в памяти.
Другая критика пытается опровергнуть утверждение о том, что XML является самоописывающимся языком. [43] (хотя сама спецификация XML не делает такого заявления).
JSON , YAML и S-выражения часто предлагаются как более простые альтернативы (см. Сравнение форматов сериализации данных ). [44] которые ориентированы на представление высокоструктурированных данных, а не документов, которые могут содержать как высокоструктурированный, так и относительно неструктурированный контент. Однако спецификации схемы XML, стандартизированные W3C, предлагают более широкий диапазон структурированных типов данных XSD по сравнению с более простыми форматами сериализации, а также предлагают модульность и возможность повторного использования через пространства имен XML .
См. также [ править ]
- АИДКС
- Список языков разметки XML
- Список типов XML-схем
- Расширяемое программирование
- Сравнение форматов сериализации данных
- Двоичный XML
- EBML
- WBXML
- XML-протокол
Примечания [ править ]
- ^ т. е. встроенные символы кавычек будут проблемой.
- ^ Типичным примером этого являются имена классов или идентификаторов CSS .
Ссылки [ править ]
- ^ Типы мультимедиа XML . Рабочая группа по интернет-инжинирингу. Июль 2014 г. doi : 10.17487/RFC7303 . RFC 7303 .
- ^ «Расширяемый язык разметки (XML) 1.0 (пятое издание)» . Консорциум Всемирной паутины. 26 ноября 2008 года . Проверено 22 августа 2010 г.
- ^ «Расширяемый язык разметки (XML) 1.0» . W3C . 10 февраля 1998 г.
- ^ «Хронология стандартов XML и семантической сети W3C» (PDF) . Лаборатория баз данных и систем знаний . Архивировано из оригинала (PDF) 24 апреля 2013 года . Проверено 14 августа 2016 г.
- ^ «Лицензия на документ – версия 2015 года» . W3C . Проверено 24 июля 2020 г.
- ^ Jump up to: Перейти обратно: а б «1.0 Происхождение и цели» . Расширяемый язык разметки (XML) 1.0 (пятое издание) . W3C. 26 ноября 2008 года . Проверено 14 августа 2016 г.
- ^ Феннелл, Филип (июнь 2013 г.). «Крайности XML» . XML Лондон 2013 : 80–86. doi : 10.14337/XMLLondon13.Fennell01 (неактивен 27 февраля 2024 г.). ISBN 978-0-9926471-0-0 . Архивировано из оригинала 1 марта 2023 года.
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на февраль 2024 г. ( ссылка ) - ^ Jump up to: Перейти обратно: а б с д и Дайкс, Люсинда (2005). XML для чайников (4-е изд.). Хобокен, Нью-Джерси: Уайли. ISBN 978-0-7645-8845-7 .
- ^ «Приложения и инициативы XML» . Xml.coverages.org . Проверено 16 ноября 2017 г.
- ^ Латифиан, Пуйя ; Энтезари, Моджтаба (март 2024 г.). «Поправка IWXXM (Модель обмена метеорологической информацией ИКАО)» . CATC Robex и конференции по статике - Тегеран, Иран. дои : 10.13140/RG.2.2.12572.30088 .
- ^ «Персонажи» . Расширяемый язык разметки (XML) 1.0 (пятое издание) . Консорциум Всемирной паутины. 26 ноября 2008 г. Проверено 23 ноября 2012 г.
- ^ «Персонажи» . Расширяемый язык разметки (XML) 1.1 (второе издание) . Консорциум Всемирной паутины. 16 августа 2006 года . Проверено 22 августа 2010 г.
- ^ «Символы против байтов» . Tbray.org . 26 апреля 2003 года . Проверено 16 ноября 2017 г.
- ^ «Автоопределение кодировок символов (ненормативных)» . Расширяемый язык разметки (XML) 1.0 (пятое издание) . W3C. 26 ноября 2008 года . Проверено 16 ноября 2017 г.
- ^ «Расширяемый язык разметки (XML) 1.0 (пятое издание)» . W3C . Проверено 16 ноября 2017 г.
- ^ «Часто задаваемые вопросы по W3C I18N: HTML, XHTML, XML и управляющие коды» . W3C . Проверено 16 ноября 2017 г.
- ^ «Расширяемый язык разметки (XML)» . W3C . Проверено 16 ноября 2017 г. Раздел «Комментарии»
- ^ Пилигрим, Марк (2004). «История драконовской обработки ошибок в XML» . Архивировано из оригинала 26 июля 2011 г. Проверено 18 июля 2013 г.
- ^ «Из закона Постеля нет исключений [погружение в отметку]» . DiveIntoMark.org . Архивировано из оригинала 14 мая 2011 г. Проверено 22 апреля 2013 г.
- ^ «XML-блокнот» . Xmlnotepad/codeplex.com . Архивировано из оригинала 15 ноября 2017 года . Проверено 16 ноября 2017 г.
- ^ «XML-Блокнот 2007» . Майкрософт . Проверено 16 ноября 2017 г.
- ^ Дюшарм, Боб. «Толкай, тяни, следующий!» . Xml.com . Проверено 16 ноября 2017 г.
- ^ «Сериализация XML в .NET Framework» . Сеть разработчиков Microsoft . 30 июня 2006 г. Проверено 31 июля 2009 г.
- ^ «Обработка XML с помощью E4X» . Центр разработчиков Mozilla . Фонд Мозилла. Архивировано из оригинала 1 мая 2011 г. Проверено 27 июля 2010 г.
- ^ «XML-оболочка: основной синтаксис» . Xmlsh.org . 13 мая 2010 г. Проверено 22 августа 2010 г.
- ^ «Структура описания ресурсов (RDF): концепции и абстрактный синтаксис» . W3C . Проверено 22 августа 2010 г.
- ^ «ИСО/МЭК 19757-3». ИСО / МЭК . 1 июня 2006 г.: vi.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Брей, Тим (февраль 2005 г.). «Разговор с Тимом Бреем: В поисках способов приручить огромные мировые запасы информации» . «Сайт очереди» Ассоциации вычислительной техники. дои : 10.1145/1046931.1046941 . S2CID 23502115 . Архивировано из оригинала 30 мая 2020 года . Проверено 16 апреля 2006 г.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Амброн, Суэнн и Хупер, Кристина, ред. (1988). «Издательства, мультимедиа и интерактивность». Интерактивное мультимедиа . Группа Кобб. ISBN 1-55615-124-1 .
- ^ Элиот Кимбер (2006). «XML — это 10» . Drmacros-xml-rants.blogspot.com . Проверено 16 ноября 2017 г.
- ↑ Первоначально рабочая группа называлась «Редакционный совет». Первоначальные члены и семь членов, добавленных до завершения первого издания, перечислены в конце первого издания Рекомендации XML по адресу http://www.w3.org/TR/1998/REC-xml-19980210 .
- ^ «Отчеты от W3C SGML ERB для рабочей группы SGML и от W3C XML ERB для XML SIG» . W3C . Проверено 31 июля 2009 г.
- ^ «Технологическая сеть Oracle для разработчиков Java — Технологическая сеть Oracle» . Оракул . Проверено 16 ноября 2017 г.
- ^ «Расширяемый язык разметки (XML)» . W3C. 14 ноября 1996 г. Проверено 31 июля 2009 г.
- ^ Джон Босак; Сан Микросистемс (07 декабря 2006 г.). «Заключительный доклад, XML 2006» . 2006.xmlconference.org. Архивировано из оригинала 11 июля 2007 г. Проверено 31 июля 2009 г.
- ^ «Расширяемый язык разметки (XML) 1.0 (третье издание)» . W3C . Проверено 22 августа 2010 г.
- ^ Jump up to: Перейти обратно: а б «Расширяемый язык разметки (XML) 1.1 (второе издание), обоснование и список изменений для XML 1.1» . W3C . Проверено 20 января 2012 г.
- ^ Гарольд, Эллиотт Расти (2004). Эффективный XML . Аддисон-Уэсли. стр. 10–19 . ISBN 0-321-15040-6 .
- ^ «Расширяемый язык разметки (XML) 1.1 (второе издание)» . W3C . Проверено 22 августа 2010 г.
- ^ Брей, Тим (10 февраля 2002 г.). «Расширяемый язык разметки, ПО (XML-SW)» .
- ^ «Группа сообщества MicroXML» . W3C . 01.10.2012 . Проверено 5 августа 2023 г.
- ^ «XML: налог на угловые скобки» . Codinghorror.com . 11 мая 2008 г. Архивировано из оригинала 26 февраля 2014 г. . Проверено 16 ноября 2017 г.
- ^ «Миф о самоописании XML» (PDF) . Workflow.HealthBase.info . Сентябрь 2003 года . Проверено 16 ноября 2017 г.
- ^ «Какие полезные альтернативы синтаксису XML вы знаете?» . StackOverflow.com . Проверено 16 ноября 2017 г.
Дальнейшее чтение [ править ]
- Приложение А ISO 8879:1986 (SGML)
- Лоуренс А. Каннингем (2005). «Язык, соглашения и стандарты: будущее XML-контрактов». Обзор права Вашингтонского университета . ССРН 900616 .
- Босак, Джон; Брей, Тим (май 1999 г.). «XML и Интернет второго поколения» . Научный американец . 280 (5): 89. Бибкод : 1999SciAm.280e..89B . doi : 10.1038/scientificamerican0599-89 (неактивен 27 февраля 2024 г.). Архивировано из оригинала 1 октября 2009 года.
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на февраль 2024 г. ( ссылка ) - Келли, Шон (6 февраля 2006 г.). «Делаем ошибки с XML» . Разработчик.com . Проверено 26 октября 2010 г.
- Сен-Лоран, Симон (12 февраля 2003 г.). «Пять лет спустя, XML». XML-блог О'Рейли . О'Рейли Медиа . Проверено 26 октября 2010 г.
- «W3C XML — это десять!» . Консорциум Всемирной паутины . 12 февраля 2008 года . Проверено 26 октября 2010 г.
- «Введение в XML» (PDF) . Слайды курса . Пьер Женев . Октябрь 2012 г. Архивировано (PDF) из оригинала 16 октября 2015 г.
Внешние ссылки [ править ]
- Официальный сайт Консорциума Всемирной паутины (W3C)
- Спецификация XML 1.0
- Ретроспектива расширенного справочного конкретного синтаксиса, заархивированная 18 ноября 2019 г. в Wayback Machine Риком Джеллиффом.
- XML, Java и будущее Интернета (1997) Джона Босака
- Официальная служба проверки разметки (W3C)
- Часто задаваемые вопросы по XML, первоначально написанные Питером Флинном для XML SIG W3C.