Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • DOM XML. Перетворення XML документів.






    Для програмної обробки XML документів використовується модель XML DOM, яка визначає об'єкти і властивості всіх XML елементів і методи (інтерфейс) для доступу до них. Інакше кажучи, XML DOM описує яким чином необхідно отримувати, змінювати, додавати та видаляти XML елементи.

    Згідно DOM:

    - все, що міститься всередині XML документа, є вузлом;

    - весь документ представляється вузлом документа;

    - кожен XML елемент - вузол елемента;

    - текст всередині XML елементів - текстовий вузол;

    - кожен атрибут - вузол атрибута;

    - коментарі - вузли коментарів.

    XML документ відповідно до моделі XML DOM представляється як дерево з вузлів, при цьому:

    - Всі вузли дерева знаходяться в певних відносинах один з одним.

    - Всі вузли доступні через дерево. Їх вміст може бути змінено, видалено; нові елементи можуть бути додані в дерево.

    - Дерево починається з кореневого вузла і розгалужується вниз аж до текстових вузлів на самому нижчому рівні дерева.

    - Всі вузли знаходяться в ієрархічних відносинах між собою.

    - Ці відносини описуються за допомогою понять батько, дочірній і нащадок (всі дочірні на одному рівні).

    Альтернативним інтерфейсом для обробки XML документів є SAX.

    SAX (Simple API for XML) - прикладний програмний інтерфейс для парсеру з послідовним доступом до XML. Цей інтерфейс надає механізм читання даних з XML документа.

    SAX парсер є потоковим і керованим подіями. Завданням користувача SAX API полягає в описі методів, що викликаються подіями, що виникають при аналізі документа.

    Такими подіями можуть бути наступні:

    - текстовий вузол;

    - вузол елемента XML;

    - інструкція обробки XML;

    - коментар XML.

    Події викликаються появою відкритого тега, так і закритого тега будь-якого з цих елементів документа. Атрибут XML також розглядається як подія. Аналіз документа є односпрямованим (тобто без повернень по дереву).

    На відміну від DOM формальної специфікації для SAX не існує. В якості нормативної розглядається Java реалізація SAX.

    Слід відзначити наступні переваги і недоліки SAX.

    Переваги:

    - витрати пам'яті істотно менше (залежить від максимальної глибини дерева документа та кількості атрибутів у вузлі елемента), ніж у випадку DOM (потрібно зберігати в пам'яті все дерево документа);

    - швидкість роботи вище за рахунок скорочення витрат часу на виділення пам'яті для елементів дерева в разі DOM;

    - потокове читання даних з диска в разі DOM неможливо. Якщо для розміщення всього документа в пам'яті недостатньо місця, то використання SAX є безальтернативним.

    Недоліки:

    - процедура перевірки правильності передбачає доступ до всього документа одночасно;

    - це також потрібно і в разі XSLT перетворення.

    Якщо завантажити " чистий" XML документ в веб-браузер, то можна буде побачити деревоподібну структуру цього документа (рис. 4.2)

     

    Рисунок 4.2 - Структура XML документа

     

    В цьому якраз і полягає головна відмінність між XML і HTML, а саме поділ структури документа і його представлення в браузері. Конкретний вид XML документа описується окремо за допомогою CSS або XSL.

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

    За допомогою XSL можна перетворити XML-документ в формат HTML, WML, RTF, PDF, SQL, SWF, а так само в інший XML і XSL документ. XSL вказує як буде оформлений документ, де і яким чином повинні розміщуватися дані.

    Специфікація XSL складається з трьох частин:

    - XSLT (XSL Transformations), мова для перетворення XML;

    - XPath - мова шляхів і виразів, використовуваний в XSLT для доступу до окремих частин XML-документа;

    - XSL-FO (XSL Formatting Objects), мова для верстки XML.

    Найбільш поширеним механізмом XSLT перетворень для систем працюють на платформі Microsoft Windows є MSXML; для систем на основі GNU - xsltproc.

     

    Для того, щоб обробити XML документ c допомогою XSL, необхідно в XML документі написати наступну інструкцію: <? xml version=" 1.0"? >

    <? xml-stylesheet type=" text/xsl" href=" my-style.xsl"? >

    < root>

    <! --... -- >

    < /root>

    Добавимо в XML файл посилання на XSL файл, отримаємо наступний код розмітки:

    <? xml version=" 1.0" encoding=" windows-1251"? > <! DOCTYPE mailbox SYSTEM " mailbox.dtd" > <? xml-stylesheet href=" mailbox.xsl" type=" text/xsl"? >   < mailbox> < message uid='1'> < body> Перевірка поштового ящика< /body> < head> < to> user2@myhp.edu< /to> < to> user3@myhp.edu< /to> < from> user1@myhp.edu< /from> < subject> Test< /subject> < cc> < /cc> < notify> < /notify> < /head> < /message> < message uid='2'> < body> Цей лист не є спамом< /body> < head> < to> user2@myhp.edu< /to> < from> user4@myhp.edu< /from> < subject> Цікава пропозиція< /subject> < notify> < /notify> < /head> < /message> < /mailbox>

    Після загрузки даного файлу вид в браузері документа зміниться:

     

    Рисунок 4.3 - Результат роботи скрипта

     

    Вміст XSL файла mailbox.xsl наводиться нижче:

    <? xml version=" 1.0" encoding=" windows-1251"? > < xsl: stylesheet version=" 1.0" xmlns: xsl=" https://www.w3.org/1999/XSL/Transform" >   < xsl: template match = " mailbox" > < h2 align=" center" color=" red" > Поштовий ящик< /h2> < xsl: apply-templates/> < /xsl: template>   < xsl: template match = " message" > < table align=" center" border=" 0" width=" 80%" bgcolor=" gray" > < tr> < td width=" 20%" > < b> From: < /b> < /td> < td> < xsl: value-of select=" head/from" /> < /td> < /tr> < tr> < td width=" 20%" > < b> To: < /b> < /td> < td> < xsl: for-each select=" head/to" > < xsl: apply-templates/>, < /xsl: for-each> < /td> < /tr> < tr> < td width=" 20%" > < b> Subject: < /b> < /td> < td> < xsl: value-of select=" head/subject" /> < /td> < /tr> < tr> < td width=" 20%" > < b> CC< /b> < /td> < td> < xsl: value-of select=" head/cc" /> < /td> < /tr> < tr> < td width=" 20%" > < b> Notify< /b> < /td> < td> < xsl: value-of select=" head/notify" /> < /td> < /tr> < tr> < td colspan=" 2" > < textarea cols=" 120%" rows=" 3" > < xsl: value-of select=" body" /> < /textarea> < /td> < /tr> < /table> < br/> < hr/> < br/> < /xsl: template>   < /xsl: stylesheet>

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.