ЗАСОБИ МОВИ SQL / XML

До часу написання даної книги в стандарті SQL не була передбачена підтримка мови XML, але передбачається, що відповідні засоби підтримки будуть включені в цей стандарт під загальною назвою SQL / XML [2715] і визначені у частині 14 наступної версії стандарту (робочий варіант якої був опублікований у 2003 році) У справжньому розділі дано попередні відомості про зазначених коштах підтримки, але слід враховувати, що весь представлений тут матеріал після формального затвердження специфікації засобів SQL / XML може зажадати перегляду

Застосування колекції XML

Як було показано в попередньому розділі, існує два основних способи, за допомогою яких може бути організовано зберігання даних XML в базі даних SQL У цих двох підходах використовуються колекція XML і стовпець XML; в специфікації SQL / XML підтримуються обидва зазначених способу (З очевидних причин в цій специфікації не підтримуються власне бази даних XML як такі) У даному підрозділі розглядається так звана підтримка з використанням колекції XML.

Перш за все, необхідно відзначити, що сама вимога, згідно з яким підтримка колекції XML взагалі повинна бути включена в стандарт SQL, є досить дивним Справа в тому, що (як показано в розділі 276) така підтримка не має ніякого відношення до СУБД (вона, швидше, призначена для певних прикладних програм, таких як Web-сервери, які застосовуються як надбудови над СУБД) Але, так чи інакше, розглянуті засоби підтримки фактично складаються з описаних нижче компонентів

■ Правила перетворення наборів символів, ідентифікаторів, типів данних22 і значень SQL в набори символів, імена, типи даних і значення XML

■ Правила перетворення таблиці або набору таблиць SQL в два документа XML, один з яких містить дані як такі, а другий – відповідну схе му на мові ХМ L Schema

Ці правила, разом узяті, забезпечують публікацію даних SQL у формі XML рівним чином вони забезпечують підтримку тих інформаційних структур, які в попередньому розділі були названі уявленнями даних SQL у вигляді документів XML (Але призначених тільки для вибірки) Тому, зокрема, ці правила надають основу для застосування запитів XQuery до таких даних Але слід зазначити, що в специфікації SQL / XML не визначені будь-які правила виконання зворотного процесу, а саме для розділення даних XML на фрагменти і перетворення у форму SQL (якщо не рахувати того невеликого виключення, що в цій специфікації передбачені правила перетворення наборів символів та імен XML в набори символів і ідентифікатори SQL)

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

22 Ковременинаписанияэтойкнигиструктурированныетипынеподдерживались

CREATE TABLE P ( PNUM CHAR(6),

PNAME CHAR(20), COLOR CHAR(6), WEIGHT NUMERIC(5,1), CITY CHAR(20) )

Припустимо, що таблиця містить тільки звичайні рядки з даними про деталі Р1 і Р2 У такому випадку в результаті перетворення цих рядків у формат XML може бути отриманий документ з даними, який виглядає приблизно так

<Р>

&ltrow&gt

&ltPNUM&gtP1&lt / PNUM&gt

&ltPNAME&gtNut&lt/PNAME&gt

&ltCOLOR&gtRed&lt/COLOR&gt

&ltWEIGHT&gt120&lt/WEIGHT&gt

&ltCITY&gtLondon&lt/CITY&gt

&lt/row&gt

&ltrow&gt

&ltPNUM&gtP2&lt/PNUM&gt

&ltPNAME&gtBolt&lt/PNAME&gt

&ltCOLOR&gtGreen&lt/COLOR&gt

&ltWEIGHT&gt170&lt/WEIGHT&gt

&ltCITY&gtParis&lt/CITY&gt

&lt/row&gt

&lt/p&gt

Крім того, виробляється документ схеми, який має наступний вигляд

&ltxsd:schema xmlns:xsd=&quothttp://wwww3org/2 001/XMLSchema&quot&gt

&ltxsd:simpleType name=&quotCHAR_6&quot&gt

&ltxsd:restriction base=&quotxsd:string&quot&gt

&ltxsd:length value=&quot6&quot/&gt

&lt/xsd:restriction&gt

&lt/xsd:simpleType&gt

&ltxsd:simpleType name=&quotCHAR_20&quot&gt

&ltxsd:restriction base=&quotxsd:string&quot&gt

&ltxsd: length value=&quot20&quot/&gt

&lt/xsd:restriction&gt

&lt/xsd:simpleType&gt

&ltxsd:simpleType name=&quotDECIMAL_5_l&quot&gt

&ltxsd:restriction base=&quotxsd:decimal&quot&gt

&ltxsd:totalDigits value=&quot5&quot/&gt

&ltxsd:fractionDigits value=&quotl&quot/&gt

&lt/xsd:restriction&gt

&lt/xsd:simpleType&gt

&ltxsd:complexType name=&quotRowTypeP&quot&gt

&ltxsd:sequence&gt

23 Ці спрощення полягають у наступному – опущена конструкція PRIMARY KEY, оскільки в [2715] не наведено відомості про перетворення ключів в формат XML, виключені випадки застосування визначаються користувачем типів і опущені специфікації NOT NULL

&ltxsd:element name=&quotPNUM&quot type=&quotCHAR_6&quot/&gt

&ltxsd:element name=&quotPNAME&quot type=&quotCHAR_20&quot/&gt

&ltxsd:element name=&quotCOLOR&quot type=&quotCHAR_6&quot/&gt

&ltxsd:element name=&quotWEIGHT&quot type=&quotDECIMAL_5_1&quot/&gt

&ltxsd: element name=&quotCITY&quot type=&quotCHAR_2 0 &quot/&gt

&lt/xsd:sequence&gt &lt/xsd:complexType&gt

&ltxsd:complexType name=&quotTableTypeP&quot&gt

&ltxsd:  sequence&gt

&ltxsd:element name=&quotrow&quot type=&quotRowTypeP&quot minOccurs=&quot0&quot maxOccurs=&quotunbounded&quot/&gt &lt/xsd:seguence&gt

&lt/xsd:complexType&gt

&ltxsd:element name=&quotP&quot type=&quotTableTypeP&quot/&gt &lt/xsd:schema&gt

Застосування стовпця XML

Тепер перейдемо до вивчення засобів підтримки стовпця XML в мові SQL У специфікації SQL / XML введено новий тип даних, званий просто XML (а не XMLDOC, як було описано в розділі 276), значеннями якого фактично є документи XML або їх фрагменти (тут під терміном фрагмент мається на увазі, наприклад, окремий елемент XML або послідовність таких елементів) Для формування або вироблення значень типу XML зі звичайних даних SQL передбачені різні оператори Нижче наведено простий приклад

INSERT INTO RESULT ( XMLCOL) SELECT XMLGEN ( &ltResult&gt

&ltSNAME&gt{SXSNAME}&lt/SNAME&gt

&lt PNAME&gt{PXPNAME}&lt/PNAME&gt

&ltQTY&gt{SPXQTY}&lt/QTY&gt

&lt/Result&gt’,

SXSNAME, PXPNAME, SPXQTY ) AS Result FROM S AS SX, P AS PX, SP AS SPX WHERE SXSNUM = SPXSNUM AND  PXPNUM = SPXPNUM

Тут передбачається, що стовпець XMLCOL таблиці RESULT відноситься до типу XML Аналогія між цим прикладом і першим прикладом запиту XQuery з розділу 275 не є простим збігом Вона фактично означає, що визначення оператора XMLGEN майже напевно зміниться ще до того, як відбудеться твердження специфікації SQL / XML, оскільки визначення цього оператора засноване ще на одному реченні по доповненню мови XQuery, яке само до часу написання цієї книги все ще перебувало в процесі розробки.

Тому слід ще раз зазначити, що в специфікації SQL / XML введено новий тип XML, але в ній не визначено майже жодної операціі24 зі значеннями цього типу – не передбачена навіть операція перевірки на рівність В [2715] фактично сказано наступне: Якщо обидва значення, V1 і V2, відносяться до типу XML, то перевірка того, чи є V1 і V2 ідентичними чи ні .., залежить від реалізації. Але така ситуація, повідомимо, буде виправлена ​​до часу формального затвердження специфікації SQL / XML А в [2711] зазначено, що до часу її затвердження (або, можливо, через деякий час) можуть бути також додатково введені перераховані нижче засоби

