XML

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Extensible Markup Language
Розширення файлу: .xml
MIME-тип: application/xml, text/xml (застаріла)
Узагальнений ідентифікатор типу: public.xml
Розробник: World Wide Web Consortium
Тип формату: мова розмітки даних
Розширений з: SGML
Розширений до: XHTML, RSS, Atom,
Стандарт(и): 1.0 (Четверта редакція) 1.1 (Друга редакція)

Розши́рювана мо́ва розмі́тки (англ. EXtensible Markup Language, скорочено XML) — запропонований консорціумом World Wide Web Consortium (W3C) стандарт побудови мов розмітки ієрархічно структурованих даних для обміну між різними застосунками, зокрема, через Інтернет.[1] Є спрощеною підмножиною мови розмітки SGML. XML-документ складається із текстових знаків, і придатний до читання людиною.

Стандарт XML (англ. Recommendation, перше видання від 10 лютого 1998, останнє, четверте видання 29 вересня 2006) визначає набір базових лексичних та синтаксичних правил для побудови мови опису інформації шляхом застосування простих тегів. Цей формат достатньо гнучкий для того, аби бути придатним для застосування в різних галузях[2]. Іншими словами, запропонований стандарт визначає метамову, на основі якої шляхом запровадження обмежень на структуру та зміст документів визначаються специфічні, предметно-орієнтовані мови розмітки даних. Ці обмеження описуються мовами схем (англ. Schema), такими як XML Schema (XSD), DTD або RELAX NG. Прикладами мов, заснованих на XML, є: XSLT, XAML, XUL, RSS, MathML, GraphML, XHTML, SVG, а також XML Schema.

Основні поняття[ред. | ред. код]

