ChernoWiki.ru: web collaboraion (powered by CoWiki)
Current user:   guest    Change     Preferences 
   List directory   History   Similar   Print version 
root 
dev 
   PostgreSQL 
   PHP 
   XML 
   DHTML 
   Design Patterns 
   Graph in RDBMS 
   Social networks 
   Adaptive Web 
   Wiki 
   Philosophy 
os 
   Unix, Linux, FreeBSD 
other 
   212.861.1881 
   searchers 



dev > PostgreSQL > pgxml?

 
rw-rw-r--   ns   wheel

pgxml?

А надо ли?

Во-первых, XML-документы бывают самые разные. Простое деление документов на data-oriented и document-oriented даёт представление о том, что лучше - XED (XML Enabled Database) или NXD (Native XML Database). Рассуждения об этом - см. заметку http://www.xml.com/pub/a/2001/10/24/follow-yr-nose.html (перевод тут: http://xmlhack.ru/texts/followNose/followNose.html). Вкратце, очень много соображений в пользу РСУБД с поддержкой XML (data-oriented документы достаточно просто ложатся на реляционную модель, т.е. можно осуществить преобразование и "разложить" данные по группе таблиц), document-oriented документы тоже предпочтительнее хранить в XED, если в схеме можно выделить отдельно стоящие метаданные (в этом случае XED достаточно проиндексировать только этот кусок документа), если же надо делать сложные запросы к контенту, то XED-у придётся туго, ибо не совсем ясно, как быть с контентом (структура document-oriented документов может сильно меняться при переходе от одного к другому)...

Таким образом, плавно перетекаем к "во-вторых" - многое зависит от того, что с данными надо делать (какие запросы строить)... поддержка не только XPath, но и XUpdate может дать многое

В-третьих, (и, как говорится, the last but not the least), если уже создана большая база, поддерживаемая РСУБД, и есть какое-то кол-во приложений с ней работающих - переход на NXD может оказаться равносильным пожару.

Так что, мотивация есть. Postgres'у нужно уметь работать с XML.

Как хранить?

Видятся следующие пути хранения:

1. BLOB-ом. "Топорный" метод, но в тривиальных случаях может выручить (не нужно мучиться с разбором дерева и т.д.). XPath "эмулируется" рег. выражениями. Уже реализовано (contrib/xml, contrib/xml2)

2. "Раскладываем" документ по реляционным таблицам. Подходит в случае, когда схема группы документов "достаточно строгая" (а ведь её может и не быть вообще...), документы вида data-oriented. Плюсы очевидны: с данными работать достаточно просто, все механизмы (О)РСУБД в наших руках. Минусы - а) чтобы "собрать" обратно документ, надо сделать кучу join-ов; б) большая часть таблиц может "пустовать" для большой части документов; в) не все XML-схемы легко "нормализуются" в реляционные (см., напр., http://www.xml.com/pub/a/2001/05/09/dtdtodbs.html), данный процесс может привести к появлению огромного числа таблиц, многие из которых будут очень "широкими".

3. Поддержка в ОРСУБД специального типа - XMLTYPE. Т.е. при определении таблицы мы можем сказать, что некоторый столбец имеет данный тип. Это означает что в любой строке таблицы в данном столбце будет содержаться целый XML-документ. Плюсы подхода: нет (явной) нужды создавать большое количество таблиц; нет требования в высокой строгости схемы (т.е. данные могут быть действительно полуструктурированными, схемы может не быть вообще); ... . Минусы: совершенно неясно пока, как облегчить задачу "доставания" части XML-документа, как будет работать JOIN по значению какого-либо атрибута XML-документа и, скажем, столбца другой таблицы; какие операции с этим типом определять (по идее, они описаны в SQL:200n, часть 14); ... ; идеологическая проблема - целый документ в одном столбце, т.е. какая уж там NF1...

Кроме того, в некоторых случаях, возможно, вообще не надо заморачиваться. Например, если уже имеется реляционная база и стоит задача экспорта данных в формате XML (вообще говоря, это подмножество случая 2) - достаточно иметь инструмент для преобразования обычного result set'а в XML. Пример реализации - SELECT FOR XML у Microsoft (http://msdn.microsoft.com/library/defaul ... ry/en-us/xmlsql/ac_openxml_759d.asp).


useful links

[PATCHES] SQL/XML publishing function experimental patch: 1: http://www.pgsql.ru/db/mw/msg.html?mid=2096818 2: http://archives.postgresql.org/pgsql-patches/2006-06/msg00147.php

[HACKERS] SQL/XML public functions documentation for PostgreSQL 8.2: http://candle.pha.pa.us/mhonarc/patches_hold/msg00106.html

[HACKERS] SQL/XML extension: http://candle.pha.pa.us/mhonarc/patches_hold/msg00119.html

It's necessary to make grammar hacks... : http://archives.postgresql.org/pgsql-hackers/2004-01/msg00758.php

http://archives.postgresql.org/pgsql-hackers/2004-01/thrd2.php#00758

SQL/XML extension (research): http://archives.postgresql.org/pgsql-hackers/2005-08/msg00576.php

SQL/XML examples : http://archives.postgresql.org/pgsql-hackers/2003-03/threads.php#01183

quote:

IIRC, Peter Eisentraut noted a while ago that implementing the SQL/XML functions properly would require building them into the postgresql parser as special cases.

Requests: http://archives.postgresql.org/pgsql-novice/2005-09/msg00140.php


GiST home: http://gist.cs.berkeley.edu/

How to write GiST ext: http://www.sai.msu.su/~megera/postgres/talks/gist_tutorial.html


Indexing of large XML docs

XISS system (Li, Moon - advanced interval indexes) http://www.cs.arizona.edu/xiss/

MASS (prefix indexes) http://davis.wpi.edu/dsrg/vamana/WebPages/Publication.html


XML DBMS

Overview: http://www.rpbourret.com/xml/ProdsNative.htm

Sedna: http://www.modis.ispras.ru/Development/sedna.htm

eXist: http://exist.sourceforge.net/



MS SQL

(VLDB2005) XQuery Implementation in a Relational Database System: http://www.informatik.uni-trier.de/~ley/db/conf/vldb/vldb2005.html#PalCSRSYTBBCK05

"SQL Server 2005's new XML data type is based on this standard." (http://www.stylusstudio.com/michael_rys.html)

Michael Rys blog: http://sqljunkies.com/weblog/mrys/


Oracle

http://www.oracle.com/technology/oramag/oracle/05-jul/o45php.html

SQL 2003 Standard Support in Oracle Database 10g: http://www.oracle.com/technology/product ... on_development/pdf/SQL_2003_TWP.pdf

[2002] SQL/XML is Making Good Progress A. Eisenberg, J. Melton: http://www.sigmod.org/sigmod/record/issues/0206/standard.pdf


DB2

(from VLDB2005) Native XML Support in DB2 Universal Database: http://www.informatik.uni-trier.de/~ley/db/conf/vldb/vldb2005.html#NicolaL05

http://www-306.ibm.com/software/data/db2/extenders/xmlext/

4612



Reference pgxml?
http://chernowiki.ru/Dev/Pgxml

Comments: 0 New comment

  PostgreSQL compared with SQL:2003 and Oracle/SQLServer/DB2/etc Next


Russian Internet News | AJAX news | avianews

Driven by coWiki 0.3.4 (Boron) web collaboration tool. Processed in 0.185 sec.