XML на екрані броузера

Абревіатура XML останнім часом, як мовиться, “на слуху”. Підтримку XML обіцяють виробники нових броузерів, розробляються XML-редактори, все частіше можна почути про чергові неймовірних застосуваннях XML. Що ж стало причиною появи і настільки швидкого поширення цієї технології?

Більшість фахівців майже одностайні в тому, що HTML погано справляється із збільшеними вимогами до публікованим в Web документами і йому необхідно терміново шукати заміну. Одним з перших кандидатів на роль основного мови представлення інформації вважається саме XML.

З моменту появи XML пройшло зовсім небагато часу, проте він дуже швидко став популярним. Багато вже вибрали його як інструмент для роботи і, схоже, не каються у скоєному.

Універсальний засіб опису даних


Незважаючи на те що XML часто розглядають як альтернативу HTML, в списку застосувань даної мови досить рідко зустрічаються посилання на Web-вузли, які використовують XML саме для розмітки документів. Тут явно лідирують повідомлення про спеціалізованих мовах опису даних, побудованих на його основі.

Одним з перших таких мов став AML (Astronomical Markup Language), створений для обміну не тільки параметрами небесних об’єктів, але також статтями, таблицями, зображеннями, відомостями про персонал, одним словом, будь-якою інформацією, необхідною в повсякденному житті обсерваторії. За астрономами пішли й інші вчені. Для подання математичних даних і передачі їх по мережі був розроблений MathML (Mathematical Markup Language). Цілу серію подібних продуктів створили біологи: SBML (Systems Biology Markup Language), BIOML (BIOpolymer Markup Language), BSML (Bioinformatic Sequence Markup Language) та ін

Активно ведуться роботи і в інших областях. Проект VHG (Virtual HyperGlossary) передбачає побудову системи взаємопов’язаних словників, покликаних утворити “термінологічну середу” для різноманітних документів. Мова опису векторної графіки VML (Vector Markup Language) повинен забезпечити підтримку наборів зображень, об’єднаних за допомогою посилань. Створюються також мови, спеціально призначені для роботи з архівами, для побудови навчальних систем. Цей список можна продовжувати дуже довго. Чи треба говорити, що в основі всіх перерахованих мов лежить все той же XML?

Така велика кількість застосувань не випадково. Адже XML-файл вже сам зі себе – готова ієрархічна база даних. Залишається лише задати обмеження і написати мову запитів, основою для якого послужить … все той ж XML. На роль такої мови запитів претендує XML-QL, причому версія 0.9 вже доступна користувачам. Аналогічну мету ставили перед собою і творці мов XQL, YATL і XSQL.

А як же Web?


Отже, опис даних, мова запитів. А як же власне “ML”? Адже XML – це eXtensible Markup Language, тобто мова розмітки. Як він виглядає в якості альтернативи HTML? І чи потрібна ця альтернатива? На останнє питання більшість фахівців одностайно відповідають “Так!”. Мова HTML погано справляється з роллю основного засобу публікації в Web. Головний його недолік полягає в повній відсутності інструментарію для структурування документів. Така якість, як гнучкість, теж мало притаманне HTML. Нові можливості в кращому випадку стануть доступними з виходом чергової версії, а до тих пір – обходься тим, що маєш.

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

Повна свобода у виборі імен елементів компенсується жорсткими вимогами до структури документа. На відміну від HTML, в XML кожному відкриваючому дескриптору відповідає закриваючий, пара дескрипторів формує елемент XML. Правда, в XML-документі можуть зустрічатися і одиночні дескриптори, але це не виключення з правила, а лише пара дескрипторів, об’єднана в один.

Сувора ієрархія і відношення батьківський – дочірній між елементами XML відкривають нові, небачені раніше можливості при реалізації засобів пошуку. Зараз, коли вміст Web в основному складається з HTML-документів, користувачеві доводиться задовольнятися пошуком за ключовими словами. Якщо в документі відсутня структура, пошукова система не може, наприклад, за ключовим словом Pascal визначити, йдеться про мову програмування або про вченого, на честь якого ця мова був названий. Якщо ж документи структуровані, питання з контекстом вирішується набагато простіше: треба, задаючи критерії пошуку, вказати необхідний розділ.

Ієрархічна структура дає можливість легко вирішити ще одну проблему. На сьогоднішній день якщо користувачеві потрібно не весь документ, а лише його частина, все одно доводиться копіювати по мережі цілий файл. Незважаючи на те що HTML дозволяє відзначити маркером позицію всередині тексту, визначити, де закінчується розділ, неможливо. Якщо ж при цьому строго дотримується вкладеність елементів, копіювання одного розділу стає цілком реальним завданням. Саме для її вирішення призначена специфікація XML Pointer Language, або Xpointer, що регламентує порядок адресації фрагментів XML-документа.

Отже, потенційні можливості наявності. Залишилося тільки реалізувати їх.

Структура на екрані