Коректність
Коректний документ (англ. well-formed document) відповідає всім синтаксичним правилам XML. Документ, що не є коректним, не може називатись XML-документом. Сумісний синтаксичний аналізатор (англ. Conforming parser) не повинен обробляти такі документи. Зокрема, коректний XML-документ має:
  • Лише один елемент у корені.
  • Непорожні елементи розмічено початковим та кінцевим тегами (наприклад, <пункт>Пункт 1</пункт>). Порожні елементи можуть позначатися «закритим» тегом, наприклад <IAmEmpty />. Така пара еквівалентна <IAmEmpty></IAmEmpty>.
  • Один елемент не може мати декілька атрибутів з однаковою назвою. Значення атрибутів перебувають або в одинарних ('), або у подвійних (") лапках.
  • Теги можуть бути вкладені, але не можуть перекриватись. Кожен некореневий елемент мусить повністю перебувати в іншому елементі.
  • Документ має складатися тільки з правильно закодованих дозволених символів Юнікоду. Єдиними кодуваннями, які обов'язково має розуміти XML-процесор, є UTF-16 та UTF-8. Фактичне та задеклароване кодування (англ. character encoding) документа мають збігатись. Кодування може бути задекларовано ззовні, як у заголовку «Content-Type» при передачі за протоколом HTTP, або в самому документі використанням явної розмітки на самому початку документа. У разі відсутності інформації про кодування документ має бути в кодуванні UTF-8 (або його підмножині ASCII).
Валідність
Документ називається валідним (англ. valid), якщо він є коректним, містить посилання на граматичні правила та повністю відповідає обмеженням, вказаним у цих правилах (DTD або XML Schema або іншому подібному документі).
Синтаксичний аналізатор
Синтаксичним аналізатором (часто парсер, від англ. parser) називається програма або компонент, що читає XML-документ, проводить синтаксичний аналіз та відтворює його структуру. Якщо синтаксичний аналізатор перевіряє документ на валідність, то такий аналізатор називають валідатором (англ. validating).

Назви елементів чутливі до регістру літер. Наприклад, наступна пара елементів правильна:

<Step></Step>

у той час як ця — ні:

<Step></step>

Правильний вибір назв для XML-елементів підкреслюватиме значення даних у створеній мові розмітки. Це сприятиме полегшенню роботи людей з такими документами, зберігаючи можливості для комп'ютерної обробки даних. Вибір змістовних назв передає семантику елементів та атрибутів для людини, без посилання на зовнішню документацію. Однак це може призвести до надмірності розмітки, що ускладнює редагування й збільшує розмір файлів.

Структура[ред. | ред. код]

Приклад XML-документа:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xml:lang="uk">
  <page>
    <title>Фукідід</title>
    <id>1529</id>
    <revision>
      <id>4382</id>
      <timestamp>2006-09-18T22:11:53Z</timestamp>
      <minor />
      <comment>Interwiki</comment>
      <text xml:space="preserve">{{Wikipedia}}
      *Історія  це філософія в прикладах.
      </text>
    </revision>
  </page>
</mediawiki>

XML-документи мають як фізичну, так і логічну структуру.

Фізична структура[ред. | ред. код]

  • Сутності (англ. Entity). Головною сутністю є зміст документа. Інші можливі сутності вказуються за допомогою
    • Посилання на сутності (&назва; в самому документі, та, наприклад %назва; у визначені його типу) можуть слугувати в ролі позначень спеціальних символів, посилань на спеціальні символи (вказуючи коди символів &#десяткове;, або &#xшістнадцяткове;) або окремих документів чи фрагментів тексту.
  • XML-декларація, в ній вказується версія XML, кодування та інша допоміжна інформація.
  • Декларація типу документа може застосовуватись для того, аби додавати нові типи сутностей та визначати логічну структуру документа.

Логічна структура[ред. | ред. код]

XML-документ має ієрархічну логічну структуру, і може представлятись у вигляді дерева. Вузлами цього дерева можуть бути:

  • елементи, фізична структура яких складається із:
    • коректної пари відкриваючого та закриваючого тегів (<Назва-тегу>) та (</Назва-тегу>), або
    • тегу порожнього елемента (<Назва-тегу />),
  • Атрибути, що мають вигляд пар ключ-значення (назва атрибута="значення атрибута") і знаходяться або у відкриваючому, або у порожньому тегу (подібно до метаданих),
  • Вказівки щодо обробки документа (англ. Processing Instruction) (<?Обробник параметр ?>)
  • Коментарі (<!-- Текст коментаря -->)
  • Текст, або у вигляді простого тексту, або фрагментів CDATA (<![CDATA[ довільний текст]]>).

XML-документ повинен мати лише один кореневий елемент. Решта елементів є піделементами цього кореневого елемента.

Деякі веббраузери здатні безпосередньо відображати XML-документи. Це може досягатись шляхом застосування таблиці стилів (англ. Stylesheet). Вказані у таблиці стилів операції можуть призводити до перетворення XML-документа в інший, відмінний від XML формат.

Коректність XML-документів[ред. | ред. код]

Залишивши назви, дозволену ієрархію, та значення елементів і атрибутів відкритою та можливою бути визначеною в спеціалізованих схемах або визначеннях типу документа (DTD), XML утворює синтаксичну основу для створення спеціалізованих, заснованих на XML мовах розмітки даних. Загальний синтаксис таких документів стабільний і наперед визначений — документи мають відповідати базовим вимогам XML, гарантуючи те, що довільне програмне забезпечення з підтримкою XML буде здатне щонайменше зчитати і відтворити відносну структуру інформації, що міститься в них. Схема лише доповнює синтаксичні правила множиною обмежень. Зазвичай схеми обмежують назви елементів та атрибутів, дозволені типи значень і допустиму ієрархію елементів, наприклад, дозволяючи лише елементу з назвою «народження» містити піделемент із назвою «місяць» та з назвою «день», і кожен із них мусить містити лише літери. Обмеження, вказані в схемі, можуть також включати присвоєння певних типів даних для впливу на те, як обробляється інформація; наприклад, дані елемента «місяць» можна визначити як такі, що містять лише місяць, як це визначено відповідно до використаної мови схем.

Коректний XML-документ, що відповідає обмеженням схеми або DTD, називається валідним.

DTD[ред. | ред. код]

Докладніше: Document Type Definition

Найдавнішим форматом схем для XML є успадкований від SGML формат визначення типу документа (Document Type Definition, DTD). У той час, як через включення до стандарту XML 1.0 DTD став поширеним форматом схем, він має такі обмеження:

  • Відсутність нових можливостей XML, із найважливішою з посеред них простори назв.
  • Брак виразності. Деякі формальні аспекти XML-документів неможливо відобразити в DTD.
  • Використовується спеціалізований, заснований не на XML синтаксис для опису схем.

DTD все ще використовується в багатьох програмах, оскільки він вважається найпростішим форматом для аналізу та збереження.

XML Schema[ред. | ред. код]

Докладніше: XML Schema (W3C)

На заміну DTD було розроблено нову мову схем — XML Schema (буквально — XML-схема), скорочено позначається як XSD (від англ. XML Schema Definition). XSD набагато потужніші за DTD в описанні заснованих на XML мов. Вони використовують багатий набір типів даних, підтримують детальніші обмеження на структуру документів, та повинні оброблятись складнішими системами. XSD побудовано на основі XML, що робить можливим використання звичайних інструментів XML для їхньої обробки, хоча реалізації XSD вимагають набагато більше аніж просто можливість читати XML.

Серед недоліків XSD називають такі:

  • Специфікація дуже велика, що робить її складною для розуміння та реалізації.
  • Оснований на XML синтаксис додає надмірності мові, що ускладнює читання та запис XSD.
  • Валідація відносно схеми може бути дорогим додатком до синтаксичного аналізу XML-документів.
  • Можливості моделювання дуже обмежені, без можливості впливу значень атрибутів на вміст елементів.
  • Модель отримання типів даних є дуже обмеженою, зокрема в тому, що отримання шляхом розширення є рідко коли корисним.
  • Механізми ключа/посилання на ключ/унікальності не враховують тип даних.
  • Концепція PSVI (англ. Post Schema Validation Infoset) не має стандартного представлення або прикладного програмного інтерфейсу, що працює проти незалежності від реалізації, якщо не виконується повторна валідація.

RELAX NG[ред. | ред. код]

Докладніше: RELAX NG

RELAX NG є іншою поширеною мовою схем для XML. Вперше RELAX NG було визначено стандартом OASIS, а тепер — міжнародним стандартом ISO (як частина DSDL). Ця мова схем має два формати: оснований на XML, та компактний, не-XML. Компактний синтаксис призначений для покращення можливості читання та написання схем, однак, оскільки існує точно визначений спосіб[3] перетворення компактного формату в оснований на XML, і навпаки, не втрачаються переваги від використання стандартних XML-інструментів. RELAX NG має простіші системи для визначення та валідації у порівнянні з XML Schema, що робить її привабливішою для використання та реалізації. Також існує можливість використання модулів роботи з типом даних; наприклад, автор схеми RELAX NG може вказати, що значення XML-документа мають відповідати визначенням типам даних у форматі XML Schema Datatypes.

ISO DSDL та інші мови схем[ред. | ред. код]

Стандарт ISO DSDL (англ. Document Schema Description Languages, мови описання схем документів) об'єднує широке коло малих мов схем, кожна із яких призначена для розв'язання окремих проблем. До DSDL належить RELAX NG із повним та компактним синтаксисом, мова припущень Schematron, та мови для визначення типів даних, обмежень на літери, перейменування та розкривання мнемонік, та основане на просторах назв перенаправлення фрагментів документів у різні валідатори. Мови DSDL все ще не мають підтримки як у XML Schema, і є, певною мірою, реакцією видавців на брак можливостей XML Schema для видавничої справи.

Деякі мови схем не тільки описують структуру певного формату XML-документів, а ще і мають обмежені можливості впливу на обробку документів цього формату. Як DTD, так і XSD мають цю можливість; наприклад, вони можуть визначати значення для атрибутів «за замовченням». Натомість, як RELAX NG так і Schematron таких можливостей не мають.

Обробка XML-документів[ред. | ред. код]

До XML-обробки відносяться форматування, синтаксичний аналіз, редагування, перевірка коректності і перетворення в інші формати[4].

До традиційних технологій обробки XML-документів належать такі три технології:

  • Написання програм на мові програмування із використанням API SAX.
  • Написання програм на мові програмування із використанням API DOM.
  • Застосування механізму перетворення та фільтра.

До новіших технологій, що почали здобувати поширення останнім часом належать:

  • Активний аналіз.
  • Зв'язування даних.

Простий API для XML (SAX)[ред. | ред. код]

Докладніше: SAX

Простий програмний інтерфейс для XML (англ. Simple API for XML, SAX) є основаним на подіях інтерфейсом лексичного аналізу. Відповідно до цієї моделі, документ аналізується послідовно, а вміст документа передається на обробники подій аналізатора користувача. SAX є порівняно швидким та легким для реалізації, проте складним з точки зору задачі отримання інформації із різних частин XML-документів, оскільки розробник аналізатора мусить дбати про відстеження поточної частини документа. Запропонований SAX підхід краще підходить до ситуацій, коли певний тип інформації завжди обробляється однаково, попри те, в якій частині документа вона знаходиться.

Об'єктна модель документа (DOM)[ред. | ред. код]

Об'єктна модель документа (англ. Document Object Model, DOM) є програмним інтерфейсом, який дозволяє здійснювати обхід цілого документа так, наче він є деревом, вузлами якого є об'єкти, що відтворюють зміст документа. Документ DOM може створюватись синтаксичним аналізатором або користувачами (з деякими обмеженнями). Типи даних вузлів DOM-дерев є абстрактними; реалізації мають власні, специфічні для мов програмування типи даних. Реалізації DOM мають тенденцію до інтенсивного використання пам'яті, оскільки зазвичай перед початком роботи документ має бути повністю завантажений, оброблений та перетворений на дерево об'єктів.

Перетворення документів[ред. | ред. код]

Докладніше: Extensible Stylesheet Language

Фільтр в родині XSL може перетворювати XML-документи на інші XML-документи[джерело?], для перегляду на екрані або друку.

  • XSL-FO є декларативною, заснованою на XML мовою для макетування сторінок. XSL-FO процесор може перетворювати XSL-FO документ в інший, не заснований на XML формат, такий як PDF.
  • XSLT є декларативною, основаною на XML мовою описання перетворення документів. XSLT-процесор може використовувати XSLT-стиль в ролі інструкції для перетворення дерева даних, представленого одним XML-документом на інше дерево, що може потім бути серіалізоване в XML, HTML, простий текст, або інший, підтримуваний процесором, формат.
  • XQuery є розробленою консорціумом W3C мовою для написання запитів, створення та перетворення XML-даних.
  • XPath є подібною до DOM моделлю дерева та мовою описання шляхів для вибору даних в XML-документах. XSL-FO, XSLT та XQuery використовують XPath. XPath також містить бібліотеку додаткових функцій.

Активний аналіз[ред. | ред. код]

З точки зору активного аналізу (англ. Pull parsing)[5] XML-документ розглядається як послідовність елементів, які зчитуються послідовно, використовуючи шаблон проектування ітератор. Такий підхід дозволяє створення рекурсивних аналізаторів, у яких структура коду відображає структуру аналізованих XML-документів, проміжні результати аналізу можуть бути використані і розміщені у вигляді локальних змінних в підпрограмах, що виконують аналіз, передані як параметри до підпрограм нижчого рівня або повернені до підпрограм вищого рівня. До прикладів активних аналізаторів належать StAX у мові програмування Java, SimpleXML у PHP та System.Xml.XmlReader у .NET.

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

Зв'язування даних[ред. | ред. код]

Іншим підходом до обробки XML-документів є зв'язування даних (англ. Data binding). Відповідно до цього підходу, XML-дані доступні у вигляді спеціальних, строго типізованих структур даних.

Історія[ред. | ред. код]

Специфікації та стандарти XML видаються комітетом W3C, поточний стандарт — версії 1.1 (див. [Архівовано 13 червня 2006 у Wayback Machine.]).

Основними відмінностями від SGML є:

  • обов'язкова наявність закриваючих тегів,
  • заборонено робити посилання на зовнішні елементи;

Див. також повний перелік відмінностей [Архівовано 15 червня 2006 у Wayback Machine.].

Примітки[ред. | ред. код]

  1. Bray, Tim; Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, François Yergeau (September 2006). Extensible Markup Language (XML) 1.0 (Fourth Edition) — Origin and Goals. World Wide Web Consortium. Архів оригіналу за 23 червня 2013. Процитовано October 29 2006. 
  2. Elliotte Rusty Harold, W. Scott Means (липень 2002). XML in a Nutshell (англійська) (вид. друге). O'Reilly. ISBN 0-596-00292-0. 
  3. Trang conversion tool. Архів оригіналу за 2 лютого 2008. Процитовано 5 лютого 2008. 
  4. Знакомство с современными средствами работы с XML. Архів оригіналу за 20 листопада 2015. Процитовано 23 квітня 2014. 
  5. Push, Pull, Next! [Архівовано 12 травня 2008 у Wayback Machine.] by Bob DuCharme, at XML.com

Література[ред. | ред. код]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]