Студопедия

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

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

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






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 :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.