Методы хранения XML в реляционных базах данных

Автор: Пользователь скрыл имя, 01 Мая 2012 в 17:05, курсовая работа

Описание работы

Цель данной работы – исследовать способы хранения XML в базах данных, выявить их достоинства, недостатки, область применения. Для достижения данной цели необходимо решить следующие задачи:

а) выявить особенности языка XML;

б) определить и проанализировать существующие способы хранения XML;

в) определить область применения способов хранения;

г) определить существующие на практике критерии выбора способа хранения;

д) реализовать один из способов хранения XML в базе данных.

Содержание

Введение

1 ОБЩЕСИСТЕМНЫЙ РАЗДЕЛ

1.1 Языки разметки

1.2 Язык разметки XML

1.2.1 Особенности XML

1.2.2 Синтаксис XML

1.2.3 Структура XML

1.3 Базы данных и системы управления базами данных

1.3.1 Общие понятия о базах данных и системах управления базами данных

1.3.2 Реляционные системы управления базами данных

1.4 Хранение XML

1.4.1 Задача хранения

1.4.2 Документы и данные

1.4.3 Способы хранения XML-документов

1.4.3.1 Хранение в файловой системе

1.4.3.2 Хранение в реляционной базе данных

1.4.3.3 Хранение в БД поддерживающей XML

1.4.3.4 Хранение в специализированных xml-серверах (истинных БД)

1.4.4 Критерии выбора способа хранения

1.5 Обзор готовых продуктов

2 СПЕЦИАЛЬНЫЙ РАЗДЕЛ

2.1 Постановка задачи

2.2 Выбор способа представления XML в РСУБД

2.3 Разработка схемы базы данных

2.4 Выбор средств реализации

2.4.1 Выбор системы управления базами данных

2.4.2 Выбор языка программирования

2.5 Разработка интерфейсного ПО

2.6 Инструкция по применению

ЗАКЛЮЧЕНИЕ

Список использованных источников

Приложение

Приложение А

Приложение Б

Работа содержит 1 файл

Текст работы.doc

— 927.50 Кб (Скачать)

set @parent_left=(select nodeLeft_id from nodesXML where nodeName='goods' and attrList like '%id="$id"%' and doc_id='$doc_id');

set @parent_right=(select nodeRight_id from nodesXML where nodeName='goods' and attrList like '%id="$id"%' and doc_id='$doc_id');

update nodesXML set nodeValue='$price'

where nodeName='price' and doc_id='$doc_id' and nodeLeft_id between  @parent_left and @parent_right;

              Реализованные запросы универсальны. Они будут работать для любого XML документа, достаточно заменить имена элементов на новые, особенные в каждом конкретном случае. Все скрипты написаны в кодировке UTF-8. Работа проверена в браузерах Mozilla Firefox 3.6.3 и Opera 10.53.

 

2.6 Инструкция по применению

 

Для начала работы пользователю необходимо запустить в браузере скрипт index.php. После этого перед ним появляется окно ввода XML документа (смотри рисунок 2.3).

Далее необходимо ввести уникальный идентификатор документа или оставить предложенный системой и нажать кнопку “Put XML to DB”. Документ будет сохранен в базе данных. Если введенный пользователем ID документа не будет уникален, система выдаст предупреждение и дальнейшая работа будет приостановлена.

Для работы с сохраненными документами необходимо запустить скрипт getFromDB.php. После этого перед ним появляется окно для работы с сохраненными XML документами (смотри рисунок 2.4).

В этом окне расположены следующие поля (сверху вниз):

             поле для ввода ID документа;

             поле для ввода величины скидки;

             поле для ввода ID товара;

            поле для ввода цены товара.

 

Программа предоставляет следующие возможности:

             выбор документа из БД и вывод на экран;

             удаление документа;

             добавление и удаление скидки на товар;

            установка новой цены на товар.

Для выбора документа необходимо ввести его ID  и нажать кнопку «Get XML from DB». Для удаления документа необходимо ввести его ID  и нажать кнопку «Delete document».

 

 

Рисунок 2.3 – Окно для ввода XML документа

 

Рисунок 2.4 – Окно для работы с сохраненными документами

 

Для добавления скидки на товар необходимо ввести ID документа, ID товара, размер скидки в процентах и нажать кнопку «Add discount».

Для удаления скидки на товар необходимо ввести ID документа, ID товара и нажать кнопку «Delete discount».

