XML технології і засоби розробки Gupta Team Developer: XML і CTD. Частина 2, Різне, Програмування, статті

Зміст


В першій частині статті ми розглянули питання XML технологій, пов’язані організацією документів і основних механізмів їх перетворення. Дані технологічні процеси виконуються стандартними засобами (інтернет броузерами, XSL процесорами і т.д.) і не вимагають втручання програміста.

У другій частині ми розглянемо аспекти програмної обробки XML документів. Принципово треба відзначити, що все те, що доступно в стандартних засобах обробки (навіть більше) ставати доступними з використанням Microsoft XML SDK. Думаю, що даний інструментарій не є єдиним у своєму роді і кваліфікований програміст може без особливих зусиль створити і свої кошти для підтримки XML, проте в даній статті ми зупинимося саме на можливостях цих компонент, які автоматично подаються разом з MS IE, починаючи з версії 5.0. Версія, на яку ми будемо спиратися в цій статті XML SDK 3.0, можна з успіхом використовувати і більш ранні версії (1,0, 2.0, 2.5 і 2.6), проте вони обмежені за можливостями і містять недоліки, які виправлені в нових версіях. Остання версія XML SDK – 4.0 вже анонсована, але мені поки недоступна, однак перелік тих питань, які ми будемо розглядати, цілком укладаються в пропоновану для знайомства версію коштів програмних розробок.

Основні поняття XML SDK

XML SDK 3.0 являє собою сукупність CОМ об’єктів, які встановлюються в середовищі WIN32, доступ до цих об’єктів здійснюється на основі AX механізмів. Доступ до цих засобів здійснюється в будь-яких мовах і системах програмування, що підтримують АХ: VBScript, Jscript, JAVA, C + + всіх версій, Delphi, Centura Team Developer / TD і багатьох інших. XML SDK являє собою сукупність класів, що містять властивості і методи для обробки XML документів. Крім того, сучасні СУБД орієнтуються на використання XML форматів даних: ORACLE, MS SQL, передбачається включення можливості обробки XML в SQLBase 8.0.

Основні класи, запропоновані в SDK, мають таке призначення:


Основні класи XML SDK

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

Клас DOMDocument2 – Основний клас для роботи з XML документами. Є спадкоємцем класів IXMLDOMNode і класу IXMLDOMDocument2. За допомогою цього класу створюються об’єкти в CTD.

Клас IXMLDOMDocument2 – Базовий клас для обробки XML документів. Підтримує обробку схем даних, контролю документа, перетворення документів.

Основні методи класу DOMDocument2:


load, loadXML, appendChild, hasChildNodes, save, removeChild, createElement, selectNodes, transformNode, transformNodeToObject та інші методи.


Основні властивості класу DOMDocument2:


attributes, doctypes, documentElement, childNodes, firstChild, lastChild, namespaceURI, node-Name, parentNode, parsed, text, validateOnParse, url та інші властивості.


Як видно з опису властивостей і методів класу IXMLDOMDocument2 об’єкти, створювані на його основі працюють безпосередньо з XML документами (load, save тощо) і забезпечують їх перетворення (appendChild, removeChild та ін.)

Клас IXMLDOMElement – Описує об’єкт елементів для XML документа, використовується для доступу до елементів.

Основні методи класу IXMLDOMElement:


normalize, appendChild, hasChildNodes, getAttribute, removeChild, createElement, selectNo-des, transformNode, transformNodeToObject та інші методи.


Основні властивості класу IXMLDOMElement:


attributes, nodeType, childNodes, firstChild, lastChild, namespaceURI, nodeName, parentNode, parsed, text, validateOnParse, ownerDocument та інші властивості.


Клас IXMLDOMElement має схожі методи і властивості, як випливає з визначень XML: документ це теж елемент.

Класи IXMLDOMNode і IXMLDOMNodeList – Описують елементи списку дерева документа XML і сам список. Поняття документа є вкладеним, тому майже всі властивості також збігаються.

Основні методи класу IXMLDOMNode:


nextNode, item, reset, appendChild, hasChildNodes, getAttribute, removeChild, createElement, selectNodes, transformNode, transformNodeToObject та інші методи.


Основні властивості класу IXMLDOMNode:


length, attributes, nodeType, childNodes, firstChild, lastChild, namespaceURI, nodeName, parentNode, parsed, text, validateOnParse, ownerDocument і та інші властивості.


Ці класи забезпечують доступ до елементів їх вибірку зі списків, доступ до атрибутів. Доступ забезпечується як через перегортання (nextNode), так і через вибірку за типами (selectNodes). Цей клас забезпечує перетворення документів на основі XSLT за допомогою спеціальних методів (transformNode і transformNodeToObject).

Клас IXMLDOMAttribute – Описує атрибути елементів та документів, що описують властивості елементів і документів.

Основні методи класу IXMLDOMAttribute:

appendChild, hasChildNodes, getAttribute, removeChild, createElement, selectNodes, transformNode, transformNodeToObject та інші методи.

Основні властивості класу IXMLDOMAttribute:


nodeType, childNodes, firstChild, lastChild, namespaceURI, nodeName, parentNode, parsed, text, validateOnParse, ownerDocument та інші властивості.


Класи IXSLTemplate і IXSLProcessor – Використовуються для виконання перетворень XML документів на основі технології XSLT.

Основні методи класів IXSLTemplate і IXSLProcessor:


createProcessor, transform, addObject, setStartMode, addParameter, reset та ін методи.


Основні властивості класів IXSLTemplate і IXSLProcessor:


stylesheet, input, output, ownerTemplate, readyState, startMode та інші властивості.


Дані класи забезпечують перетворення документів в інші документи, зокрема HTML і XML. Основний метод перетворення – transform.

Клас IXMLDOMParseError – Описує дані, що характеризують вид і місце помилки при її виявленні при перевірці XML документа.

Основні властивості класу IXMLDOMParseError:


errorCode, filepos, line, linepos, reason, srcText , url .


Об’єкти даного класу використовуються при виникненні помилок, або правильності тексту XML, або при перевірках на DTD, або схем даних, або при перетвореннях даних. Вся необхідна інформація про тип помилки, її місце і причини виникнення включається в властивості об’єктів класу IXMLDOMParseError.

Тепер розглянемо, що необхідно зробити, щоб отримати доступ та працювати з XML документами в Centura Team Developer (TD).

Підключення АХ і СОМ об’єктів

Для підключення можливості роботи з об’єктами XML в додатках на Team Developer спочатку необхідно використовувати ActiveX Explorer, що викликається з оболонки Team Developer. У списку підключаються компонент необхідно знайти Microsoft XML 3.0 (2.6, 2.0) і виконати повну генерацію класів і подій. В результаті в додаток підключитися (і запам’ятатися в каталозі centuraAXlibs) Бібліотека “Microsoft XML, v3.0.apl“. Ця бібліотека містить всі класи і механізми підключення до СОМ об’єктів XML. Генерацію даної бібліотеки потрібно виконати одноразово. Після цього ви можете використовувати дані класи в своїх програмах на CTD.


Примітка: При генерації в даній версії XML, через опису стандартної. Tlb виникає невідповідність у типах, яке бажано відразу виправити. Правки “Microsoft XML, v3.0.apl “потрібно зробити вручну під CTD. Ця невідповідність стосується параметрів декількох функцій:


1. Для нормальної роботи з методом PropGetchildren в класі MSXML2_IXMLElement2 його параметри замінюються з MSXML2_IXMLElementCollection на MSXML2_IXMLDOMNodeList. Буде виглядати так після коментування невірного варіанту і додавання правильного:


!MSXML2_IXMLElementCollection : returnValue
MSXML2_IXMLDOMNodeList: returnValue.


2. Для нормальної роботи з методом PropSetstylesheetByRef в класі MSXML2_IXSLTemplate потрібно замінити його параметри з MSXML2_IXMLDOMNode на MSXML2_FreeThreadedDOMDocument30. Буде виглядати так після коментування:


!MSXML2_IXMLDOMNode: rhs
MSXML2_FreeThreadedDOMDocument30: rhs


Потім результат потрібно зберегти, відновити бібліотеку в додатку (Refresh) і все буде нормально працювати в додатках.

Опис об’єктів XML в Team Developer

На малюнку 1 наведені описи об’єктів в CTD, які необхідні для роботи з XML в середовищі засобів розробки. У наведеному прикладі описуються наступні об’єкти: один об’єкт mdoc1 для роботи з XML документом, надалі він буде використаний для завантаження документа з файлу або з рядка; визначені елементи списку elNode і myElem для доступу до елементів документа; мінлива ERRobj, для обробки помилок; а також допоміжні змінні типу Variant – attVar і String – strName, Для передачі параметрів в СОМ об’єкти.

Рис. 1. Опис об’єктів XML

Створення об’єктів XML

Для створення пустого документа використовується метод Create (), як показано на малюнку 2:

Рис. 2. Створення об’єкта XML документа.

У даному прикладі після створення і перевірки на доступ до СОМ об’єктів виконується допоміжна трасування в файл (SalFilePutStr).

Завантаження документа з файлу і рядки

Після створення документа його можна завантажити з зовнішнього файлу (див. малюнок 3), і одночасно перевірити на правильність (перевірка Булевського змінної nRet). Для цього використовується метод load.

Рис. 3. Завантаження документа з файлу. При завантаженні документа з рядка
застосовується метод loadXML, який виконує такі ж операції,
але текст XML береться з рядка, сформованої заздалегідь.

Рис. 4. Завантаження документа з рядка

При виникненні помилки (неправильна організація XML документа), яка повертається мінлива nRet прийме значення FALSE.

Перевірка правильності: проста, на основі DTD і схем даних

Для доступу до елементів і атрибутів створеного і завантаженого документа використовуються спеціальні методи, деякі з них показані на малюнках 7, 8. На малюнку 7 показаний цикл доступу до атрибутів елемента elChild.

Перевірка правильності документа завжди виконується при його завантаженні. Дивіться малюнок нижче. Причому, якщо в документі визначені DTD або схеми (див. частину 1 статті), То перевірка буде автоматично виконана з їх урахуванням.

Рис. 5. Перевірка документа XML.

У тих випадках, коли потрібно виконати додаткову перевірку правильності документа XML, наприклад, після його модифікації, можуть бути викликані методи – mdoc1.PropGetvalidateOnParse або mdoc1.validate, Які повернуть значення валідності (правильності) документа.

Зміна документів XML

Для зміни, динамічного створення та модифікації документа можуть бути використані різні методи класів. Покажемо застосування найпростіших.

Рис. 6. Зміна документа XML.

У даному прикладі використовується метод cloneNode для клонування елемента (новий називається myElem, Створюється на основі поточного у батька elNode), Потім йому присвоюється новий зміст (текст) за допомогою методу PropSettext, А потім як дочірнього методом appendChild він додається до батьківського elNode. Другий елемент додається аналогічно. Потім для ілюстрації можливостей у кореневого елемента elNode1 весь зміст замінюється одним текстом – “Новий текст всього документа”.

Доступ до елементів та їх атрибутів

Для доступу до елементів і атрибутів створеного і завантаженого документа використовуються спеціальні методи, деякі з них показані на малюнках 7, 8. На малюнку 7 показаний цикл доступу до атрибутів елемента elChild.

Рис. 7. Доступ до атрибутів елемента для документа XML.

Спочатку формується об’єкт списку атрибутів Attrib. Він описується на основі класу – MSXML2_IXMLDOMNamedNodeMap (Для спрощення опис не показано). Далі за допомогою методу PropGetlength отримано число атрибутів – nAttrib. А потім організований простий цикл по атрибутам за допомогою методу вибірки – PropGetitem. Поточний атрибут вибирається в об’єкт ndAttr, Який описаний на основі класу – MSXML2_IXMLDOMNode. В даному циклі читаються: ім’я атрибута (PropGetnodeName) І його значення (PropGettext).

Другий цикл по елементах схожий на перший. Спочатку за допомогою методу PropGetchildNodes формується список елементів – ListNode. Визначається його довжина nCount (Методом PropGetlength) І перший дочірній елемент elChild. Далі організовується цикл за елементами за допомогою методу ListNode.nextNode.

Рис. 8. Доступ до елементів для документа XML.

У циклі виконується вибірка: імені елемента (PropGetnodeName), Його типу (PropGetnodeType) І тексту (PropGettext), Якщо цей елемент текст містить. Далі викликається функція перевірки наявності дочірніх елементів (hasChildNodes). При необхідності функція викликається рекурсивно. Це простий приклад організації доступу до вкладених елементів XML документа

Зміна та збереження документа

Приклад збереження документа дан на малюнку 9. Для збереження використовується метод save і спеціальна змінна типу Variant – attVar, яка запам’ятовує рядок імені файлу для збереження. Зберігаються два документа DOMObject і DOMXML.

Рис. 9. Збереження документа XML в файл.

При виконанні операції збереження створюється новий файл або перезаписується існуючий.

Перетворення документа XML на базі XSL

Для перетворення документа на базі XSL необхідно описати три документи типу XML: вихідний документ (DOMObject), Шаблон XSL (StyleSheet) і вихідний документ (DOMXML). Опис дано на малюнку 10. Крім того, описуються процесор – Processor і шаблон – Template. Описуються також і допоміжні змінні, призначення яких було пояснено вище.

Рис. 10. Опис об’єктів для XSL.

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


Рис. 11. Завантаження файлів XML для XSL.

Для початку роботи нові об’єкти створюються за допомогою методу Create.

Рис. 12. Створення об’єктів для XSL.

Після завершення перетворення необхідно звільнити створені об’єкти.


Рис. 13. Видалення об’єктів для XSL.

При завантаженні шаблону XSL повинні бути виконані два методи: PropSetasync і PropSetvalidateOnParse для шаблону StyleSheet. Вони забезпечують правильність перетворення за допомогою процесора або на основі методу XML документа.

Рис. 14. Завантаження шаблону для XSL.

Перетворення може бути виконано двома способами: за допомогою процесора (клас MSXML2_IXSLProcessor), Який створюється для шаблону і за допомогою методів transformNode і transformNodeToObject, Які включені в клас основного документа. Так склалося історично у розвитку XML. Перший спосіб більш універсальний. Нижче наводяться приклади для першого і другого випадку.


При використанні методів transformNode і transformNodeToObject, Після створення документа і шаблону для нього виконуються ці методи із зазначенням самого шаблону. Таким чином, можна для перетворення використовувати різні шаблони. У випадку з методом transformNodeToObject результат виходить у вигляді нового документа, а в разі transformNode у вигляді довгої рядка. І в тому і в іншому випадку документ можна зберегти у вигляді зовнішнього файлу, як показано в тексті программиgif
Рис. 15. Перетворення за допомогою XSL і збереження.


При використанні процесора XSL ми повинні створити шаблон (Template) І процесор для нього: Template.createProcessor. Далі перетворення може бути виконано за допомогою процесора і його методи: Processor.transform. Вихід результату може бути призначений за допомогою методу Processor.PropSetoutput. А вхідний файл – Processor.PropSetinput. Далі в цьому прикладі, наведеному на малюнку 16, все аналогічно попереднім випадкам.

Рис. 16. Перетворення за допомогою процесора XSLT і файлу XML.


У даному прикладі вивантаження виконується в довгий рядок за допомогою методу Processor.PropGetoutput. Вся інформація для перетворення надходить із зовнішніх файлів (шаблон – sample.xsl і вихідний файл – data.xml).


І шаблон і вихідний XML файл ми можемо сформувати в програмі. Процедури зміни і побудови документів ми розглянули вище, а найпростіший приклад завдання файла XML для перетворення з рядка наведено на малюнку 17. Перетворення виконується за допомогою процесора, якому в тому числі задається додатковий рядок з методом види: Processor.addObjeсt, який забезпечує правильність перетворення документа. Все інше там також схоже на розглянуті вище програмні фрагменти на CTD.

Рис. 17. Перетворення за допомогою процесора XSLT і рядки XML.

Обробка помилок в документі


Вище було зазначено, що для обробки помилок створюється спеціальний об’єкт для фіксації помилок (у нашому випадку – ERRobj). При помилку і використання методу validate для документа він створюється. Далі за допомогою методів для доступу до властивостей об’єкта (PropGet…) Можна прочитати всю необхідну інформацію та її зберегти. На малюнку 18 інформація виводиться у вікно повідомлень.

Рис. 18. Обробка помилок в програмі на CTD.


На малюнку 19 показаний результат виконання процедури, розглянутої вище при виникненні помилки при перевірці XML документа.

Рис. 19. Висновок результату обробки помилок у вікно повідомлень.


Даний приклад ілюструє випадок відсутності опису атрибута елемента в схемі даних, але в початковому тексті XML документа він з’явився ..


XML при побудові WEB додатків в Team Developer


Крім стандартних можливостей роботи з SDK XML в CTD / TD надаються спеціальні об’єкти для WEB розробок, що використовують XML. Ці об’єкти можуть бути візуально налаштовані програмістом, а їх обробка виконується вбудованими в скрипти процедурами. В результаті генеруються документи, що виводяться в броузері. Передбачені XML таблиці і XML колонки для виведення в HTML і інші класи.


Основні класи TD:



Класи TD, використовувані прихованим способом:



Дані використовуються при роботі WEB додатків при обробці XML таблиць.
Детальніше про ці класах і їх застосуванні можна дізнатися в документації на Gupta Team Developer.


Висновок


На закінчення необхідно відзначити, що робота з XML SDK в Team Developer значно наочніше в порівнянні з варіантом використання мови СІ + + та інших, так як не доводиться мати справу ні з покажчиками, ні з глобальними ідентифікаторами об’єктів (GUID), а це, безсумнівно, зменшує кількість помилок.


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


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

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

Ваш отзыв

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

*

*