Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Extensible Markup Language ( XML ) - это язык разметки, который определяет набор правил для кодирования документов в формате, который удобен для чтения человеком и компьютером . World Wide Web Consortium «s XML 1.0 Спецификация [2] 1998 [3] и ряд других связанных с ними спецификаций [4] -все из них бесплатно открытых стандартов -define XML. [5]

Цели разработки XML подчеркивают простоту, универсальность и удобство использования в Интернете . [6] Это текстовый формат данных с сильной поддержкой Unicode для разных человеческих языков . Хотя дизайн XML ориентирован на документы, этот язык широко используется для представления произвольных структур данных [7], например, используемых в веб-сервисах .

Существует несколько систем схем, помогающих в определении языков на основе XML, в то время как программисты разработали множество интерфейсов прикладного программирования (API) для помощи в обработке данных XML.

Приложения [ править ]

Суть того, почему необходимы расширяемые языки разметки, объясняется на языке разметки (например, см. Язык разметки § XML ) и в Стандартном обобщенном языке разметки .

Были разработаны сотни форматов документов с использованием синтаксиса XML [8], включая RSS , Atom , SOAP , SVG и XHTML . XML-форматы на основе стали по умолчанию для многих инструментов офисно-производительности, в том числе Microsoft Office ( Office Open XML ), OpenOffice.org и LibreOffice ( OpenDocument ), и Apple , «s iWork [ править ] . XML также предоставил базовый язык для протоколов связи, таких как XMPP.. Приложения для Microsoft .NET Framework используют файлы XML для конфигурации, а списки свойств представляют собой реализацию хранилища конфигурации, построенного на XML. [9]

Многие отраслевые стандарты данных, такие как Health Level 7 , OpenTravel Alliance , FpML , MISMO и Национальная модель обмена информацией , основаны на XML и разнообразных функциях спецификации схемы XML. Многие из этих стандартов довольно сложны, и нередко спецификации содержат несколько тысяч страниц. [ необходимая цитата ] В публикации Darwin Information Typing Architecture является отраслевым стандартом данных XML. XML широко используется для поддержки различных форматов публикации.

XML широко используется в сервис-ориентированной архитектуре (SOA). Разрозненные системы взаимодействуют друг с другом посредством обмена XML-сообщениями. Формат обмена сообщениями стандартизирован как схема XML (XSD). Это также называется канонической схемой. XML стал широко использоваться для обмена данными через Интернет. IETF RFC: 3023 , который теперь заменен RFC: 7303 , дал правила для создания типов Интернет-носителей для использования при отправке XML. Он также определяет типы мультимедиа application/xmlи text/xml, которые говорят только о том, что данные находятся в XML, и ничего не о его семантике .

RFC 7303 также рекомендует давать языкам на основе XML типы носителей, оканчивающиеся на +xml; например image/svg+xmlдля SVG . Дополнительные рекомендации по использованию XML в сетевом контексте содержатся в RFC 3470, также известном как IETF BCP 70, документе, охватывающем многие аспекты разработки и развертывания языка на основе XML.

Основная терминология [ править ]

Материал в этом разделе основан на спецификации XML. Это не исчерпывающий список всех конструкций, которые появляются в XML; он представляет собой введение в ключевые конструкции, наиболее часто встречающиеся в повседневном использовании.

Персонаж

XML-документ - это строка символов . Почти каждый допустимый символ Unicode может появиться в XML-документе.

Процессор и приложение

Процессор анализирует разметку и передает структурированную информацию к приложению . Спецификация предъявляет требования к тому, что должен делать 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 [i]с некоторым форматом, выходящим за рамки того, что определяет сам 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 включает средства для идентификации кодировки символов Unicode, составляющих документ, и для выражения символов, которые по той или иной причине не могут использоваться напрямую.

Допустимые символы [ править ]

