РАБОТА С ИНТЕРПРЕТИРУЕМЫМ SAXON
Обратите внимание: для связи с базами данных через JDBC нельзя использовать исполняемый файл для Windows saxon.exe. Нужно запустить реализующий Saxon класс Java com.id.saxon.StyleSheet, как я сделаю в конце примера.
В примере я передам данные planets.xmlв базу данных формата Microsoft Access planets.mdb. Если вы хотите повторить пример, создайте этот файл базы данных, в нем — таблицу planetsс четырьмя текстовыми полями Name, Mass, Radiusи Day, а оставшуюся часть файла оставьте пустой. В Windows я зарегистрирую этот файл базы данных в качестве источника ODBC с именем «planets» через значок Data Sources (ODBC)(Источники данных (ODBC)) в панели управления (в Windows 2000 он расположен в панели управления в папке Administrative Tools(Администрирование)). При запуске пример считает данные планет из planets.xmlи добавит их в файл базы данных, planets.mdb.
Для подключения к этой базе данных через JDBC я применил элемент процессора Saxon. Префикс пространства имен sqlопределяется в Saxon следующим образом:
xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
.
.
.
Для фактического подключения к источнику данных planetsслужит элемент расширения с атрибутами database, user, passwordи driver. Для работы через JDBC установите атрибут driverв « sun.jdbc.odbc.JdbcOdbcDriver», атрибут database— в источник данных ODBC, « jdbc:odbc:planets», а атрибуты userи password— в имя пользователя и пароль, нужные для подключения к базе данных. Здесь нам не требуется задавать имя пользователя и пароль, но я задал этим параметрам шаблонные значения, так как они требуются в большинстве приложений баз данных:
xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"
xsl:extension-element-prefixes="sql"/>
.
.
.
Затем я подключаюсь к источнику данных planets. Я хочу вставить в базу данных данные из каждого элемента , для чего я создаю новый шаблон, который выбирает элементы и вставляет данные в таблицу planetsбазы данных при помощи элемента Saxon :
xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
.
.
.
password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"
xsl:extension-element-prefixes="sql"/>
.
.
.
Элемент вставляет в базу данных новую запись. Чтобы присвоить ее полям новые данные, используйте элемент , установив его атрибут name в имя столбца, в который вы хотите записать данные, и присвоив эти данные атрибуту select:
xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
.
.
.
В идеале этого должно быть достаточно, но при работе с самым последним драйвером Access в конце операции Saxon не сбрасывает все буфера данных. Это значит, что данные о последней планете в planets.xml, Земле, не будут отправлены в базу данных. Чтобы сбросить буферы данных, я явно вызываю шаблон как именованный шаблон, применяя с данными-заглушкой (листинг 10.11).
Листинг 10.11. Работа с реляционной базой данных
xmlns:sql="http://icl.com/saxon/extensions/com.icl.saxon.sql.SQLElementFactory"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
password="{$password}" driver="sun.jdbc.odbc.JdbcOdbcDriver"
xsl:extension-element-prefixes="sql"/>
xsl:extension-element-prefixes="sql">
xsl:extension-element-prefixes="sql">
Эта таблица стилей правильно добавляет три записи в базу данных planets.mdb: по одной новой записи для каждой из планет. Как я говорил, здесь нельзя использовать готовый исполняемый файл saxon.exe, нужно применять класс Java com.icl.saxon.StyleSheet. Сначала нужно включить в classpathфайл saxon.jar:
C:\>set classpath=.;c:\saxon\saxon.jar
После этого я могу передать в класс com.icl.saxon.StyleSheetфайл planets.xmlи таблицу стилей из листинга 10.11:
C:\>java com.icl.saxon.StyleSheet planets.xml saxonsql.xsl
Теперь все сделано — данные планет вставлены в planets.mdb. Результаты применения этой таблицы стилей показаны на рис. 10.4, где я открыл planets.mdbв Microsoft Access. Таким образом, мы рассмотрели преобразование из XML в реляционную базу данных.
Рис. 10.4.Применение расширений SQL Saxon
Читать дальше