Для установки новой цены на товар необходимо ввести ID документа, ID товара, новую цену товара и нажать кнопку «Set price».

 

 

 


ЗАКЛЮЧЕНИЕ

 

В результате выполнения данной работы ее цель была достигнута. Все поставленные задачи были решены.

Было выяснено, что такое XML и для чего он может применяться. Также было выяснено, в каких приложениях сегодня используется XML. Выявлены достоинства и недостатки XML. Определены цели хранения XML в базах данных и способы хранения. Для каждого способа были установлены достоинства, недостатки и область применения. Приведены используемые на практике критерии для выбора способа хранения XML документа.

                            В практической части реализовано хранение XML документа в реляционной СУБД MySQL при помощи отображения иерархической структуры XML документа в реляционную модель по методу вложенных множеств. XML документ был представлен в виде дерева, которое при помощи метода вложенных множеств было сохранено в реляционной базе данных. Реализованы запросы к РСУБД.

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

                            Дальнейшим направлением работы является реализация остальных способов представления XML в РСУБД, выработка объективных критериев их сравнения и проведение анализа.

 

 

 

 

 


Список использованных источников

 

1.             DeveloperGuru.NET — гуру-программист в Сети:[Электронный документ]. –(http://developerguru.net/post/web-programming-languages/)

2.             MySQL 5.5 - Performance and Scalability http://dev.mysql.com/

3.             Office Open XML:[Электронный документ]. -  (http://www.ecma-international.org/publications/standards/Ecma-376.htm)

4.              rpbourret.com - XML and Databases. : [Электронный документ]. –   (http://www.rpbourret.com/xml/XMLAndDatabases.htm)

5.              rpbourret.com - XML consulting, writing, and research: [Электронный документ]. –  ( http://www.rpbourret.com/)

6.             TIOBE Programming Community Index for May 2010 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

7.             XML and Databases.Follow you nose/ http://www.xml.com/pub/a/2001/10/24/follow-yr-nose.html

8.             XML Current Status: [Электронный документ]. –  (http://www.w3.org/standards/techs/xml#w3c_all)

9.             XML Essentials: [Электронный документ]. –  (http://www.w3.org/standards/xml/core)

10.        XML Guild:[Электронный документ].-( http://xmlguild.org//)

11.        XML Technology: [Электронный документ]. – (http://www.w3.org/standards/xml/)

12.        xml.com: Mapping DTDs to Databases: [Электронный документ]. –   (http://www.xml.com/pub/a/2001/05/09/dtdtodbs.html)

13.        XML и базы данных? Доверьтесь своей интуиции : Технологии XML : Клуб знатоков DataWarehouse, OLAP, XML : Intersoft Lab: [Электронный документ]. –  ( http://www.iso.ru/journal/articles/206.html)

14.        Web 3.0, the official definition. The Jason Calacanis Weblog:[Электронный документ].-( http://calacanis.com/2007/10/03/web-3-0-the-official-definition/)

15.        Аткинсон, Леон. MySQL. Библиотека профессионала.: Пер. с англ. — М.: Издательский дом "Вильяме", 2002. — 624 с.: ил. — Парал. тит. англ.

16.        Грофф Дж., Вайнберг П. SQL: Полное руководство: Пер. с англ. – 2-е изд., перераб. и доп. – К.: Издательская группа BHV, 2001. – 816 с., ил.

17.        Дюбуа, Поль. MySQL : Пер. с англ. : Уч. пос. — М. : Издательский дом "Вильямс", 2001. — 816 с. : ил. — Парал. тит. англ.

18.        Елманова Наталия. СУБД ведущих производителей. КомпьютерПресс №10 2008г.

19.        Когаловский М. Р. Энциклопедия технологий баз данных. — М.: Финансы и статистика, 2002.

20.        Коггзолл, Джон. РНР 5. Полное руководство. : Пер. с англ. — М. : Издательский дом "Вильяме",2006. — 752 с.: ил. — Парал. тит. англ.

21.        Мир электронной свободы: [Электронный документ]. –   (http://liberatum.ru/news/relyatsionnye-subd-sdavat-pozitsii-ne-sobirayutsya)

22.          Объектно-ориентированные СУБД (ООСУБД) : [Электронный документ]. –   (http://www.inteltec.ru/publish/articles/objtech/kuznetsd.shtml)

23.        Почтовая рассылка xmldb:[Электронный документ]. – (http://www.xmldb.org/projects.html)

24.        Проектирование баз данных: иерархические структуры. Деревья в SQL :[Электронный документ]. –(http://www.arbinada.com/main/node/25)

25.        Фленов М. Е. РНР глазами хакера. — СПб.: БХВ-Петербург, 2005. — 304 с: ил.

26.        Школы консорциума w3c/XML: [Электронный документ]. –   (http://xml.nsu.ru/xml/xml_home.xml)

27.        Школы консорциума w3c/XML и базы данных: [Электронный документ]. –   (http://xml.nsu.ru/extra/database_0.xml)


Приложение

Приложение А

Исходный код программы

INDEX.PHP

<html>

<head>

<title>Test</title>

<meta charset="utf-8">

</head>

<body>

<?php

$data = "

<miniShop>

              <goods id='1' name='pppp'>

                            <type>motherboard</type>                           

                            <manufacturer>

                                          <item>asus</item>

                                          <item>acer</item>

                                          <item id='GB'>GIGABYTE</item>             

                            </manufacturer>

                            <model>NMX-300j</model>

                            <price currency='USD'>100</price>

              </goods>

              <goods id='2'>

                            <type>cpu</type>

                            <manufacturer>INTEL</manufacturer>

                            <model>E-230</model>

                            <price currency='USD'>1000</price>

                            <discount amount='0.07'/>

              </goods>             

</miniShop>";

$data = "Put youre XML document here!";

              include('stack2.class.php');

              include ('config.conf');

              $mysqli = new mysqli($cfg['host'],$cfg['user'],$cfg['password'],$cfg['db']);

              if (mysqli_connect_errno()) {

                            printf("<br>Connect failed: %s<br>", mysqli_connect_error());

                            exit();

              }

              $mysqli->set_charset('utf8');             

              $result = "";

              $mid = 1; $mnum = 1;

              if ( !$result = $mysqli->query("select max(doc_id) as mid from nodesXML"))

              {

                            printf("Error: %s<br>",$mysqli->error);

                            exit();

              }             

              $row = $result->fetch_array();

              if ( $row['mid'] != null )

              {                           

                            $mid = $row['mid'] + 1;                           

              }

              if ( !$result = $mysqli->query("select max(nodeRight_id) as mid from nodesXML"))

              {

                            printf("Error: %s<br>",$mysqli->error);

                            exit();

              }             

              if ( $mysqli->num_rows != 0 )

              {                           

                            $row = $result->fetch_array();

                            $mnum = $row['mid'] + 1;                           

              }             

              echo '<form name="xmlForm" method = "POST">';

              echo '<textarea cols = "60" rows = "30" name = "text">'.$data.'</textarea><br><br>';

              echo '<b>Document ID:</b> <input type="text" name="doc_id" value="'.$mid.'" size="10"><BR><BR>';

              echo '<input type = "submit" name = "sendXMLtoBD" value = "Put XML to DB">';

              echo '</form>';

              if ( !isset($_POST['sendXMLtoBD']))

              {

                            return;

              }                           

              $mid = $_POST['doc_id'];

              global $my_record;

              global $my_record_final;

              $my_record = new STACK2('itemXML');

              $my_record_final = new STACK2('itemXML');

 

              echo "<pre>";

              global $inTag;

              global $counter;

              $counter = 1;

 

              $inTag = "";

              $xml_parser = xml_parser_create();

              xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);

              xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, 1);

              xml_set_element_handler($xml_parser, "startElement", "endElement");

              xml_set_character_data_handler($xml_parser, "contents");

 

  if (!xml_parse($xml_parser, $_POST['text'], NULL)) {

       die( sprintf("XML error: %s at line %d",

                            xml_error_string(xml_get_error_code($xml_parser)),

                            xml_get_current_line_number($xml_parser)));

    }

 

              xml_parser_free($xml_parser);

 

              function startElement($parser, $name, $attrs) {

                            global $counter;

                            global $my_record;

                            $a['attrs'] = $attrs;

                            $a['nodeName'] = $name;                                                       

                            $a['nodeLeft'] = $counter; $counter = $counter + 1;

                            $my_record->push($a);

              }

 

              function endElement($parser, $name) {              

                            global $counter;

                            global $my_record;

                            global $my_record_final;

                           

                            $a = $my_record->pop();

                            $a = $a['itemXML'];             

Информация о работе Методы хранения XML в реляционных базах данных