Кодовые точки Unicode в следующих диапазонах действительны в документах XML 1.0: [10]

  • 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. [11] В то же время, однако, он ограничивает использование управляющих символов C0 и C1, кроме U + 0009 (горизонтальная табуляция), U + 000A (перевод строки), U + 000D (возврат каретки) и U + 0085. (Следующая строка), требуя, чтобы они были записаны в экранированной форме (например, U + 0001 должен быть записан как &#x01;или его эквивалент). В случае символов C1 это ограничение является обратной несовместимостью; он был введен, чтобы позволить обнаруживать распространенные ошибки кодирования.

Кодовая точка U + 0000 (Null) - единственный символ, который не разрешен ни в одном документе XML 1.0 или 1.1.

Обнаружение кодировки [ править ]

Набор символов Unicode может быть закодирован в байты для хранения или передачи множеством различных способов, называемых «кодировками». Сам Unicode определяет кодировки, охватывающие весь репертуар; к хорошо известным относятся UTF-8 и UTF-16 . [12] Есть много других кодировок текста, предшествующих Unicode, например ASCII и ISO / IEC 8859 ; их репертуар символов почти в каждом случае является подмножеством набора символов Unicode.

XML позволяет использовать любую кодировку, определенную в Unicode, и любые другие кодировки, символы которых также присутствуют в Unicode. XML также предоставляет механизм, с помощью которого процессор XML может надежно, без каких-либо предварительных знаний, определять, какая кодировка используется. [13] Кодировки, отличные от UTF-8 и UTF-16, не обязательно распознаются каждым анализатором XML.

Побег [ править ]

XML предоставляет средства экранирования для включения символов, которые проблематично включить напрямую. Например:

  • Символы «<» и «&» являются ключевыми маркерами синтаксиса и никогда не могут появляться в содержимом за пределами раздела CDATA . Разрешено, но не рекомендуется использовать "<" в значениях сущности XML. [14]
  • Некоторые кодировки символов поддерживают только подмножество Unicode. Например, допустимо кодировать XML-документ в ASCII, но в ASCII отсутствуют кодовые точки для символов Юникода, таких как «é».
  • Возможно, не удастся набрать символ на машине автора.
  • Некоторые символы имеют глифы, которые нельзя визуально отличить от других символов, например неразрывный пробел ( &#xa0;) "" и пробел ( &#x20;) "", а также заглавную кириллическую букву A ( &#x410;) "А" и заглавную латинскую букву A ( &#x41;) «А».

Есть пять предопределенных сущностей :

  • &lt; представляет собой "<";
  • &gt; представляет ">";
  • &amp; представляет "&";
  • &apos;представляет собой " ' ";
  • &quot;представляет " " ".

Все разрешенные символы Unicode могут быть представлены ссылкой на числовые символы . Рассмотрим китайский символ «中», числовой код которого в Юникоде - шестнадцатеричный 4E2D или десятичный 20 013. Пользователь, чья клавиатура не предлагает метода для ввода этого символа, все равно может вставить его в XML-документ, закодированный как &#20013;или &#x4e2d;. Точно так же строка «I <3 Jörg» может быть закодирована для включения в XML-документ как I &lt;3 J&#xF6;rg.

&#0;однако не разрешено, поскольку нулевой символ является одним из управляющих символов, исключенных из XML, даже при использовании ссылки на числовой символ. [15] Для представления таких символов необходим альтернативный механизм кодирования, такой как Base64 .

Комментарии [ редактировать ]

Комментарии могут появляться в любом месте документа за пределами другой разметки. Комментарии не могут появляться перед объявлением XML. Комментарии начинаются <!--и заканчиваются -->. Для совместимости с SGML строка «-» (двойной дефис) не допускается внутри комментариев; [16] это означает, что комментарии не могут быть вложенными. Амперсанд не имеет особого значения в комментариях, поэтому ссылки на сущности и символы не распознаются как таковые, и нет способа представить символы вне набора символов кодировки документа.

Пример правильного комментария:<!--no need to escape <code> & such in comments-->

Международное использование [ править ]

XML 1.0 (пятое издание) и XML 1.1 поддерживают прямое использование практически любого символа Unicode в именах элементов, атрибутах, комментариях, символьных данных и инструкциях обработки (кроме тех, которые имеют особое символическое значение в самом XML, например, меньшее -чем знак "<"). Ниже представлен правильно сформированный XML-документ, включающий китайские , армянские и кириллические символы:

<? xml version = "1.0" encoding = "UTF-8"?> < 俄语 լեզու = "ռուսերեն" > данные </ 俄语>

Синтаксическая корректность и обработка ошибок [ править ]

Спецификация XML определяет XML-документ как правильно сформированный текст, что означает, что он удовлетворяет списку синтаксических правил, предоставленных в спецификации. Вот некоторые ключевые моменты из довольно длинного списка:

  • Документ содержит только правильно закодированные допустимые символы Unicode.
  • Ни один из специальных синтаксических символов, таких как <и, не &появляется, кроме как при выполнении своих ролей разметки и разметки.
  • Начальный тег, конечный тег и тег пустого элемента, которые разделяют элементы, правильно вложены, ни один из них не пропущен и не перекрывается.
  • Имена тегов чувствительны к регистру; начальный и конечный теги должны точно совпадать.
  • Имена тегов не могут содержать никаких символов! "# $% & '() * +, /; <=>? @ [\] ^` {|} ~, Ни пробела, и не могут начинаться с "-", «.» или числовая цифра.
  • Один корневой элемент содержит все остальные элементы.

Определение XML-документа исключает тексты, содержащие нарушения правил корректности; они просто не XML. Обработчик XML, обнаруживший такое нарушение, должен сообщить о таких ошибках и прекратить нормальную обработку. Эта политика, иногда называемая « драконовской обработкой ошибок», заметно контрастирует с поведением программ, обрабатывающих HTML , которые предназначены для получения разумного результата даже при наличии серьезных ошибок разметки. [17] Политика XML в этой области подвергалась критике как нарушение закона Постела («Будьте консервативны в том, что вы отправляете; будьте либеральны в том, что вы принимаете»). [18]

Спецификация XML определяет действительный XML-документ как правильно сформированный XML-документ, который также соответствует правилам определения типа документа (DTD). [19] [20]

Схемы и проверка [ править ]

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, где бы они ни находились упоминаются, как экранирование символов.

Технология DTD по-прежнему используется во многих приложениях из-за ее повсеместного распространения.

Схема [ править ]

Более новый язык схем, описанный консорциумом W3C как преемник DTD, - это схема XML , часто называемая инициализмом для экземпляров схемы XML, XSD (определение схемы XML). XSD гораздо более мощные, чем DTD, в описании языков XML. Они используют богатую систему типов данных и позволяют устанавливать более подробные ограничения на логическую структуру XML-документа. XSD также используют формат на основе XML, что позволяет использовать обычные инструменты XML для их обработки.

xs: элемент схемы, определяющий схему:

<? xml version = "1.0" encoding = "ISO-8859-1"?> <xs: schema  xmlns: xs = "http://www.w3.org/2001/XMLSchema" > </ xs: schema>

RELAX NG [ править ]

RELAX NG (Regular Язык XML следующего поколения) был первоначально определено OASIS и теперь является стандартным (Часть 2: Регуляр-грамматику на основе проверки по стандарту ISO / IEC 19757 - DSDL ). Схемы RELAX NG могут быть написаны либо в синтаксисе на основе XML, либо в более компактном синтаксисе, отличном от XML; два синтаксиса изоморфны, и инструмент преобразования Джеймса Кларка - Транг - может выполнять преобразование между ними без потери информации. RELAX NG имеет более простую структуру определения и проверки, чем XML Schema, что упрощает использование и реализацию. Он также может использовать плагины фреймворка типов данных.; например, автор схемы RELAX NG может потребовать, чтобы значения в документе XML соответствовали определениям в типах данных схемы XML.

Schematron [ править ]

Schematron - это язык для утверждений о наличии или отсутствии шаблонов в XML-документе. Обычно он использует выражения XPath . Schematron теперь является стандартным (Часть 3: На основе правил проверки по стандарту ISO / IEC 19757 - DSDL ).

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 позволяют одному и тому же документу содержать элементы и атрибуты XML, взятые из разных словарей, без каких-либо конфликтов именования . Хотя пространства имен XML не являются частью самой спецификации XML, практически все программное обеспечение XML также поддерживает пространства имен XML.
  • XML Base определяет xml:baseатрибут, который может использоваться для установки базы для разрешения относительных ссылок URI в рамках одного элемента XML.
  • Информационный набор XML или XML Infoset - это абстрактная модель данных для документов XML с точки зрения информационных элементов . Информационный набор обычно используется в спецификациях языков XML для удобства описания ограничений на конструкции XML, допускаемые этими языками.
  • XSL (Extensible Stylesheet Language) - это семейство языков, используемых для преобразования и визуализации XML-документов, разделенных на три части:
  • XSLT (преобразования XSL), язык XML для преобразования документов XML в другие документы XML или другие форматы, такие как HTML, простой текст или XSL-FO. XSLT очень тесно связан с XPath, который он использует для адресации компонентов входного XML-документа, в основном элементов и атрибутов.
  • XSL-FO (объекты форматирования XSL), язык XML для визуализации XML-документов, часто используемый для создания PDF-файлов.
  • XPath (XML Path Language), не являющийся языком XML для адресации компонентов (элементов, атрибутов и т. Д.) XML-документа. XPath широко используется в других спецификациях core-XML и в библиотеках программирования для доступа к данным в кодировке XML.
  • XQuery (XML Query) - это язык запросов XML, основанный на XPath и XML Schema. Он предоставляет методы для доступа, управления и возврата XML и в основном задуман как язык запросов для баз данных XML .
  • Подпись XML определяет синтаксис и правила обработки для создания цифровых подписей для содержимого XML.
  • XML Encryption определяет синтаксис и правила обработки для шифрования содержимого XML.
  • XML-модель (Часть 11: Схема Ассоциация по ISO / IEC 19757 - DSDL ) определяет средство связывания любого XML - документа с любым из типов схем , упомянутых выше .

Некоторые другие спецификации, задуманные как часть «ядра XML», не получили широкого распространения, в том числе 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, поскольку он обременяет автора приложения отслеживанием того, какая часть документа обрабатывается. Он лучше подходит для ситуаций, в которых определенные типы информации всегда обрабатываются одинаково, независимо от того, где они встречаются в документе.

Pull parsing [ править ]

Анализ по запросу обрабатывает документ как серию элементов, считываемых последовательно с использованием шаблона проектирования итератора . Это позволяет писать парсеры с рекурсивным спуском, в которых структура кода, выполняющего синтаксический анализ, отражает структуру анализируемого XML, а промежуточные проанализированные результаты могут использоваться и доступны как локальные переменные в функциях, выполняющих синтаксический анализ, или передаваться вниз ( как параметры функции) в функции более низкого уровня или возвращенные (как значения, возвращаемые функцией) в функции более высокого уровня. [21] Примеры извлекающих синтаксических анализаторов включают Data :: Edit :: Xml в Perl , StAX на языке программирования Java , XMLPullParser в Smalltalk , XMLReader вPHP , ElementTree.iterparse в Python , System.Xml.XmlReader в .NET Framework и API обхода DOM (NodeIterator и TreeWalker).

Анализатор извлечения создает итератор, который последовательно обращается к различным элементам, атрибутам и данным в XML-документе. Код, использующий этот итератор, может тестировать текущий элемент (например, чтобы определить, является ли он начальным тегом, конечным тегом или текстом) и проверять его атрибуты (локальное имя, пространство имен, значения атрибутов XML, значение текста и т. д.), а также может перемещать итератор к следующему элементу. Таким образом, код может извлекать информацию из документа по мере его прохождения. Подход с рекурсивным спуском имеет тенденцию сохранять данные в виде типизированных локальных переменных в коде, выполняющем синтаксический анализ, в то время как SAX, например, обычно требует, чтобы синтаксический анализатор вручную поддерживал промежуточные данные в стеке элементов, которые являются родительскими элементами элемента. разбирается. Код анализа методом извлечения может быть более простым для понимания и обслуживания, чем код синтаксического анализа SAX.

Объектная модель документа [ править ]

Объектная модель документа (DOM) - это API, который позволяет перемещаться по всему документу, как если бы это было дерево узловых объектов, представляющих содержимое документа. Документ DOM может быть создан парсером или может быть создан вручную пользователями (с ограничениями). Типы данных в узлах DOM абстрактны; реализации предоставляют свои собственные привязки для конкретных языков программирования . Реализации DOM, как правило, интенсивно используют память , поскольку обычно требуют, чтобы весь документ был загружен в память и построен как дерево объектов, прежде чем будет разрешен доступ.

Связывание данных [ править ]

Привязка данных XML - это привязка документов XML к иерархии настраиваемых и строго типизированных объектов, в отличие от общих объектов, созданных анализатором DOM. Такой подход упрощает разработку кода и во многих случаях позволяет выявлять проблемы во время компиляции, а не во время выполнения. Он подходит для приложений, в которых структура документа известна и зафиксирована на момент написания приложения. Примеры систем связывания данных включают архитектуру Java для связывания XML (JAXB), сериализацию XML в .NET Framework . [22] и сериализация XML в gSOAP .

XML как тип данных [ править ]

XML появился как первоклассный тип данных в других языках. Расширение ECMAScript для XML (E4X) для языка ECMAScript / JavaScript явно определяет два конкретных объекта (XML и XMLList) для JavaScript, которые поддерживают узлы документов XML и списки узлов XML как отдельные объекты и используют точечную нотацию, определяющую отношения родитель-потомок. . [23] E4X поддерживается браузерами Mozilla 2.5+ (хотя сейчас не рекомендуется) и Adobe Actionscript , но не получил более широкого распространения. Подобные обозначения используются в реализации Microsoft LINQ для Microsoft .NET 3.5 и выше, а также в Scala.(который использует виртуальную машину Java). Приложение xmlsh с открытым исходным кодом, которое предоставляет Linux-подобную оболочку со специальными функциями для работы с XML, аналогичным образом обрабатывает XML как тип данных, используя нотацию <[]>. [24] Структура описания ресурсов определяет тип данных rdf:XMLLiteralдля хранения канонического XML в оболочке . [25] Facebook разработал расширения для языков PHP и JavaScript, которые добавляют XML к основному синтаксису аналогично E4X, а именно XHP и JSX соответственно.

История [ править ]

XML - это профиль приложения SGML (ISO 8879). [26]

Универсальность SGML для динамического отображения информации была понята первыми издателями цифровых медиа в конце 1980-х, до появления Интернета. [27] [28] К середине 1990-х некоторые практикующие SGML приобрели опыт работы с тогда еще новой World Wide Web и полагали, что SGML предлагает решения некоторых проблем, с которыми, вероятно, столкнется Интернет по мере своего роста. Дэн Коннолли добавил SGML в список деятельности W3C, когда присоединился к команде в 1995 году; Работа началась в середине 1996 года, когда инженер Sun Microsystems Джон Босак разработал устав и нанял сотрудников. Босак имел хорошие связи в небольшом сообществе людей, имевших опыт работы как в SGML, так и в Интернете. [29]

XML был составлен рабочей группой из одиннадцати членов [30] при поддержке (примерно) 150 участников группы интересов. Технические дебаты проходили в списке рассылки Группы интересов, и вопросы решались консенсусом или, если это не удалось, большинством голосов Рабочей группы. Отчет о проектных решениях и их обоснованиях был составлен Майклом Сперберг-Маккуином 4 декабря 1997 года. [31] Джеймс Кларк выполнял функции технического руководителя рабочей группы, особенно внося свой вклад в создание пустого элемента.<empty />синтаксис и имя «XML». Другие названия, которые были предложены на рассмотрение, включали «MAGMA» (минимальная архитектура для приложений обобщенной разметки), «SLIM» (структурированный язык для разметки в Интернете) и «MGML» (минимальный обобщенный язык разметки). Соредакторами спецификации изначально были Тим Брей и Майкл Сперберг-Маккуин . В середине проекта Брей согласился на консультацию с Netscape , что вызвало бурные протесты со стороны Microsoft. Брея временно попросили уйти с должности редактора. Это привело к острым спорам в Рабочей группе, которые в конечном итоге разрешились назначением Жана Паоли из Microsoft третьим соредактором.

Рабочая группа XML никогда не встречалась лицом к лицу; дизайн был выполнен с использованием комбинации электронной почты и еженедельных телеконференций. Основные проектные решения были приняты за короткий период интенсивной работы в период с августа по ноябрь 1996 г. [32], когда был опубликован первый рабочий проект спецификации XML. [33] Дальнейшая разработка продолжалась до 1997 года, и 10 февраля 1998 года XML 1.0 стал Рекомендацией W3C .

Источники [ править ]

XML - это профиль SGML стандарта ISO, и большая часть XML исходит из SGML без изменений. Из SGML приходит разделение логических и физических структур (элементов и сущностей), доступность проверки на основе грамматики (DTD), разделение данных и метаданных (элементы и атрибуты), смешанный контент, разделение обработки и представления ( обработка инструкции ) и синтаксис угловых скобок по умолчанию. Объявление SGML было удалено; таким образом, XML имеет фиксированный набор разделителей и принимает Unicode в качестве набора символов документа .

Другими источниками технологии для XML были TEI (Text Encoding Initiative), который определил профиль SGML для использования в качестве «синтаксиса передачи»; и HTML , в котором элементы были синхронизированы со своими ресурсами, наборы символов документа были отделены от кодировки ресурсов, xml:langатрибут был изобретен и (например, HTTP) метаданные сопровождали ресурс, а не были необходимы при объявлении ссылки. Основой правил именования XML 1.0 стал проект ERCS (Extended Reference Concrete Syntax) проекта SPREAD (Проект стандартизации в отношении документов Восточной Азии) связанной с ISO группой экспертов по обработке документов Китая / Японии / Кореи; SPREAD также представил ссылки на шестнадцатеричные числовые символы и концепцию ссылок, чтобы сделать доступными все символы Unicode. Для лучшей поддержки ERCS, XML и HTML стандарт SGML IS 8879 был пересмотрен в 1996 и 1998 годах с помощью WebSGML Adaptations. Заголовок XML последовал за заголовком ISO HyTime .

Новые идеи для XML, разработанные в ходе обсуждения, включали алгоритм обнаружения кодирования и заголовок кодирования, цель инструкции обработки, атрибут xml: space и новый закрывающий разделитель для тегов пустых элементов. Понятие корректности в противоположность действительности (что позволяет выполнять синтаксический анализ без схемы) было сначала формализовано в XML, хотя оно было успешно реализовано в программном обеспечении Dynatext для технологии электронных книг; [34] программное обеспечение из проекта New Oxford English Dictionary при Университете Ватерлоо; текстовый процессор RISP LISP SGML в Uniscope, Токио; гипертекстовая система IADS армии США; Наставник Графический контекст; Издательская система Interleaf и Xerox.

Версии [ править ]

Есть две текущие версии XML:

XML 1.0 [ править ]

Первый ( XML 1.0 ) был первоначально определен в 1998 году. С тех пор он претерпел незначительные изменения, без присвоения нового номера версии, и в настоящее время находится в пятом издании, опубликованном 26 ноября 2008 года. Он широко внедрен и все еще рекомендуется для общего пользования.

XML 1.1 [ править ]

Второй ( XML 1.1 ) был первоначально опубликован 4 февраля 2004 г., в тот же день, что и Третье издание XML 1.0 [35], и в настоящее время находится во втором издании, опубликованном 16 августа 2006 г. Он содержит функции (некоторые спорные) которые предназначены для упрощения использования XML в определенных случаях. [36] Основные изменения состоят в том, чтобы разрешить использование символов конца строки, используемых на платформах EBCDIC , а также использование скриптов и символов, отсутствующих в Unicode 3.2. XML 1.1 не очень широко внедрен и рекомендуется для использования только теми, кому нужны его конкретные функции. [37]

Допустимые символы Unicode в XML 1.0 и XML 1.1 [ править ]

Перед выпуском пятой редакции 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 могут содержать символы на балийском ,Cham или финикийские скрипты среди многих других добавлены в Unicode, начиная с Unicode 3.2. [36]

Практически любую кодовую точку Unicode можно использовать в символьных данных и значениях атрибутов документа XML 1.0 или 1.1, даже если символ, соответствующий кодовой точке, не определен в текущей версии Unicode. В символьных данных и значениях атрибутов XML 1.1 позволяет использовать больше управляющих символов, чем XML 1.0, но для «надежности» большинство управляющих символов, представленных в XML 1.1, должны быть выражены как числовые ссылки на символы (и от # x7F до # x9F , которые были разрешены в XML 1.0, в XML 1.1 даже требуется выражать в виде ссылок на числовые символы [38] ). Среди поддерживаемых управляющих символов в XML 1.1 есть два кода разрыва строки, которые следует рассматривать как пробелы. Пробельные символы - это единственные управляющие коды, которые можно писать напрямую.

XML 2.0 [ править ]

Обсуждался XML 2.0, хотя ни одна организация не объявила о планах работы над таким проектом. XML-SW (SW для skunkworks ), написанный одним из первых разработчиков XML, [39] содержит некоторые предложения о том, как может выглядеть XML 2.0: исключение DTD из синтаксиса, интеграция пространств имен , XML Base и XML Information Set. в базовый стандарт.

Двоичный XML [ править ]

Консорциум World Wide Web также имеет рабочую группу по двоичной характеристике XML, которая занимается предварительным исследованием вариантов использования и свойств двоичного кодирования информационного набора XML. Рабочая группа не уполномочена производить какие-либо официальные стандарты. Поскольку XML по определению основан на тексте, ITU-T и ISO используют название Fast Infoset для своего собственного двоичного информационного набора, чтобы избежать путаницы (см. Рек. ITU-T X.891 и ISO / IEC 24824-1).

Критика [ править ]

XML и его расширения регулярно подвергались критике за многословие, сложность и избыточность. [40] Сопоставление базовой древовидной модели XML с системами типов языков программирования или баз данных может быть трудным, особенно когда XML используется для обмена высокоструктурированными данными между приложениями, что не было его основной целью разработки. Однако системы привязки данных XML позволяют приложениям получать доступ к данным XML непосредственно из объектов, представляющих структуру данных на используемом языке программирования, что обеспечивает безопасность типов , вместо использования DOM или SAX.для извлечения данных из прямого представления самого XML. Это достигается путем автоматического создания сопоставления между элементами XSD схемы XML документа и членами класса, которые должны быть представлены в памяти. Другие критические замечания пытаются опровергнуть утверждение, что XML является языком с самоописанием [41] (хотя сама спецификация XML не делает такого утверждения). JSON , YAML и S-выражения часто предлагаются в качестве более простых альтернатив (см. Сравнение форматов сериализации данных ) [42]которые сосредоточены на представлении сильно структурированных данных, а не документов, которые могут содержать как сильно структурированный, так и относительно неструктурированный контент. Однако спецификации стандартизированной схемы XML W3C предлагают более широкий диапазон структурированных типов данных XSD по сравнению с более простыми форматами сериализации и предлагают модульность и повторное использование через пространства имен XML .

См. Также [ править ]

  • Список языков разметки XML
  • Список схем XML
  • Расширяемое программирование
  • Сравнение механизмов верстки (XML)
  • Сравнение форматов сериализации данных
  • Двоичный XML
  • EBML
  • WBXML
  • XML протокол

Заметки [ править ]

  1. ^ т.е. встроенные символы кавычек могут стать проблемой
  2. ^ Типичным примером этого являютсяимена классов или идентификаторов CSS .

Ссылки [ править ]

  1. ^ "Типы носителей XML, RFC 7303" . Инженерная группа Интернета. Июль 2014 г.
  2. ^ «Спецификация XML 1.0» . Консорциум World Wide Web . Проверено 22 августа 2010 года .
  3. ^ «Расширяемый язык разметки (XML) 1.0» . www.w3.org .
  4. ^ «Временная шкала стандартов XML и семантической сети W3C» (PDF) . Dblab.ntua.gr . Дата обращения 14 августа 2016 .
  5. ^ "ЛИЦЕНЗИЯ НА ДОКУМЕНТ W3C" . W3.org . Проверено 24 июля 2020 .
  6. ^ a b «Происхождение и цели XML 1.0» . W3.org . Дата обращения 14 августа 2016 .
  7. ^ Fennell Филипп (июнь 2013). «Крайности XML» . XML London 2013 : 80–86. DOI : 10,14337 / XMLLondon13.Fennell01 . ISBN 978-0-9926471-0-0.
  8. ^ «Приложения и инициативы XML» . Xml.coverages.org . Проверено 16 ноября 2017 года .
  9. ^ "appleexaminer.com:" файлы PLIST " " . Экзаменатор Apple. Архивировано из оригинала на 2013-03-16 . Проверено 16 ноября 2017 года .
  10. ^ «Расширяемый язык разметки (XML) 1.0 (пятое издание)» . Консорциум World Wide Web. 2008-11-26 . Проверено 23 ноября 2012 года .
  11. ^ «Расширяемый язык разметки (XML) 1.1 (второе издание)» . Консорциум World Wide Web . Проверено 22 августа 2010 года .
  12. ^ «Символы против байтов» . Tbray.org . Проверено 16 ноября 2017 года .
  13. ^ «Автоопределение кодировки символов» . W3.org . Проверено 16 ноября 2017 года .
  14. ^ «Расширяемый язык разметки (XML) 1.0 (пятое издание)» . W3.org . Проверено 16 ноября 2017 года .
  15. ^ «W3C I18N FAQ: HTML, XHTML, XML и контрольные коды» . W3.org . Проверено 16 ноября 2017 года .
  16. ^ «Расширяемый язык разметки (XML)» . W3.org . Проверено 16 ноября 2017 года . Раздел «Комментарии»
  17. ^ Пилигрим, Марк (2004). «История драконовской обработки ошибок в XML» . Архивировано из оригинала на 2011-07-26 . Проверено 18 июля 2013 года .
  18. ^ "Нет никаких исключений из закона Постела [погрузиться в знак]" . DiveIntoMark.org . Архивировано из оригинала на 2011-05-14 . Проверено 22 апреля 2013 года .
  19. ^ «Блокнот XML» . Xmlnotepad / codeplex.com . Проверено 16 ноября 2017 года .
  20. ^ «Блокнот XML 2007» . Microsoft.com . Проверено 16 ноября 2017 года .
  21. ^ DuCharme, Боб. "Толкни, потяни, дальше!" . Xml.com . Проверено 16 ноября 2017 года .
  22. ^ «Сериализация XML в .NET Framework» . Msdn.microsoft.com . Проверено 31 июля 2009 года .
  23. ^ «Обработка XML с E4X» . Центр разработчиков Mozilla . Mozilla Foundation.
  24. ^ «Оболочка XML: основной синтаксис» . Xmlsh.org . 2010-05-13 . Проверено 22 августа 2010 года .
  25. ^ «Структура описания ресурсов (RDF): концепции и абстрактный синтаксис» . W3.org . Проверено 22 августа 2010 года .
  26. ^ «ИСО / МЭК 19757-3». ИСО / МЭК . 1 июня 2006 г .: vi. Цитировать журнал требует |journal=( помощь )
  27. Брей, Тим (февраль 2005 г.). «Разговор с Тимом Брэем: в поисках способов укротить огромные запасы информации в мире» . "Очередь сайта" Ассоциации вычислительной техники . Проверено 16 апреля 2006 года .
  28. ^ Ambron, Sueann & Hooper, Кристина, ред. (1988). «Издатели, мультимедиа и интерактивность». Интерактивное мультимедиа . Cobb Group. ISBN 1-55615-124-1.
  29. ^ Элиот Кимбер (2006). «XML - это 10» . Drmacros-xml-rants.blogspot.com . Проверено 16 ноября 2017 года .
  30. Изначально рабочая группа называлась «Редакционная коллегия». Первоначальные члены и семь, которые были добавлены до того, как было завершено первое издание, перечислены в конце первого издания Рекомендации XML по адресу http://www.w3.org/TR/1998/REC-xml-19980210 .
  31. ^ «Отчеты из W3C SGML ERB в SGML WG И из W3C XML ERB в XML SIG» . W3.org . Проверено 31 июля 2009 года .
  32. ^ "Технологическая сеть Oracle для разработчиков Java - Технологическая сеть Oracle - Oracle" . Java.sun.com . Проверено 16 ноября 2017 года .
  33. ^ «Расширяемый язык разметки (XML)» . W3.org. 1996-11-14 . Проверено 31 июля 2009 года .
  34. Джон Босак; Sun Microsystems (07 декабря 2006 г.). «Заключительный доклад, XML 2006» . 2006.xmlconference.org. Архивировано из оригинала на 2007-07-11 . Проверено 31 июля 2009 года .
  35. ^ «Расширяемый язык разметки (XML) 1.0 (третье издание)» . W3.org . Проверено 22 августа 2010 года .
  36. ^ a b «Расширяемый язык разметки (XML) 1.1 (второе издание), обоснование и список изменений для XML 1.1» . W3.org . Проверено 20 января 2012 года .
  37. ^ Гарольд, Эллиотт Расти (2004). Эффективный XML . Эддисон-Уэсли. С.  10–19 . ISBN 0-321-15040-6.
  38. ^ «Расширяемый язык разметки (XML) 1.1 (второе издание)» . W3.org . Проверено 22 августа 2010 года .
  39. ^ Тим Брей: Расширяемый язык разметки, SW (XML-SW) . 2002-02-10
  40. ^ «XML: налог на угловые скобки» . Codinghorror.com . Проверено 16 ноября 2017 года .
  41. ^ «Миф о самоописывающем XML» (PDF) . Workflow.HealthBase.info . Сентябрь 2003 . Проверено 16 ноября 2017 года .
  42. ^ "Какие альтернативы синтаксису XML вы знаете?" . StackOverflow.com . Проверено 16 ноября 2017 года .

Дальнейшее чтение [ править ]

  • Приложение A к ISO 8879: 1986 (SGML)
  • Лоуренс А. Каннингем (2005). «Язык, сделки и стандарты: будущее XML-контрактов». Обзор права Вашингтонского университета . SSRN  900616 .
  • Босак, Джон; Брей, Тим (май 1999). «XML и Интернет второго поколения» . Scientific American . 280 (5): 89. Bibcode : 1999SciAm.280e..89B . DOI : 10.1038 / Scientificamerican0599-89 . Архивировано из оригинала на 1 октября 2009 года.
  • Келли, Шон (6 февраля 2006 г.). «Ошибки с XML» . Developer.com . Проверено 26 октября 2010 года .
  • Сен-Лоран, Саймон (12 февраля 2003 г.). «Пять лет спустя, XML». Блог O'Reilly XML . O'Reilly Media . Проверено 26 октября 2010 года .
  • «W3C XML - десять!» . Консорциум World Wide Web . 12 февраля 2008 . Проверено 26 октября 2010 года .
  • «Введение в XML» (PDF) . Слайды курса . Пьер Женев . Октябрь 2012. Архивировано 16 октября 2015 года.CS1 maint: bot: исходный статус URL неизвестен ( ссылка )

Внешние ссылки [ править ]

  • Домашняя страница W3C XML
  • Спецификация XML 1.0
  • Ретроспектива по конкретному синтаксису с расширенными ссылками , Рик Джеллифф
  • XML, Java и будущее Интернета (1997), Джон Босак
  • http://validator.w3.org/ Официальная служба проверки разметки [W3C]
  • XML FAQ изначально для XML SIG W3C от Питера Флинна