■ Підтримка маскирующих виразів для конструкцій XPath або XQuery

■ Можливість перевірки того, чи є вказане значення типу XML формально правильним елементом XML або допустимим документом XML, чи відповідає воно деякою заданою схемою XML і тд

Але навіть після введення всіх цих удосконалень передбачений в специфікації SQL / XML доступ до даних XML все ще залишатиметься в основному призначеним для забезпечення тільки читання, а повноцінний доступ буде як і раніше від

Спеціалізовані засоби підтримки

Як було відзначено в розділі 275, в деяких програмних продуктах SQL (наприклад, в таких СУБД, як DB2 і Oracle) вже передбачені спеціалізовані засоби підтримки для вибірки та оновлення даних XML Автор не ставив перед собою завдання викладати в даному розділі докладні відомості про конкретні програмних продуктах, але тут наведені деякі гіпотетичні приклади, що дозволяють показати, якого роду функціональні засоби зазвичай надають ці програмні продукти Неформально можна відзначити, що ці приклади засновані на програмному продукті XML Extender компанії IBM для СУБД DB2, але в них внесені спрощення для усунення таких особливостей, які є несуттєвими з точки зору викладу теми даного розділу

У програмному продукті XML Extender використовується передбачена в мові SQL підтримка функцій, визначених користувачем (див главу 5), для надання безлічі функцій, які (з точки зору користувача) по суті є вбудованими функціями Ці функції можуть викликатися з коду SQL і надають цілий ряд можливостей по вибірці і оновленню даних XML У цьому розділі будуть показані функції XMLFILETOCLOB, XMLCONTENT, XMLEXTRACTREAL І XMLUPDATE (це – не справжні, а вигадані імена функцій) Можливості, що надаються цими функціями, описані нижче

■ Збереження документа XML у вигляді значення стовпця SQL

Приклад У наведеному нижче реченні з оператором UPDATE, по-перше,

використовується функція XMLFILETOCLOB для перетворення документа XML,

24 У специфікації визначений оператор XMLSERIALIZE, який перетворює значення типу XML у форму символьного рядка Крім того, в даній специфікації визначений оператор XMLPARSE для виконання зворотної дії , тобто для перетворення документа XML або фрагмента документа, представленого у вигляді символьного рядка, в тип XML Крім усього іншого, ці два оператора надають певну підтримку для розділення та публікації

що зберігається в зовнішньому файлі BoltDrawingsvg в тип CLOB, а потім, подруге, відбувається збереження отриманого рядка типу CLOB у вигляді значення стовпця DRAWING в рядку таблиці Р, що відноситься до деталі частини Р2, таким чином

UPDATE P

SET   DRAWING = XMLFILETOCLOB ( BoltDrawingsvg ) WHERE PNUM = P2

Безумовно, тут передбачається, що таблиця р дійсно включає стовпець

DRAWING і що цей стовпець має тип CLOB

■ Вибірка подібного значення стовпця SQL

ПрикладУнаведеному нижче реченні з оператором SELECT виконується вибірка значення CLOB, записаного в попередньому прикладі, і його публікація у вигляді документа XML в зовнішньому файлі RetrievedBoltDrawing svg

SELECT  XMLCONTENT   (   DRAWING,    RetrievedBoltDrawingsvg    ) FROM     P

WHERE    PNUM  =   P2  

■ Вибірка зазначеного компонента документа XML

ПрикладЗнову припустимо, що документ PartsRelation зберігається у файлі PartsRelationxml У такому випадку наведене нижче пропозицію з оператором UPDATE дозволяє, по-перше, отримати з цього документа значення WEIGHT, що відноситься до деталі РЗ, і перетворити його в тип REAL, а потім, по-друге, зберегти це значення як значення стовпця WEIGHT в рядку таблиці р з даними про деталі РЗ

UPDATE P

SET   WEIGHT = XMLEXTRACTREAL

( PartsRelationxml, //PartTuple[PNUM = &quotP3&quot]/WEIGHT )

WHERE PNUM = P3

Примітка Тут прийнято фіктивне припущення, що стовпець WEIGHT таблиці Р має тип REAL, а не NUMERIC (5, 1), оскільки програмний продукт XML Extender в даний час не підтримує функцію Вилучення у вигляді значення NUMERIC. Ще більш важливим є таке зауваження, що XMLEXTRACTREAL та інші функції вилучення можуть застосовуватися до документів XML, що зберігаються в стовпцях SQL, а не тільки до документів XML, що зберігаються в зовнішніх файлах

■ Оновлення зазначеного компонента документа XML

ПрикладПриймемо трохи нереальне припущення, що таблиця SP включає стовпець PARTDETAIL типу CLOB, значенням якого в будь-якої заданої рядку є документ XML з описом розглянутої деталі У такому випадку наведене нижче пропозицію з оператором UPDATE встановлює значення компонента COLOR цього документа XML, рівне Green для будь-якої деталі, що поставляється постачальником S4

UPDATE SP

SET   PARTDETAIL = XMLUPDATE ( PARTDETAIL,

‘//PartTuple/COLOR, Green

) WHERE SNUM = S4

271 РЕЗЮМЕ

У цій главі розглядається звязок між мовою XML і базами даних Але для того щоб підготувати грунт для такого викладу, необхідно було розглянути цілий ряд додаткових тем, тому в даній чолі спочатку коротко описана система World Wide Web, а потім наведено набагато більш докладні відомості про мову ХМ L як такому

Мова XML був визначений на основі раннє створених мов SGML і HTML імя

“XML є скороченням від Extensible Markup Language (Розширювана мова розмітки), але (як і SGML) XML фактично є метамовою або навіть метаметаязиком. Конкретним додатком XML (тобто мовою, похідним від XML, згідно з визначенням, наведеним на початку цієї глави) є мова, призначений для визначення документів XML деякого особливого роду (наприклад, документів PartsRelation) Спочатку мова XML не мав нічого спільного з базами даних замість цього він був призначений просто для забезпечення передачі, прийому і обробки універсальних документів SGML в системі Web із застосуванням таких способів, які в даний час можливі завдяки використанню мови HTML [2725] Безумовно, не можна заперечувати необхідність зберігати дані XML в базах даних і маніпулювати з ними за допомогою СУБД Але на підставі цього факту деякі фахівці прийшли до висновку, що мова XML повинен стати основою технології баз даних як такої

Будь документ XML складається головним чином з правильно вкладених ієрархічних конфігурацій елементів, кожен з яких включає пару розмежувальних дескрипторів Будь-який конкретний елемент може містити символьні дані, вкладені елементи або поєднання того й іншого Підтримуються порожні елементи Початковий дескриптор може додатково включати непорожнє безліч атрибутівБуло показано, що документ ХМL може використовуватися для представлення відношення, але він обовязково накладає на кортежі впорядкування зверху вниз і при цьому, можливо, також впорядкування атрибутів зліва направо

В основі будь-якого конкретного документа XML лежить абстрактна структура, званаінфонабором,з якою можуть проводитися маніпуляції за допомогою APIінтерфейса, званого обєктною моделлю документа, і на базі якої можуть виконуватися запити з використанням мови XQuery Відносно документів XML іноді доводиться також зустрічати твердження, що вони відповідають слабоструктурованої моделі даних, але фактично документи XML структуровані не в меншій і не більшою мірою, ніж відносини в дійсності, автор не бачить суттєвої різниці між слабоструктурованої моделлю і старої ієрархічної моделлю (принаймні, з точки зору структурних особливостей цих моделей)

Будь-який конкретний документ XML є формально правильним за визначенням

Він може бути також допустимим під цим мається на увазі, що він відповідає деякому заданому визначенням типу документа (Document Type Definition – DTD) Правила написання визначень DTD є складовою частиною стандарту XML (Фактично будь-яке визначення DTD являє собою визначення деякої мови, похідного від

XML) Але визначення DTD характеризуються цілим рядом недоліків, зокрема, вони лише в дуже невеликій мірі забезпечують підтримку обмежень цілісності Мова XML Schema— це метамова, що підтримує формування схем XML, які можуть використовуватися для створення більш строгих і більш докладних описів документів XML (зокрема, стосовно до типам даних, хоча аналізовані типи навряд чи можна вважати справжніми типами в тому сенсі, який був зазначений в розділі 5) Процес контролю того, чи відповідає конкретний документ XML заданою схемою XML, називається перевіркою за схемою

Далі, в цьому розділі розглядалися мови XQuery і XPath (Другий з них є строгим підмножиною першого), які надають доступ тільки для читання до даних XML, або, що більш точно, до абстрактної або синтаксично проаналізованої формі таких даних (тобто, по суті, до інфонабору) Тут не було зроблено спробу детально описати будь-якої з цих мов, але наведено кілька прикладів, що дозволяють отримати певне уявлення про те, які дії можуть здійснюватися з їх допомогою У цьому розділі були описані позначення шляху, які фактично дозволяють користувачеві переходити уздовж деякого зазначеного шляху в інфонаборе до деякої наміченої мети Крім того, показано, яку важливу роль в таких виразах виконує поняття поточного становища, і поставлена ​​під питання необхідність застосування такого засобу (безумовно, їм визначається загальний процедурний зовнішній вигляд і мови Xpath, і мови XQuery, а саме до процедурного підходу, вживаному в цих мовах, автор ставиться досить критично) Потім було відзначено, що мова XPath фактично являє собою просто схему адресації, оскільки він може використовуватися для переміщення по існуючих вузлів в ієрархії, але не дозволяє створювати нові вузли (для цього потрібно язикХQuегу)

Після цього був представлений ряд прикладів застосування мови XQuery, в яких, зокрема, ілюструвалося використання виразів FLWOR (FLWOR – скорочення від for + let + where + order by + return) У звязку з цим була проведена аналогія між такими виразами, а також, по-перше, виразами реляційного

обчислення і, по-друге, вкладеними циклами звичайних мов програмування на підставі цього був зроблений висновок, що друга із зазначених аналогій є більш придатною, ніж перша Крім того, було порушено кілька питань, що стосуються

оптимізації Поряд з цим, було відзначено відсутність у мові XQuery якої явної підтримки операцій зєднання (як було і в первісній версії мови SQL)

На наступному етапі були описані три перерахованих нижче способи, які можуть застосовуватися для зберігання документа XML в базі даних

1 Застосування стовпця XML. Може бути передбачено зберігання всього документа у вигляді значення деякого атрибута певного кортежу Для реалізації цього підходу потрібно створення нового типу даних, скажімо, XMLDOC (безумовно, ос нащенного операціями, призначеними для роботи із значеннями і пере меннимі цього типу)

2 Застосування колекції XML. Може бути передбачено поділ документа з наступним поданням різних його фрагментів у вигляді різних зна чений атрибутів різних кортежів в різних відносинах

Примітка Процедура, зворотна поділу (тобто перетворення даних, відмінних від XML, у форму XML), називається публікацією Процедури поділу і

публікації можуть розглядатися як спосіб створення уявлень XML для даних, відмінних від XML (процедура публікації забезпечує підтримку операції вибірки, а процедура поділу – підтримку операції оновлення)

3 Застосування спеціалізованої бази даних Може бути передбачено зберігання документа власне в базі даних XML (Тобто в базі даних, яка містить документи XML як такі, а не відносини)

У цьому розділі описані переваги та недоліки цих підходів

Нарешті, була коротко описана специфікація SQL/XML (Яка, мабуть, буде остаточно включена в стандарт SQL, робоча версія якого випушена у 2003 році) У специфікації SQL / XML передбачена підтримка публікації даних SQL в

формі XML (хоча, на думку автора, така підтримка не зовсім виправдана) Крім того, в цій специфікації введено новий тип даних, званий XML, значеннями якого є документи або фрагменти XML тим самим передбачена можливість

зберігати дані XML в шпальтах SQL, але в цій специфікації передбачено лише трохи операцій для роботи з такими даними Глава завершується коротким описом підтримки XML в програмних продуктах спеціального призначення на прикладі підтримки, передбаченої для СУБД DB2

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*