XML (МФА: [ˌeks(.)emˈel], аббр. от англ. eXtensible Markup Language) — «расширяемый язык разметки». Рекомендован Консорциумом Всемирной паутины (W3C). Спецификация XML описывает XML-документы и частично описывает поведение XML-процессоров (программ, читающих XML-документы и обеспечивающих доступ к их содержимому). XML разрабатывался как язык с простым формальным синтаксисом, удобный для создания и обработки документов как программами, так и человеком, с акцентом на использование в Интернете. Язык называется расширяемым, поскольку он не фиксирует разметку, используемую в документах: разработчик волен создать разметку в соответствии с потребностями к конкретной области, будучи ограниченным лишь синтаксическими правилами языка. Расширение XML — это конкретная грамматика, созданная на базе XML и представленная словарём тегов и их атрибутов, а также набором правил, определяющих, какие атрибуты и элементы могут входить в состав других элементов. Сочетание простого формального синтаксиса, удобства для человека, расширяемости, а также базирование на кодировках Юникод для представления содержания документов привело к широкому использованию как, собственно, XML, так и множества производных специализированных языков на базе XML в самых разнообразных программных средствах.
XML (англ. eXtensible Markup Language) расширяемый язык разметки | |
---|---|
Расширение | .xml |
MIME-тип | application/xml, text/xml (deprecated in an expired draft) |
Разработчик | Консорциум Всемирной паутины |
Опубликован | 1998 |
Тип формата | язык разметки |
Расширен из | SGML |
Развит в | XHTML, RSS, Atom, KML, SVG и множество других форматов |
Стандарт(ы) | 1.0 (Fifth Edition), 26 ноября 2008 года 1.1 (Second Edition), 16 августа 2006 года |
Открытый формат? | да |
Сайт | w3.org/XML (англ.) |
Медиафайлы на Викискладе |
XML является подмножеством SGML.
Файлы в формате XML используется при проектировании структуры программ, в частности, концептуальных карт и диаграмм связей.
Язык XML
Спецификация XML описывает язык и ряд вопросов, касающихся кодировки и обработки документов. Материал этой секции представляет собой сокращённое изложение описания языка в Спецификации XML, адаптированное для настоящей статьи.
Нормативным считается английский вариант документа, поэтому основные термины приводятся с их английскими оригиналами.
Перевод основных терминов в основном следует доступному в интернете переводу Спецификации на русский язык, исключение составляют термины tag и declaration. Для термина tag здесь используется перевод тег. Для термина declaration отдано предпочтение распространённому переводу объявление (против также распространённой кальки декларация).
В литературе и интернете могут встречаться и иные переводы основных терминов.
Физическая и логическая структуры документа
С физической точки зрения документ состоит из сущностей (англ. entities), из которых каждая может ссылаться на другую сущность. Единственный корневой элемент — документная сущность. Содержание сущностей — символы.
С логической точки зрения документ состоит из комментариев (англ. comments), объявлений (англ. declarations), элементов (англ. elements), ссылок на сущности (англ. character references) и инструкций обработки (англ. processing instructions). Всё это в документе структуризуется разметкой (англ. markup).
Физическая структура
Сущность — мельчайшая часть в документе. Все сущности что-нибудь содержат, и у всех них есть имя (существуют исключения, напр. документная сущность). Проще говоря, термин «сущность» описывает «сущую вещь», «что-то».
Документ состоит из сущностей, содержание которых — символы. Все символы разделены на два типа: символы данных (англ. character data) и символы разметки. К разметке относятся:
- теги (англ. tags) <- обозначают границы элементов
- объявления и инструкции обработки, включая их атрибуты (англ. attributes)
- ссылки на сущности
- комментарии
- а также последовательности символов, обрамляющие секции «CDATA»
Часть документа, не принадлежащая разметке, составляет символьные данные документа.
Логическая структура
Все составляющие части документа обобщаются в пролог и корневой элемент. Корневой элемент — обязательная часть документа, составляющая всю его суть (пролог, вообще говоря, может отсутствовать). Корневой элемент может включать (а может не включать) вложенные в него элементы, символьные данные и комментарии. Вложенные в корневой элемент элементы, в свою очередь, могут включать вложенные в них элементы, символьные данные и комментарии, и так далее. Пролог может включать объявления, инструкции обработки, комментарии. Его следует начинать с объявления XML, хотя в определённой ситуации допускается отсутствие этого объявления.
Элементы документа должны быть правильно вложены: любой элемент, начинающийся внутри другого элемента (то есть любой элемент документа, кроме корневого), должен заканчиваться внутри элемента, в котором он начался. Символьные данные могут встречаться внутри элементов как непосредственно так и в специальных секциях «CDATA». Объявления, инструкции обработки и элементы могут иметь связанные с ними атрибуты. Атрибуты используются для связывания с логической единицей текста пар имя-значение.
Символы разметки
Разметка всегда начинается символом <
и заканчивается символом >
.
Наряду с символами <
и >
, специальную роль для разметки играет также символ &
. Угловые скобки обозначают границы элементов, инструкций обработки и некоторых других последовательностей. Амперсанд позволяет выполнить замену текста при помощи сущностей (англ. entities).
Решение проблемы неоднозначности разметки
Употребление разметочных символов в символьных данных затрудняет распознавание конструкций разметки и может создать проблему неоднозначности структуры. В XML эта проблема решается следующим образом: <, > и & не могут присутствовать в символьных данных и в значениях атрибутов в их непосредственном виде, для их представления в этих случаях зарезервированы специальные сущности:
Символ | Замена |
---|---|
< | < |
> | > |
& | & |
Кроме того, для употребления апострофов и кавычек внутри значений атрибутов используются следующие сущности:
' | ' |
" | " |
Правило замены разметочных символов на их обозначающие сущности не распространяется на символьные данные в секциях «CDATA», зато выполняется во всех остальных местах документа.
Числовые ссылки на символы
Числовые ссылки на символы указывают кодовую позицию символа в наборе символов документа. Числовые ссылки на символы могут принимать две формы:
- синтаксис «&#D;», где D — десятичное число;
- синтаксис «&#xH;» или «&#XH;», где H — шестнадцатеричное число (шестнадцатеричные числа в числовых символьных ссылках не чувствительны к регистру).
Примеры числовых ссылок на символы:
- å — (в десятичной форме) представляет букву «а» с маленьким кружком над ней (используется, например, в норвежском языке);
- å — (в шестнадцатеричном) представляет собой тот же символ;
- å — (в шестнадцатеричном) также представляет тот же символ;
- И — (в десятичной форме) представляет заглавную букву кириллицы «I»;
- 水 — (в шестнадцатеричном) представляет китайский иероглиф «вода»;
Имена
В языке XML все имена должны начинаться с буквы, символа подчёркивания (_) и продолжаться только допустимыми для имён символами, а именно: они могут содержать только буквы, входящие в секцию букв кодировки Unicode, арабские цифры, дефисы, знаки подчёркивания, точки. Так как буквы не ограничены исключительно символами ASCII, то в именах можно использовать буквы из любого языка.
Пролог
Объявление XML
Объявление XML указывает версию языка, на которой написан документ. Поскольку интерпретация содержимого документа зависит от версии языка, то Спецификация предписывает начинать документ с объявления XML. В первой (1.0) версии языка использование объявления не было обязательным, в последующих версиях оно обязательно. Таким образом, версия языка определяется из объявления, и если объявление отсутствует, то принимается версия 1.0.
Кроме версии XML объявление может также содержать информацию о кодировке документа и «оставаться ли документу со своим собственным DTD, или с подключённым».
Пример:
<?xml version="1.1" encoding="UTF-8" ?>
или:
<?xml version="1.0" encoding="windows-1251"?>
Во всех этих примерах отсутствовал атрибут «standalone», который как раз и определяет, подключить ли документу описания разметки извне. По умолчанию он равен «no»:
<?xml version="1.0" encoding="windows-1251" standalone="no"?>
если XML-документ ссылается на другие DTD-файлы, которые описывают, что документ может содержать, вы должны указать standalone="no"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
если XML-документ не ссылается на другие файлы и будет пользоваться своим DTD, вы должны указать standalone="yes"
Объявление типа документа
Для объявления типа документа существует специальная инструкция !DOCTYPE
. Она позволяет задать при помощи языка DTD, какие в документ входят элементы, каковы их атрибуты, какие сущности могут использоваться и кое-что ещё.
Например, вот корректный документ:
<?xml version="1.0"?> <greeting>Hello, world!</greeting>
В нём есть корневой элемент <greeting>Hello, world!</greeting>
, и с логической точки зрения документ существует. Однако он недействителен (англ. not valid).
При помощи Объявления типа документа (DTD) возможно описывать его содержание и логическую структуру, а также связывать с определённым элементом пару «имя — значение». Вот как выглядит пролог в записи Бэкуса — Наура:
prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') Eq ::= S? '=' S? VersionNum ::= '1.' [0-9]+ Misc ::= Comment | PI | S doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' DeclSep ::= PEReference | S intSubset ::= (markupdecl | DeclSep)* markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment extSubset ::= TextDecl? extSubsetDecl extSubsetDecl ::= ( markupdecl | conditionalSect | DeclSep)*
После XML-объявления могут следовать комментарии, инструкции обработки или же пустые пространства, но затем идёт Объявления типа документа, где «Name» — имя корневого тега, «ExternalID» — внешний идентификатор, а «intSubset» — объявление разметки или же ссылка на сущность. Как гласит спецификация, если внешний идентификатор объявляется вместе с внутренним объявлением, то последнее идёт перед первым.
Например:
<?xml version="1.0"?> <!DOCTYPE greeting SYSTEM "hello.dtd"> <greeting>Hello, world!</greeting>
Здесь «SYSTEM "hello.dtd"
» — внешний идентификатор: адрес «hello.dtd» позволяет задействовать данные в документе «hello.dtd» как объявления разметки.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE greeting [ <!ELEMENT greeting (#PCDATA)> ]> <greeting>Hello, world!</greeting>
Здесь же разметка была объявлена локально в инструкции !DOCTYPE
.
Инструкция обработки
Инструкции обработки (англ. processing instruction, PI), позволяют размещать в документе инструкции для приложений. В следующем примере показана инструкция обработки xml-stylesheet, передающая xml-stylesheet-приложению (например, браузеру) инструкции в файле my-style.css посредством атрибута href:
<?xml-stylesheet type="text/css" href="my-style.css"?>
Комментарий
Комментарии (англ. comment) не относятся к символьным данным документа. Комментарий начинается последовательностью «<!--» и заканчивается последовательностью «-->», внутри не может встречаться комбинация символов «--». Символ & не используется внутри комментария в качестве разметки.
Пример:
<!-- это комментарий -->
Корневой элемент
Элемент и его разметка
Элемент (англ. element) является понятием логической структуры документа. Каждый документ содержит один или несколько элементов. Границы элементов представлены начальным и конечным тегами. Имя элемента в начальном и конечном тегах элемента должно совпадать. Элемент может быть также представлен тегом пустого элемента, то есть не включающего в себя другие элементы и символьные данные.
Тег (англ. tag) — конструкция разметки, которая содержит имя элемента.
Начальный тег: <element1>
Конечный тег: </element1>
Тег пустого элемента: <empty_element1 />
В элементе атрибуты могут использоваться только в начальном теге и теге пустого элемента.
Пример кулинарного рецепта, размеченного с помощью XML:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE recipe> <recipe name="хлеб" preptime="5min" cooktime="180min"> <title> Простой хлеб </title> <composition> <ingredient amount="3" unit="стакан">Мука</ingredient> <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient> <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient> </composition> <instructions> <step> Смешать все ингредиенты и тщательно замесить. </step> <step> Закрыть тканью и оставить на один час в тёплом помещении. </step> <!-- <step> Почитать вчерашнюю газету. </step> - это сомнительный шаг... --> <step> Замесить ещё раз, положить на противень и поставить в духовку. </step> </instructions> </recipe>
Секция CDATA
Секция CDATA не является логической единицей текста. Секция может встречаться в любом месте документа, где синтаксис позволяет размещать символьные данные. Секция начинается <![CDATA[
и завершается ]]>
. Между этой разметкой находятся символьные данные; символьные данные при этом включают символы < > &
в их непосредственной форме.
Корректный документ
Корректный (англ. well-formed) документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу: правильная структура документа, совпадение имен в начальном и конечном теге элемента и т. п. Документ, который неправильно построен, не может считаться документом XML.
Пространства имён
Пример документа:
<?xml version="1.0" encoding="UTF-8"?> <!-- login screen --> <edsscript> <sequence name="start"> <action cmd="triggeron"> btn* </action> <action cmd="triggeron"> msg_generic </action> <action cmd="disablenbb"> all </action> <action cmd="setscrtext"> @@Sisteme Giriş@@ </action> <action cmd="enablenbb"> forward,mainmenu </action> <action cmd="switchmsgtarget"> LOGIN_DLG </action> <action cmd="sendmsg"> start </action> <action cmd="jump"> step2 </action> </sequence> <sequence name="step2"> <action cmd="waittrigger"> btnforward </action> <action cmd="triggeron"> login* </action> <action cmd="disablenbb"> all </action> <action cmd="sendmsg"> check </action> </sequence> <trigger name="login_succeded"> <condition type="appmsg"> login_succeeded </condition> <sequence> <action cmd="endscript" /> </sequence> </trigger> <trigger name="login_unknownuser"> <condition type="appmsg"> login_unknownuser </condition> <sequence name="login_unknownuser"> <action cmd="disablenbb"> all </action> <action cmd="setscrtext"> @@Hata@@ </action> <action cmd="showhtml"> generic_neg.htm,@@Yanlış kullanıcı ismi@@,@@Lütfen kullanıcı ismini doğru giriniz.@@ </action> <action cmd="enablenbb"> back </action> <action cmd="waittrigger"> btnback </action> <action cmd="jump"> start </action> </sequence> </trigger> <trigger name="login_incorrectpwd"> <condition type="appmsg"> login_incorrectpwd </condition> <sequence name="login_incorrectpwd"> <action cmd="disablenbb"> all </action> <action cmd="setscrtext"> @@Hata@@ </action> <action cmd="showhtml"> generic_neg.htm,@@Hatalı parola@@,@@Lütfen parolanızı doğru giriniz.@@ </action> <action cmd="enablenbb"> back </action> <action cmd="waittrigger"> btnback </action> <action cmd="jump"> start </action> </sequence> </trigger> <!-- generic triggers --> <trigger name="btnback"> <condition type="buttonclick"> back </condition> <sequence name="btnback"> <action cmd="triggeron"> btnback </action> </sequence> </trigger> <trigger name="btnforward"> <condition type="buttonclick"> forward </condition> <sequence name="btnforward"> <action cmd="triggeron"> btnforward </action> </sequence> </trigger> <trigger name="btnmainmenu"> <condition type="buttonclick"> mainmenu </condition> <sequence> <action cmd="jumpscript"> <value label="mainmenuscript" scope="local" /> </action> </sequence> </trigger> <trigger name="btnquitapp"> <condition type="buttonclick"> quitapplication </condition> <sequence name="btnquitapp"> <action cmd="callscript"> quitapp.xml </action> <action cmd="jump"> start </action> </sequence> </trigger> <trigger name="error_generic"> <condition type="appmsg"> error* </condition> <sequence> <action cmd="showhtml"> errdsc_null.htm,@@Hata@@ </action> <action cmd="disablenbb"> all </action> <action cmd="enablenbb"> forward </action> <action cmd="waittrigger"> btnforward </action> <action cmd="endscript" /> </sequence> </trigger> <trigger name="msg_generic"> <condition type="appmsg"> msg_generic </condition> <sequence> <action cmd="showhtml"> generic_msg.htm </action> <action cmd="triggeron"> msg_generic </action> </sequence> </trigger> <!-- An unhandled exception is thrown from the hard code side. --> <trigger name="error_hardcodeside"> <condition type="appmsg"> error_hardcodeside </condition> <sequence> <action cmd="triggeroff"> * </action> <action cmd="triggeron"> btnmainmenu </action> <action cmd="triggeron"> btnquitapp </action> <action cmd="disablenbb"> all </action> <action cmd="enablenbb"> mainmenu </action> <action cmd="showhtml"> errdsc_null.htm,Hata, @@İşlem sırasında bir hata meydana geldi.@@ </action> <action cmd="waittrigger"> btnmainmenu </action> </sequence> </trigger> </edsscript>
Регламентация работы с документами: правила, языки, программные интерфейсы
Этот раздел содержит изложение некоторых положений рекомендаций W3C, касающихся работы с документами. Соответствующие рекомендации могут относиться как к документам XML, так и к более широкому классу документов. Ссылки, как правило, даются на средства работы с документами, рекомендованные W3C.
Кодировка документов
Спецификация требует, чтобы обрабатывающие программы поддерживали по крайней мере две кодировки Юникод: UTF-8 и UTF-16.
XML-процессор и приложение
Спецификация XML определяет понятия XML-процессор и приложение. XML-процессор (парсер) — программа, анализирующая разметку и передающая информацию о структуре документа другой программе — приложению.
Спецификация XML налагает определённые требования на процессор, не касаясь требований к приложению.
Действительный документ. Проверяющие и непроверяющие процессоры
Документ является действительным, если с ним связано определение типа документа и если этот документ отвечает представленным в определении типа документа ограничениям.
XML-процессоры делятся на два класса: проверяющие и непроверяющие.
Проверяющие процессоры проверяют действительность документа и должны сообщать (по выбору пользователя) о нарушении ограничений, сформулированных в определении типа документа.
Непроверяющие процессоры не проверяют действительность документа, но обязанности по предварительной обработке документа, упомянутые выше, остаются за ними.
Описание типов документов: языки схем
Для описания типов документов используются языки схем (англ. schema language). Поскольку XML является подмножеством языка SGML, то он унаследовал разработанный для SGML язык Document Type Definition (DTD). Позднее были разработаны и другие языки схем, наиболее известны из которых XML Schema, RELAX NG.
Преобразование документа XML
Для решения задачи преобразования документа XML в другую схему или другой формат предназначен язык XSLT.
Формат для визуализации документа
Для форматированного документа (документа, подготовленного к визуализации) предназначен формат XSL-FO.
Языки запросов
XPath — синтаксис для адресации содержимого документа, представленного в форме дерева. Выражения XPath используются в языке XQuery. Выражения XPath, вообще говоря, могут использоваться в любом контексте, где уместно использовать формальные ссылки на элементы дерева, в частности, в качестве параметров методов интерфейсов доступа к документу.
XQuery — язык программирования, ориентированный на работу с документами.
Чтение XML: три варианта API
В разделе не хватает (см. ). |
Для чтения XML есть три варианта API.
Событийный API (event-driven API, push-style API) — XML-процессор читает XML; при определённом событии (появлении открывающего или закрывающего тега, текстовой строки, атрибута) вызывается callback-функция.
- + Расходует мало памяти.
- + При обработке огромного XML есть стандартная точка, позволяющая мгновенно остановить обработчик.
- − Крайне сложен для прикладного программиста: приходится держать в памяти информацию, в каком месте документа мы находимся.
- + Библиотека проста в программировании.
- − Только последовательный доступ к XML, это затрудняет разбор перекрёстных ссылок и «почти правильных» XML с перепутанным порядком элементов.
- − API только для чтения, для записи потребуется другой API.
- ± Естественный выбор, когда из огромного XML надо извлечь немного данных.
- ± Естественный выбор, когда XML надо преобразовать в структуру предметной отрасли.
- Примеры библиотек: SAX, Expat
<?xml version="1.0" encoding="UTF-8" ?> <document> <thing name="A">Alpha</thing> <thing name="B">Bravo</thing> </document>
enum class Place { ROOT, DOCUMENT, THING, N } Place parentPlace[static_cast<int>(Place::N)] = { ROOT, ROOT, DOCUMENT }; class MyEvent : public Xml::Event { private: Place place = Place::ROOT; Thing* currThing = nullptr; public: /// @return true — тег нужен; false — пропустить его и всё, что внутри bool onTagOpen(const std::string& aName) override; void onTagClose() override; void onAttr(const std::string& aName, const std::string& aValue) override; void onText(const std::string& aText) override; } bool MyEvent::onTagOpen(const std::string& aName) { switch (place) { case Place::ROOT: if (aName == "document") { place = Place::DOCUMENT; return true; } break; case Place::DOCUMENT: if (aName == "thing") { place = Place::THING; currThing = &things.emplace_back(); return true; } break; } return false; } void MyEvent::onTagClose() { place = parentPlace[place]; } void MyEvent::onAttr(const std::string& aName, const std::string& aValue) { if (place == Place::THING && aName == "name") currThing->name = aValue; } void MyEvent::onText(const std::string& aText) { if (place == Place::THING) currThing->value = aText; } xml::eventDrivenRead("in.xml", MyEvent());
Потоковый API (также pull-style API) — устроен на манер потоков ввода-вывода. Прикладной код запрашивает у процессора части XML, тот умеет только двигаться по XML вперёд, забывая уже пройденные части.
- + Расходует мало памяти.
- + Информация, в каком месте документа мы находимся, неявно задаётся местом в потоке выполнения. Это серьёзно упрощает работу прикладного программиста. На продуманных API объём кода приближается к таковому для DOM.
- − Библиотека сложна в программировании.
- + Позволяет одновременный доступ к двум XML-документам.
- − Только последовательный доступ к XML, это затрудняет разбор перекрёстных ссылок и «почти правильных» XML с перепутанным порядком элементов.
- − API только для чтения, для записи потребуется другой API. (, хоть относится и к потоковым, содержит отдельный API прямой записи.)
- Примеры библиотек:
xml::StreamReader reader("in.xml"); std::string name, value; reader.enterTag("document"); while (reader.getTag("thing") { Thing thing; thing.name = reader.requireStringAttr("name"); reader.enterTag(); thing.value = reader.getText(); reader.leaveTag(); things.emplace_back(std::move(thing)); }
Объектный API (Document Object Model, DOM, «объектная модель документа») — считывает XML и воссоздаёт его в памяти в виде объектной структуры.
- − Расходует много памяти — намного больше, чем сам XML занимает на диске. На расход памяти втрое и более превышает длину XML.
- + Прост для прикладного программиста.
- + Библиотека проста в программировании.
- + Позволяет произвольный доступ к XML. Это, например, упрощает работу с перекрёстными ссылками. Зачастую удаётся распознать «почти верные» XML с перепутанным порядком тегов.
- + Общий API для чтения и записи.
- ± Естественный выбор, когда объектом предметной области является сам XML: в веб-браузере, XML-редакторе, в импортёре к программе-локализатору, который извлекает строки из XML произвольной структуры.
- ± Естественный выбор, когда нужно загрузить XML, слегка переработать и сохранить. Те части, которые трогать не нужно, не требуют никакого кода.
- Примеры библиотек: JDOM, ,
#include <iostream> #include <vector> #include "pugixml.hpp" struct Thing { std::string name, value; }; // Если какая-то сущность pugixml конвертируется в bool как false — выкинуть ошибку! template <class T> inline T need(T&& val, const char* errmsg) { if (!val) throw std::logic_error(errmsg); return std::forward<T>(val); } int main() { std::vector<Thing> things; pugi::xml_document doc; need(doc.load_file("in.xml"), "Cannot load XML!"); auto elDocument = need(doc.root().child("document"), "Need <document>"); for (pugi::xml_node elThing : elDocument.children("thing")) { auto attrName = need(elThing.attribute("name"), "Need <thing>.name!"); things.emplace_back( Thing { attrName.as_string(), elThing.text().as_string() } ); } for (auto &v : things) { std::cout << v.name << "=" << v.value << std::endl; } return 0; }
Бывают и гибридные API: внешние и маловажные части читаются потоковым методом, а внутренние и важные — объектным.
xml::StreamReader reader("in.xml"); std::string name, value; reader.enterTag("document"); while (reader.getTag("thing") { xml::Element* elThing = reader.readEntireSubtree(); things.emplace_back(); Thing& thing = things.back(); thing.name = elThing.requireStringAttr("name"); thing.value = elThing.text(); }
Запись XML: два варианта API
API прямой записи записывает XML тег за тегом, атрибут за атрибутом.
- + Быстр, нет промежуточных объектов.
- − Примитивная библиотека может делать неоптимальный XML (например,
<tag></tag>
вместо<tag />
). Работающая оптимально сложнее в программировании. - − Непригоден для отдельных специфических задач.
- − Если структуры предметной области работают ненадёжно, без специальных мер (записать в память или в другой файл, потом переименовать) можно остаться с «упавшей» программой и потерянным файлом.
- − При ошибке программиста может получиться синтаксически некорректный XML.
- − API только для записи, для чтения потребуется другой API.
- Примеры библиотек: .
xml::Writer wri("out.xml"); wri.openTag("document"); for (auto &v : things) { wri.openTag("thing"); wri.writeAttr("name", v.name); wri.writeText(v.value); wri.closeTag("thing"); } wri.closeTag("document");
Объектный API, он же Document Object Model.
- − Создаёт объектную структуру для XML, что может отнять памяти больше, чем структура предметной отрасли.
- ± Универсален (впрочем, в большинстве задач преимущества над хорошо проработанным API прямой записи нет — в отличие от чтения).
- + Даже если структуры предметной области работают ненадёжно, а программист не предусмотрел никакой «защиты», единственный сценарий, когда файл перезаписывается на неполный — ошибка ввода-вывода (в частности, нехватка места на диске).
- + При правильно написанном API невозможно создать синтаксически некорректный XML.
- + Общий API для записи и чтения.
- Примеры библиотек: те же, что и для чтения XML методом DOM.
#include "pugixml.hpp" struct Thing { std::string name, value; }; Thing things[] { { "A", "Alpha", }, { "B", "Bravo", }, { "C", "Charlie" } }; int main() { pugi::xml_document doc; auto root = doc.append_child("document"); for (auto& thing : things) { auto node = root.append_child("thing"); node.append_attribute("name") = thing.name.c_str(); node.append_child(pugi::node_pcdata).set_value(thing.value.c_str()); } doc.save_file("test.xml"); return 0; }
Инструменты работы с документами: парсеры, средства создания и визуализации, системы баз данных
Реализации парсеров
XML имеет реализации парсеров для всех современных языков программирования.
Веб-браузеры как инструмент визуализации документа
Визуализация без использования стилей CSS
Без использования CSS или XSL XML-документ отображается как простой текст в большинстве веб-браузеров. Некоторые браузеры, такие как Internet Explorer, Mozilla Firefox и Opera (встроенный инструмент Opera Dragonfly) отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Применение стилей CSS
Процесс аналогичен применению CSS к HTML-документу для отображения. Для применения CSS при отображении в браузере, XML-документ должен содержать специальную ссылку на таблицу стилей. Например:
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>
Это отличается от подхода HTML, где используется элемент <link>.
Применение преобразований к формату XSL-FO
Современные браузеры принадлежат к числу программных средств, способных выполнять преобразования XSLT. В браузере такое преобразование выполняется, как правило, для форматирования документа (преобразования документа в формат XSL-FO). Следующая инструкция в прологе документа XML предписывает браузеру выполнить XSLT-преобразование, описанное в файле transform.xsl:
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
Редакторы XML
С документом XML можно работать в обычном текстовом редакторе, однако обычные редакторы не поддерживают структуру документа. Существуют специальные редакторы XML, которые делают работу с документом более удобной и эффективной.
Системы управления базами данных, работающие с данными в формате XML
Система управления базами данных DB2 позволяет хранить данные в формате XML и предоставляет доступ к таким данным с помощью языка XQuery.
Поддержка на аппаратном уровне
XML поддерживается на низком аппаратном, микропрограммном и программном уровнях в современных аппаратных решениях.
Область применения, ограничения, перспективы развития
Эффективность использования XML
XML — язык разметки, другими словами, средство описания документа. Именно в нише документов, текстов, где доля разнотипных символьных данных велика, а доля разметки мала — XML успешен. С другой стороны, обмен данными в открытых системах не сводится к обмену документами. Избыточность разметки XML (а в целях разработки языка прямо указано, что лаконичность не является приоритетом проекта) сказывается в ситуациях, когда данные не вписываются в традиционную модель документа. Лента новостей, например, оформляемая с использованием синтаксиса XML (форматы RSS, Atom), представляет собой не документ в традиционном понимании, а поток однотипных мини-документов — многословная и избыточная разметка в этом случае составляет существенную часть передаваемых данных.
W3C озабочен эффективностью применения XML, и соответствующие рабочие группы занимаются этой проблемой (к началу 2013 года нормативные документы не разработаны).
Другая ситуация, когда форматы XML могут оказаться не лучшим решением — работа с данными с простой структурой и небольшим объёмом символьных данных (поля данных). В этом случае доля разметки в общем объёме велика, а программная обработка XML может оказаться неоправданно затратной по сравнению с работой с данными более простой структуры. В этой области разработчики рассматривают средства, изначально ориентированные на данные, такие как INI, YAML, JSON.
Скриптовый язык для работы с XML
W3C работает над созданием скриптового языка для работы с XML (к началу 2013 года нормативные документы не разработаны).
См. также
- XML-RPC
- XML Schema
- SOAP (англ. Simple Object Access Protocol) — протокол передачи данных, в котором для сообщений используется формат XML.
- REST
- XHTML — версия HTML, отвечающая синтаксическим требованиям XML.
- XSD — язык описания структуры XML-документов.
- FB2 — формат описания книг, основанный на XML
- W3C DOM
- DITA
- WDDX
- APML
Примечания
- XML Media Types, RFC 3023 9–11. IETF (январь 2001). Дата обращения: 4 января 2010. Архивировано 22 августа 2011 года.
- XML Media Types, RFC 3023 7–9. IETF (январь 2001). Дата обращения: 4 января 2010. Архивировано 22 августа 2011 года.
- M. Murata, D. Kohn, and C. Lilley. Internet Drafts: XML Media Types . IETF (24 сентября 2009). Дата обращения: 10 июня 2010. Архивировано 22 августа 2011 года.
- Extensible Markup Language (XML) 1.0 (Fifth Edition) . Дата обращения: 6 июля 2011. 1 апреля 2009 года.
- Extensible Markup Language (XML) 1.1 (Second Edition) . Дата обращения: 6 июля 2011. 3 июля 2011 года.
- Объяснение слова «entity» во спецификации языка XML. Дата обращения: 12 апреля 2014. 10 января 2020 года.
- HTML Document Representation . www.w3.org. Дата обращения: 27 ноября 2019. 23 декабря 2019 года.
- Объяснение слова «valid» в спецификации. Дата обращения: 12 апреля 2014. 10 января 2020 года.
- Использование формы Бэкуса — Наура во спецификации. Дата обращения: 12 апреля 2014. 10 января 2020 года.
- Запись пустого пространства в форме Бэкуса — Наура. Дата обращения: 12 апреля 2014. 10 января 2020 года.
- If both the external and internal subsets are used, the internal subset MUST be considered to occur before the external subset.
- Xml parsing . Дата обращения: 30 августа 2019. 16 марта 2022 года.
- Streaming versus DOM (The Java EE 5 Tutorial) . Дата обращения: 9 апреля 2022. 9 апреля 2022 года.
- Comparing StAX to Other JAXP APIs (The Java EE 5 Tutorial) . Дата обращения: 9 апреля 2022. 9 апреля 2022 года.
- Pull Parsing versus Push Parsing (The Java EE 5 Tutorial) . Дата обращения: 9 апреля 2022. 9 апреля 2022 года.
- StAX API (The Java™ Tutorials > Java API for XML Processing (JAXP) > Streaming API for XML) . Дата обращения: 9 апреля 2022. 9 апреля 2022 года.
- . Дата обращения: 11 марта 2009. Архивировано из оригинала 3 марта 2009 года.
- Intel XML Accelerator (недоступная ссылка)
Литература
- Дэвид Хантер, Джефф Рафтер, Джо Фаусетт, Эрик ван дер Влист, и др. XML. Работа с XML, 4-е издание = Beginning XML, 4th Edition. — М.: , 2009. — 1344 с. — .
- Дэвид Хантер, Джефф Рафтер и др. XML. Базовый курс = Beginning XML. — М.: , 2009. — 1344 с. — .
- Роберт Тейбор. Реализация XML Web-служб на платформе Microsoft .NET = Microsoft .NET XML Web Services. — М.: , 2002. — 464 с. — .
Ссылки
- XML на сайте Консорциума Всемирной паутины (W3C)
- Официальная спецификация стандарта XML 1.0 (англ.)
- Официальная спецификация стандарта XML 1.1 (англ.)
- Doug Tidwell. Введение в XML (недоступная ссылка)
- статьи, форумы
- Просмотр XML Просмотр и редактирование данных XML (англ.)
- Форматирование XML Машина для онлайн-форматирования XML (англ.)
Для улучшения этой статьи :
|
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер
XML MFA ˌeks emˈel abbr ot angl eXtensible Markup Language rasshiryaemyj yazyk razmetki Rekomendovan Konsorciumom Vsemirnoj pautiny W3C Specifikaciya XML opisyvaet XML dokumenty i chastichno opisyvaet povedenie XML processorov programm chitayushih XML dokumenty i obespechivayushih dostup k ih soderzhimomu XML razrabatyvalsya kak yazyk s prostym formalnym sintaksisom udobnyj dlya sozdaniya i obrabotki dokumentov kak programmami tak i chelovekom s akcentom na ispolzovanie v Internete Yazyk nazyvaetsya rasshiryaemym poskolku on ne fiksiruet razmetku ispolzuemuyu v dokumentah razrabotchik volen sozdat razmetku v sootvetstvii s potrebnostyami k konkretnoj oblasti buduchi ogranichennym lish sintaksicheskimi pravilami yazyka Rasshirenie XML eto konkretnaya grammatika sozdannaya na baze XML i predstavlennaya slovaryom tegov i ih atributov a takzhe naborom pravil opredelyayushih kakie atributy i elementy mogut vhodit v sostav drugih elementov Sochetanie prostogo formalnogo sintaksisa udobstva dlya cheloveka rasshiryaemosti a takzhe bazirovanie na kodirovkah Yunikod dlya predstavleniya soderzhaniya dokumentov privelo k shirokomu ispolzovaniyu kak sobstvenno XML tak i mnozhestva proizvodnyh specializirovannyh yazykov na baze XML v samyh raznoobraznyh programmnyh sredstvah XML angl eXtensible Markup Language rasshiryaemyj yazyk razmetkiRasshirenie xmlMIME tip application xml text xml deprecated in an expired draft Razrabotchik Konsorcium Vsemirnoj pautinyOpublikovan 1998Tip formata yazyk razmetkiRasshiren iz SGMLRazvit v XHTML RSS Atom KML SVG i mnozhestvo drugih formatovStandart y 1 0 Fifth Edition 26 noyabrya 2008 goda 1 1 Second Edition 16 avgusta 2006 godaOtkrytyj format daSajt w3 org XML angl Mediafajly na Vikisklade XML yavlyaetsya podmnozhestvom SGML Fajly v formate XML ispolzuetsya pri proektirovanii struktury programm v chastnosti konceptualnyh kart i diagramm svyazej Yazyk XMLSpecifikaciya XML opisyvaet yazyk i ryad voprosov kasayushihsya kodirovki i obrabotki dokumentov Material etoj sekcii predstavlyaet soboj sokrashyonnoe izlozhenie opisaniya yazyka v Specifikacii XML adaptirovannoe dlya nastoyashej stati Normativnym schitaetsya anglijskij variant dokumenta poetomu osnovnye terminy privodyatsya s ih anglijskimi originalami Perevod osnovnyh terminov v osnovnom sleduet dostupnomu v internete perevodu Specifikacii na russkij yazyk isklyuchenie sostavlyayut terminy tag i declaration Dlya termina tag zdes ispolzuetsya perevod teg Dlya termina declaration otdano predpochtenie rasprostranyonnomu perevodu obyavlenie protiv takzhe rasprostranyonnoj kalki deklaraciya V literature i internete mogut vstrechatsya i inye perevody osnovnyh terminov Fizicheskaya i logicheskaya struktury dokumenta S fizicheskoj tochki zreniya dokument sostoit iz sushnostej angl entities iz kotoryh kazhdaya mozhet ssylatsya na druguyu sushnost Edinstvennyj kornevoj element dokumentnaya sushnost Soderzhanie sushnostej simvoly S logicheskoj tochki zreniya dokument sostoit iz kommentariev angl comments obyavlenij angl declarations elementov angl elements ssylok na sushnosti angl character references i instrukcij obrabotki angl processing instructions Vsyo eto v dokumente strukturizuetsya razmetkoj angl markup Fizicheskaya struktura Sushnost melchajshaya chast v dokumente Vse sushnosti chto nibud soderzhat i u vseh nih est imya sushestvuyut isklyucheniya napr dokumentnaya sushnost Proshe govorya termin sushnost opisyvaet sushuyu vesh chto to Dokument sostoit iz sushnostej soderzhanie kotoryh simvoly Vse simvoly razdeleny na dva tipa simvoly dannyh angl character data i simvoly razmetki K razmetke otnosyatsya tegi angl tags lt oboznachayut granicy elementov obyavleniya i instrukcii obrabotki vklyuchaya ih atributy angl attributes ssylki na sushnosti kommentarii a takzhe posledovatelnosti simvolov obramlyayushie sekcii CDATA Chast dokumenta ne prinadlezhashaya razmetke sostavlyaet simvolnye dannye dokumenta Logicheskaya struktura Vse sostavlyayushie chasti dokumenta obobshayutsya v prolog i kornevoj element Kornevoj element obyazatelnaya chast dokumenta sostavlyayushaya vsyu ego sut prolog voobshe govorya mozhet otsutstvovat Kornevoj element mozhet vklyuchat a mozhet ne vklyuchat vlozhennye v nego elementy simvolnye dannye i kommentarii Vlozhennye v kornevoj element elementy v svoyu ochered mogut vklyuchat vlozhennye v nih elementy simvolnye dannye i kommentarii i tak dalee Prolog mozhet vklyuchat obyavleniya instrukcii obrabotki kommentarii Ego sleduet nachinat s obyavleniya XML hotya v opredelyonnoj situacii dopuskaetsya otsutstvie etogo obyavleniya Elementy dokumenta dolzhny byt pravilno vlozheny lyuboj element nachinayushijsya vnutri drugogo elementa to est lyuboj element dokumenta krome kornevogo dolzhen zakanchivatsya vnutri elementa v kotorom on nachalsya Simvolnye dannye mogut vstrechatsya vnutri elementov kak neposredstvenno tak i v specialnyh sekciyah CDATA Obyavleniya instrukcii obrabotki i elementy mogut imet svyazannye s nimi atributy Atributy ispolzuyutsya dlya svyazyvaniya s logicheskoj edinicej teksta par imya znachenie Simvoly razmetki Razmetka vsegda nachinaetsya simvolom lt i zakanchivaetsya simvolom gt Naryadu s simvolami lt i gt specialnuyu rol dlya razmetki igraet takzhe simvol amp Uglovye skobki oboznachayut granicy elementov instrukcij obrabotki i nekotoryh drugih posledovatelnostej Ampersand pozvolyaet vypolnit zamenu teksta pri pomoshi sushnostej angl entities Reshenie problemy neodnoznachnosti razmetki Upotreblenie razmetochnyh simvolov v simvolnyh dannyh zatrudnyaet raspoznavanie konstrukcij razmetki i mozhet sozdat problemu neodnoznachnosti struktury V XML eta problema reshaetsya sleduyushim obrazom lt gt i amp ne mogut prisutstvovat v simvolnyh dannyh i v znacheniyah atributov v ih neposredstvennom vide dlya ih predstavleniya v etih sluchayah zarezervirovany specialnye sushnosti Simvol Zamena lt amp lt gt amp gt amp amp amp Krome togo dlya upotrebleniya apostrofov i kavychek vnutri znachenij atributov ispolzuyutsya sleduyushie sushnosti amp apos amp quot Pravilo zameny razmetochnyh simvolov na ih oboznachayushie sushnosti ne rasprostranyaetsya na simvolnye dannye v sekciyah CDATA zato vypolnyaetsya vo vseh ostalnyh mestah dokumenta Chislovye ssylki na simvoly Chislovye ssylki na simvoly ukazyvayut kodovuyu poziciyu simvola v nabore simvolov dokumenta Chislovye ssylki na simvoly mogut prinimat dve formy sintaksis amp D gde D desyatichnoe chislo sintaksis amp xH ili amp XH gde H shestnadcaterichnoe chislo shestnadcaterichnye chisla v chislovyh simvolnyh ssylkah ne chuvstvitelny k registru Primery chislovyh ssylok na simvoly amp 229 v desyatichnoj forme predstavlyaet bukvu a s malenkim kruzhkom nad nej ispolzuetsya naprimer v norvezhskom yazyke amp xE5 v shestnadcaterichnom predstavlyaet soboj tot zhe simvol amp Xe5 v shestnadcaterichnom takzhe predstavlyaet tot zhe simvol amp 1048 v desyatichnoj forme predstavlyaet zaglavnuyu bukvu kirillicy I amp x6C34 v shestnadcaterichnom predstavlyaet kitajskij ieroglif voda Imena V yazyke XML vse imena dolzhny nachinatsya s bukvy simvola podchyorkivaniya i prodolzhatsya tolko dopustimymi dlya imyon simvolami a imenno oni mogut soderzhat tolko bukvy vhodyashie v sekciyu bukv kodirovki Unicode arabskie cifry defisy znaki podchyorkivaniya tochki Tak kak bukvy ne ogranicheny isklyuchitelno simvolami ASCII to v imenah mozhno ispolzovat bukvy iz lyubogo yazyka Prolog Obyavlenie XML Obyavlenie XML ukazyvaet versiyu yazyka na kotoroj napisan dokument Poskolku interpretaciya soderzhimogo dokumenta zavisit ot versii yazyka to Specifikaciya predpisyvaet nachinat dokument s obyavleniya XML V pervoj 1 0 versii yazyka ispolzovanie obyavleniya ne bylo obyazatelnym v posleduyushih versiyah ono obyazatelno Takim obrazom versiya yazyka opredelyaetsya iz obyavleniya i esli obyavlenie otsutstvuet to prinimaetsya versiya 1 0 Krome versii XML obyavlenie mozhet takzhe soderzhat informaciyu o kodirovke dokumenta i ostavatsya li dokumentu so svoim sobstvennym DTD ili s podklyuchyonnym Primer lt xml version 1 1 encoding UTF 8 gt ili lt xml version 1 0 encoding windows 1251 gt Vo vseh etih primerah otsutstvoval atribut standalone kotoryj kak raz i opredelyaet podklyuchit li dokumentu opisaniya razmetki izvne Po umolchaniyu on raven no lt xml version 1 0 encoding windows 1251 standalone no gt esli XML dokument ssylaetsya na drugie DTD fajly kotorye opisyvayut chto dokument mozhet soderzhat vy dolzhny ukazat standalone no lt xml version 1 0 encoding UTF 8 standalone yes gt esli XML dokument ne ssylaetsya na drugie fajly i budet polzovatsya svoim DTD vy dolzhny ukazat standalone yes Obyavlenie tipa dokumenta Dlya obyavleniya tipa dokumenta sushestvuet specialnaya instrukciya DOCTYPE Ona pozvolyaet zadat pri pomoshi yazyka DTD kakie v dokument vhodyat elementy kakovy ih atributy kakie sushnosti mogut ispolzovatsya i koe chto eshyo Naprimer vot korrektnyj dokument lt xml version 1 0 gt lt greeting gt Hello world lt greeting gt V nyom est kornevoj element lt greeting gt Hello world lt greeting gt i s logicheskoj tochki zreniya dokument sushestvuet Odnako on nedejstvitelen angl not valid Pri pomoshi Obyavleniya tipa dokumenta DTD vozmozhno opisyvat ego soderzhanie i logicheskuyu strukturu a takzhe svyazyvat s opredelyonnym elementom paru imya znachenie Vot kak vyglyadit prolog v zapisi Bekusa Naura prolog XMLDecl Misc doctypedecl Misc XMLDecl lt xml VersionInfo EncodingDecl SDDecl S gt VersionInfo S version Eq VersionNum VersionNum Eq S S VersionNum 1 0 9 Misc Comment PI S doctypedecl lt DOCTYPE S Name S ExternalID S intSubset S gt DeclSep PEReference S intSubset markupdecl DeclSep markupdecl elementdecl AttlistDecl EntityDecl NotationDecl PI Comment extSubset TextDecl extSubsetDecl extSubsetDecl markupdecl conditionalSect DeclSep Posle XML obyavleniya mogut sledovat kommentarii instrukcii obrabotki ili zhe pustye prostranstva no zatem idyot Obyavleniya tipa dokumenta gde Name imya kornevogo tega ExternalID vneshnij identifikator a intSubset obyavlenie razmetki ili zhe ssylka na sushnost Kak glasit specifikaciya esli vneshnij identifikator obyavlyaetsya vmeste s vnutrennim obyavleniem to poslednee idyot pered pervym Naprimer lt xml version 1 0 gt lt DOCTYPE greeting SYSTEM hello dtd gt lt greeting gt Hello world lt greeting gt Zdes SYSTEM hello dtd vneshnij identifikator adres hello dtd pozvolyaet zadejstvovat dannye v dokumente hello dtd kak obyavleniya razmetki lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE greeting lt ELEMENT greeting PCDATA gt gt lt greeting gt Hello world lt greeting gt Zdes zhe razmetka byla obyavlena lokalno v instrukcii DOCTYPE Instrukciya obrabotki Instrukcii obrabotki angl processing instruction PI pozvolyayut razmeshat v dokumente instrukcii dlya prilozhenij V sleduyushem primere pokazana instrukciya obrabotki xml stylesheet peredayushaya xml stylesheet prilozheniyu naprimer brauzeru instrukcii v fajle my style css posredstvom atributa href lt xml stylesheet type text css href my style css gt Kommentarij Kommentarii angl comment ne otnosyatsya k simvolnym dannym dokumenta Kommentarij nachinaetsya posledovatelnostyu lt i zakanchivaetsya posledovatelnostyu gt vnutri ne mozhet vstrechatsya kombinaciya simvolov Simvol amp ne ispolzuetsya vnutri kommentariya v kachestve razmetki Primer lt eto kommentarij gt Kornevoj element Element i ego razmetka Element angl element yavlyaetsya ponyatiem logicheskoj struktury dokumenta Kazhdyj dokument soderzhit odin ili neskolko elementov Granicy elementov predstavleny nachalnym i konechnym tegami Imya elementa v nachalnom i konechnom tegah elementa dolzhno sovpadat Element mozhet byt takzhe predstavlen tegom pustogo elementa to est ne vklyuchayushego v sebya drugie elementy i simvolnye dannye Teg angl tag konstrukciya razmetki kotoraya soderzhit imya elementa Nachalnyj teg lt element1 gt Konechnyj teg lt element1 gt Teg pustogo elementa lt empty element1 gt V elemente atributy mogut ispolzovatsya tolko v nachalnom tege i tege pustogo elementa Primer kulinarnogo recepta razmechennogo s pomoshyu XML lt xml version 1 0 encoding utf 8 gt lt DOCTYPE recipe gt lt recipe name hleb preptime 5min cooktime 180min gt lt title gt Prostoj hleb lt title gt lt composition gt lt ingredient amount 3 unit stakan gt Muka lt ingredient gt lt ingredient amount 0 25 unit gramm gt Drozhzhi lt ingredient gt lt ingredient amount 1 5 unit stakan gt Tyoplaya voda lt ingredient gt lt composition gt lt instructions gt lt step gt Smeshat vse ingredienty i tshatelno zamesit lt step gt lt step gt Zakryt tkanyu i ostavit na odin chas v tyoplom pomeshenii lt step gt lt lt step gt Pochitat vcherashnyuyu gazetu lt step gt eto somnitelnyj shag gt lt step gt Zamesit eshyo raz polozhit na protiven i postavit v duhovku lt step gt lt instructions gt lt recipe gt Sekciya CDATA Sekciya CDATA ne yavlyaetsya logicheskoj edinicej teksta Sekciya mozhet vstrechatsya v lyubom meste dokumenta gde sintaksis pozvolyaet razmeshat simvolnye dannye Sekciya nachinaetsya lt CDATA i zavershaetsya gt Mezhdu etoj razmetkoj nahodyatsya simvolnye dannye simvolnye dannye pri etom vklyuchayut simvoly lt gt amp v ih neposredstvennoj forme Korrektnyj dokument Korrektnyj angl well formed dokument sootvetstvuet vsem obshim pravilam sintaksisa XML primenimym k lyubomu XML dokumentu pravilnaya struktura dokumenta sovpadenie imen v nachalnom i konechnom tege elementa i t p Dokument kotoryj nepravilno postroen ne mozhet schitatsya dokumentom XML Prostranstva imyon Primer dokumenta lt xml version 1 0 encoding UTF 8 gt lt login screen gt lt edsscript gt lt sequence name start gt lt action cmd triggeron gt btn lt action gt lt action cmd triggeron gt msg generic lt action gt lt action cmd disablenbb gt all lt action gt lt action cmd setscrtext gt Sisteme Giris lt action gt lt action cmd enablenbb gt forward mainmenu lt action gt lt action cmd switchmsgtarget gt LOGIN DLG lt action gt lt action cmd sendmsg gt start lt action gt lt action cmd jump gt step2 lt action gt lt sequence gt lt sequence name step2 gt lt action cmd waittrigger gt btnforward lt action gt lt action cmd triggeron gt login lt action gt lt action cmd disablenbb gt all lt action gt lt action cmd sendmsg gt check lt action gt lt sequence gt lt trigger name login succeded gt lt condition type appmsg gt login succeeded lt condition gt lt sequence gt lt action cmd endscript gt lt sequence gt lt trigger gt lt trigger name login unknownuser gt lt condition type appmsg gt login unknownuser lt condition gt lt sequence name login unknownuser gt lt action cmd disablenbb gt all lt action gt lt action cmd setscrtext gt Hata lt action gt lt action cmd showhtml gt generic neg htm Yanlis kullanici ismi Lutfen kullanici ismini dogru giriniz lt action gt lt action cmd enablenbb gt back lt action gt lt action cmd waittrigger gt btnback lt action gt lt action cmd jump gt start lt action gt lt sequence gt lt trigger gt lt trigger name login incorrectpwd gt lt condition type appmsg gt login incorrectpwd lt condition gt lt sequence name login incorrectpwd gt lt action cmd disablenbb gt all lt action gt lt action cmd setscrtext gt Hata lt action gt lt action cmd showhtml gt generic neg htm Hatali parola Lutfen parolanizi dogru giriniz lt action gt lt action cmd enablenbb gt back lt action gt lt action cmd waittrigger gt btnback lt action gt lt action cmd jump gt start lt action gt lt sequence gt lt trigger gt lt generic triggers gt lt trigger name btnback gt lt condition type buttonclick gt back lt condition gt lt sequence name btnback gt lt action cmd triggeron gt btnback lt action gt lt sequence gt lt trigger gt lt trigger name btnforward gt lt condition type buttonclick gt forward lt condition gt lt sequence name btnforward gt lt action cmd triggeron gt btnforward lt action gt lt sequence gt lt trigger gt lt trigger name btnmainmenu gt lt condition type buttonclick gt mainmenu lt condition gt lt sequence gt lt action cmd jumpscript gt lt value label mainmenuscript scope local gt lt action gt lt sequence gt lt trigger gt lt trigger name btnquitapp gt lt condition type buttonclick gt quitapplication lt condition gt lt sequence name btnquitapp gt lt action cmd callscript gt quitapp xml lt action gt lt action cmd jump gt start lt action gt lt sequence gt lt trigger gt lt trigger name error generic gt lt condition type appmsg gt error lt condition gt lt sequence gt lt action cmd showhtml gt errdsc null htm Hata lt action gt lt action cmd disablenbb gt all lt action gt lt action cmd enablenbb gt forward lt action gt lt action cmd waittrigger gt btnforward lt action gt lt action cmd endscript gt lt sequence gt lt trigger gt lt trigger name msg generic gt lt condition type appmsg gt msg generic lt condition gt lt sequence gt lt action cmd showhtml gt generic msg htm lt action gt lt action cmd triggeron gt msg generic lt action gt lt sequence gt lt trigger gt lt An unhandled exception is thrown from the hard code side gt lt trigger name error hardcodeside gt lt condition type appmsg gt error hardcodeside lt condition gt lt sequence gt lt action cmd triggeroff gt lt action gt lt action cmd triggeron gt btnmainmenu lt action gt lt action cmd triggeron gt btnquitapp lt action gt lt action cmd disablenbb gt all lt action gt lt action cmd enablenbb gt mainmenu lt action gt lt action cmd showhtml gt errdsc null htm Hata Islem sirasinda bir hata meydana geldi lt action gt lt action cmd waittrigger gt btnmainmenu lt action gt lt sequence gt lt trigger gt lt edsscript gt Reglamentaciya raboty s dokumentami pravila yazyki programmnye interfejsyEtot razdel soderzhit izlozhenie nekotoryh polozhenij rekomendacij W3C kasayushihsya raboty s dokumentami Sootvetstvuyushie rekomendacii mogut otnositsya kak k dokumentam XML tak i k bolee shirokomu klassu dokumentov Ssylki kak pravilo dayutsya na sredstva raboty s dokumentami rekomendovannye W3C Kodirovka dokumentov Specifikaciya trebuet chtoby obrabatyvayushie programmy podderzhivali po krajnej mere dve kodirovki Yunikod UTF 8 i UTF 16 XML processor i prilozhenie Specifikaciya XML opredelyaet ponyatiya XML processor i prilozhenie XML processor parser programma analiziruyushaya razmetku i peredayushaya informaciyu o strukture dokumenta drugoj programme prilozheniyu Specifikaciya XML nalagaet opredelyonnye trebovaniya na processor ne kasayas trebovanij k prilozheniyu Dejstvitelnyj dokument Proveryayushie i neproveryayushie processory Dokument yavlyaetsya dejstvitelnym esli s nim svyazano opredelenie tipa dokumenta i esli etot dokument otvechaet predstavlennym v opredelenii tipa dokumenta ogranicheniyam XML processory delyatsya na dva klassa proveryayushie i neproveryayushie Proveryayushie processory proveryayut dejstvitelnost dokumenta i dolzhny soobshat po vyboru polzovatelya o narushenii ogranichenij sformulirovannyh v opredelenii tipa dokumenta Neproveryayushie processory ne proveryayut dejstvitelnost dokumenta no obyazannosti po predvaritelnoj obrabotke dokumenta upomyanutye vyshe ostayutsya za nimi Opisanie tipov dokumentov yazyki shem Dlya opisaniya tipov dokumentov ispolzuyutsya yazyki shem angl schema language Poskolku XML yavlyaetsya podmnozhestvom yazyka SGML to on unasledoval razrabotannyj dlya SGML yazyk Document Type Definition DTD Pozdnee byli razrabotany i drugie yazyki shem naibolee izvestny iz kotoryh XML Schema RELAX NG Preobrazovanie dokumenta XML Dlya resheniya zadachi preobrazovaniya dokumenta XML v druguyu shemu ili drugoj format prednaznachen yazyk XSLT Format dlya vizualizacii dokumenta Dlya formatirovannogo dokumenta dokumenta podgotovlennogo k vizualizacii prednaznachen format XSL FO Yazyki zaprosov XPath sintaksis dlya adresacii soderzhimogo dokumenta predstavlennogo v forme dereva Vyrazheniya XPath ispolzuyutsya v yazyke XQuery Vyrazheniya XPath voobshe govorya mogut ispolzovatsya v lyubom kontekste gde umestno ispolzovat formalnye ssylki na elementy dereva v chastnosti v kachestve parametrov metodov interfejsov dostupa k dokumentu XQuery yazyk programmirovaniya orientirovannyj na rabotu s dokumentami Chtenie XML tri varianta API V razdele ne hvataet ssylok na istochniki sm rekomendacii po poisku Informaciya dolzhna byt proveryaema inache ona mozhet byt udalena Vy mozhete otredaktirovat statyu dobaviv ssylki na avtoritetnye istochniki v vide snosok 6 sentyabrya 2017 Dlya chteniya XML est tri varianta API Sobytijnyj API event driven API push style API XML processor chitaet XML pri opredelyonnom sobytii poyavlenii otkryvayushego ili zakryvayushego tega tekstovoj stroki atributa vyzyvaetsya callback funkciya Rashoduet malo pamyati Pri obrabotke ogromnogo XML est standartnaya tochka pozvolyayushaya mgnovenno ostanovit obrabotchik Krajne slozhen dlya prikladnogo programmista prihoditsya derzhat v pamyati informaciyu v kakom meste dokumenta my nahodimsya Biblioteka prosta v programmirovanii Tolko posledovatelnyj dostup k XML eto zatrudnyaet razbor perekryostnyh ssylok i pochti pravilnyh XML s pereputannym poryadkom elementov API tolko dlya chteniya dlya zapisi potrebuetsya drugoj API Estestvennyj vybor kogda iz ogromnogo XML nado izvlech nemnogo dannyh Estestvennyj vybor kogda XML nado preobrazovat v strukturu predmetnoj otrasli Primery bibliotek SAX ExpatVse pyat primerov rabotayut s takim XML lt xml version 1 0 encoding UTF 8 gt lt document gt lt thing name A gt Alpha lt thing gt lt thing name B gt Bravo lt thing gt lt document gt Primer koda C vydumannyj API enum class Place ROOT DOCUMENT THING N Place parentPlace static cast lt int gt Place N ROOT ROOT DOCUMENT class MyEvent public Xml Event private Place place Place ROOT Thing currThing nullptr public return true teg nuzhen false propustit ego i vsyo chto vnutri bool onTagOpen const std string amp aName override void onTagClose override void onAttr const std string amp aName const std string amp aValue override void onText const std string amp aText override bool MyEvent onTagOpen const std string amp aName switch place case Place ROOT if aName document place Place DOCUMENT return true break case Place DOCUMENT if aName thing place Place THING currThing amp things emplace back return true break return false void MyEvent onTagClose place parentPlace place void MyEvent onAttr const std string amp aName const std string amp aValue if place Place THING amp amp aName name currThing gt name aValue void MyEvent onText const std string amp aText if place Place THING currThing gt value aText xml eventDrivenRead in xml MyEvent Potokovyj API takzhe pull style API ustroen na maner potokov vvoda vyvoda Prikladnoj kod zaprashivaet u processora chasti XML tot umeet tolko dvigatsya po XML vperyod zabyvaya uzhe projdennye chasti Rashoduet malo pamyati Informaciya v kakom meste dokumenta my nahodimsya neyavno zadayotsya mestom v potoke vypolneniya Eto seryozno uproshaet rabotu prikladnogo programmista Na produmannyh API obyom koda priblizhaetsya k takovomu dlya DOM Biblioteka slozhna v programmirovanii Pozvolyaet odnovremennyj dostup k dvum XML dokumentam Tolko posledovatelnyj dostup k XML eto zatrudnyaet razbor perekryostnyh ssylok i pochti pravilnyh XML s pereputannym poryadkom elementov API tolko dlya chteniya dlya zapisi potrebuetsya drugoj API hot otnositsya i k potokovym soderzhit otdelnyj API pryamoj zapisi Primery bibliotek Primer koda C vydumannyj API xml StreamReader reader in xml std string name value reader enterTag document while reader getTag thing Thing thing thing name reader requireStringAttr name reader enterTag thing value reader getText reader leaveTag things emplace back std move thing Obektnyj API Document Object Model DOM obektnaya model dokumenta schityvaet XML i vossozdayot ego v pamyati v vide obektnoj struktury Rashoduet mnogo pamyati namnogo bolshe chem sam XML zanimaet na diske Na rashod pamyati vtroe i bolee prevyshaet dlinu XML Prost dlya prikladnogo programmista Biblioteka prosta v programmirovanii Pozvolyaet proizvolnyj dostup k XML Eto naprimer uproshaet rabotu s perekryostnymi ssylkami Zachastuyu udayotsya raspoznat pochti vernye XML s pereputannym poryadkom tegov Obshij API dlya chteniya i zapisi Estestvennyj vybor kogda obektom predmetnoj oblasti yavlyaetsya sam XML v veb brauzere XML redaktore v importyore k programme lokalizatoru kotoryj izvlekaet stroki iz XML proizvolnoj struktury Estestvennyj vybor kogda nuzhno zagruzit XML slegka pererabotat i sohranit Te chasti kotorye trogat ne nuzhno ne trebuyut nikakogo koda Primery bibliotek JDOM Primer koda C include lt iostream gt include lt vector gt include pugixml hpp struct Thing std string name value Esli kakaya to sushnost pugixml konvertiruetsya v bool kak false vykinut oshibku template lt class T gt inline T need T amp amp val const char errmsg if val throw std logic error errmsg return std forward lt T gt val int main std vector lt Thing gt things pugi xml document doc need doc load file in xml Cannot load XML auto elDocument need doc root child document Need lt document gt for pugi xml node elThing elDocument children thing auto attrName need elThing attribute name Need lt thing gt name things emplace back Thing attrName as string elThing text as string for auto amp v things std cout lt lt v name lt lt lt lt v value lt lt std endl return 0 Byvayut i gibridnye API vneshnie i malovazhnye chasti chitayutsya potokovym metodom a vnutrennie i vazhnye obektnym Primer koda C vydumannyj API xml StreamReader reader in xml std string name value reader enterTag document while reader getTag thing xml Element elThing reader readEntireSubtree things emplace back Thing amp thing things back thing name elThing requireStringAttr name thing value elThing text Zapis XML dva varianta API API pryamoj zapisi zapisyvaet XML teg za tegom atribut za atributom Bystr net promezhutochnyh obektov Primitivnaya biblioteka mozhet delat neoptimalnyj XML naprimer lt tag gt lt tag gt vmesto lt tag gt Rabotayushaya optimalno slozhnee v programmirovanii Neprigoden dlya otdelnyh specificheskih zadach Esli struktury predmetnoj oblasti rabotayut nenadyozhno bez specialnyh mer zapisat v pamyat ili v drugoj fajl potom pereimenovat mozhno ostatsya s upavshej programmoj i poteryannym fajlom Pri oshibke programmista mozhet poluchitsya sintaksicheski nekorrektnyj XML API tolko dlya zapisi dlya chteniya potrebuetsya drugoj API Primery bibliotek Primer koda C vydumannyj API xml Writer wri out xml wri openTag document for auto amp v things wri openTag thing wri writeAttr name v name wri writeText v value wri closeTag thing wri closeTag document Obektnyj API on zhe Document Object Model Sozdayot obektnuyu strukturu dlya XML chto mozhet otnyat pamyati bolshe chem struktura predmetnoj otrasli Universalen vprochem v bolshinstve zadach preimushestva nad horosho prorabotannym API pryamoj zapisi net v otlichie ot chteniya Dazhe esli struktury predmetnoj oblasti rabotayut nenadyozhno a programmist ne predusmotrel nikakoj zashity edinstvennyj scenarij kogda fajl perezapisyvaetsya na nepolnyj oshibka vvoda vyvoda v chastnosti nehvatka mesta na diske Pri pravilno napisannom API nevozmozhno sozdat sintaksicheski nekorrektnyj XML Obshij API dlya zapisi i chteniya Primery bibliotek te zhe chto i dlya chteniya XML metodom DOM Primer koda C include pugixml hpp struct Thing std string name value Thing things A Alpha B Bravo C Charlie int main pugi xml document doc auto root doc append child document for auto amp thing things auto node root append child thing node append attribute name thing name c str node append child pugi node pcdata set value thing value c str doc save file test xml return 0 Instrumenty raboty s dokumentami parsery sredstva sozdaniya i vizualizacii sistemy baz dannyhRealizacii parserov XML imeet realizacii parserov dlya vseh sovremennyh yazykov programmirovaniya Veb brauzery kak instrument vizualizacii dokumenta Vizualizaciya bez ispolzovaniya stilej CSS Bez ispolzovaniya CSS ili XSL XML dokument otobrazhaetsya kak prostoj tekst v bolshinstve veb brauzerov Nekotorye brauzery takie kak Internet Explorer Mozilla Firefox i Opera vstroennyj instrument Opera Dragonfly otobrazhayut strukturu dokumenta v vide dereva pozvolyaya svorachivat i razvorachivat uzly s pomoshyu nazhatij klavishi myshi Primenenie stilej CSS Process analogichen primeneniyu CSS k HTML dokumentu dlya otobrazheniya Dlya primeneniya CSS pri otobrazhenii v brauzere XML dokument dolzhen soderzhat specialnuyu ssylku na tablicu stilej Naprimer lt xml stylesheet type text css href myStyleSheet css gt Eto otlichaetsya ot podhoda HTML gde ispolzuetsya element lt link gt Primenenie preobrazovanij k formatu XSL FO Sovremennye brauzery prinadlezhat k chislu programmnyh sredstv sposobnyh vypolnyat preobrazovaniya XSLT V brauzere takoe preobrazovanie vypolnyaetsya kak pravilo dlya formatirovaniya dokumenta preobrazovaniya dokumenta v format XSL FO Sleduyushaya instrukciya v prologe dokumenta XML predpisyvaet brauzeru vypolnit XSLT preobrazovanie opisannoe v fajle transform xsl lt xml stylesheet type text xsl href transform xsl gt Redaktory XML S dokumentom XML mozhno rabotat v obychnom tekstovom redaktore odnako obychnye redaktory ne podderzhivayut strukturu dokumenta Sushestvuyut specialnye redaktory XML kotorye delayut rabotu s dokumentom bolee udobnoj i effektivnoj Sistemy upravleniya bazami dannyh rabotayushie s dannymi v formate XML Sistema upravleniya bazami dannyh DB2 pozvolyaet hranit dannye v formate XML i predostavlyaet dostup k takim dannym s pomoshyu yazyka XQuery Podderzhka na apparatnom urovne XML podderzhivaetsya na nizkom apparatnom mikroprogrammnom i programmnom urovnyah v sovremennyh apparatnyh resheniyah Oblast primeneniya ogranicheniya perspektivy razvitiyaEffektivnost ispolzovaniya XML XML yazyk razmetki drugimi slovami sredstvo opisaniya dokumenta Imenno v nishe dokumentov tekstov gde dolya raznotipnyh simvolnyh dannyh velika a dolya razmetki mala XML uspeshen S drugoj storony obmen dannymi v otkrytyh sistemah ne svoditsya k obmenu dokumentami Izbytochnost razmetki XML a v celyah razrabotki yazyka pryamo ukazano chto lakonichnost ne yavlyaetsya prioritetom proekta skazyvaetsya v situaciyah kogda dannye ne vpisyvayutsya v tradicionnuyu model dokumenta Lenta novostej naprimer oformlyaemaya s ispolzovaniem sintaksisa XML formaty RSS Atom predstavlyaet soboj ne dokument v tradicionnom ponimanii a potok odnotipnyh mini dokumentov mnogoslovnaya i izbytochnaya razmetka v etom sluchae sostavlyaet sushestvennuyu chast peredavaemyh dannyh W3C ozabochen effektivnostyu primeneniya XML i sootvetstvuyushie rabochie gruppy zanimayutsya etoj problemoj k nachalu 2013 goda normativnye dokumenty ne razrabotany Drugaya situaciya kogda formaty XML mogut okazatsya ne luchshim resheniem rabota s dannymi s prostoj strukturoj i nebolshim obyomom simvolnyh dannyh polya dannyh V etom sluchae dolya razmetki v obshem obyome velika a programmnaya obrabotka XML mozhet okazatsya neopravdanno zatratnoj po sravneniyu s rabotoj s dannymi bolee prostoj struktury V etoj oblasti razrabotchiki rassmatrivayut sredstva iznachalno orientirovannye na dannye takie kak INI YAML JSON Skriptovyj yazyk dlya raboty s XML W3C rabotaet nad sozdaniem skriptovogo yazyka dlya raboty s XML k nachalu 2013 goda normativnye dokumenty ne razrabotany Sm takzheXML RPC XML Schema SOAP angl Simple Object Access Protocol protokol peredachi dannyh v kotorom dlya soobshenij ispolzuetsya format XML REST XHTML versiya HTML otvechayushaya sintaksicheskim trebovaniyam XML XSD yazyk opisaniya struktury XML dokumentov FB2 format opisaniya knig osnovannyj na XML W3C DOM DITA WDDX APMLPrimechaniyaXML Media Types RFC 3023 neopr 9 11 IETF yanvar 2001 Data obrasheniya 4 yanvarya 2010 Arhivirovano 22 avgusta 2011 goda XML Media Types RFC 3023 neopr 7 9 IETF yanvar 2001 Data obrasheniya 4 yanvarya 2010 Arhivirovano 22 avgusta 2011 goda M Murata D Kohn and C Lilley Internet Drafts XML Media Types neopr IETF 24 sentyabrya 2009 Data obrasheniya 10 iyunya 2010 Arhivirovano 22 avgusta 2011 goda Extensible Markup Language XML 1 0 Fifth Edition neopr Data obrasheniya 6 iyulya 2011 1 aprelya 2009 goda Extensible Markup Language XML 1 1 Second Edition neopr Data obrasheniya 6 iyulya 2011 3 iyulya 2011 goda Obyasnenie slova entity vo specifikacii yazyka XML neopr Data obrasheniya 12 aprelya 2014 10 yanvarya 2020 goda HTML Document Representation neopr www w3 org Data obrasheniya 27 noyabrya 2019 23 dekabrya 2019 goda Obyasnenie slova valid v specifikacii neopr Data obrasheniya 12 aprelya 2014 10 yanvarya 2020 goda Ispolzovanie formy Bekusa Naura vo specifikacii neopr Data obrasheniya 12 aprelya 2014 10 yanvarya 2020 goda Zapis pustogo prostranstva v forme Bekusa Naura neopr Data obrasheniya 12 aprelya 2014 10 yanvarya 2020 goda If both the external and internal subsets are used the internal subset MUST be considered to occur before the external subset Xml parsing neopr Data obrasheniya 30 avgusta 2019 16 marta 2022 goda Streaming versus DOM The Java EE 5 Tutorial neopr Data obrasheniya 9 aprelya 2022 9 aprelya 2022 goda Comparing StAX to Other JAXP APIs The Java EE 5 Tutorial neopr Data obrasheniya 9 aprelya 2022 9 aprelya 2022 goda Pull Parsing versus Push Parsing The Java EE 5 Tutorial neopr Data obrasheniya 9 aprelya 2022 9 aprelya 2022 goda StAX API The Java Tutorials gt Java API for XML Processing JAXP gt Streaming API for XML neopr Data obrasheniya 9 aprelya 2022 9 aprelya 2022 goda neopr Data obrasheniya 11 marta 2009 Arhivirovano iz originala 3 marta 2009 goda Intel XML Accelerator nedostupnaya ssylka LiteraturaDevid Hanter Dzheff Rafter Dzho Fausett Erik van der Vlist i dr XML Rabota s XML 4 e izdanie Beginning XML 4th Edition M 2009 1344 s ISBN 978 5 8459 1533 7 Devid Hanter Dzheff Rafter i dr XML Bazovyj kurs Beginning XML M 2009 1344 s ISBN 978 5 8459 1533 7 Robert Tejbor Realizaciya XML Web sluzhb na platforme Microsoft NET Microsoft NET XML Web Services M 2002 464 s ISBN 0 672 32088 6 SsylkiV rodstvennyh proektahKnigi v VikiuchebnikeMediafajly na Vikisklade XML na sajte Konsorciuma Vsemirnoj pautiny W3C Oficialnaya specifikaciya standarta XML 1 0 angl Oficialnaya specifikaciya standarta XML 1 1 angl Doug Tidwell Vvedenie v XML nedostupnaya ssylka stati forumy Prosmotr XML Prosmotr i redaktirovanie dannyh XML angl Formatirovanie XML Mashina dlya onlajn formatirovaniya XML angl Dlya uluchsheniya etoj stati zhelatelno Prostavit snoski vnesti bolee tochnye ukazaniya na istochniki Ispravit statyu soglasno stilisticheskim pravilam Vikipedii Posle ispravleniya problemy isklyuchite eyo iz spiska Udalite shablon esli ustraneny vse nedostatki