Управління документами ODF і Microsoft Office 2007 з використанням DB2 9 pureXML

  1. Огляд настільних додатків і XML
  2. необхідні ресурси
  3. Старий обмін даними документів
  4. Огляд формату OpenOffice і нового формату MS Office 2007
  5. Малюнок 1. Вміст opendoc.odt в програмі WinZip
  6. Малюнок 1.1 Вміст файлу submit.docx в програмі WinZip
  7. Лістинг 1. Створення бази даних, розуміє XML-формат
  8. Лістинг 2. Створення таблиці, розуміє XML-формат, для зберігання наших документів ODF і MS Office 2007
  9. Лістинг 3. Зміни в php.ini
  10. Малюнок 2. Приклад документа в OpenOffice або MS Word
  11. Лістинг 4. PHP-код, який використовує формат OpenOffice (ODF) (odfconsume.php)
  12. Лістинг 4.1. PHP-код, який використовує формат MS Office 2007 (msconsume.php)
  13. Перепризначення вмісту ODF і Word 2007
  14. Лістинг 5. Перепризначення формату ODF (opendoc.odt) в простій HTML-абзац
  15. Лістинг 5.1 Перепризначення формату Word 2007 (submit.docx) в простій HTML-абзац
  16. Лістинг 6. Інформація, що виводиться
  17. Ресурси для скачування

Збереження і перепризначення даних засобами PHP PDO і XQuery за допомогою IBM DB2 9

Що нового в документах для настільних додатків? Багато чого, якщо ви належите спільноті користувачів Microsoft Windows®. Компанія Microsoft представила новий формат для продуктів MS Office 2007, який внутрішньо використовує переваги XML. Ви могли обмінюватися даними між додатками MS Office і раніше, але MS Office 2007 і Windows Vista® дозволяють підприємствам працювати з даними, які історично було дуже важко використовувати і перепризначувати (тобто використовувати для однієї мети дані, призначені для іншої мети). Поки Microsoft просуває свою концепцію, ODF вже реалізований в додатках OpenOffice, а переваги XML оцінені ринком.

Давайте розглянемо типову проблему настільного додатки. Уявімо компанію, відділ маркетингу якої планує конференцію. Вони просять передбачуваних доповідачів представити свої пропозиції в шаблонному документі MS Word, щоб потім використовувати вміст документа для:

  • Розгляду заявок.
  • Повідомлення по електронній пошті потенційних доповідачів про прийняття їхніх заявок.
  • Розміщення відповідної інформації на Web-сайті конференції.
  • Публікації вмісту через новий фід (ATOM / RSS) конференції або компанії.

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

У даній статті ми коротко розглянемо старі методи обміну даними документів для додатків MS Office. Потім ми розглянемо новий формат і обговоримо, як цей формат може застосовуватися для обміну даними і перепризначення. Ми будемо використовувати незалежні від платформи технології Zend Core for IBM, PHP, PDO і XQuery - всі ці інструментальні програми можна використовувати з DB2.

Дана методика може бути важливою частиною систем керування вмістом і систем документообігу. Я сподіваюся, що після прочитання цієї статті ви побачите, наскільки легко використовувати і перепризначувати документи ODF і MS Office 2007, використовуючи можливості IBM DB2 pureXML ™. Не потрібно багато кодування, тому це рішення реалізувати не важко. Пізніше ви, можливо, захочете проіндексувати ці документи Office 2007 для подальшого використання можливостей гібридного зберігання pureXML.

Огляд настільних додатків і XML

У даній статті увага зосереджується на ODF, форматі за замовчуванням для OpenOffice, і форматах MS Office 2007. Ви повинні знати, що представлені тут концепції не обмежуються цими форматами і постачальниками. Насправді формат ODF використовується в продуктах різних постачальників, включаючи Google Applications, KOffice і StarOffice. Варто відзначити, що Microsoft має "модуль" транслятора для споживання та імпорту ODF-форматів, а також існує пакет сумісності, який відкриває і зберігає формат файлів MS Office 2007 в форматі старих версій Office. До того ж, Lotus Notes і Corel теж мають плани на формат ODF.

Формат ODF і його використання в настільних додатках обговорюється в Wikipedia . Там же надається інформація про прихильників ODF.

необхідні ресурси

Хоча ви можете завантажити Apache 2.0, PHP Version 5.21 або вище, DB2 Express-C і розширення DB2 для PHP, завантаження і установка Zend Core for IBM є найкращим варіантом. Програма установки повністю налаштовує вашу робочу середу на використання PHP і DB2. Програма установки повинна надати посилання для завантаження DB2 Express-C 9.1.2 . Вам може знадобитися настройка конфігурації на підтримку ZIP, що ми розглянемо пізніше.

Старий обмін даними документів

Інтерфейси прикладного програмування даних (Application Programming Interface - API) в операційній системі Windows починалися з Data Access Objects (DAO). Вони розвивалися від DAO (чи не від Dead On Arrival - доставлений мертвим) до Remote Data Objects (RDO), а потім до Open Database Connectivity (ODBC). Перехід до ODBC був значною досягненням. Воно дозволило розробникам писати код, використовуючи один API, незалежний від бази даних. Використовуючи ODBC, можна імпортувати реляційні дані в додатку MS Office через подібність Mail Merge.

Вихід технології Object Linking and Embedding Data Base (OLE / DB), яка дозволяла обмін даними незалежно від джерела, тільки заплутав ринок. Для інструментів MS Office її поява означало, що можна вбудовувати документи один в інший. Фактично, саме з цим ви зустрічаєтеся сьогодні при вставці електронної таблиці в презентацію. Однак OLE / DB - це рішення тільки для Windows. Поділ документів було нелегким завданням в цих технологіях, і процес автоматизованого важко.

Огляд формату OpenOffice і нового формату MS Office 2007

Ці формати є, по суті, ZIP-файл, що містить ресурси і папку для XML-документів. Реальне текстове вміст Word-документа зберігається як XML-файл. У нашому прикладі документа це вміст знаходиться в папці "word / document.xml" архіву. Цей формат файлів дозволяє розробникам розміщувати реальні дані всередині цих документів.

Хоча в OpenOffice цей формат уже використовується деякий час, MS Office 2007 тільки нещодавно представив свій новий формат документів. Компанія Microsoft рекламує цей формат як доступний і простий для спільного використання додатками. Документи MS Office були пропрієтарними багато років, тому особливо приємно, що команда Office в Microsoft відкриває двері. Вміст ZIP-файлу для ODF, наданого нижче, знаходиться за посиланням, зазначеної в розділі " Завантаження ".

Малюнок 1. Вміст opendoc.odt в програмі WinZip

Формат Microsoft наведено нижче. Зверніть увагу на деякі відмінності, хоча концепція і формат аналогічні.

Малюнок 1.1 Вміст файлу submit.docx в програмі WinZip

Налаштування бази даних

Звичайно ж, вам потрібно буде створити таблицю. Ви збережете XML в новому Word-форматі в XML-стовпець замість Character Large Object (CLOB). Для цього необхідно створити базу даних, яка розуміє XML або UTF-8.

Лістинг 1. Створення бази даних, розуміє XML-формат
CREATE DATABASE ODF AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY US

Тепер підключіться до бази даних і створіть таблицю, як описано нижче. Наступний код передбачає, що є користувач "db2admin" з повноваженнями CREATETAB. Якщо такого користувача у вас немає, ви можете змінити сценарії.

Лістинг 2. Створення таблиці, розуміє XML-формат, для зберігання наших документів ODF і MS Office 2007
CREATE TABLE DB2ADMIN.DOCUMENT (ID INT NOT NULL PRIMARY KEY, OWNER VARCHAR (128), DOC XML)

Налаштування PHP і Zend Core for IBM

Код буде використовувати ZIP-модулі PHP і PDO. PDO встановлюється разом з Zend Core for IBM, а підтримку "zip" потрібно додати в конфігурацію самостійно:

  1. Відкрийте Zend Core Administration Console.
  2. Перейдіть в закладку Configuration і подзакладку Extensions.
  3. Прокрутіть вікно вниз до ZIP extension.
  4. Клацніть лівою кнопкою миші по піктограмі перемикача, щоб його включити.
  5. Натисніть кнопку Save Settings.
  6. Перезапустіть Apache2.
    1. Якщо сервер Apache2 ще не працює (червоне перо в системній панелі), виконайте команду C: \ Program Files \ Zend \ Apache2 \ bin \ ApacheMonitor.exe.
    2. Клацніть лівою кнопкою миші на піктограмі пера і перезапустіть Apache2 HTTP Server з меню.

Якщо це ще не зроблено, спробуйте відредагувати файл і знайдіть наступні рядки в php.ini, що знаходиться в папці "C: \ Program Files \ Zend \ Core for IBM \ etc". Додайте в файл php.ini рядок, виділену жирним шрифтом:

Лістинг 3. Зміни в php.ini
extension = php_zip.dll extension = php_pdo.dll extension = php_pdo_ibm.dll extension_dir = "c: \ program files \ Zend \ Core for IBM \ lib \ phpext"

Споживання документів ODF і MS Office 2007

Тепер все готово для споживання opendoc.odt, який є ODF-файлом, включеним в файли для завантаження. хоча на малюнку 2 представлені зображення MS Word документа, цей ODF-файл виглядав би аналогічно лістингу 4 . Наданий документ використовує для форматування стилі "Heading 1" і "Heading 2". Пізніше ми розглянемо, як використовується стиль Heading 2 в форматі OpenOffice. Звертаємо увагу, що в робочому коді потрібно буде включити, крім всього іншого, відповідну обробку помилок.

Я включив в файли для завантаження також документ submit.docx, який використовує формат MS Office 2007. На малюнку 2 показано, як виглядає цей документ при перегляді в Word. Так само як і в ODF, в документі для форматування використовуються Word-стилі "Heading 1" і "Heading 2". Пізніше ми розглянемо стиль Heading 2.

Малюнок 2. Приклад документа в OpenOffice або MS Word

Давайте використаємо цей документ у наступному PHP-коді, який переглядає в циклі запису в маніфесті ZIP і витягує XML-документ з відповідними даними. В лістингу 4 наведено цей код. Збережіть його в файл під назвою "odfconsume.php".

