2021年3月21日日曜日

55: LibreOfficeドキュメントをストリームから読みストリームへ書く

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

または、OpenOffice、Microsoft Office、それらに類したドキュメントを。ドキュメントをデータベース、リモートサーバー、等に格納するために。

話題


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice

この記事の目次


開始コンテキスト


  • 読者は、LibreOfficeまたはApache OpenOfficeの基本的知識を持っている。

ターゲットコンテキスト



  • 読者は、LibreOffice、Apache OpenOffice、Microsoft Office、それらに類したドキュメントをストリームから読みストリームへ書くある方法を知る。

オリエンテーション


任意のLibreOfficeまたはApache OpenOfficeインスタンスをUNOサーバーにする方法は、ある以前の記事にて取り扱われました。

ある最小限WebDAVサーバーを作成する方法は、別のシリーズのある記事にて取り扱われました。

任意のLibreOfficeまたはApache OpenOfficeドキュメントをプログラム的にオープンし格納する方法は、ある以前の記事にて取り扱われました(Java編C++編C#編Python編Basic編)。


本体

ト書き
Hypothesizer 7、Objector 55A、Objector 55Bが、あるコンピューターの前にいる。


1: もしも、あるLibreOfficeドキュメントをリモートサーバーに格納したかったらどうする?


Objector 55B
任意のLibreOfficeドキュメントをプログラム的にローカルファイルに保存する方法は知っています。

Hypothesizer 7
おめでとうございます、マダム。

Objector 55B
でも、私は、ドキュメントをあるリモートサーバーに保存したいわけ。

Hypothesizer 7
最も容易な方法は、当該LibreOfficeサーバーの起動をリモートサーバーにて行なうことです、もしも、それが許されるのでしたら。

Objector 55B
申し訳ないけど、私のプログラムをリモートサーバーには移せないわ。

Hypothesizer 7
その必要はありません: あなたのプログラムは、そのリモートLibreOfficeサーバーへTCP/IPソケットを介して接続します。

Objector 55B
はあ?私のプログラムは、ローカルのLibreOfficeインスタンスへ接続するでしょう?

Hypothesizer 7
そうではありません、マダム。あなたのプログラムは、リモートLibreOfficeサーバーへ接続できます、もしも、適切な方法を適用すれば(Java編C++編C#編Python編)。

Objector 55B
. . . ふーん、でも、LibreOfficeサーバーをリモートサーバーで起動することは、私には許されていないわ。

Hypothesizer 7
その場合、別の方法は、WebDAVサーバーを当該リモートサーバーで起動することです。

Objector 55B
「WebDAVサーバー」?どのWebDAVサーバーなの、具体的には?

Hypothesizer 7
何でもお好きなものを。Apache Tomcatはそれになれますし、Microsoft Windowsはそれをデフォルトで起動します、例えば。

Objector 55B
えーと、そのWebDAVサーバーはどのように使われるの?

Hypothesizer 7
ドキュメントを格納するために、あるURLを指定されますよね、あなたのプログラムの中で?

Objector 55B
'file:///D:/home/objector47b/myData/tests/Test.odt'のようなURLを指定するけど。

Hypothesizer 7
それは、ファイルパスではなく、URLであることにお気づきだと思います。

Objector 55B
もちろん。

Hypothesizer 7
それが示唆しているのは、そのファンクション引数は、ただファイルURLだけを受け入れるよりももっと用途が広いということです。

Objector 55B
それじゃあ、それにHTTP URLを渡せると?

Hypothesizer 7
WebDAV URL(それはHTML URLです)をそれに渡すことができます。


2: もしも、LibreOfficeドキュメントをあるデータベースに格納したかったらどうする?


Objector 55A
私は、LibreOfficeドキュメントをあるデータベースに保存したい。

Hypothesizer 7
結構です、サー。

Objector 55A
どんなURLを、その引数に指定すればよいのかね?

Hypothesizer 7
えーと、LibreOfficeはそのようなURLをサポートしません(私が知る限り)ので、1つの方法は、ここでも、WebDAVサーバーを使うことです。

Objector 55A
はあ?WebDAVに何の関係がある?WebDAVサーバーは、データをファイルシステムに保存するだろうが?

Hypothesizer 7
必ずしもそうではありません。WebDAVは、サーバーとクライアントとの間のプロトコルの問題であって、データは、いかなる形態で保存されてもかまいません。

Objector 55A
それでは、データをデータベースに保存するWebDAVプロダクトがあるのか?

Hypothesizer 7
私は特にそのような既存のプロダクトを知りませんが、あなた自身でお作りになることができます、結構、容易に。

Objector 55A
はあ?そのためのライブラリか何かあるのか?

Hypothesizer 7
典型的なプログラミング言語において、スタンダードライブラリ以外の特別のライブラリなど必要としません。別のシリーズのある記事にて、1つのJava WebDAVサーバーをご紹介いたしました

Objector 55A
. . .それは、データをデータベースに保存するのか?

Hypothesizer 7
そのままではそうしませんが、それをお好きなように微調整することができます。

Objector 55A
どうやって?

Hypothesizer 7
あるドキュメントを保存される時、WebDAVサーバーは、そのデータを'PUT'リクエストのリクエストボディストリームとして受け取り、あるドキュメントをオープンされる時、WebDAVサーバーは、そのデータを'GET'リクエストのレスポンスボディストリームとして送ります。あなたの仕事は、当該データを、そのストリームから取得するか、そのストリームへセットすることです。

Objector 55A
それじゃあ、私は、'PUT'と'GET'のハンドラーを微調整すればよいだけだと?

Hypothesizer 7
いくつか他のハンドラーたちも微調整される必要があるでしょう、なぜなら、サーバーは、データの存在をチェックしなければならないし、データのいくつかの属性を取得・セットしなければなりませんから、当該データベースにアクセスすることによって。

Objector 55A
. . . URLはどのようなものになる?

Hypothesizer 7
それは、あなたがデザインすることです。例えば、シンプルに、'http://%the server name%:%the port number%/%the datum name%'のようにするとか、もっと汎用的に、'http://%the server name%:%the port number%/%the database name%/%the table name%/%the datum name%'のようにするとか。


3: 当テクニックの要諦は、任意のLibreOfficeまたはApache OpenOfficeドキュメントをストリームから読み、ストリームへ書くことなので、. . .


Hypothesizer 7
当テクニックの要諦は、任意のLibreOfficeまたはApache OpenOfficeドキュメントをストリームから読み、ストリームへ書くことです。

データのストレージは何でも構いません: ファイルシステム、データベース、メモリ、考えつかれる限りの何でも。


4: 実際には、ドキュメントはプログラム的に操作される必要はないし、ドキュメントは、WebDAVを介してアクセスできるMicrosoft Officeドキュメント、その他でもよい


Hypothesizer 7
私たちはドキュメントをプログラム的に操作していると想定してきましたが、本テクニックのメリットは、それは必要なことではないということです。

Objector 55A
あるドキュメントをLibreOfficeメニューを介して保存しても、それは、当該データベースの中へ行くでしょう。

Hypothesizer 7
実のところ、LibreOfficeかApache OpenOfficeをお使いになる必要はなく、WebDAVをサポートするMicrosoft Office、その他をお使いになることもできます(ただし、Microsoft Officeは'LOCK'を要求するので、別のシリーズのある記事で紹介されたWebDAVサーバーは、'LOCK'をサポートするように拡張されなければならないことにご注意ください)。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>