MarkLogicサーバーのファイルシステムアクセス

MarkLogicはアプリケーションサーバーであり、XQueryで記述されたプログラムは、データベース自体に保存されているオブジェクトだけでなく、ファイルシステムに直接配置されているファイルにもアクセスできます。

MarkLogicサーバーのファイルシステムへのアクセスを提供するAPIはそれほど豊富ではありませんが、使用可能なツールは、XQueryコードから直接ファイルシステムからデータを読み取り、そこにファイルを保存するのに十分です。



MarkLogic API内では、外部ファイルまたはオブジェクトはファイルシステムに保存されているファイルまたはオブジェクトです。 したがって、内部オブジェクトは、データベース自体に格納されているオブジェクトです。



既存のAPIを詳しく見てみましょう。 ファイルシステムアクセス関数は、「xdmp」名前空間にあります。

また、最初の関数を使用すると、ファイルシステムにあるbinary()オブジェクトにアクセスできます。

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







$ path-ファイルパス

$ starting-location-ファイルの最初のバイトのインデックスは1です。デフォルト= 1

$ length-読み取るバイト数

この場合、 binary()オブジェクトはFS上のファイルに関連付けられており、 binary()オブジェクトが内部か外部かはいつでも判断できます。

この機能にアクセスする権限が必要です。

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





ファイルがファイルシステムに存在しない場合、 XDMP-MISSINGFILE例外がスローされます。



次の関数は、 バイナリ()ファイルオブジェクトを受け取り、ファイルシステム上でそれに関連付けられたファイルへのパスを返します。

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







binary()関数に渡されたオブジェクトがファイルシステム上のファイルに関連付けられていない場合、 XDMP-ARG例外がスローされます。



Xdmp関数:binary-is-external - binary()が外部オブジェクト(ファイル)かどうかを確認します

 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-DIROPENまたはSVC-FILOPENがスローされます。

この関数の結果は、FSにあるオブジェクトのリストです。 例

 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:external-binary関数を使用します。

機能を実行するには、特権が必要です

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関数があります:filesystem-file-length

 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)
      
      







または、たとえば、DBからファイルシステムにファイルを保存できます



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







機能を実行するには、特権が必要です

marklogic.com/xdmp/privileges/xdmp-save







MarkLogicサーバーは、主にデータベースにドキュメントを保存し、これらのドキュメントをXQueryクエリで処理しています。 ただし、ファイルシステムに対してファイルを読み書きする必要がある場合があり、このために必要なすべてがMarkLogicにあります。 もちろん、これらのツールは、バイナリファイルの複雑な処理、画像変換には適していませんが、割り当てられたタスクに完全に対応しています。



All Articles