Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Робота з XML на різних рівнях програми: Використання XML в проміжному шарі з метою підвищення продуктивності, точності відповідності та спрощення розробки

  1. Серія контенту:
  2. Цей контент є частиною серії: Робота з XML на різних рівнях додатка
  3. Демонстраційне додаток: перевірка коментарів у блозі, інтегрована з базою даних
  4. Малюнок 1. Схема перевірки коментарів у блозі, інтегрованому з базою даних
  5. Лістинг 1. Приклад коментарів у вигляді XML-документа в форматі Atom
  6. Як найкраще реалізувати такий додаток?
  7. Часто зустрічаються абревіатури
  8. Простий приклад використання JDBC 4.0 при роботі з XML
  9. Лістинг 2. Читання XML-даних за допомогою JDBC 4.0
  10. Лістинг 3. Запис документа XML в базу даних через JDBC 4.0
  11. інші інфраструктури
  12. Пакет доповнень XML для сервера додатків IBM WebSphere Application Server V7.0
  13. Малюнок 2. Проста діаграма взаємодії пакету доповнень XML від IBM і бази даних XML
  14. Реалізація демонстраційного додатки
  15. Лістинг. вирази XPath
  16. Лістинг 5. Вираз XQuery
  17. Лістинг 6. Тіло функції в XQuery
  18. Лістинг 7. Конфігурація конструктора колекцій
  19. Лістинг 8. Реалізація конструктора
  20. Лістинг 9. Приклади XQuery
  21. Лістинг 10. Приклади XSLT
  22. Лістинг 11. Приклад використання інструкції result-document в XSLT
  23. Лістинг 12. URI для запису результату
  24. Лістинг 13. Іменований запит
  25. Зауваження: дозволяють класи на основі JDBC і альтернативні методи
  26. Лістинг 14. Функція спеціального призначення в XQuery
  27. Висновок
  28. Ресурси для скачування

Наша взаимовыгодная связь https://banwar.org/

Робота з XML на різних рівнях додатка

Створення XML-додатки за допомогою JDBC 4.0, SQLXML і пакету додатків XML для сервера додатків IBM WebSphere

Серія контенту:

Цей контент є частиною # з серії # статей: Робота з XML на різних рівнях додатка

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Работа+с+xml+на+различных+уровнях+приложения

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Робота з XML на різних рівнях додатка

Слідкуйте за виходом нових статей цієї серії.

31 березня 2010 р .: в початок розділу ресурси додані посилання на три відео-ролика.

04 жовтня 2010 р .: на початок розділу ресурси додано посилання на другу частину статті.

Демонстраційне додаток: перевірка коментарів у блозі, інтегрована з базою даних

У цій статті розглядається додаток, архітектура якого представлена ​​на малюнку 1.

Малюнок 1. Схема перевірки коментарів у блозі, інтегрованому з базою даних

Це Web-додаток обробляє інформацію, надану Web-сервісами онлайн-щоденників (блогів). Інформація, що включає в себе дані, які відносяться до всіх блогів зазначеного власника, а також всі свої коментарі до записів в цих блогах, може бути отримана у вигляді XML-документів Atom (приклад такого документа наведено в лістингу 1 ). Додаток дозволяє авторам блогів швидко переглянути свіжі коментарі до своїх записів і видаляти коментарі з небажаним змістом. Воно здатне представляти дані у вигляді Web-сторінок з формами введення в форматі XHTML. З огляду на той факт, що в XML надаються як коментарі, так і вихідний текст сторінок (XHTML), логічно використовувати кошти, що дозволяють маніпулювати даними безпосередньо в цьому форматі.

