Расширяемый язык разметки ( XML ) — это язык разметки и формат файлов для хранения, передачи и реконструкции произвольных данных. [2] Он определяет набор правил для кодирования документов в формате, который может быть как понятен человеку , так и понятен машине . Спецификация XML 1.0 Консорциума Всемирной паутины [3] 1998 года [4] и несколько других связанных спецификаций [5] — все они являются свободными открытыми стандартами — определяют XML. [6]
Цели дизайна XML подчеркивают простоту, универсальность и удобство использования в Интернете . [ 7] Это текстовый формат данных с сильной поддержкой через Unicode для различных человеческих языков . Хотя дизайн XML фокусируется на документах, язык широко используется для представления произвольных структур данных , [8] таких как те, которые используются в веб-сервисах . [9]
Существует несколько систем схем, помогающих в определении языков на основе XML, в то время как программисты разработали множество интерфейсов прикладного программирования (API), помогающих в обработке XML-данных. [10]
Основная цель XML — сериализация , т.е. хранение, передача и реконструкция произвольных данных. Для того, чтобы две разнородные системы могли обмениваться информацией, им необходимо согласовать формат файла. XML стандартизирует этот процесс. Поэтому он аналогичен lingua franca для представления информации. [11] : 1
Как язык разметки , XML маркирует, категоризирует и структурно организует информацию. [11] : 11 Теги XML представляют структуру данных и содержат метаданные . Внутри тегов находятся данные, закодированные способом, указанным стандартом XML. [11] : 11 Дополнительная схема XML (XSD) определяет необходимые метаданные для интерпретации и проверки XML. (Это также называется канонической схемой.) [11] : 135 Документ XML, который соответствует основным правилам XML, является «правильно сформированным»; документ, который соответствует своей схеме, является «действительным». [11] : 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
для SVG .
Дополнительные рекомендации по использованию XML в сетевом контексте содержатся в RFC 3470, также известном как IETF BCP 70, документе, охватывающем многие аспекты проектирования и развертывания языка на основе XML. [10] [9]
XML стал общепринятым для обмена данными через Интернет. Разработаны сотни форматов документов, использующих синтаксис XML, [12] включая RSS , Atom , Office Open XML , OpenDocument , SVG , COLLADA и XHTML . XML также предоставляет базовый язык для протоколов связи, таких как SOAP и XMPP . Это один из форматов обмена сообщениями, используемых в технике программирования Asynchronous JavaScript and XML (AJAX) .
Многие отраслевые стандарты данных, такие как Health Level 7 , OpenTravel Alliance , FpML , MISMO и National Information Exchange Model , основаны на XML и богатых возможностях спецификации схемы XML. В издательском деле Darwin Information Typing Architecture является отраслевым стандартом данных XML. XML широко используется для поддержки различных форматов публикаций.
Одним из применений XML является передача оперативной метеорологической информации (OPMET) на основе стандартов IWXXM . [13]
Материал в этом разделе основан на спецификации 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>
, где имя атрибута — «number», а его значение — «3». Атрибут XML может иметь только одно значение, и каждый атрибут может появляться не более одного раза в каждом элементе. В обычной ситуации, когда требуется список из нескольких значений, это должно быть сделано путем кодирования списка в правильно сформированный атрибут XML [i] с некоторым форматом, выходящим за рамки того, что определяет сам XML. Обычно это либо список, разделенный запятыми или точками с запятой, либо, если известно, что отдельные значения не содержат пробелов, [ii] можно использовать список, разделенный пробелами. <div class="inner greeting-box">Welcome!</div>
, где атрибут «class» имеет как значение «inner greeting-box», так и указывает два имени классов CSS «inner» и «greeting-box».<?xml version="1.0" encoding="UTF-8"?>
.XML-документы полностью состоят из символов из репертуара Unicode . За исключением небольшого числа специально исключенных управляющих символов , любой символ, определенный Unicode, может появляться в содержимом XML-документа.
XML включает в себя средства для определения кодировки символов Unicode, из которых состоит документ, а также для выражения символов, которые по той или иной причине не могут быть использованы напрямую.
В документах XML 1.0 допустимы кодовые точки Unicode в следующих диапазонах: [14]
XML 1.1 расширяет набор разрешенных символов, включая все вышеперечисленные, а также оставшиеся символы в диапазоне U+0001–U+001F. [15] В то же время, однако, он ограничивает использование управляющих символов C0 и C1 , отличных от U+0009 (горизонтальная табуляция), U+000A (перевод строки), U+000D (возврат каретки) и U+0085 (следующая строка), требуя, чтобы они были записаны в экранированной форме (например, U+0001 должен быть записан как 
или его эквивалент). В случае символов C1 это ограничение является обратной несовместимостью; оно было введено, чтобы позволить обнаруживать общие ошибки кодирования.
Кодовая точка U+0000 (Null) — единственный символ, который не разрешен ни в одном документе XML 1.1.
Набор символов Unicode может быть закодирован в байты для хранения или передачи различными способами, называемыми «кодировками». Сам Unicode определяет кодировки, которые охватывают весь репертуар; хорошо известные из них включают UTF-8 (которую стандарт XML рекомендует использовать без BOM ) и UTF-16 . [16] Существует много других текстовых кодировок, которые предшествуют Unicode, такие как ASCII и различные ISO/IEC 8859 ; их репертуары символов в каждом случае являются подмножествами набора символов Unicode.
XML позволяет использовать любую из кодировок, определенных Unicode, и любые другие кодировки, символы которых также встречаются в Unicode. XML также предоставляет механизм, посредством которого процессор XML может надежно, без каких-либо предварительных знаний, определить, какая кодировка используется. [17] Кодировки, отличные от UTF-8 и UTF-16, не обязательно распознаются каждым XML-анализатором (а в некоторых случаях даже UTF-16, хотя стандарт предписывает ее также распознавать).
XML предоставляет средства экранирования для включения символов, которые проблематично включить напрямую. Например:
 
) " " и пробел (  
) " ", а также кириллическая заглавная буква A ( А
) "А" и латинская заглавная буква A ( A
) "A".Существует пять предопределенных сущностей :
<
представляет собой "<";>
представляет ">";&
представляет собой "&";'
представляет " ' ";"
представляет собой ' " '.Все разрешенные символы Unicode могут быть представлены с помощью ссылки на числовой символ . Рассмотрим китайский иероглиф "中", числовой код которого в Unicode — шестнадцатеричный 4E2D или десятичный 20 013. Пользователь, клавиатура которого не предлагает метода для ввода этого символа, все равно может вставить его в XML-документ, закодированный как 中
или 中
. Аналогично, строка "I <3 Jörg" может быть закодирована для включения в XML-документ как I <3 Jörg
.
�
не допускается, поскольку нулевой символ является одним из управляющих символов, исключенных из XML, даже при использовании ссылки на числовой символ. [19] Для представления таких символов необходим альтернативный механизм кодирования, такой как Base64 .
Комментарии могут появляться в любом месте документа за пределами другой разметки. Комментарии не могут появляться перед объявлением XML. Комментарии начинаются с <!--
и заканчиваются на -->
. Для совместимости с SGML строка "--" (двойной дефис) не допускается внутри комментариев; [20] это означает, что комментарии не могут быть вложенными. Амперсанд не имеет особого значения внутри комментариев, поэтому ссылки на сущности и символы не распознаются как таковые, и нет способа представить символы за пределами набора символов кодировки документа.
Пример корректного комментария:<!--no need to escape <code> & such in comments-->
XML 1.0 (пятое издание) и XML 1.1 поддерживают прямое использование практически любого символа Unicode в именах элементов, атрибутах, комментариях, символьных данных и инструкциях по обработке (кроме тех, которые имеют особое символическое значение в самом XML, например, знак "меньше" ("<"). Ниже приведен правильно сформированный XML-документ, включающий китайские , армянские и кириллические символы:
|
Спецификация XML определяет документ XML как правильно сформированный текст, что означает, что он удовлетворяет списку правил синтаксиса, представленных в спецификации. Некоторые ключевые моменты в довольно длинном списке включают:
<
и , &
не появляется, за исключением случаев, когда они выполняют свои функции разметки.!"#$%&'()*+,/;<=>?@[\]^`{|}~
, пробелы и не могут начинаться с «-», «.» или цифры.Определение документа XML исключает тексты, содержащие нарушения правил правильности построения; они просто не являются XML. Процессор XML, который сталкивается с таким нарушением, обязан сообщать о таких ошибках и прекращать нормальную обработку. Эта политика, иногда называемая « драконовской обработкой ошибок», заметно контрастирует с поведением программ, обрабатывающих HTML , которые разработаны для получения разумного результата даже при наличии серьезных ошибок разметки. [21] Политика XML в этой области была подвергнута критике как нарушение закона Постела («Будьте консервативны в том, что вы отправляете; будьте либеральны в том, что вы принимаете»). [22]
Спецификация XML определяет допустимый XML-документ как правильно сформированный XML-документ , который также соответствует правилам определения типа документа (DTD). [23] [24]
Помимо того, что документ XML должен быть правильно сформирован, он может быть допустимым . Это означает, что он содержит ссылку на определение типа документа (DTD), а его элементы и атрибуты объявлены в этом DTD и следуют грамматическим правилам, указанным для них в DTD.
Процессоры XML классифицируются как проверяющие и непроверяющие в зависимости от того, проверяют ли они документы XML на валидность или нет. Процессор, обнаруживший ошибку валидности, должен иметь возможность сообщить об этом, но может продолжить обычную обработку.
DTD является примером схемы или грамматики . С момента первой публикации XML 1.0 была проделана значительная работа в области языков схем для XML. Такие языки схем обычно ограничивают набор элементов, которые могут использоваться в документе, какие атрибуты могут быть применены к ним, порядок, в котором они могут появляться, и допустимые родительские/дочерние отношения.
Самым старым языком схем для XML является определение типа документа (DTD), унаследованное от SGML.
DTD имеют следующие преимущества:
DTD имеют следующие ограничения:
Две особые особенности, отличающие DTD от других типов схем, — это синтаксическая поддержка встраивания DTD в XML-документы и определения сущностей , представляющих собой произвольные фрагменты текста или разметки, которые XML-процессор вставляет в сам DTD и в XML-документ везде, где на них ссылаются, например, экранированные символы.
Технология DTD по-прежнему используется во многих приложениях ввиду ее повсеместности.
Более новый язык схем, описанный W3C как преемник DTD, — XML Schema , часто упоминаемый по аббревиатуре для экземпляров XML Schema, XSD (XML Schema Definition). XSD гораздо мощнее DTD в описании языков XML. Они используют богатую систему типизации данных и допускают более подробные ограничения на логическую структуру XML-документа. XSD также используют формат на основе XML, что позволяет использовать обычные XML-инструменты для их обработки.
Элемент xs:schema, определяющий схему:
<?xml версия="1.0" кодировка="UTF-8" ?> <xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" ></xs:schema>
RELAX NG (Regular Language for XML Next Generation) изначально был определен OASIS и теперь является стандартом (Часть 2: Проверка на основе регулярной грамматики ISO /IEC 19757 – DSDL ). Схемы RELAX NG могут быть написаны либо в синтаксисе на основе XML, либо в более компактном не-XML синтаксисе; эти два синтаксиса изоморфны , и инструмент преобразования Джеймса Кларка — Trang — может преобразовывать их между собой без потери информации. RELAX NG имеет более простую структуру определения и проверки, чем XML Schema, что упрощает его использование и реализацию. Он также имеет возможность использовать подключаемые модули структуры типов данных ; например, автор схемы RELAX NG может потребовать, чтобы значения в XML-документе соответствовали определениям в XML Schema Datatypes.
Schematron — это язык для утверждения наличия или отсутствия шаблонов в документе XML. Обычно он использует выражения XPath . Schematron теперь является стандартом (часть 3: проверка на основе правил ISO /IEC 19757 – DSDL ).
DSDL (Document Schema Definition Languages) — это многокомпонентный стандарт 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:base
атрибут, который может использоваться для установки базы для разрешения относительных ссылок URI в пределах одного элемента XML.Некоторые другие спецификации, задуманные как часть «XML Core», не нашли широкого распространения, включая XInclude , XLink и XPointer .
Цели разработки XML включают: «Должно быть легко писать программы, которые обрабатывают XML-документы». [7] Несмотря на это, спецификация XML не содержит почти никакой информации о том, как программисты могут выполнять такую обработку. Спецификация XML Infoset предоставляет словарь для ссылки на конструкции в XML-документе, но не дает никаких указаний о том, как получить доступ к этой информации. Было разработано и использовано множество API для доступа к XML, и некоторые из них были стандартизированы.
Существующие API для обработки XML, как правило, попадают в следующие категории:
Потоковые средства требуют меньше памяти и для определенных задач, основанных на линейном обходе XML-документа, быстрее и проще других альтернатив. API обхода дерева и привязки данных обычно требуют использования гораздо большего количества памяти, но часто оказываются более удобными для использования программистами; некоторые включают декларативный поиск компонентов документа с использованием выражений XPath.
XSLT разработан для декларативного описания преобразований XML-документов и широко применяется как в серверных пакетах, так и в веб-браузерах. XQuery перекрывает XSLT по своей функциональности, но больше предназначен для поиска в больших XML-базах данных .
Simple API for XML (SAX) — это лексический , управляемый событиями API, в котором документ считывается последовательно, а его содержимое сообщается в виде обратных вызовов различным методам объекта -обработчика пользовательского дизайна. SAX быстро и эффективно реализуется, но его сложно использовать для извлечения случайной информации из XML, поскольку он, как правило, обременяет автора приложения отслеживанием того, какая часть документа обрабатывается. Он лучше подходит для ситуаций, в которых определенные типы информации всегда обрабатываются одинаково, независимо от того, где они встречаются в документе.
Синтаксический анализ pull рассматривает документ как ряд элементов, считываемых последовательно с использованием шаблона проектирования итератора . Это позволяет писать рекурсивные спусковые парсеры , в которых структура кода, выполняющего синтаксический анализ, отражает структуру анализируемого XML, а промежуточные проанализированные результаты могут использоваться и быть доступными как локальные переменные внутри функций, выполняющих синтаксический анализ, или передаваться (как параметры функции) в функции более низкого уровня или возвращаться (как возвращаемые значения функции) в функции более высокого уровня. [25] Примерами синтаксических анализаторов pull являются Data::Edit::Xml в Perl , StAX в языке программирования Java , XMLPullParser в Smalltalk , XMLReader в PHP , ElementTree.iterparse в Python , SmartXML в Red , System.Xml.XmlReader в .NET Framework и API обхода DOM (NodeIterator и TreeWalker).
Синтаксический анализатор pull создает итератор, который последовательно посещает различные элементы, атрибуты и данные в документе XML. Код, который использует этот итератор, может проверить текущий элемент (например, чтобы определить, является ли он начальным тегом или конечным тегом, или текстом) и проверить его атрибуты (локальное имя, пространство имен , значения атрибутов XML, значение текста и т. д.), а также может переместить итератор к следующему элементу. Таким образом, код может извлекать информацию из документа по мере его обхода. Подход рекурсивного спуска, как правило, позволяет хранить данные в виде типизированных локальных переменных в коде, выполняющем синтаксический анализ, в то время как SAX, например, обычно требует, чтобы синтаксический анализатор вручную поддерживал промежуточные данные в стеке элементов, которые являются родительскими элементами анализируемого элемента. Код синтаксического анализа pull может быть более простым для понимания и поддержки, чем код синтаксического анализа SAX.
Document Object Model (DOM) — это API, который позволяет осуществлять навигацию по всему документу, как если бы это было дерево объектов узлов, представляющих содержимое документа. Документ DOM может быть создан парсером или вручную сгенерирован пользователями (с ограничениями). Типы данных в узлах DOM являются абстрактными; реализации предоставляют свои собственные привязки , специфичные для языка программирования . Реализации DOM, как правило, требуют интенсивного использования памяти , поскольку они обычно требуют, чтобы весь документ был загружен в память и построен в виде дерева объектов, прежде чем будет разрешен доступ.
Привязка данных XML — это метод упрощения разработки приложений, которым необходимо работать с документами XML. Он включает в себя сопоставление документа XML с иерархией строго типизированных объектов, а не использование общих объектов, созданных парсером DOM. Полученный код часто легче читать и поддерживать, и он может помочь выявить проблемы во время компиляции, а не во время выполнения. Привязка данных XML особенно хорошо подходит для приложений, где структура документа известна и зафиксирована на момент написания приложения. Создавая строго типизированное представление данных XML, разработчики могут воспользоваться преимуществами современных интегрированных сред разработки (IDE), которые предоставляют такие функции, как автозаполнение, рефакторинг кода и подсветка кода. Это может упростить написание правильного и эффективного кода и снизить риск ошибок и сбоев. Примеры систем привязки данных включают Java Architecture for XML Binding (JAXB), XML Serialization in .NET Framework [26] и XML serialization in gSOAP .
XML появился как тип данных первого класса в других языках. Расширение ECMAScript для XML (E4X) для языка ECMAScript /JavaScript явно определяет два конкретных объекта (XML и XMLList) для JavaScript, которые поддерживают узлы XML-документа и списки XML-узлов как отдельные объекты и используют точечную нотацию, указывающую родительско-дочерние отношения. [27] E4X поддерживается браузерами Mozilla 2.5+ (хотя сейчас устарел) и Adobe Actionscript , но не получил широкого распространения. Похожие нотации используются в реализации LINQ от Microsoft для Microsoft .NET 3.5 и выше, а также в Scala (которая использует Java VM). Приложение xmlsh с открытым исходным кодом, которое предоставляет оболочку Linux со специальными функциями для манипулирования XML, аналогично обрабатывает XML как тип данных, используя нотацию <[ ]>. [28] Resource Description Framework определяет тип данных rdf:XMLLiteral
для хранения обернутого канонического XML . [29] Facebook создал расширения для языков PHP и JavaScript , которые добавляют XML к основному синтаксису аналогично E4X, а именно XHP и JSX соответственно.
XML — это профиль приложения SGML (ISO 8879 ). [30]
Универсальность SGML для динамического отображения информации была понята ранними издателями цифровых медиа в конце 1980-х годов до появления Интернета. [31] [32] К середине 1990-х годов некоторые практики SGML приобрели опыт работы с тогда еще новой Всемирной паутиной и считали, что SGML предлагает решения некоторых проблем, с которыми, вероятно, столкнется Веб по мере своего роста. Дэн Коннолли добавил SGML в список мероприятий W3C, когда он присоединился к штату в 1995 году; работа началась в середине 1996 года, когда инженер Sun Microsystems Джон Босак разработал устав и набрал сотрудников. Босак имел хорошие связи в небольшом сообществе людей, которые имели опыт как в SGML, так и в Вебе. [33]
XML был составлен рабочей группой из одиннадцати членов [34] , поддерживаемой (примерно) 150 участниками группы по интересам. Технические дебаты проходили в списке рассылки группы по интересам, и вопросы решались на основе консенсуса или, если это не удавалось, большинством голосов рабочей группы. Запись проектных решений и их обоснований была составлена Майклом Спербергом-Маккуином 4 декабря 1997 года. [35] Джеймс Кларк был техническим руководителем рабочей группы, в частности, внося вклад в <empty />
синтаксис пустых элементов и название «XML». Другие названия, которые были предложены для рассмотрения, включали «MAGMA» (Minimal Architecture for Generalized Markup Applications), «SLIM» (Structured Language for Internet Markup) и «MGML» (Minimal Generalized Markup Language). Соредакторами спецификации изначально были Тим Брей и Майкл Сперберг-Маккуин . На полпути проекта Брей принял консалтинговое соглашение с Netscape , что вызвало громкие протесты со стороны Microsoft. Брею было предложено временно уйти с поста редактора. Это привело к интенсивному спору в рабочей группе, который в конечном итоге разрешился назначением Жана Паоли из Microsoft третьим соредактором.
Рабочая группа XML общалась в основном посредством электронной почты и еженедельных телеконференций. Основные решения по проектированию были приняты в ходе короткого всплеска интенсивной работы с августа по ноябрь 1996 года, [36] когда был опубликован первый рабочий проект спецификации XML. [37] Дальнейшая работа по проектированию продолжалась до 1997 года, и XML 1.0 стал рекомендацией W3C 10 февраля 1998 года.
XML — это профиль стандарта ISO SGML, и большая часть XML происходит из SGML без изменений. Из SGML происходит разделение логических и физических структур (элементов и сущностей), доступность проверки на основе грамматики (DTD), разделение данных и метаданных (элементов и атрибутов), смешанный контент, разделение обработки от представления ( инструкции по обработке ) и синтаксис угловых скобок по умолчанию. Декларация SGML была удалена; таким образом, XML имеет фиксированный набор разделителей и принимает Unicode в качестве набора символов документа .
Другими источниками технологий для XML были TEI (Text Encoding Initiative), которая определила профиль SGML для использования в качестве «синтаксиса передачи» и HTML . Проект ERCS (Extended Reference Concrete Syntax) проекта SPREAD (Standardization Project Regarding East Asian Documents) экспертной группы по обработке документов Китая, Японии и Кореи, связанной с ISO, стал основой правил именования XML 1.0; SPREAD также ввел шестнадцатеричные числовые ссылки на символы и концепцию ссылок, чтобы сделать доступными все символы Unicode. Для лучшей поддержки ERCS, XML и HTML стандарт SGML IS 8879 был пересмотрен в 1996 и 1998 годах с помощью адаптаций WebSGML.
Идеи, которые были разработаны в ходе обсуждения и являются новыми в XML, включали алгоритм определения кодировки и заголовок кодировки, цель инструкции обработки, атрибут xml:space и новый разделитель закрытия для тегов пустых элементов. Понятие правильности в отличие от валидности (что позволяет проводить синтаксический анализ без схемы) было впервые формализовано в XML, хотя оно было успешно реализовано в программном обеспечении Electronic Book Technology "Dynatext"; [38] программном обеспечении из проекта New Oxford English Dictionary Project Университета Ватерлоо; текстовом процессоре RISP LISP SGML в Uniscope, Токио; гипертекстовой системе IADS Командования ракетных войск США; Mentor Graphics Context; Interleaf и Xerox Publishing System.
Первая версия (XML 1.0) была первоначально определена в 1998 году. С тех пор она претерпела незначительные изменения, не получив нового номера версии, и в настоящее время находится в пятом издании, опубликованном 26 ноября 2008 года. Она широко применяется и по-прежнему рекомендуется для общего использования.
Вторая версия (XML 1.1) была первоначально опубликована 4 февраля 2004 года, в тот же день, что и третья редакция XML 1.0 [39] , и в настоящее время находится во второй редакции, опубликованной 16 августа 2006 года. Она содержит функции (некоторые спорные), которые призваны сделать XML более простым в использовании в определенных случаях. [40] Основные изменения заключаются в том, чтобы разрешить использование символов конца строки, используемых на платформах EBCDIC , а также использование скриптов и символов, отсутствующих в Unicode 3.2. XML 1.1 не очень широко реализован и рекомендуется для использования только теми, кому нужны его особые функции. [41]
До выхода пятого издания 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. [40]
Почти любая кодовая точка Unicode может использоваться в символьных данных и значениях атрибутов документа XML 1.0/1.1, даже если символ, соответствующий кодовой точке, не определен в текущей версии Unicode. В символьных данных и значениях атрибутов XML 1.1 допускает использование большего количества управляющих символов , чем XML 1.0, но для «надежности» большинство управляющих символов, введенных в XML 1.1, должны быть выражены как числовые ссылки на символы (а #x7F по #x9F, которые были разрешены в XML 1.0, в XML 1.1 даже требуется выражать как числовые ссылки на символы [42] ). Среди поддерживаемых управляющих символов в XML 1.1 есть два кода разрыва строки, которые должны рассматриваться как пробельные символы, которые являются единственными управляющими кодами, которые можно записать напрямую.
Обсуждался XML 2.0, хотя ни одна организация не объявила о планах работы над таким проектом. XML-SW (SW для skunkworks ), написанный одним из первоначальных разработчиков XML, [43] содержит некоторые предложения о том, как может выглядеть XML 2.0, включая исключение DTD из синтаксиса, а также интеграцию пространств имен XML , XML Base и XML Information Set в базовый стандарт.
В 2012 году Джеймс Кларк (технический руководитель рабочей группы XML) и Джон Коуэн (редактор спецификации XML 1.1) сформировали группу сообщества MicroXML в рамках W3C и опубликовали спецификацию для значительно сокращенного подмножества XML. [44]
В Консорциуме Всемирной паутины также есть Рабочая группа по бинарной характеристике XML, которая проводит предварительное исследование вариантов использования и свойств для двоичного кодирования XML Information Set. Рабочая группа не уполномочена разрабатывать какие-либо официальные стандарты. Поскольку XML по определению является текстовым, ITU-T и ISO используют название Fast Infoset для своего собственного двоичного формата (ITU-T Rec. X.891 и ISO/IEC 24824-1), чтобы избежать путаницы.
XML и его расширения регулярно подвергались критике за многословность, сложность и избыточность. [45]
Отображение базовой древовидной модели XML в системы типов языков программирования или баз данных может быть сложным, особенно когда XML используется для обмена высокоструктурированными данными между приложениями, что не было его основной целью разработки. Однако системы привязки данных XML позволяют приложениям получать доступ к данным XML напрямую из объектов, представляющих структуру данных на используемом языке программирования, что обеспечивает безопасность типов , а не использовать DOM или SAX для извлечения данных из прямого представления самого XML. Это достигается путем автоматического создания отображения между элементами схемы XML XSD документа и членами класса, который должен быть представлен в памяти.
Другие критические замечания пытаются опровергнуть утверждение, что XML является самоописываемым языком [46] (хотя сама спецификация XML не содержит такого утверждения).
JSON , YAML и S-Expressions часто предлагаются как более простые альтернативы (см. Сравнение форматов сериализации данных ) [47] , которые фокусируются на представлении высокоструктурированных данных, а не документов, которые могут содержать как высокоструктурированный, так и относительно неструктурированный контент. Однако спецификации стандартизированных схем XML W3C предлагают более широкий диапазон структурированных типов данных XSD по сравнению с более простыми форматами сериализации и предлагают модульность и повторное использование через пространства имен XML .
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )