MarkLogic — это сервер приложений и любая программа, написанная для него на XQuery, может обращаться не только к объектам, хранящимся в самой базе данных, но и к файлам, расположенным непосредственно в файловой системе.
API, обеспечивающий доступ к файловой системе в MarkLogic Server, не так уж и богат, но имеющихся инструментов вполне достаточно, чтобы читать данные из файловой системы непосредственно из кода XQuery и сохранять в нее файлы.
В API MarkLogic внешний файл или объект — это файл или объект, хранящийся в файловой системе.
Соответственно, внутренний объект — это объект, который хранится в самой базе данных.
Давайте подробнее рассмотрим существующий API. Функции доступа к файловой системе расположены в пространстве имен «xdmp».
И первая функция позволяет получить доступ к объектуbinary(), расположенному в файловой системе.
$путь — путь к файлу $starting-location – Индекс первого байта в файле равен 1. По умолчанию = 1. $длина – Количество прочитанных байт В которой двоичный() объект связан с файлом на ФС и вы всегда можете определить, есть ли двоичный() объект внутренний или внешний.xdmp:external-binary( $path as xs:string, [$starting-location as xs:double], [$length as xs:double] ) as binary()
Для доступа к этой функции у вас должны быть разрешения 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 #Большие данные
-
Заработок На Игровом Дизайне
19 Oct, 24 -
Ebay: Курсы Ebay – Стоят Ли Они Того?
19 Oct, 24 -
Sdn – 10 Лет От Идеи До Реализации
19 Oct, 24 -
Декоратор Cached_Property
19 Oct, 24 -
Golden Telecom Приобрел 65% Fortland
19 Oct, 24 -
Стратегия Кэширования Приложений
19 Oct, 24