Лістинг 1. Приклад коментарів у вигляді XML-документа в форматі Atom
<? Xml version = "1.0&quot; encoding = "UTF-8"?> <Feed xmlns = "http://www.w3.org/2005/Atom"> <title type = "text"> WebSphere Community Blog </ title> ... <entry> <id> tag: blogger.com, 1999: blog-1417695962027703953.post-+6498982274841848264 </ id> <published> 2009-10-17T13: 06: 00.000-05: 00 </ published> <updated> 2009-10-17T13: 06: 00.000-05: 00 </ updated> <atom: title xmlns = "" xmlns: atom = "http://www.w3.org/2005/Atom" type = " text "> Questionable spamming comment title </ atom: title> <atom: content xmlns =" ​​"xmlns: atom =" http://www.w3.org/2005/Atom "type =" html "> Questionable spamming comment content </ atom: content> ... <atom: author xmlns = "" xmlns: atom = "http://www.w3.org/2005/Atom"> <atom: name> Joe Smith </ atom: name> <atom: uri> http://joe.uri.com </ atom: uri> <atom: email> [email protected] </ atom: email> </ atom: author> </ entry> ... < / feed>

У якийсь момент автор блогу може помітити, що небажані коментарі надходять від одних і тих же користувачів або від адрес одного домену (див. Елемент atom: author в лістингу 1 ). У цьому випадку програма дозволяє не тільки видалити коментар, але і позначити користувача або весь домен прапором "спам". Цей прапор не міститься в документах, що надходять від Web-сервісів, тому його необхідно зберігати в деякій базі даних. Оскільки інформація вже представлена ​​в XML, логічно використовувати в якості бази даних XML-сховище. В майбутньому це дозволить реалізувати такі функції програми, як, наприклад, побудова статистичних звітів про спамерів і автоматичні рекомендації про видалення коментарів.

Як найкраще реалізувати такий додаток?

До того часу, як СУБД почали надавати власну підтримку XML, існувало два основних способи роботи з даними в цьому форматі. Перший з них полягав у тому, що дані серіалізовивалісь в рядок, яка потім зберігалася в БД у вигляді великого текстового об'єкта (CLOB). Цей підхід негативно позначається на швидкодії і не дозволяє звертатися до збережених даних, як до документа XML.

Часто зустрічаються абревіатури
  • API: інтерфейс прикладного програмування (Application program interface)
  • DOM: об'єктна модель документа (Document Object Model)
  • HTML: мова розмітки гіпер-тексту (Hypertext Markup Language)
  • HTTP: протокол передачі гіпертексту (Hypertext Transfer Protocol)
  • JAXP: Java API для роботи з XML (Java for XML Processing)
  • JDBC: стандарт взаємодії з базами даних в Java (Java Database Connectivity)
  • SAX: простий API для роботи з XML (Simple API for XML)
  • SOA: сервіс-орієнтована архітектура (Service-oriented architecture)
  • SQL: структурована мова запитів (Structured Query Language)
  • URI: універсальний ідентифікатор ресурсу (Uniform Resource Identifier)
  • URL: універсальний локатор ресурсу (Uniform Resource Locator)
  • W3C: консорціум World Wide Web (World Wide Web Consortium)
  • WSDL: мова опису Web-сервісів (Web Services Description Language)
  • XHTML: розширювана мова розмітки гіпертексту (Extensible Hypertext Markup Language)
  • XML: розширювана мова розмітки (Extensible Markup Language)
  • XSLT: розширювана мова стильових перетворень (Extensible Stylesheet Language Transformations)

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

У зв'язку із зростанням популярності XML в корпоративних додатках деякі СУБД почали надавати можливість зберігання даних не тільки в табличному вигляді, але і у вигляді XML-документів. У цьому випадку інформація міститься в колонках, що мають тип "XML". До таких СУБД відносяться Apache Derby, IBM DB2®, Oracle Database і Microsoft® SQLServer.

Крім того, раніше виникали складності з передачею інформації з проміжного шару додатки в базу даних. До появи JDBC 4.0 єдиним варіантом було використання типів даних String або CLOB. Раніше вже згадувалося, що при цьому погіршується продуктивність через необхідність сериализации. До того ж, при такому підході потрібні нестандартні розширення SQL для розбору даних при збереженні в шпальтах типу "XML". На щастя, в JDBC 4.0 з'явилася стандартна підтримка типу даних SQLXML, завдяки якому документи можуть зчитуватися і записуватися у вигляді XML. JDBC 4.0 дозволяє звертатися до даних як до рядків за допомогою потоків читання та запису, а також як до об'єктів Source і Result з JAXP. Таким чином, дані в форматі XML можуть вільно передаватися між проміжним шаром і базою даних без необхідності додаткових витрат на відображення і втрат продуктивності.

Простий приклад використання JDBC 4.0 при роботі з XML

Далі розглянемо приклад використання коштів підтримки XML в JDBC 4.0. Читання даних у вигляді XML проводиться аналогічно вибірці інших типів даних, тобто шляхом виконання наступній послідовності дій:

  1. підготовка запиту (prepared statement);
  2. виконання підготовленого запиту і отримання вибірки;
  3. отримання об'єкта типу SQLXML з вибірки;
  4. читання вмісту об'єкта типу SQLXML за допомогою одного з наданих get-методів;
  5. звільнення об'єкта типу SQLXML.

Простий приклад приведений в лістингу 2.

Лістинг 2. Читання XML-даних за допомогою JDBC 4.0
PreparedStatement ps = dbConnection.prepareStatement ( "SELECT somexmlcolumn FROM somexmltable"); ResultSet result = ps.executeQuery (); result.next (); SQLXML xml = result.getSQLXML ( "somexmlcolumn"); StreamSource source = xml.getSource (StreamSource.class); // Читання даних з потоку xml.free ();

У цьому прикладі читання даних проводиться за допомогою JAXP-об'єкта source, що є екземпляром StreamSource. Таким чином, звертатися до XML-даними може будь-який API, здатний працювати з джерелами JAXP. StreamSource дозволяє використовувати будь-яке представлення даних в пам'яті. Як правило, потокове уявлення є більш ефективним в порівнянні з такими типами джерел, як DOM або SAX, робота з якими пов'язана з накладними витратами на конвертацію даних в об'єкти і виклики методів API.

Для запису документів XML в базу даних через JDBC 4.0 виконуються наступні дії:

  1. підготовка запиту;
  2. формування об'єкта SQLXML після установки з'єднання з базою даних;
  3. отримання доступу до вмісту об'єкту SQLXML через один з доступних set-методів;
  4. вказівка ​​об'єкта SQLXML як параметр підготовленого запиту;
  5. запис вмісту об'єкта SQLXML з використанням раніше отриманого доступу;
  6. виконання запиту;
  7. звільнення об'єкта SQLXML.

Приклад виконання цих дій наведено в лістингу 3.

Лістинг 3. Запис документа XML в базу даних через JDBC 4.0
PreparedStatement ps = dbConnection.prepareStatement ( &quot;UPDATE somexmltable SET somexmlcolumn =?"); SQLXML xml = dbConnection.createSQLXML (); StreamResult result = new StreamResult (xml.setBinaryStream ()); ps.setSQLXML (1, xml); // Запис в потік ps.executeUpdate (); xml.free ();

Проміжний шар програмного забезпечення

Як згадувалося вище, до переваг СУБД з підтримкою XML в порівнянні з CLOB або відображенням на реляційну структуру можна віднести кращу продуктивність, відповідність схемі XML і простоту програмування. Більш висока продуктивність пояснюється тим, що дані представляються в єдиному форматі без необхідності перетворення з однієї моделі в іншу (що в кращому випадку призводить до сериализации і розбору). Відповідність схемою XML означає, що єдина версія документа XML передається і зберігається в базі даних, тобто не відбувається відновлення документа на основі вмісту реляційних таблиць, службовців для зберігання окремих частин XML. Нарешті, розробка додатків полегшується завдяки тому, що не потрібно писати код для відображення структури XML на реляційну структуру бази даних.

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

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

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

інші інфраструктури

Інші інфраструктури довготривалого збереження даних базуються на JDBC і надають деяку підтримку XML, як правило, шляхом його відображення на об'єктну структуру. Історично подібні рішення мали певні проблеми як з продуктивністю, так і відображенням на реляційні таблиці (див. Розділ Як найкраще реалізувати такий додаток? ). Проблеми з обробкою даних у вигляді XML залишилися навіть після того, як були додані колонки типу "XML" і тип SQLXML в JDBC 4.0. По-перше, ці інфраструктури як і раніше перетворюють дані в об'єктне уявлення, що є зайвим в тих випадках, коли користувач бажає обробляти їх у вигляді XML. По-друге, вони не підтримують навігацію, перетворення і запити до XML-структуру після того, як дані були конвертовані в об'єкти.

Нарешті, XML дозволяє спростити розробку, оскільки використовується єдина модель даних, з якою можна працювати узгодженим чином через інтерфейси XML. З точки зору Java ™ -разработчик може здатися, що в ряді випадків в проміжному шарі простіше відображати об'єкти на структури даних DOM або JAXB. Однак ці випадки виявляються далеко не настільки прості, наприклад, при роботі зі згаданими вище податковими документами. Крім того, в цьому випадку доводиться вивчати не тільки JDBC і XML, а й інші моделі XML-програмування та виконання запитів. Якщо ж дані завжди представлені тільки в XML, то розробнику досить знати тільки модель даних XML і стандарти W3C для навігації по документах, їх перетворення і вибірці інформації. Більш того, більшість розробників володіють цими навичками, оскільки такі мови, як XPath і XQuery вже використовуються в базах даних XML для навігації і виконання запитів.

Подібне спрощення розробки найлегше досягається за допомогою інфраструктури, яка бере на себе більшу частину низкоуровневой роботи по отриманню інформації від джерела, її перетворення і збереження в базі даних, причому без створення проміжних копій. При створенні демонстраційного додатки ми будемо використовувати набір інструментів (Feature Pack) XML для IBM WebSphere Application Server V7.0. Цей інструментарій не створює зайвих копій даних, уникаючи тим самим додаткових накладних витрат. При цьому на всіх етапах обробки інформація представлена ​​в XML, що дозволяє легко здійснювати навігацію, конвертації і запити до даних.

Пакет доповнень XML для сервера додатків IBM WebSphere Application Server V7.0

Пакет доповнень XML для IBM WebSphere Application Server V7.0 надає кошти для навігації, конвертації і запитів до XML в проміжному шарі додатки на основі таких стандартів W3C, як XPath 2.0, XSLT 2.0 і XQuery 1.0. З огляду на популярність XML в шарі зберігання даних, ми застосуємо загальний підхід, пропонований JDBC 4.0, в додатку, що використовує цей інструментарій та базу даних XML, наприклад IBM DB2 з pureXML®, Apache Derby або Oracle. При цьому взаємодія між базою даних і інструментарієм буде виглядати, як показано на малюнку 2.

Малюнок 2. Проста діаграма взаємодії пакету доповнень XML від IBM і бази даних XML

Далі ми продемонструємо роботу з XML в базі даних і проміжному шарі додатки за допомогою СУБД c підтримкою XML, JDBC 4.0 і типу даних SQLXML, а також пакету доповнень XML для WebSphere.

Вихідний код цього додатка входить до складу пакету доповнень XML, тому ви можете взяти його за основу ваших власних експериментів. В розділі ресурси наведені посилання на пакет доповнень XML, а також СУБД Apache Derby і DB2 Express.

Бази даних з власної підтримкою XML, JDBC 4.0, а також пакет додатків XML для WebSphere дозволяють створювати додатки з простою і високопродуктивної архітектурою.

Реалізація демонстраційного додатки

У цьому розділі ми розглянемо реалізацію демонстраційного додаток за допомогою пакета доповнень XML, ОВИС 4.0 і СУБД з підтримкою XML. Спочатку буде реалізована функція отримання підозрілих коментарів до записів в блозі з використанням Web-сервісу, передає стрічки Atom (див. малюнок 1 ). В процесі обробки цих коментарів додаток буде звертатися до бази даних, перевіряючи, чи не були їх автори раніше занесені в список спамерів. На всіх етапах обробки дані будуть представлені у вигляді документів XML. Отже, приступимо до отримання даних про коментарі у вигляді стрічок Atom.

Набір доповнень XML дозволяє завантажувати дані стрічок Atom через HTTP-з'єднання з Web-сервісом блогів і звертатися до них через процедури XQuery. Ці процедури виконуються середовищем пакету доповнень XML, яка, в свою чергу, викликається через Java API того ж пакета.

Для вибірки підозрілих коментарів з стрічки Atom використовується такі вирази XPath в XQuery:

Лістинг. вирази XPath
declare variable $ comments: = (/ atom: feed / atom: entry [atom: author / atom: name = 'Anonymous'] | / atom: feed / atom: entry [matches (atom: content, $ my: vulgarwords, ' i ')]) [atom: published> current-dateTime () - $ my: monthsAgo];

В даному прикладі XPath використовується для пошуку коментарів в зазначеному користувачем часовому інтервалі, які були відправлені анонімними користувачами і містили вульгарні слова. Вибрані коментарі зберігаються в змінної comments.

Далі в XQuery можна перевірити, чи надходив раніше спам від тих же авторів. Для цього виконується запит до бази даних, в якому $ i - це показаний вище вкладений запит на вибірку коментарів (лістинг 5).

Лістинг 5. Вираз XQuery
let $ spammedbefore: = local: hasEmailHasSpammedBefore ($ i / atom: author / atom: email / text ())

Звернувшись до визначення функції, показаної в лістингу 4, ви побачите, як інформація завантажується з бази даних у вигляді XML (лістинг 6).

Лістинг 6. Тіло функції в XQuery
declare function local: hasEmailHasSpammedBefore ($ emailaddress) as xs: boolean {let $ domainName: = substring-after ($ emailaddress, '@') return if ($ domainName = '') then false () else let $ jdbcURI: = concat ( 'jdbc: // getAuthorsWhoHaveSpammedFromDomain?', $ domainName) let $ domainSpammers: = collection ($ jdbcURI) return not (empty ($ domainSpammers / spammers / spammer / email [. eq $ emailaddress]))};

У цьому прикладі з адреси e-mail витягується ім'я домену, яке потім конкатенуються з текстом запиту jdbc: // getAuthorsWhoHaveSpammedFromDomain. Після цього формується колекція XPath 2.0 на основі URI jdbc: // getAuthorsWhoHaveSpammedFromDomain? Ім'я_домена.

Колекції в XPath 2.0 представляють собою зручний спосіб інтеграції XML-даних, які надходять не з основного документа, оброблюваного програмою на XQuery або XSLT. Реалізація функції collection не стандартизовані, тому кожна середа виконання XPath 2.0 може надавати конструктори колекцій за замовчуванням, а також кошти розширення, за допомогою яких користувачі можуть динамічно використовувати власні реалізації. У пакеті доповнень XML роль такого засобу розширення відіграє інтерфейс XCollectionResolver.

Наша реалізація інтерфейсу XCollectionResolver відповідає за формування колекцій, чий URI починається з префікса jdbc: //. При цьому інша частина URI використовується для пошуку відповідного іменованого запиту. Конструктор колекцій отримує іменований запит, додає в нього параметри і виконує його в базі даних за допомогою JDBC.

В лістингу 7 показано створення екземпляра конструктора після визначення декількох базових запитів. Конструктор отримує на вхід JDBC-з'єднання з базою даних для виконання запитів.

Лістинг 7. Конфігурація конструктора колекцій
dbStatementsSupportsSQLXML = new HashMap <String, String> (); dbStatementsSupportsSQLXML.put ( &quot;getAuthorsWhoHaveSpammedFromDomain", "SELECT CONTACTS from SPAMMERS where DOMAINNAME =?"); dbStatementsSupportsSQLXML.put ( &quot;updateAuthorsWhoHaveSpammedByDomain", "UPDATE SPAMMERS SET CONTACTS =? WHERE DOMAINNAME =?"); dbStatementsSupportsSQLXML.put ( "insertAuthorsWhoHaveSpammedByDomain", "INSERT INTO SPAMMERS (CONTACTS, DOMAINNAME) VALUES (?,?)"); Connection conn = getDatabaseConnection (); JDBCCollectionResolver inputResolver = new JDBCCollectionResolver (conn, dbStatementsSupportsSQLXML);

Фрагменти реалізації конструктора показані в лістингу 8 . Повний варіант реалізації можна знайти в прикладах коду, що входить до складу пакету доповнень XML. Конструктор фактично виконує дії за вибіркою XML-даних через JDBC, які були описані вищє .

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

  1. Іменовані запити передаються в конструктор ззовні, а не містяться в коді в жорстко заданому вигляді.
  2. Конструктор аналізує метадані повертаються рядків і стовпців, тим самим гарантуючи, що тільки дані типу SQLXML перетворюються в XML.
  3. Конструктор використовує два інших класу з API пакету доповнень XML, а саме XSequenceCursor і XItemView, для формування послідовності XML на основі результатів запиту JDBC.
Лістинг 8. Реалізація конструктора
public XSequenceCursor getCollection (String uri, String base) {// Пошук запиту в заданому наборі (див. лістинг 7) String query = lookupNamedQuery (uri); PreparedStatement p = dbConnection.prepareStatement (query); ResultSet rs = p.executeQuery (); ... // Ітерірованіе за результатами виконання запиту ResultSetMetaData metadata = rs.getMetaData (); int colType = metadata.getColumnType (jj + 1); if (colType = Types.SQLXML) {SQLXML sqlx = rs.getSQLXML (...); StreamSource source = sqlx.getSource (StreamSource.class); XItemView item = itemFactory.item (source); sqlx.free (); } // Створення послідовності на основі отриманих XML-даних // за допомогою API пакету доповнень XML ... XItemView itemView [] = items.toArray (new XItemView [0]); XSequenceCursor sequence = itemFact.sequence (itemView); return sequence; }

Отже, тепер у нас є конструктор колекцій загального призначення, який може використовуватися в будь-якій програмі XQuery, що приймає на вхід довільне число аргументів і повертає колекції XML-даних, які в свою чергу можуть оброблятися за допомогою XPath 2.0, XSLT 2.0 або XQuery 1.0. Нижче наведено ще два приклади. У першому з них створюється список спамерів на основі елемента name, а в другому - повертається число спамерів, від яких було отримано понад десяти коментарів.

Лістинг 9. Приклади XQuery
Java: dbStatementsSupportsSQLXML.put ( "getAllSpammers", "SELECT CONTACTS from SPAMMERS"); XQuery: let $ allSpammers: = collection ( 'jdbc: // getAllSpammers') return for $ i in $ allspammers let $ first: = $ i / name / first order by $ i / name / last return <name> <first> {$ first} </ first> <last> {$ i / name / last} </ last> </ name> Java: dbStatementsSupportsSQLXML.put ( &quot;getAllSpamAuthorsWhereSpamCountGreaterThan", "SELECT CONTACTS from SPAMMERS where COUNT>?"); XQuery: let $ minCount: = 10 let $ allSpammers: = collection (concat ( 'jdbc: // getAllSpamAuthorsWhereSpamCountGreaterThan?', $ MinCount)) return count ($ allSpammers)}

Слід зазначити, що оскільки конструктор є частиною XPath 2.0, його можна використовувати в XSLT 2.0 з таким же успіхом, що і в XQuery 1.0. У лістингу 10 наведено простий приклади виклику конструктора з XSLT 2.0.

Лістинг 10. Приклади XSLT
<Xsl: variable name = "allSpammers" select = "collection ( 'jdbc: // getAllSpammers')" /> <xsl: template match = "/"> <p> The current spammer database contains the following domains and spammers. < / p> <xsl: for-each select = "$ allSpammers"> <table> <tr> <th> Name </ th> <th> Email </ th> </ tr> <xsl: for-each select = "$ allSpammers"> <tr> <td> <xsl: value-of select = "name" /> </ td> <td> <xsl: value-of select = "email" /> </ td> </ tr> </ xsl: for-each> </ table> </ xsl: template>

Аналогічним чином можна реалізувати запис в базу даних XML. XSLT 2.0 дозволяє записувати результати перетворення в кілька документів із зазначеними URI за допомогою інструкції xsl: result-document. Як і раніше, дозвіл подібних URI залишається на розсуд середовища виконання. До складу пакету доповнень входить інтерфейс XResultsResolver, завдяки якому можна вказувати, куди слід записувати результати. У нашому додатку такий дозволяє клас (resolver) реалізований на основі JDBC. Він використовує іменовані запити і нумеровані параметри, серед яких один має спеціальне ім'я -XML-.

Це дозволяє записувати дані в базу даних, як показано в лістингу 11.

Лістинг 11. Приклад використання інструкції result-document в XSLT
<! - Перевірка: вставка або оновлення даних? -> <xsl: variable name = "insert" select = "count ($ spammersByDomain / spammers / spammer) eq 0" /> <! - Підготовка іменованого запиту типу insert -> <xsl: variable name = "insertJdbcURI" select = "concat ( 'jdbc: // insertAuthorsWhoHaveSpammedByDomain? --XML - &', $ domain)" /> <! - Підготовка іменованого запиту типу update -> <xsl: variable name = "updateJdbcURI" select = " concat ( 'jdbc: // updateAuthorsWhoHaveSpammedByDomain? --XML - &', $ domain) "/> <! - у разі insert слід додати вміст xsmldoc в БД. В іншому випадку оновити дані, передані в xmldoc. -> <xsl: template match = "/"> <xsl: when test = "$ insert"> <xsl: result-document href = "{$ insertJdbcURI}" method = "xml" indent = "yes"> < xsl: copy-of select = "$ xmldoc" /> </ xsl: result-document> </ xsl: when> <xsl: otherwise> <xsl: result-document href = "{$ updateJdbcURI}" method = "xml "indent =" yes "> <xsl: copy-of select =" $ xmldoc "/> </ xsl: result-document> </ xsl: otherwise> </ xsl: template>

Якщо вказаний спамер що раніше не зустрічався, то буде виконана перша частина інструкції xsl: when і інформація про нього буде додана в базу даних. У цьому випадку серед XML отримає запит на запис вмісту змінної xmldoc за наступним URI:

Лістинг 12. URI для запису результату
jdbc: // insertAuthorsWhoHaveSpammedByDomain? --XML - & domain.com

Цей URI буде перетворений (дозволений) в іменований запит, який в нашому випадку виглядає наступним чином:

Лістинг 13. Іменований запит
INSERT INTO SPAMMERS (CONTACTS, DOMAINNAME) VALUES (?,?)

У цьому прикладі дозволяє клас поміщає вміст документа XML, який міститься в змінної xmldoc, на місце першого параметра. В якості другого параметра використовується domain.com.

Як и у випадка з читанням даних , Запис XML-документів за вказаними URI може використовуватися в різних мовах роботи з XML. У попередньому прикладі застосовувався XSLT (див. лістинг 11 ), Але аналогічним чином можна написати програму на XQuery 1.0, яка буде записувати результати в базу даних XML.

Зауваження: дозволяють класи на основі JDBC і альтернативні методи

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

Ви також можете створити конструктор колекцій у вигляді функції-розширення XPath 2.0. Це більш спеціалізоване рішення, приклад якого наведено в лістингу 14.

Лістинг 14. Функція спеціального призначення в XQuery
declare function local: hasEmailHasSpammedBefore ($ emailaddress) as xs: boolean {let $ domainName: = substring-after ($ emailaddress, '@') return if ($ domainName = '') then false () else let $ domainSpammers: = my : getAuthorsWhoHaveSpammerFromDomain ($ domainName) return not (empty ($ domainSpammers / spammers / spammer / email [. eq $ emailaddress]))};

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

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

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

Висновок

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

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

Ресурси для скачування

Схожі тими

  • Оригінал статті: Programming XML across the multiple tiers: Use XML in the middle tier for performance, fidelity, and development ease (Ендрю Спайкер і Берт ван дер Лінден, developerWorks, березень 2010 року). (EN)
  • Прочитайте другу частину серії: Робота з XML в різних шарах додатки. Частина 2: створення ефективних програм на платформі Java EE, що працюють з серверами баз даних XML. Оптимізація систем, цілком побудованих на XML за допомогою JDBC 4.0, SQLXML, DB2 pureXML і пакету додатків XML (Ендрю Спайкер, Синтія М. Саракко, Cynthia M. Saracco, Берт ван дер Лінден і Гуочжен Жан, Guogen Zhang, developerworks, жовтень 2010 року). У ній розповідається про роботу з тимчасовими і зберігаються документами XML на стороні сервера Java-додатка. У статті наводяться приклади коду, що демонструють такі можливості, як XML-індексування і фільтрацію в запитах до бази даних XML, при обробці великих обсягів даних. (EN)
  • Відео: початок роботи з пакетом доповнень XML до сервера додатків WebSphere : Встановіть демонстраційний додаток, що описується в цій статті і приступите до роботи з пакетом доповнень XML для WebSphere. (EN)
  • Відео: пакет доповнень XML і приклад інтеграції з базою даних XML (DB2 c pureXML), частина 1 з 2 : Установка сервера додатків WebSphere і DB2 для запуску демонстраційного додатки, описуваного в цій статті. (EN)
  • Відео: пакет доповнень XML і приклад інтеграції з базою даних XML (Apache Derby), частина 2 з 2 : Настройка сервера додатків WebSphere і Apache Derby для запуску демонстраційного додатки, описуваного в цій статті. (EN)
  • Пакет доповнень XML для WebSphere Application Server V7.0 : Отримаєте додаткову інформацію про інструментарій, спрощує створення додатків, в центрі яких знаходяться документи XML. (EN)
  • Повна документація по пакету доповнень XML міститься в інформаційному центрі цього продукту . (EN)
  • завантажте документацію по установці, вихідний код і інструкції по роботі з демонстраційним додатком, яке входить до складу пакету доповнень XML. (EN)
  • Ознайомтеся з документацією по типу даних SQLXML . (EN)
  • Повний описі функції collection в XSLT 2.0 можна знайти в документації на сайті W3C. (EN)
  • відвідайте блог спільноти WebSphere , На якому міститься ряд корисних посилань, в тому числі на пакет доповнень XML. (EN)
  • Ознайомтеся з документацією по інтерфейсу SQLXML в JDBC 4.0 . (EN)
  • Завантажте програмне забезпечення, необхідне для запуску демонстраційного Web-додатки.
    • Пакет доповнень XML для WebSphere Application Server V7.0 : Набір стандартів програмування XML-додатків, що підвищують продуктивність розробників і дозволяють вирішувати актуальні на сьогоднішній день завдання. (EN)
    • DB2 Express-C : Гнучка і багатофункціональна СУБД, що підтримує реляційні дані і XML. (EN)
    • Apache Derby : Відкрита реляційна СУБД, створена повністю на основі Java-технологій. (EN)
  • Сертифікація по XML корпорації IBM : Дізнайтеся, як стати сертіфікованім розробник IBM в області XML и пов'язаних з ним технологій. (EN)
  • завантажте ознайомчі версії продуктів IBM , А також випробуйте кошти розробки додатків і проміжне програмне забезпечення IBM, зокрема DB2®, Lotus®, Rational®, Tivoli® і WebSphere® на сайті online-тестування IBM SOA Sandbox . (EN)
  • Слухайте інтерв'ю та обговорення питань, що цікавлять розробників програмного забезпечення, в трансляціях developerWorks . (EN)

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Jsp?
Quot; encoding = "UTF-8"?
Як найкраще реалізувати такий додаток?
Quot;UPDATE somexmltable SET somexmlcolumn =?
Jdbc: // getAuthorsWhoHaveSpammedFromDomain?
Quot;getAuthorsWhoHaveSpammedFromDomain", "SELECT CONTACTS from SPAMMERS where DOMAINNAME =?
Quot;updateAuthorsWhoHaveSpammedByDomain", "UPDATE SPAMMERS SET CONTACTS =?
WHERE DOMAINNAME =?
Quot;getAllSpamAuthorsWhereSpamCountGreaterThan", "SELECT CONTACTS from SPAMMERS where COUNT>?
Jdbc: // getAllSpamAuthorsWhereSpamCountGreaterThan?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: