eXist-db - XML native DBMS

 
+6
 
Функциональные языки | Базы данных | Open Source | XML, XSL
Здравствуйте! Что вы знаете либо слышали об XML-технологиях? Что они устарели и стали не трендовыми? Или это уже не модно и пахнет 90-ыми? Да, им уже много лет, они обрасли большой бородой и некоторым очень не нравятся. Мне они чем-то напоминают С++: могут на ровном месте потопить в болоте выбора решений. Тем не менее они живут и развиваются. И сейчас я хочу Вам представить один очень интересный Open-source проект, который набором своих возможностей заслуживает сравнения со Швейцарским ножом или XML-комбайном - eXist-db.

Для справки:
  •  продолжительность проекта - более 10 лет
  •  написан на Java
  •  поддержка XQuery 3.0, XPath 2.0, XSLT 2.0, XUpdate, REST, RESTXQ, индексы Lucene, JSON/JSONP...
  •  очень много разных модулей для XQuery (SVN, FTP, mail, )


Итак, начнем по порядку.

Установка Для проб и ознакомления достаточно будет скачать установщик с сайта. Устанавливается и работает на Win/Linux/MacOS. Установщик создаст нужные ярлыки для запуска. По умолчанию использует порт 8080

Первые шаги После запуска заходим в http://localhost:8080/. Вам откроется панель управления. Чтобы начать разработку веб-приложений нужно открыть eXide - web eXist IDE. eXide позволяет создавать XML, XQuery, CSS и прчее. Обладает удобным набором инструментов, хорошим текстовым редактором(основанном на ACE editor) и приложения на основе двух шаблонов: Bootstrap и eXist-db design.

Небольшой экскурс в работу XQuery и XPath внутри eXist-db
Представим себе что у нас есть коллекция(или каталог) XML-документов. Например, со следующей структурой:

/db/
    users/
        user1.xml
            [<user status="super">
                <name/>
                <email/>
            </user>]
        user2.xml
        ...
        user100.xml
    documents/
        media/
            img1.png
            img2.png
        document1.xml
            [<document>
                <title/>
                <body>
                    ....
                </body>
            </document>]
        document2.xml
        document3.xml
    config.xml
    controller.xql
    index.html


Мы можем:
получить список всех пользователей

//user

причем этот запрос адресован ко всей базе. Можно его адресовать персонально коллекции, документу, последовательности. В данном случае запрос вернет последовательность к которй так же можно будет обратиться через XPath.

получить список всех пользователей со статусом

//user[@status]


все ссылки из документа, например, document1.xml

doc("/db/documents/document1.xml")//a


полученные элементы хранят свой контекст. Например, получить все ссылки которые в td либо в div нодах

let $links := doc("/db/documents/document1.xml")//a
return $links[name(parent::node()) = ("td", "div")]


Таким образом Вам не нужно делать никаких соединений к базе данных, выполнять их получение и обрабатывать их далее в коде. Здесть вы можете обратиться к любым данным из любого места программы, будь то XQuery или XSLT, при этом результат запроса и данные уже находятся в одном адресном пространстве.

Далее,
добавить нового пользователя

xmldb:login("/db/", "admin", ""),
xmldb:store("/db/users/", "user101.xml", <user><login/><email/></user>)


изменить href у ссылок в документе

xmldb:login("/db/", "admin", ""),
update value collection("/db/documents/")//a/@href with "new href"


либо

xquery version "3.0"; (: обязательно для использования особенностей XQuery 3.0, по умолчанию XQuery 1.0:)

xmldb:login("/db/", "admin", ""),
for $link in collection("/db/documents/")//a/@href
return update value $link with $link/string() || "1" (: такая конкатенация строк только в XQuery 3.0!! :)


удалить все атрибуты style

xmldb:login("/db/", "admin", ""),
update delete collection("/db/documents/")//@style


добавить всем пользователям уникальный id атрибут

xmldb:login("/db/", "admin", ""),
for $user in //user
return update insert attribute id { util:uuid() } into $user


Естественно, для того чтобы изменять данные необходимо быть залогиненным(xmldb:login("/db/", "admin", "")) и иметь достаточно прав.

Для запуска отдельно самой XQuery и просмотре результата в браузере необходимо перейти по ссылке http://localhost:8080/exist/rest/db/path/t...your-xquery.xql.

В панели управления можно будет найти приложение для доуступа к описанию функций модулей, установить демо-приложения и управлять пользователями. Помимо eXide существует десктоп рпиложение - oXygen XML Editor (бесплатен 30 дней). В нем можно настроить подключение к базе данных и выполнять разработку из него.

С недавних пор проект хостится на github.

Собственно говря, на этом, вводный расказ хотелось бы закончить. Осталось много нераскрытых тем, таких как установка и настройка на сервере, сборка из исходников и кастомизация, настройка индексов, триггеры, архитектура, принципы построения веб-приложений, XQuery аннотации, RESTXQ (маппинг URL в функции программы), XQuery Unit-testing и проче, проче, прочее)) Надеюсь меня на это хватит.
Об авторе
wstarcev

Array


Дата публикации: 23.04.2013. Просмотров: 1202
Комментарии (0)

Комментарии не добавлены

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить