Управління документами ODF і Microsoft Office 2007 з використанням DB2 9 pureXML
- Огляд настільних додатків і XML
- необхідні ресурси
- Старий обмін даними документів
- Огляд формату OpenOffice і нового формату MS Office 2007
- Малюнок 1. Вміст opendoc.odt в програмі WinZip
- Малюнок 1.1 Вміст файлу submit.docx в програмі WinZip
- Лістинг 1. Створення бази даних, розуміє XML-формат
- Лістинг 2. Створення таблиці, розуміє XML-формат, для зберігання наших документів ODF і MS Office 2007
- Лістинг 3. Зміни в php.ini
- Малюнок 2. Приклад документа в OpenOffice або MS Word
- Лістинг 4. PHP-код, який використовує формат OpenOffice (ODF) (odfconsume.php)
- Лістинг 4.1. PHP-код, який використовує формат MS Office 2007 (msconsume.php)
- Перепризначення вмісту ODF і Word 2007
- Лістинг 5. Перепризначення формату ODF (opendoc.odt) в простій HTML-абзац
- Лістинг 5.1 Перепризначення формату Word 2007 (submit.docx) в простій HTML-абзац
- Лістинг 6. Інформація, що виводиться
- Ресурси для скачування
Збереження і перепризначення даних засобами 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" потрібно додати в конфігурацію самостійно:
- Відкрийте Zend Core Administration Console.
- Перейдіть в закладку Configuration і подзакладку Extensions.
- Прокрутіть вікно вниз до ZIP extension.
- Клацніть лівою кнопкою миші по піктограмі перемикача, щоб його включити.
- Натисніть кнопку Save Settings.
- Перезапустіть Apache2.
- Якщо сервер Apache2 ще не працює (червоне перо в системній панелі), виконайте команду C: \ Program Files \ Zend \ Apache2 \ bin \ ApacheMonitor.exe.
- Клацніть лівою кнопкою миші на піктограмі пера і перезапустіть 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 (). "\ 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?