Написати простий XML-документ зовсім нескладно, з цим впорається навіть починаючий. А для тих, хто абсолютно нічого не знає про XML, в Internet опубліковано безліч навчальних посібників, одне з яких обіцяє навчити цій мові всього за 11 з половиною хвилин. Приблизно стільки часу і потрібно новачкові для того, щоб на його комп’ютері з’явився файл, вміст якого виглядає приблизно як на следующме прикладі:

<?xml version=”1.0″?>
<OS>
<UNIX>
<BSD>
<Name>FreeBSD</Name>
<Platform>Platform: PC and oth.</Platform>
</BSD>
<SunOS>
<Name>SunOS</Name>
<Platform>Platform: Sun</Platform>
</SunOS>
</UNIX>
<Win95>
<Name>Windows 95</Name>
<Platform>Platform: PC</Platform>
</Win95>
</OS>

Але, крім здатності описувати дані, XML повинен “вміти” відображати їх, в іншому випадку про застосування в Web не може бути й мови. На перший погляд абсолютно незрозуміло, в якому вигляді документ буде виведений на екран. Безпосередньо про це не говориться ні в одному з посібників, а мимохідь кинуті фрази часто вислизають від уваги.

Що ж робити з документом? Адже в ньому немає навіть натяку на форматування. Смішно припускати, що броузер зможе вгадати, в якому вигляді автор хотів би представити свій твір на екрані, проте важко утриматися від спокуси тут же відкрити його в одній з підтримуючих XML броузерів, благо, їх стає все більше. Для першого експерименту цілком підійде Internet Explorer 5.0 або більш пізня версія.

Отже, документ відкритий, і перед очима постає доволі несподівана картина. Природно було б очікувати презирливого повідомлення про помилку, але замість цього відтворюється структура документа (рис. 1): дотримана ієрархія об’єктів; клацнувши на символі “-“, можна згорнути частину документа, а на знаку “+” – відобразити її знову.



Результат, звичайно, вражає, хоча назвати його повноцінним Web-сторінкою можна насилу. Структура на екрані навряд чи приверне відвідувача. Без форматування все ж не обійтися.

Таблиці стилів


Щоб отримати на екрані пристойний результат, треба згадати про каскадних таблицях стилів (CSS), які часто використовуються розробниками HTML-документів. Для форматування документа досить зв’язати з ним CSS-файл, визначивши стиль для кожного елемента (лістинг 2).


OS
{
  display: block;
  text-align: left;
  font-size: 16pt;
}
Name, Platform
{
  display: block;
}
Platform
{
  font-size: 12pt;
}


Тепер результат досягнутий. На екрані відображається повноцінний документ, але створений вже не на HTML, а на XML (рис. 2).



На перший погляд здається, що XML не дозволяє зробити нічого такого, чого не можна було б досягти за допомогою засобів HTML і CSS. Більш того, якщо в HTML вибір подання всіх елементів можна залишити на розсуд броузера, то при побудові XML-документа доводиться самостійно продумувати формат кожного. Безумовно, це вимагає зусиль і часу, зате потім переваги XML стають очевидними.

У XML-документі опис даних повністю відокремлене від опису формату. Саме ця властивість XML доставляє безліч неприємностей початківцю. Враховуючи, що XML-документ має сувору деревоподібну структуру, можна уявити собі, які багаті можливості отримує Web-дизайнер. Припустимо, що розробник вирішив виділити відомості про свою улюблену системі (звичайно ж Unix) червоним кольором. Для цього треба додати всього один рядок в CSS-файл:

UNIX { color: red }

Як бачите, файл з описом даних редагувати не треба. У HTML для цього треба було б проаналізувати код документа, знайти потрібні абзаци (зауважте, що розміри реального файлу зазвичай не обмежуються десятком рядків) і включити у вихідний текст нові дескриптори. А якщо в подальшому розробник вирішив би відобразити заголовки яким-небудь іншим кольором (наприклад, зеленим), він майже напевно заплутався б в HTML-коді. При роботі ж з XML необхідні дії як і раніше тривіальні.

Здавалося б, використання CSS вирішує проблему з відображенням XML-документів, однак при уважному розгляді доводиться визнати, що CSS не дозволяє повністю розкрити потенційні можливості XML.

Уявіть собі, що, експериментуючи з візуалізацією документа, розробник вирішив трохи зменшити розмір шрифту, яким відображаються заголовки для BSD та SunOS (дійсно, адже це лише різні клони однієї системи), і об’єднати їх в одному підрозділі (наприклад, “UNIX”). Але якщо відредагувати стиль елемента Name, зменшиться і заголовок для Win95, що суперечить попереднім планом. Щоб таке перетворення стало можливим, правила форматування тексту повинні бути контекстно-залежними. Треба, щоб Name виводився по-різному виходячи з приналежності до батьківського елементу.

Дивлячись на XML-файл, текст якого наведено на початку статті, можна помітити, що в кожному з елементів Platform повторюється слово Platform:. Було б розумним зовсім виключити це слово з вихідного тексту і відображати його в процесі форматування.

Після деяких роздумів доводиться констатувати, що виразні засоби каскадних таблиць стилів не дозволяють вирішити ні першого, ні другого завдання. І якщо при переході від CSS1 до CSS2 і з’являється можливість розпізнавати контекст, то для вставки тексту на етапі форматування потрібні набагато більш потужні засоби. Ймовірно, до такого ж висновку прийшли і розробники XML, оскільки результатом їх діяльності стала специфікація нової мови для форматування і перетворення XML-документів. Ця мова отримав назву XSL (eXtensible Style Language).

Крок за горизонт: XSL


Життя повне несподіванок. Приступивши до вивчення XML, Web-майстер змушений згадати (або вивчити заново) CSS, потім з’ясовується, що для того щоб рухатися далі, треба розібратися в можливостях XSL, які виходять далеко за рамки використання XML у Web. Дійсно, засоби XSL дозволяють не тільки форматувати, але й конвертувати XML-документ, представляючи його практично в будь-якому вигляді: від форматів, використовуваних для опису тексту (PDF, PostScript, SGML, TeX), до звукових і графічних файлів.

Але того, хто захоче створити реальний XML-документ і розмістити його на сервері (звичайно ж, використовуючи XSL), підстерігає чергова проблема. Справа в тому, що багато використовувані в даний час броузери далеко не “одностайні” в інтерпретації XML, а деякі й зовсім не підтримують цю мову. Ситуація ускладнюється і тим, що специфікація XSL все ще досить часто піддається змінам.

Як же бути? Напевно, варто згадати про те, що XSL дозволяє перетворювати формати майже без обмежень і вибрати з них такий, який найкраще оброблявся б броузерами, тобто … старий добрий HTML. Для цієї мети скористаємося наступним XSL-описом:

<?xml version=”1.0″?>
<xsl:transform version=”1.0″ xmlns:xsl=”http://www.w3.org/ 1999/XSL/Transform”>
<xsl:template match=”OS”>
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match=”Name”>
<H2>
<xsl:apply-templates/>
</H2>
</xsl:template>
<xsl:template match=”Platform”>
<H4><I>
<xsl:apply-templates/>
</I></H4>
</xsl:template>
</xsl:transform>

При такому поданні стилів не складає ніяких труднощів вибірково налаштувати вигляд одного або декількох елементів. Щоб змінити рівень заголовків BSD та SunOS і об’єднати їх в один розділ, достатньо рядків, представлених на лістингу 4.

А для того щоб виключити слово Platform: з вихідного тексту, досить змінити відповідний елемент XSL-опису.

<xsl:template match=”Platform”>
<H4><I>Platform:
<xsl:apply-templates/>
</I></H4>
</xsl:template>

Дійсно, тепер засоби публікації документа придбали нову властивість, якого їм так бракувало раніше, – гнучкість. Тим не менш нам є про що задуматися. Зверніть увагу, що, намагаючись піти від обмежень, що накладаються HTML, довелося вивчити XML, вирішити безліч проблем і … знову повернутися до HTML. Замкнуте коло? Ні, так тільки здається. Адже вихідний текст документа і раніше представлений на XML, у XSL-файлі зберігається його стильовий опис, а HTML – лише вихідний формат, який в будь-який момент може бути змінений. При необхідності модифікувати документ редагується тільки структурований XML-файл, перетворений в HTML за допомогою формальної процедури.

На поводу у примхливого броузера


Отже, XML-документ і його стильове опис в XSL-файлі готові. Залишилося представити його читачеві. Але як це зробити? Найпростіше рішення – передати XML-й XSL-дані броузеру, надавши йому виконувати перетворення самостійно. Але, як уже говорилося, більшість броузерів просто не впораються з обробкою такого документа.

Мабуть, єдиний прийнятний на сьогоднішній день вихід – конвертувати XML-файл ще на сервері. Це можна зробити динамічно при зверненні клієнта, а можна виконувати перетворення відразу після закінчення роботи над документом і представляти на сервері його HTML-версію. Адміністратор Web-вузла повинен вирішити, що йому простіше: реалізовувати ISAPI-фільтр, що розпізнає звернення до XML-файлів, або конвертувати їх після кожного редагування.

До речі, про необхідні інструментах вже подбали розробники. Один з найпопулярніших перетворювачів під назвою XT, створений Джеймсом Кларком (James Clark), може працювати на різних платформах. А конвертувати документ динамічно при зверненні клієнта до сервера дозволяє XML Enabler, реалізований у вигляді сервлету.

Вітер змін у Web


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

<xsl:template match=”UNIX”>
<H2>UNIX</H2>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=”BSD/child::Name”>
<H3>
<xsl:apply-templates/>
</H3>
</xsl:template>
<xsl:template match=”SunOS/child::Name”>
<H3>
<xsl:apply-templates/>
</H3>
</xsl:template>

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*