Методы хранения 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 Кб (Скачать)

         "caseFoldingTo"      => "uppercase",

         "normalizeComments"  => false,

         "maxCommentLine"     => -1,

         "multilineTags"      => false

      );

 

    /**

     * options for the output format

     * @var    array

     * @access private

     */

     var $_options = array();

   

    /**

     * Constructor

     *

     * This is only used to specify the options of the

     * beautifying process.

     *

     * @param array $options options that override default options

     *

     * @access public

     */  

    function XML_Beautifier($options = array())

    {

        $this->_options = array_merge($this->_defaultOptions, $options);

        $this->folding  = false;

    }

 

    /**

     * reset all options to default options

     *

     * @return void

     * @access public

     * @see setOption(), XML_Beautifier(), setOptions()

     */

    function resetOptions()

    {

        $this->_options = $this->_defaultOptions;

    }

 

    /**

     * set an option

     *

     * You can use this method if you do not want

     * to set all options in the constructor

     *

     * @param string $name  option name

     * @param mixed  $value option value

     *

     * @return void

     * @access public

     * @see resetOptions(), XML_Beautifier(), setOptions()

     */

    function setOption($name, $value)

    {

        $this->_options[$name] = $value;

    }

   

    /**

     * set several options at once

     *

     * You can use this method if you do not want

     * to set all options in the constructor

     *

     * @param array $options an options array

     *

     * @return void

     * @access   public

     * @see      resetOptions(), XML_Beautifier()

     */

    function setOptions($options)

    {

        $this->_options = array_merge($this->_options, $options);

    }

 

    /**

     * format a file or URL

     *

     * @param string $file     filename

     * @param mixed  $newFile  filename for beautified XML file

     *                         (if none is given, the XML string

     *                         will be returned).

     *                         if you want overwrite the original file,

     *                         use XML_BEAUTIFIER_OVERWRITE

     * @param string $renderer Renderer to use,

     *                         default is the plain xml renderer

     *

     * @return mixed XML string of no file should be written,

     *               true if file could be written

     * @access public

     * @throws PEAR_Error

     * @uses _loadRenderer() to load the desired renderer

     * @todo PEAR CS - should require_once be include_once?

     */  

    function formatFile($file, $newFile = null, $renderer = "Plain")

    {

        if ($newFile == XML_BEAUTIFIER_OVERWRITE) {

            $newFile = $file;

        }

 

        /**

         * Split the document into tokens

         * using the XML_Tokenizer

         */

        require_once XML_BEAUTIFIER_INCLUDE_PATH . '/Tokenizer.php';

        $tokenizer = new XML_Beautifier_Tokenizer();

       

        $tokens = $tokenizer->tokenize($file, true);

 

        if (PEAR::isError($tokens)) {

            return $tokens;

        }

       

        $renderer = $this->_loadRenderer($renderer, $this->_options);

 

        if (PEAR::isError($renderer)) {

            return $renderer;

        }

       

        $xml = $renderer->serialize($tokens);

       

        if ($newFile == null) {

            return $xml;

        }

       

        $fp = @fopen($newFile, "w");

        if (!$fp) {

            return PEAR::raiseError("Could not write to output file",

                XML_BEAUTIFIER_ERROR_NO_OUTPUT_FILE);

        }

       

        flock($fp, LOCK_EX);

        fwrite($fp, $xml);

        flock($fp, LOCK_UN);

        fclose($fp);

        return true;

    }

 

    /**

     * format an XML string

     *

     * @param string $string   XML

     * @param string $renderer the renderer type

     *

     * @return string formatted XML string

     * @access public

     * @throws PEAR_Error

     * @todo PEAR CS - should require_once be include_once?

     */  

    function formatString($string, $renderer = "Plain")

    {

        /**

         * Split the document into tokens

         * using the XML_Tokenizer

         */

        require_once XML_BEAUTIFIER_INCLUDE_PATH . '/Tokenizer.php';

        $tokenizer = new XML_Beautifier_Tokenizer();

       

        $tokens = $tokenizer->tokenize($string, false);

 

        if (PEAR::isError($tokens)) {

            return $tokens;

        }

 

        $renderer = $this->_loadRenderer($renderer, $this->_options);

 

        if (PEAR::isError($renderer)) {

            return $renderer;

        }

       

        $xml = $renderer->serialize($tokens);

       

        return $xml;

    }

 

    /**

     * load a renderer

     *

     * Renderers are used to serialize the XML tokens back

     * to an XML string.

     *

     * Renderers are located in the XML/Beautifier/Renderer directory.

     *

     * NOTE:  the "@" error suppression is used in this method

     *

     * @param string $name    name of the renderer

     * @param array  $options options for the renderer

     *

     * @return object renderer

     * @access private

     * @throws PEAR_Error

     */

    function &_loadRenderer($name, $options = array())

    {

        $file  = XML_BEAUTIFIER_INCLUDE_PATH . "/Renderer/$name.php";

        $class = "XML_Beautifier_Renderer_$name";

 

        @include_once $file;

        if (!class_exists($class)) {

            return PEAR::raiseError("Could not load renderer.",

                XML_BEAUTIFIER_ERROR_UNKNOWN_RENDERER);

        }

 

        $renderer = &new $class($options);

       

        return $renderer;       

    }

   

    /**

     * return API version

     *

     * @access   public

     * @static

     * @return   string  $version API version

     */

    function apiVersion()

    {

        return "1.0";

    }

}

?>

 

GETFROMDB.PHP

<html>

<head>

<title>Test</title>

<meta charset="utf-8">

<form method="POST">

<b>Document ID:</b> <input type="text" name="doc_id" value="##" size="10"><BR><BR>

<b>Discount:&nbsp &nbsp &nbsp &nbsp </b> <input type="text" name="val" value="##" size="10"><BR><BR>

<b>Good ID:&nbsp &nbsp &nbsp &nbsp </b> <input type="text" name="gid" value="##" size="10"> &nbsp

<b>Good price:</b> <input type="text" name="price" value="##" size="10"><BR><BR>

<input type="submit" name="getFromDB" value="Get XML from DB">

<input type="submit" name="delDoc" value="Delete document">

<input type="submit" name="addDiscount" value="Add discount">

<input type="submit" name="delDiscount" value="Delete discount">

<input type="submit" name="setPrice" value="Set price">

</form>

</head>

<?php

              include ('Beautifier.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');

              if (isset($_POST['setPrice']))

              {

              if ( !$mysqli->query("set @parent_left=(select nodeLeft_id from nodesXML where nodeName='goods' and attrList like '%id=\"".$_POST['gid']."\"%' and doc_id='".$_POST['doc_id']."')"))

              {

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

                            exit();

              }             

              if ( !$mysqli->query("set @parent_right=(select nodeRight_id from nodesXML where nodeName='goods' and attrList like '%id=\"".$_POST['gid']."\"%' and doc_id='".$_POST['doc_id']."')"))

              {

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

                            exit();

              }

              if ( !$mysqli->query("update nodesXML set nodeValue='".$_POST['price']."' where nodeName='price' and doc_id='".$_POST['doc_id']."' and nodeLeft_id between  @parent_left and @parent_right"))

              {

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

                            exit();

              }

              echo "New price was set!";                           

              }

              if (isset($_POST['delDoc']))

              {

                            if ( !$result = $mysqli->query("delete from nodesXML where doc_id='{$_POST['doc_id']}'"))

                            {

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

                                          exit();

                            }             

                            echo "Document №".$_POST['doc_id']." was removed!";

              }

              if (isset($_POST['delDiscount']))

              {

                            $id = $_POST['doc_id'];

                            if ( !$result = $mysqli->query("select nodeLeft_id, nodeRight_id from nodesXML where nodeName='goods' and doc_id='{$_POST['doc_id']}'"))

                            {

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

                                          exit();

                            }                           

                            while ( $row = $result->fetch_array() ){

                           

                            $mysqli->query("start transaction");

                            $left = $row['nodeLeft_id'];

                            $right = $row['nodeLeft_id'];

                            $mysqli->query("delete from nodesXML where doc_id='$id' and nodeName='discount' and nodeLeft_id > '$left' and nodeRight_id < '$right'");                           

                            $mysqli->query("update nodesXML set nodeRight_id=nodeRight_id-'2' where nodeRight_id > '$left'");

                            $mysqli->query("update nodesXML set nodeLeft_id=nodeLeft_id-'2' where nodeLeft_id > '$left'");                           

                            $mysqli->query("commit");

                            }              

             

              }             

              if (isset($_POST['addDiscount']))

              {

              if ( !$result = $mysqli->query("select nodeLeft_id, nodeRight_id from nodesXML where nodeName='goods' and doc_id='{$_POST['doc_id']}'"))

              {

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

                            exit();

              }                           

              while ( $row = $result->fetch_array() ){

                           

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