Доступ К Файловой Системе В Marklogic Server

MarkLogic — это сервер приложений и любая программа, написанная для него на XQuery, может обращаться не только к объектам, хранящимся в самой базе данных, но и к файлам, расположенным непосредственно в файловой системе.

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

В API MarkLogic внешний файл или объект — это файл или объект, хранящийся в файловой системе.

Соответственно, внутренний объект — это объект, который хранится в самой базе данных.

Давайте подробнее рассмотрим существующий API. Функции доступа к файловой системе расположены в пространстве имен «xdmp».

И первая функция позволяет получить доступ к объектуbinary(), расположенному в файловой системе.

  
  
  
  
  
  
  
  
  
  
   

xdmp:external-binary( $path as xs:string, [$starting-location as xs:double], [$length as xs:double] ) as binary()

$путь — путь к файлу $starting-location – Индекс первого байта в файле равен 1. По умолчанию = 1. $длина – Количество прочитанных байт В которой двоичный() объект связан с файлом на ФС и вы всегда можете определить, есть ли двоичный() объект внутренний или внешний.

Для доступа к этой функции у вас должны быть разрешения

marklogic.com/xdmp/privileges/xdmp-external-binary

Если файл не существует в файловой системе, выдается исключение.

XDMP-MISSINGFILE Следующая функция принимает двоичный() файловый объект и возвращает путь к связанному с ним файлу в файловой системе.



xdmp:external-binary-path( $source as binary() ) as xs:string?

Исключение XDMP-ARG выбрасывается, если передается в функцию двоичный() объект не связан с файлом в файловой системе.

Функция xdmp: двоичный-внешний – проверяет, есть ли двоичный() объект по внешнему объекту (файлу)

xdmp:binary-is-external( $source as binary() ) as xs:boolean

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



xdmp:filesystem-directory( $pathname as xs:string ) as element(dir:directory)

$pathname — интересующий нас каталог Для выполнения функции необходимо иметь права

marklogic.com/xdmp/privileges/xdmp-filesystem-directory

Также пользователь системы должен иметь права на чтение указанного каталога.

Исключения СВК-ДИРОПЕН или SVC-ФИЛОПЕН выбрасываются, если у пользователя, выполняющего функцию, недостаточно для этого прав.

Результатом работы функции является список объектов, расположенных на ФС.

Пример

xdmp:filesystem-directory ( ".

/" ) < dir:directory xsi:schemaLocation="http://marklogic.com/xdmp/directory directory.xsd" xmlns:dir="http://marklogic.com/xdmp/directory " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "> < dir:entry > < dir:filename >Admin</ dir:filename > < dir:pathname >.

/Admin</ dir:pathname > < dir:type >directory</ dir:type > < dir:content-length >0</ dir:content-length > < dir:last-modified >2013-05-02T13:09:53+04:00</ dir:last-modified > </ dir:entry > < dir:entry > < dir:filename >LEGALNOTICES.txt</ dir:filename > < dir:pathname >.

/LEGALNOTICES.txt</ dir:pathname > < dir:type >file</ dir:type > < dir:content-length >28343</ dir:content-length > < dir:last-modified >2013-04-19T23:06:32+04:00</ dir:last-modified > </ dir:entry > .

</ dir:directory >

Чтобы прочитать текстовые данные из файловой системы, вы можете использовать эту функцию

xdmp:filesystem-file( $pathname as xs:string ) as xs:string

Где $pathname — путь к файлу, который необходимо считать в XQuery Для успешного завершения операции чтения данные в файле должны быть в кодировке UTF-8. Из-за этого требования при чтении двоичных данных этой функцией будет возбуждено исключение, и за кодирование данных будет отвечать MarkLogic. Для чтения двоичных данных вам нужно использовать функцию xdmp: внешний-двоичный .

Для выполнения функции необходимы привилегии

marklogic.com/xdmp/privileges/xdmp-filesystem-file

Проверить, существует ли файл в файловой системе, можно следующим образом:

xdmp:filesystem-file-exists( $pathname as xs:string ) as xs:boolean

Где $pathname — путь для проверки Для выполнения функции необходимы привилегии

marklogic.com/xdmp/privileges/xdmp-filesystem-file-exists

Чтобы узнать размер файла есть функция xdmp: длина файла файловой системы

xdmp:filesystem-file-length( $pathname as xs:string ) as xs:unsignedLong?

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

marklogic.com/xdmp/privileges/xdmp-filesystem-file-length

Далее рассмотрим функцию сохранения

xdmp:save( $path as xs:string, $node as node(), [$options as node()?] ) as empty-sequence()

Эта функция сериализует любой объект (xml, text, Bunary) и сохраняет его в файловой системе под указанным именем в указанном каталоге.

Эта функция имеет довольно много опций, например, output-encoding, задающая кодировку документа.

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

let $text := text { "hello world" } return xdmp:save("greeting.txt", $text)

или например вот как можно сохранить файл из БД в файловую систему

let $pdf := doc("/mydocs/stuff.pdf") return xdmp:save("mystuff.pdf", $pdf)

Для выполнения функции необходимы привилегии

marklogic.com/xdmp/privileges/xdmp-save

MarkLogic Server предназначен в первую очередь для хранения документов в базе данных и обработки этих документов с помощью запросов XQuery. Но иногда вам необходимо прочитать или записать файл в файловую систему, и в MarkLogic для этого есть все необходимое.

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

Теги: #Большие данные #Интеллектуальный анализ данных #NoSQL #xml #Интеллектуальный анализ данных #NoSQL #Большие данные

Вместе с данным постом часто просматривают: