XML

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

Розши́рювана мо́ва розмі́тки (англ. Extensible Markup Language, скорочено XML) — запропонований консорціумом World Wide Web (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 документів належать такі три технології:

  • Написання програм на мові програмування із використанням 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)[4] XML документ розглядається як послідовність елементів, які зчитуються послідовно використовуючи шаблон проектування ітератор. Такий підхід дозволяє створення рекурсивних аналізаторів, у яких структура коду відображає структуру аналізованих XML документів, проміжні результати аналізу можуть бути використані і розміщені у вигляді локальних змінних в підпрограмах, що виконують аналіз, передані як параметри до підпрограм нижчого рівня або повернені до підпрограм вищого рівня. До прикладів активних аналізаторів належать StAX у мові програмування Java, SimpleXML у PHP та System.Xml.XmlReader у .NET.

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

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

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

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

Специфікації та стандарти XML видаються комітетом W3C, поточний стандарт — версії 1.1 (див.).

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

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

Дивіться також повний перелік відмінностей.

Джерела інформації[ред.ред. код]

  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. Архів оригіналу за 2013-06-23. Процитовано October 29 2006. 
  2. Elliotte Rusty Harold, W. Scott Means. XML in a Nutshell (англ. ) (вид. друге). O'Reilly. ISBN 0-596-00292-0.  Проігноровано невідомий параметр |пубрік= (довідка); Проігноровано невідомий параметр |пубмісяць= (довідка)
  3. Trang conversion tool
  4. Push, Pull, Next! by Bob DuCharme, at XML.com

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

Ресурси інтернет[ред.ред. код]

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