Лістинг 4. PHP-код, який використовує формат OpenOffice (ODF) (odfconsume.php)
<? Php $ user = "db2admin"; $ Password = "secret"; $ Zip = zip_open ( "c: \ opendoc.odt"); $ Db = new PDO ( "ibm: DRIVER = {IBM DB2 ODBC DRIVER}; DATABASE = ODF;". "HOSTNAME = localhost; PORT = 50000; PROTOCOL = TCPIP;", $ user, $ password); echo $ user. "Connected \ n"; if ($ zip) {while ($ zip_entry = zip_read ($ zip)) {if (zip_entry_open ($ zip, $ zip_entry, "r") && zip_entry_name ($ zip_entry) == 'content.xml') {$ buf = zip_entry_read ($ zip_entry, zip_entry_filesize ($ zip_entry)); $ Insstr = "INSERT INTO DB2ADMIN.DOCUMENT (ID, OWNER, DOC) VALUES (2, 'Linux Office',: buf)"; $ Stmt = $ db-> prepare ($ insstr); $ Stmt-> bindParam ( ': buf', $ buf, PDO :: PARAM_LOB, strlen ($ buf)); $ Stmt-> execute (); echo "\ nResult:". $ db-> errorCode (). &quot;\ n"; zip_entry_close ($ zip_entry); } Echo "\ n"; } Zip_close ($ zip); }?>

Виконайте цей код за допомогою наступної команди:

php odfconsume.php

Код вставляє XML-документ в базу даних і виводить код помилки. Сподіваюся, що він буде дорівнює нулю.

У лістингу 4.1 приведений код, який використовує формат MS Word. Збережіть цей код в файл під назвою "msconsume.php".

Лістинг 4.1. PHP-код, який використовує формат MS Office 2007 (msconsume.php)
<? Php $ user = "db2admin"; $ Password = "secret"; $ Zip = zip_open ( "c: \ submit.docx"); $ Db = new PDO ( "ibm: DRIVER = {IBM DB2 ODBC DRIVER}; DATABASE = ODF;". "HOSTNAME = localhost; PORT = 50000; PROTOCOL = TCPIP;", $ user, $ password); echo $ user. "Connected \ n"; if ($ zip) {while ($ zip_entry = zip_read ($ zip)) {if (zip_entry_open ($ zip, $ zip_entry, "r") & zip_entry_name ($ zip_entry) == 'word / document.xml') {$ buf = zip_entry_read ($ zip_entry, zip_entry_filesize ($ zip_entry)); $ Insstr = "INSERT INTO DB2ADMIN.DOCUMENT VALUES (1, 'BILLY ONAIRE',: buf)"; $ Stmt = $ db-> prepare ($ insstr); $ Stmt-> bindParam ( ': buf', $ buf, PDO :: PARAM_LOB, strlen ($ buf)); $ Stmt-> execute (); echo "Result:". $ db-> errorCode (); zip_entry_close ($ zip_entry); } Echo "\ n"; } Zip_close ($ zip); }?>

Виконайте цей код, як і раніше, за допомогою команди:

php msconsume.php

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

Перепризначення вмісту ODF і Word 2007

Тепер, коли у нас є вміст документів OpenOffice і Word 2007 в базі даних, необхідно перепризначити цей документ на Web-сайт. У нашому прикладі це мав би зробити відділ маркетингу. Код для ODF представлений в лістингу 5 , Який ви можете зберегти під назвою "odfrepurpose.php". за виведеним даним (Фрагмент HTML) видно, що документ можна легко переформатувати в новинний фид або включити в Ajax-додаток!

Лістинг 5. Перепризначення формату ODF (opendoc.odt) в простій HTML-абзац
<? Php $ user = "db2admin"; $ Password = "secret"; $ Db = new PDO ( "ibm: DRIVER = {IBM DB2 ODBC DRIVER}; DATABASE = ODF;". "HOSTNAME = localhost; PORT = 50000; PROTOCOL = TCPIP;", $ user, $ password); echo $ user. "Connected \ n"; $ Xqry = <<< TXT values ​​(XMLSERIALIZE (XMLQUERY ( 'declare boundary-space strip; declare namespace text0 = "urn: oasis: names: tc: opendocument: xmlns: text: 1.0"; declare namespace office0 = "urn: oasis : names: tc: opendocument: xmlns: office: 1.0 "; for \ $ t0 in db2-fn: xmlcolumn (" DB2ADMIN.DOCUMENT.DOC ") / office0: document-content / office0: body let \ $ p0: = \ $ body0 / office0: text / text0: p let \ $ h0: = \ $ body0 / office0: text / text0: h where fn: exists (\ $ p0) or \ $ h0: h / @ text: style-name = "Heading_20_2" return if (fn: exists (\ $ style)) then if (\ $ h0: h / @ text: style-name = "Heading_20_2") then <h1> {\ $ txt} </ h1> else ( ) else <p> {\ $ txt} </ p> ') as VARCHAR (2000))) TXT; $ Result = $ db-> query ($ xqry); $ Arr = $ result-> fetch (); echo $ arr [1]; ?>

Код для Word 2007 наведено в лістингу 5.1 , Який ви можете зберегти у файлі "msrepurpose.php". за виведеним даним (Фрагмент HTML) видно, що документ можна легко переформатувати в новинний фид або включити в Ajax-додаток!

Лістинг 5.1 Перепризначення формату Word 2007 (submit.docx) в простій HTML-абзац
<? Php $ user = "db2admin"; $ Password = "secret"; $ Db = new PDO ( "ibm: DRIVER = {IBM DB2 ODBC DRIVER}; DATABASE = ODF;". "HOSTNAME = localhost; PORT = 50000; PROTOCOL = TCPIP;", $ user, $ password); echo $ user. "Connected \ n"; $ Xqry = <<< TXT values ​​(XMLSERIALIZE (XMLQUERY ( 'declare boundary-space strip; declare namespace text0 = "urn: oasis: names: tc: opendocument: xmlns: text: 1.0"; declare namespace office0 = "urn: oasis : names: tc: opendocument: xmlns: office: 1.0 "; for \ $ t0 in db2-fn: xmlcolumn (" DB2ADMIN.DOCUMENT.DOC ") / office0: document-content / office0: body / office0: text let \ $ p: = (for \ $ pp in \ $ t0 / text0: p return <p> {\ $ pp / text ()} </ p>) let \ $ h: = (for \ $ hh in \ $ t0 / text0: h [@ text0: style-name = "Heading_20_2"] return <hl> {\ $ hh / text ()} </ hl>) return (\ $ h, \ $ p) ') as varchar (3000) )) TXT; echo "\ n"; $ Result = $ db-> query ($ xqry); $ Arr = $ result-> fetch (); echo $ arr [1]; ?>

Для запуску цього коду виконайте команду:

php.exe msrepurpose.php

Порада: У створенні цього XQuery-запиту мені допомогла програма DB2 Developer Workbench XQuery. У ній я створив запит способом "вкажи і натисни". Це заощадило значний час.

Ви можете запитати, чому б не зберегти все просто як HTML? Генерування XML може наразити на небезпеку цілісність оригінального документа і привести до втрати можливостей MS Office. Разом з тим, документ стає набагато меншим за розміром, і його можна повторно перепризначити в формат Word 2007 за допомогою XQuery. У міру зростання розміру документів та їх кількості (наприклад, для великих конференцій) хотілося б застосовувати цю логіку для кожної секції кожного документа; тоді по-справжньому проявиться міць XQuery! Аналогічно SQL, XQuery дозволяє обробляти набір документів в одному запиті. При бажанні можна помістити результати в SQL-запити, так як DB2 дозволяє змінювати мови запитів.

У наступному лістингу показаний результат роботи odfrepurpose.php або msrepurpose.php:

Лістинг 6. Інформація, що виводиться
db2admin Connected <h1> Introduction to Web 2.0 </ h1> <p> This is a document that will impress upon ... </ p> <h1> Abstract </ h1> <p> The nature of the industry is a gain turning to the browser ... </ p>

висновок

Методики, розглянуті в даній статті, можуть бути корисні в системах управління вмістом і системах документообігу. Сподіваюся, ви побачили, наскільки легко використовувати і перепризначувати документи OpenOffice і MS Office 2007, використовуючи можливості IBM DB2 pureXML. Дійсно треба було не багато коду, що сприяє гарній продуктивності. Розгляньте індексацію цих XML-документів для подальшого використання можливостей гібридного зберігання pureXML.

Для подальшого вивчення XQuery попрацюйте з редактором XQuery в DB2 Developer Workbench або прочитайте книгу " DB2 9: Огляд та швидкий початок роботи з pureXML "(IBM Redbooks). Додаткова інформація про PDO приведена на сайті IBM_PDO pecl.php.net.

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

Схожі теми

Підпишіть мене на повідомлення до коментарів

Quot;\ n"; zip_entry_close ($ zip_entry); } Echo "\ n"; } Zip_close ($ zip); }?
Db-> errorCode (); zip_entry_close ($ zip_entry); } Echo "\ n"; } Zip_close ($ zip); }?
Ви можете запитати, чому б не зберегти все просто як HTML?