IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  XML | Information Management  >

XForms и Ruby on Rails в кабинете врача: Часть 1. Настройка IBM DB2 9 pureXML

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Майкл Галпин, инженер по программному обеспечению, Vitria Technology

11.08.2009

Это первая статья серии из четырех статей, посвященных совместному использованию XForms, DB2 pureXML и Ruby для упрощенного создания Web-приложений. Мы разработаем гипотетическое приложение для управления историями болезни в кабинете врача. Вы почувствуете преимущества каждой из технологий и увидите, как объединить их друг с другом. В этой первой части мы рассмотрим, как XForms, DB2 pureXML и Ruby on Rails сообща помогают быстро создавать Web-приложения, основанные на XML.

Введение

Мир информационных технологий постоянно меняется. Появляются новые технологии, а существующие постоянно развиваются. Эти силы приводят к появлению новых парадигм и подходов. Часто новые технологии кажутся очередным изобретением колеса, но иногда они действительно помогают упростить жизнь. В этой статье, первой в серии из четырех частей, рассматриваются новые технологии, которые объединяет ряд общих аспектов. Каждая из них не только интересна с чисто теоретической точки зрения, но и помогает серьезно упростить решение трудных задач. Мы рассмотрим технологию для создания функционально богатых интерактивных Web-приложений XForms. Мы рассмотрим мощные функции IBM® DB2® pureXML для управления документами XML. Наконец, мы свяжем эти две технологии между собой с помощью среды разработки Web-приложений Ruby on Rails, чтобы рационализировать ввод информации о пациентах в кабинете врача. Имейте в виду, что эта серия статей не охватывает необходимые для практической среды вопросы безопасности, такие как предотвращение доступа пациентов к закрытым каталогам или защита паролем форм и областей, доступных только для врача и медперсонала.



В начало


Предпосылки

Настоящая статья предполагает знакомство с XML и Web-приложениями в целом. Конечно, полезно предварительное знакомство с тремя основными технологиями, XForms, DB2 pureXML и Ruby on Rails, но это не обязательно. Статья написана при помощи Mozilla XForms plugin версии 0.8.0.3. Он обеспечивает поддержку XForms в любом браузере Mozilla, таком как Firefox. Другой очень полезный плагин Mozilla — XForms Buddy. Это отладчик для XForms. Для этой статьи использовалась версия 0.5.6. Нам потребуется также сервер базы данных IBM DB2. Для этой статьи используется СУБД DB2 Express-C version 9.5. Она работает на системах Windows®, Linux™ и UNIX®. Наконец, нам потребуется Ruby on Rails. Для этой статьи используется Ruby 1.8.6 с Rails 1.2.5. Ссылки для загрузки приведены в разделе Resources.



В начало


XForms в кабинете врача

Приложение, управляющее историями болезни в кабинете врача, должно обеспечивать возможность ввода пациентами данных, которые обычно собирают работники регистратуры. Это должно быть Web-приложение, чтобы станцией ввода данных для пациентов мог служить любой компьютер с Web-браузером. Здесь приходится принять первое технологическое решение. В качестве пользовательского интерфейса для своего приложения мы выбираем XForms.

Не служит ли это примером применения новомодной технологии лишь для того, чтобы пустить пыль в глаза и вписать яркую строку в свое резюме? Вовсе нет. XForms идеально подходит в подобной ситуации. Эта технология позволяет определять данные в простой XML-модели и просматривать их с применением стандартных элементов форм HTML. Затем XForms обеспечивает декларативное отображение между этими элементами. Это означает, что вам не нужно писать специальную клиентскую или серверную программу для того, чтобы брать вводимые значения и вставлять их в структуру XML. Все это делает XForms. Причем он делает это асинхронно: изменения в форме HTML связаны с моделью XML и передаются для синхронизации на сервер. Вы получаете преимущества Ajax без необходимости писать какие-либо сценарии JavaScript.

Заметим также, что в настоящее время XForms поддерживается браузерами не в полной мере. В будущем такая поддержка появится, но пока ее нет. Поэтому для добавления его поддержки нужно установить специальный плагин. При создании приложения для массового использования это может стать проблемой. Однако в специализированных приложениях, подобных тому, которое мы разрабатываем, эта технология отлично работает. Для доступа к приложениям применяется ограниченное число компьютеров, поэтому можно гарантировать, что на каждом из них будет установлена подходящая комбинация из браузера и плагина.

XForms – это мощная технология, которую можно использовать во всех случаях при работе с XML. Это клиентская технология, и для ее поддержки в любом динамическом приложении потребуются какие-то серверные технологии. В частности, нужна база данных для хранения информации. Так как интерфейс для представления этих данных будет использовать XML, было бы здорово, если бы и сервер использовал XML. В случае применения DB2 именно так и получается.



В начало


DB2 9 pureXML

Если вы разрабатывали приложения, использующие XML, то, вероятно, вам уже приходилось применять один или пару обычных методов сохранения данных XML в базе данных. Первый метод состоит в использовании той или иной технологии преобразования XML в записи реляционной БД. Часто это специальная логика приложения, которую программист пишет сам, чтобы извлекать данные из документа XML и помещать их в столбцы таблицы реляционной БД. Такой метод иногда называют «шинкованием» (shredding). Конечно, если впоследствии снова надо считывать данные, их всегда можно «расшинковать» и собрать в документ XML.

Другой общий метод заключается в простом помещении XML-документа в столбец CLOB базы данных. При этом XML, по существу, рассматривается как гигантская строка. Впоследствии можно считать ее из базы данных и передать в парсер или восстановить документ XML. Обычно это гораздо проще, так как не нужно писать никакого кода шинкования/расшинкования, но не так удобно, поскольку нет эффективного способа обращения к данным внутри документа XML.

В последние годы стали популярными XML-базы данных, которые решают проблемы подобного рода. Они позволяют хранить данные прямо в формате XML, так что необходимость шинкования отпадает. В них можно эффективно обращаться к данным с использованием языка XQuery, так что структура документа не пропадает. Многие подобные базы данных – это мелкие, специализированные БД, но теперь в список баз данных со стандартной поддержкой XML можно добавить флагманскую РСУБД IBM DB2.

Используя DB2, те же данные, которые вводятся в XForms, можно хранить в базе данных в формате XML. При этом не требуется никакого шинкования, преобразования или анализа данных. «Язык» данных в браузере – тот же, что используется в базе данных. DB2 позволяет применять XQuery в запросах SQL, так называемый SQL/XML, так что данные документов XML остаются легко доступными. Например, допустим, вам нужна информация об определенном пациенте. Эту информацию можно хранить в документах XML, а для извлечения документов о пациенте с нужной фамилией использовать запрос XQuery. Посмотрим, как это делается в DB2.



В начало


Установка DB2

Нужно установить DB2 и создать таблицу, использующую стандартный XML. Одно преимущество DB2 по отношению к другим базам данных XML заключается в том, что она позволяет смешивать реляционные данные с данными XML. Не обязательно выбирать то или другое; можно смешивать оба типа данных. Поэтому вместо перевода XML-документа прямо в таблицу, мы помещаем его в столбец. Одна строка таблицы может содержать даже несколько XML-документов.

Создать новую таблицу, которая использует XML, можно несколькими способами. Проще всего набрать команду в командной строке. В листинге 1 приведен сценарий, который создает таблицу с одним XML-столбцом.


Листинг 1. Создание таблицы со столбцом XML
                
 CREATE TABLE DOC.PATIENTS ( 
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (
        START with +1 INCREMENT BY +1), 
    INFORMATION XML NOT NULL);

В данном примере столбец INFORMATION имеет тип XML. Как видно из листинга, синтаксис предельно прост и мало отличается от декларирования столбца как integer или varchar. Тем, кто не любит создавать таблицы из командной строки, DB2 Command Center предоставляет графическую альтернативу того же действия. Можно использовать его мастер создания таблиц, как показано на рис. 1.


Рисунок 1. Запуск мастера создания таблиц
Запуск мастера создания таблиц

Мастер запускается нажатием кнопки Create New Table и открывает экран с информацией об имени таблицы, как показано на рис.2.


Рисунок 2. Имя таблицы
Имя таблицы

Этот экран позволяет указать схему таблицы и ее имя. Нажатие кнопки Next открывает интерфейс определения столбцов, показанный на рис.3.


Рисунок 3. Определение столбцов новой таблицы
Определение столбцов новой таблицы

Нажатие кнопки Add выводит интерфейс добавления столбцов, показанный на рис.4.


Рисунок 4. Интерфейс добавления столбцов
Интерфейс добавления столбцов

Здесь начинается самое интересное. Чтобы определить столбец с данными XML, нужно установить для него тип данных XML. Ага! Но для этого не нужны никакие специальные меры — XML уже есть в списке типов данных мастера. Выбрав XML, можно нажать OK, и появится столбец XML, как на рис. 5.


Рисунок 5. Добавленная столбец XML
Добавленный столбец XML

С помощью этого мастера можно добавить еще столбцы, первичный и внешний ключи и т.п. Когда все будет готово, нажмите Finish, и таблица будет создана.

Каким бы способом вы ни создали таблицу, ее можно заполнить данными при помощи SQL. При составлении операторов SQL код XML можно рассматривать как строку, как показано в листинге 2.


Листинг 2. Вставка XML
                
INSERT INTO DOC.PATIENTS(INFORMATION)
VALUES ('<?xml version="1.0" encoding="UTF-8"?>
<Info>
	<FirstName>John</FirstName>
	<Age>33</Age>
	<Insurer>Blue Armor</Insurer>
	<ID>555-88-1212</ID>
</Info>');

Может показаться, что вставляется простая строка, но не беспокойтесь. DB2 рассматривает ее не как строку. Это очень похоже на указание в запросе даты. Вы записываете ее как строку с определенным синтаксисом, что позволяет базе данных преобразовать эти данные в специальный тип. Если синтаксис неверный, то запрос не сработает. Работа с XML происходит точно так же. К XML можно обращаться с запросами, используя SQL и XQuery, как показано в листинге 3.


Листинг 3. Запрос SQL/XML
                 
SELECT XMLQUERY('<Patients>
                    {for $i in $x/Info
                     where  $i/Insurer = "Blue Armor"
                     return <Patient>{$i/FirstName/text()}</Patient>}
                </Patients>'
passing P.INFORMATION as "x") from DOC.PATIENTS P;

Заметьте, как SQL (SELECTION ... from ...) смешался с XQuery. Это и называется SQL/XML. Ключ – в использовании зарезервированного слова XMLQUERY для обозначения запроса XQuery по отношению к документу XML, который прошел через оператор выбора SQL. При исполнении этого запроса должен быть возвращен документ XML, показанный в листинге 4.


Листинг 4. Результирующий документ XML
                
<?xml version="1.0" encoding="UTF-16"?>
<Patients>
    <Patient>John</Patient>
</Patients>

Теперь, когда стало ясно, как легко использовать DB2 для стандартного хранения XML, нам понадобится какой-то посредник между использованием XML в XForms и в DB2. Для этой цели хорошо послужит Ruby.



В начало


Rails с DB2

Пора подумать о том, как соединить интерфейс XForms с механизмом DB2 pureXML. Ruby on Rails служит мощным средством для быстрого и удобного создания Web-приложений. Он облегчает и работу с базами данных, но может ли Rails работать с DB2 и, в частности, с DB2 pureXML? Конечно, как и в большинстве случаев применения Rails, это делается на удивление легко.



В начало


Установка драйвера DB2 для Ruby

Первое, что для этого потребуется, — разрешить в Rails поддержку DB2. Если у вас установлен Rails, нужно установить и Ruby Gems. Эта система управления пакетами идеальна для добавления в Rails новых функций, таких как поддержка DB2. Затем в командной строке наберите следующее: >gem install ibm_db.

Это приведет к загрузке драйвера Ruby для DB2. После его установки любые из приложений Ruby (не только приложения Rails) будут поддерживать DB2. Если вы работаете с Windows, будет задан вопрос о версии драйвера, как показано в листинге 5.


Листинг 5. Выбор драйвера DB2
                
>gem install ibm_db
Bulk updating Gem source index for: http://gems.rubyforge.org
Select which gem to install for your platform (i386-mswin32)
 1. ibm_db 0.6.0 (mswin32)
 2. ibm_db 0.6.0 (ruby)
 3. ibm_db 0.4.6 (ruby)
 4. ibm_db 0.4.6 (mswin32)
 5. Skip this gem
 6. Cancel installation

Нужно выбрать последнюю версию драйвера, то есть варианты #1 или #2. Если Ruby установлен при помощи Windows Installer, нужно выбрать вариант #1. Теперь можно создавать приложение Rails, использующее DB2 pureXML.



В начало


Создание приложения Rails

Следующая процедура знакома разработчикам Rails. Нужно создать приложение, как показано в листинге 6.


Листинг 6. Создание приложения Rails
                
>rails xmlmd
      create
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      create  doc
      create  lib
      create  lib/tasks
      create  log
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  script/performance
      create  script/process
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/mocks/development
      create  test/mocks/test
      create  test/unit
      create  vendor
      create  vendor/plugins
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  Rakefile
      create  README
      create  app/controllers/application.rb
      create  app/helpers/application_helper.rb
      create  test/test_helper.rb
      create  config/database.yml
      create  config/routes.rb
      create  public/.htaccess
      create  config/boot.rb
      create  config/environment.rb
      create  config/environments/production.rb
      create  config/environments/development.rb
      create  config/environments/test.rb
      create  script/about
      create  script/breakpointer
      create  script/console
      create  script/destroy
      create  script/generate
      create  script/performance/benchmarker
      create  script/performance/profiler
      create  script/process/reaper
      create  script/process/spawner
      create  script/process/inspector
      create  script/runner
      create  script/server
      create  script/plugin
      create  public/dispatch.rb
      create  public/dispatch.cgi
      create  public/dispatch.fcgi
      create  public/404.html
      create  public/500.html
      create  public/index.html
      create  public/favicon.ico
      create  public/robots.txt
      create  public/images/rails.png
      create  public/javascripts/prototype.js
      create  public/javascripts/effects.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log

Получился скелет нашего Web-приложения. Теперь нужно отредактировать config/database.yml, чтобы можно было подключиться к DB2, как показано в листинге 7.


Листинг 7. Редактирование config/database.yml
                
# IBM DB2 Database configuration file
# Install the IBM DB2 driver and get assistance from:
# http://www.alphaworks.ibm.com/tech/db2onrails
development:
  adapter:      ibm_db
  database:     health
  username:     michael
  password:     your_password_here
  schema:       xmlmd
# == remote TCP/IP connection (required when no local database catalog entry available)
# host:         bigserver     // fully qualified hostname or IP address
# port:         50000         // data server TCP/IP port number
 


# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  database: xmlmd_test
  username: root
  password:
  host: localhost

production:
  adapter: mysql
  database: xmlmd_production
  username: root
  password: 
  host: localhost
  

Заметьте, что в этом примере мы изменили только параметры development, оставив значения параметров test и production по умолчанию. Заметьте также, что для adapter выбрано значение ibm_db. Это только что установленный драйвер. Rails не знает об этом драйвере, так как это не один из драйверов, устанавливаемых с Rails по умолчанию. К счастью, это легко исправить. Нужно отредактировать всего один файл. Войдите в каталог установки Ruby и откройте файл /lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record.rb. Найдите строку RAILS_CONNECTION_ADAPTERS и добавьте в конец списка ibm_db, как показано на листинге 8.


Листинг 8. Добавление в Rails поддержки DB2
                
RAILS_CONNECTION_ADAPTERS = %w( mysql postgresql sqlite firebird sqlserver db2 oracle 
sybase openbase frontbase ibm_db )

Теперь переходим к генерации модели, которая будет работать с XML. Сначала обычным способом создадим модель с применением сценария генерации, как показано в листинге 9.


Листинг 9. Генерация модели Rails
                
>ruby script\generate model doctor
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/doctor.rb
      create  test/unit/doctor_test.rb
      create  test/fixtures/doctors.yml
      create  db/migrate
      create  db/migrate/001_create_doctors.rb

Как и ожидалось, сгенерирован сценарий миграции. Он применяется для генерации другой таблицы, которая будет использовать XML, как показано в листинге 10.


Листинг 10. Сценарий миграции Rails: 001_create_doctors.rb
                
class CreateDoctors < ActiveRecord::Migration
  def self.up
    create_table :doctors do |t|
       t.column  :profile,      :xml,   :null => false 
    end
  end

  def self.down
    drop_table :doctors
  end
end

Это типичный сценарий миграции Rails. Вы определяете только одну столбец profile. Единственный интересный момент заключается в том, что для этого столбца указывается тип xml. Мы использовали Rails для создания сценария Ruby, чтобы обеспечить связь с базой данных и создать таблицу, которая использует столбец XML. Теперь осталось лишь проверить этот сценарий.



В начало


Тестирование Ruby и DB2

Тестирование сценария Ruby/DB2 pureXML выполняется элементарно. Это такая же миграция Rails, как любая другая. Чтобы выполнить ее, воспользуйтесь командой Ruby rake, как показано в листинге 11.


Листинг 11. Исполнение сценария миграции
                
>rake db:migrate
(in /xmlmd)
== CreateDoctors: migrating ===================================================
-- create_table(:doctors)
   -> 0.7840s
== CreateDoctors: migrated (0.7860s) ==========================================

Вот и все. Для удобства исправления ошибок можно указать опцию –trace. Часто это помогает выявить проблемы связи, такие как неправильные имена пользователя/пароли или неправильное указание базы данных, схемы и т.п. Теперь можно проверить существование новой таблицы в DB2, как показано в листинге 12.


Листинг 12. Проверка и описание новой таблицы
                
db2 => describe table xmlmd.doctors

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
ID                              SYSIBM    INTEGER                      4     0 No
PROFILE                         SYSIBM    XML                          0     0 No

  2 record(s) selected.

Итак, мы успешно создали таблицу DB2 со столбцом XML при помощи Ruby on Rails. Теперь Rails можно использовать для многих интересных вещей. Можно создать дополнительные сценарии миграции для вставки XML в базу данных. Ruby предельно облегчает создание документов XML; все, что для этого нужно, — превратить их в строки для передачи в DB2. Можно использовать scaffolding-технологию Rails, внеся некоторые корректировки для работы с XML.



В начало


Заключение

В этой первой статье серии мы рассказали о том, как XForms, DB2 pureXML и Ruby on Rails помогают быстро создавать Web-приложения на основе XML. Мы показали, как XForms упрощает создание интерактивного интерфейса. Мы получили интерактивность Ajax, но без необходимости писать сценарии JavaScript или код преобразования. Мы увидели, как легко сохранять XML и обращаться к нему с запросами при помощи DB2 pureXML. DB2 SQL/XML позволяет смешивать SQL и XQuery, чтобы легко обращаться к данным XML в базе данных. Наконец, мы показали, как настроить Ruby on Rails для работы с DB2 pureXML. Всего нескольких мелких поправок достаточно, чтобы при помощи Ruby on Rails создать таблицы с поддержкой XML в DB2. Теперь у нас есть все основные технологического составляющие. В следующей части этой серии мы начнем создавать при помощи XForms, DB2 pureXML и Ruby on Rails Web-приложения для врачебного кабинета.




В начало


Загрузка

ОписаниеИмяРазмерМетод загрузки
Пример кода для Части 1part1_doctorsOffice.zip2KBHTTP
Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии

Обсудить


Об авторе

Майкл Галпин (Michael Galpin) имеет учёную степень по математике в Калифорнийском Технологическом институте. Он является Java-разработчиком с конца 90-х гг. и работает инженером по программному обеспечению в Vitria Technology, в Саннивейл, Калифорния.




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.
    IBM в России Конфиденциальность Контакты