Учебное пособие (1075724), страница 51
Текст из файла (страница 51)
:)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare function xrx_example:ModuleDataCount($module_id asxs:string, $module_ver as xs:string) as xs:integer{(: Формирование запроса, который возвращает количество элементов,соответствующих модулю, в коллекции модуля :)let $CountText := concat(" let $cnt := ","collection('", xrx_example:PathURI_data_list_in_db($module_id),"')//", $module_id, " "," return count($cnt)")(: Выполнение запроса :)return util:eval($CountText)};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Сохранение данных в коллекции, если файл существует, то онпредварительно удаляется, это делает функция xdb:store :)(: Для того, чтобы выполнять действия с коллекциями и файлами,необходимо предварительно подключиться к БД с правамиадминистратора, это делает функция xrx_example:login() :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)500declare function xrx_example:SaveFileInCollection($CollectionName asxs:string, $id as xs:string, $Data as node()){let$isLoggedIn := xrx_example:login(),$FileName := xrx_example:MakeUniqueFileNameExtXml($id)return xdb:store($CollectionName, $FileName, $Data)};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Создание файла с данными в указанной коллекции, выдача сообщения:)(: Если файл существует, то он не создается заново :)(: Функция используется при инициализации БД :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare function xrx_example:InitDB_Create_File($CollectionName asxs:string, $FileName as xs:string, $Data as node()) asnode()*{let$isLoggedIn := xrx_example:login(),$CollectionFileName := concat($CollectionName, $FileName)returnif (doc-available($CollectionFileName))then(: Файл уже существует, выдача сообщения :)(<p>Файл {$CollectionFileName} уже существует</p>)else(: Файл не существует, создание файла :)(let $NewFileName := xdb:store($CollectionName, $FileName, $Data)return <p>Создание файла {$CollectionFileName}</p>)};501(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Создание коллекции и выдача сообщения :)(: Функция используется при инициализации БД.Если коллекция уже существует, то коллекция не создается,ошибка не возникает :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare functionxrx_example:InitDB_Create_Collection($ParentCollectionName asxs:string, $CollectionName as xs:string) as node()*{let$isLoggedIn := xrx_example:login(),$NewCol := xdb:create-collection($ParentCollectionName,$CollectionName)return <p>Создание коллекции {$NewCol} (если такая коллекциясуществует, то действие игнорируется)</p>};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Удаление файла из коллекции :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare function xrx_example:DeleteFileInCollection($CollectionNameas xs:string, $id as xs:string) as node()*{let$isLoggedIn := xrx_example:login(),$FileName := xrx_example:MakeUniqueFileNameExtXml($id)return xdb:remove($CollectionName, $FileName)};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Вход в БД пользователем, предназначенным для работы с БД :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare function xrx_example:login(){xdb:register-database("org.exist.xmldb.DatabaseImpl", true()),502let$User := "admin",$Password := ""return xdb:login("xmldb:exist:///db", $User, $Password)};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Логирование :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)declare function xrx_example:log($Data as node()*){let$LogFileName := concat($xrx_example:BasePath, "log.xml"),$LogPoint := doc($LogFileName)//rootreturn update insert <data dt="{xs:string(fn:currentdateTime())}">{$Data}</data> into $LogPoint};7.4 Размещение XRX-приложения в БДОсобенностью СУБД «eXist» является возможность хранения XQueryсценариев в коллекции БД.Сценарий можно вызвать с использованием REST.
Для этого нужноиспользовать URI сценария «внутри» БД. При этом он будет сначала извлечен изБД, а затем выполнен.Если все файлы предыдущего примера загрузить в какую-либо коллекциюБД (например, можно создать коллекцию «/db/iu5/xrx_example/xquery») и вызватьсценарий «index.xql», то приложение будет работать.7.5 Дальнейшее улучшение примераВ приведенном примере XRX-приложения рассмотрены лишь основыразработки XRX-приложений.В частности, не рассмотрены следующие вопросы:5031. Определение фильтра, чтобы данные в списке выводились в соответствиис заданными критериями.2. Определение сортировки для списка данных, чтобы пользователь могсортировать данные по заданному столбцу.3. Постраничная выдача данных в списке при задании количества записей настранице, формирование кнопок перехода к предыдущей (следующей) странице.4. Индексирование XML-данных в eXist.ПрисозданиинеобходимоуделитьбольшихXRX-приложенийвнимание,таккаквопросамправильноеилииндексированиянеправильноеиндексирование влияет на производительность приложения.В документации eXist есть отдельное руководство по созданию индексов.7.6 Материалы для дальнейшего изученияВ качестве источников, полезных при дальнейшем изучении технологииXRX можно назвать [XRXwiki, 2010].Также рекомендуется ознакомиться с руководством по индексированиюданных в eXist.7.7 Контрольные вопросы21.В чем разница между архитектурой «классического» веб-приложения иархитектурой XRX?22.Каким образом может применяться технология XForms в архитектуреXRX?23.Каковы основные ограничения архитектуры XRX?24.Каким образом можно отобразить инфологическую модель данных вмодель данных СУБД «eXist»?25.В чем особенность использования HTML-форм и XForms-форм в XRXприложениях? Какой способ Вам кажется более удобным?5048 Источники1.
[CSS, 2009] Cascading Style Sheets Level 2 Revision 1 (CSS 2.1)Specification. W3C Candidate Recommendation 08 September 2009.[электронный ресурс] – Режим доступа: http://www.w3.org/TR/CSS2/ –Загл. с экрана.2. [Fielding, 2000] Roy Thomas Fielding. Architectural Styles and the Designof Network-based Software Architectures, 2000.
[электронный ресурс] –Режим доступа: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm– Загл. с экрана.3. [MVC,2007][электронныйРогачевС.Обобщенныйресурс]–Model-View-Controller.Режимдоступа:http://www.rsdn.ru/article/patterns/generic-mvc.xml – Загл. с экрана.4. [XDM, 2007] XQuery 1.0 and XPath 2.0 Data Model (XDM), 2007.[электронный ресурс] – Режим доступа: http://www.w3.org/TR/xpathdatamodel/ – Загл. с экрана.5.
[XForms, 2009] XForms 1.1. W3C Recommendation 20 October 2009.[электронный ресурс] – Режим доступа: http://www.w3.org/TR/xforms/ –Загл. с экрана.6. [XInclude, 2006] XML Inclusions (XInclude) Version 1.0 (Second Edition).W3C Recommendation 15 November 2006. [электронный ресурс] –Режим доступа: http://www.w3.org/TR/xinclude/ – Загл. с экрана.7. [XLink, 2010] XML Linking Language (XLink) Version 1.1. W3CRecommendation 06 May 2010. [электронный ресурс] – Режим доступа:http://www.w3.org/TR/xlink11/ – Загл.
с экрана.8. [XML, 2000] Расширяемый язык разметки (XML) 1.0 (вторая редакция),2000.[электронныйресурс]–Режимдоступа:http://www.rol.ru/news/it/helpdesk/xml01.htm – Загл. с экрана.5059. [XML Schema Part 0 Primer, 2004] XML Schema Part 0: Primer SecondEdition,2004.[электронныйресурс]–Режимдоступа:http://www.w3.org/TR/xmlschema-0/ – Загл.
с экрана.10.[XML Schema Part 1 Structures, 2004] XML Schema Part 1: StructuresSecond Edition, 2004. [электронный ресурс] – Режим доступа:http://www.w3.org/TR/xmlschema-1/ – Загл. с экрана.11.[XML Schema Part 2 Datatypes, 2004] XML Schema Part 2: DatatypesSecond Edition, 2004. [электронный ресурс] – Режим доступа:http://www.w3.org/TR/xmlschema-2/ – Загл.
с экрана.12.[XPath, 1999] Язык XML Path (XPath) версия 1.0, 1999. [электронныйресурс] – Режим доступа: http://www.rol.ru/news/it/helpdesk/xpath01.htm– Загл. с экрана.13.[XPath, 2007] XML Path Language (XPath) 2.0, 2007. [электронныйресурс] – Режим доступа: http://www.w3.org/TR/xpath20/ – Загл. сэкрана.14.[XPointer Framework, 2003] XPointer Framework. W3C Recommendation25March2003.[электронныйресурс]–Режимдоступа:http://www.w3.org/TR/xptr-framework/ – Загл.
с экрана.15.[XPointer element() Scheme, 2003] XPointer element() Scheme. W3CRecommendation 25 March 2003. [электронный ресурс] – Режимдоступа: http://www.w3.org/TR/xptr-element/ – Загл. с экрана.16.[XPointer xmlns() Scheme, 2003] XPointer xmlns() Scheme. W3CRecommendation 25 March 2003. [электронный ресурс] – Режимдоступа: http://www.w3.org/TR/xptr-xmlns/ – Загл. с экрана.17.[XPointer xpointer() Scheme, 2002] XPointer xpointer() Scheme. W3CWorking Draft 19 December 2002.















