説明

構造化文書転送システム

【課題】送信側が送信データのフォーマットの詳細を理解していなくても、受信側が必要とするデータのみを受信することが可能な構造化文書転送システムを提供する。
【解決手段】送信装置は、構造化文書の解析及びノード情報の取得依頼を受信する手段107と、ノード情報を作成する解析手段106と、構造化文書のノードに対する条件を受信する手段と、ノード情報が条件に合っているかを比較する比較手段と、条件に合っているノード情報を送信する手段とを有し、受信装置は、構造化文書の解析及びノード情報の取得依頼を送信する手段と、構造化文書のノードに対する条件を送信する手段と、ノード情報を受信する手段とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は構造化文書の処理、特に構造化文書の送信処理に好適な構造化文書転送システムに関する。
【背景技術】
【0002】
近年情報機器のネットワーク化が進み、さまざまなデータを機器同士でやり取りするようになった。送信されるデータはテキストや画像、音声など様々な種類があるが、近年ではデータフォーマットにXML(Extensible Markup Language)を基にしたものを用いるケースが多くなっている。
【0003】
XMLはW3C(World Wide Web Consortium)によって標準化されており、特定のプラットフォームに依存しないフォーマットである。このため様々な機器間でデータ交換が可能になり、また構文を解析するパーサを共通化できるというメリットもある。XMLデータを送信する場合は、通常XMLデータを一つのファイルとみなし、HTTPなどのプロトコルで通常のファイル転送と同じように処理する。
【0004】
しかし、あるデータを受信して処理を行う際に、必ずしもすべてのデータが必要であるとは限らない。例えばSVG(Scalable Vector Graphics)で書かれた10ページの文書があり、そのうちの5ページ目だけの情報が欲しい、という場合である。このようにあるデータの一部分のみを受信したいという要望は以前から存在し、その解決策も提案されている。例えば特許文献1に記載のように、画像や音声データを取得するときに、前半部分のみやヘッダのみ取得するという方法である。
【0005】
【特許文献1】特開2000−285006号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、従来の方法では送信側が様々なデータのフォーマットを詳細に知っていなければならず実装が困難であり、また新しいフォーマットには対応できないという問題があった。例えば、複数ページからなるSVGデータが単一のファイルからなっている際に、特定のページの情報だけを受信するということは、送信側がSVGのフォーマットの詳細を理解していなければ不可能である。
【0007】
そこで本発明は、送信側が送信データのフォーマットの詳細を理解していなくても、受信側が必要とするデータのみを受信することが可能な構造化文書転送システムを提供することを目的とする。
【課題を解決するための手段】
【0008】
前記目的を達成するために本発明は、構造化文書を保持し、受信装置からの受信の依頼に対して該構造化文書を送信する送信装置と、前記構造化文書を受信して処理を行う前記受信装置からなる構造化文書転送システムであって、
前記送信装置は、前記構造化文書の解析及びノード情報の取得依頼を受信する手段と、
前記構造化文書を解析して前記ノード情報を作成する解析手段と、
前記構造化文書のノードに対する条件を受信する手段と、
前記解析手段によって得られた前記ノード情報が前記条件に合っているかを比較する比較手段と、
前記比較手段によって前記条件に合っているとみなされた前記ノード情報を送信する手段とを有し、
前記受信装置は、前記構造化文書の解析及びノード情報の取得依頼を送信する手段と、
前記構造化文書のノードに対する条件を送信する手段と、
前記ノード情報を受信する手段とを有することを特徴とする。
【発明の効果】
【0009】
本発明の構造化文書処理転送システムによれば、構造化文書を送信する際に、送信者が送信データのフォーマットの詳細を理解していなくても受信側が必要なデータのみを送信することが可能になる。よって、様々なフォーマットのデータの転送量を削減することが可能になる。
【発明を実施するための最良の形態】
【0010】
以下、図面に基づき、本発明による構造化文書転送システムの好適な実施の形態を説明する。
本発明の実施形態における構造化文書を処理する構造化文書処理システムの送信装置の構成を図1に示す。同図においてCPU101は、システム制御部であり装置全体を制御する。ROM102は、CPU101の制御プログラムや各種固定データを格納するものである。RAM103は、SRAM,DRAMなどで構成され、プログラム制御変数などを格納するものである。また、各種設定パラメータ、各種ワークバッファなども、RAM103に格納される。記憶部104はハードディスクなどであり、ファイルデータを格納するものである。
【0011】
ネットワークインタフェース105はLANボードやモデムといったネットワークインタフェースであり、ネットワーク上の他の機器との通信を可能とするものである。構造化文書解析部106は、XMLなどの構造化文書の解析を行い、ノード情報をRAM103に保存するものであり、プル型のAPIを持つものである。
【0012】
なおプル型パーサとは、SAX(Simple API for XML)のようなイベント駆動型ではなく、アプリケーションからノード取得要求を受けて、それに対してノード情報を返すモデルのパーサである。このようなXMLパーサは、例えばMicrosoft(登録商標)のXmlTextReaderクラスなどがある。
【0013】
リクエスト処理部107は、図4に示すリクエスト(依頼)を解析し、リクエストに応じた処理を行い、リプライを返すものである。XPath処理部108はXPath式を保持し、構造化文書解析部106によって作成されたノード情報が指定されたXPathにマッチするかを判断するものである。
【0014】
リクエスト処理部107が受理可能なリクエストの詳細を図4に示す。OpenFileは、これから解析する文書を指定するものであり、実際の解析は行わない。成功した場合はそのセッションのIDを返す。以降のリクエスト(取得依頼)はすべて引数にこのセッションIDを指定する。SetExprは、取得するノードかを判断する条件を指定するものである。条件はXPath式で指定する。GetNodeは次の1ノードのノード情報、ノード条件を読み込んで解析するものである。
【0015】
ノードとはXMLを構成する単位であり、開始タグ、終了タグ、文字列データ、処理命令などの単位である。文書の最後まで解析しているときは“EndOfFile”が返される。CloseFileは取得を終了するものである。これにより、解析に使用されていたRAM上の情報などがすべて破棄される。
【0016】
実際にリクエスト及びリプライの送受信をする際には、これらのリクエストを適切なフォーマットにする必要がある。このための方法は既にいくつかの方法が存在するが、ここではHTTPを用い、URL中に含める方法で行う。サーバ301の構造化文書転送サービスのURLを次のようにし、リクエスト名及び引数をその後に付けることとする。
http://example.org/serv
また、書式は次の形式である。
?method=リクエスト名&引数名=引数・・・
【0017】
リプライは通常のHTTPリプライで送信され、BODY部に実際の値が格納する。例えば、GetNodeリクエストで引数にセッションID=3を指定し、それが成功した場合には図6のメッセージが交換される。図6において、601がリクエスト、602がリプライである。
【0018】
HTTPのリクエストは「HTTPリクエスト名 URI HTTPバージョン」となっている。ここではHTTPのバージョンとして1.1が使用されている。リプライは「HTTPバージョン ステータスコード フレーズ」があり、その後に実際のデータが格納される。このときは成功しているため「1.1 200 OK」となり、それ以下にノード情報が格納される。
【0019】
GetNodeリクエストのリプライとしてノード情報を返すが、このノード情報も何らかのフォーマットでシリアライズする。これは例えば「ノードの型名:名前,値」というフォーマットで送信する。型名にはStartElement(開始タグ)、
EndElement(終了タグ)、Attribute(属性)などになる。
【0020】
602のメッセージは<a b="c">というノード情報を送信したときのものである。もちろん、その他のフォーマットも使用可能である。また、よく知られているように、URLで使えない文字を使用する場合には適切にエスケープする必要がある。例えば引数に’/’という文字が含まれる場合は、その部分を%2Fとする。
【0021】
受信装置の構成を図2に示す。図において、CPU201からネットワークインタフェース205まではそれぞれ、図1のCPU101から105ネットワークインタフェースまでと同様である。SVG処理部106は、プル型のXMLパーサAPIを用いてSVGデータの描画などの処理を行うものである。リクエスト生成部207は、図4に示すプル型のXMLパーサAPIを持ち、SVG処理部206から受けた命令を、ネットワークインタフェース205を用いて送信し、更にリプライを受信するものである。
【0022】
この構造化文書処理装置は、図3に示すネットワークに接続されている。301に示す送信装置と、302に示す受信装置がネットワーク303によって接続されており、相互に通信が可能となっている。また、送信装置301はexamle.orgというホスト名が付けられている。
【0023】
送信装置301は、図5に示されるSVGの文書を持っているものとする。SVG文書のpage要素は文書のページを表すものである。つまり、この文書は503から505、506から508、509から510の3ページで構成されている。このSVGからnページ目のみを描画するには、n回目のpage要素のみを取得する必要があり、それ以外は取得の必要がない。
【0024】
受信装置302が送信装置301上に保持されているXMLデータの一部のみを取得するときの送信装置301の処理の流れを図7に、また、受信装置302の処理の流れを図12にそれぞれ示す。ここではtest.svgの2ページ目のみを取得して描画する例を示す。
【0025】
先ずSVG処理部206が、test.svgを取得するために、OpenFileリクエストをリクエスト生成部205に渡す。OpenFileを受け取ったリクエスト生成部は、OpenFileリクエストを送信装置301に送信する。なお、このとき引数はtest.svgを指定する(ステップS1201)。SVG処理部からリクエスト生成部のリクエストは通常のプログラミング言語の関数呼び出しなど、メモリ内部での受け渡しになっている。このリクエストをネットワーク上に送信するためにシリアライズを行って(ステップS1202)、送信する(ステップS1203)。シリアライズは前述のようにHTTPのGETメソッドに変換することで実現できる。
【0026】
この場合は次のようになる。
GET /serv?method=OpenFile&file=test.svg
このメッセージを受信装置302が受信し(ステップS701)、デシリアライズを行う(ステップS702)。デシリアライズの結果OpenFileリクエストとして認識し、リクエストの処理を行う(ステップS703)。
【0027】
このリクエスト処理の詳細が、図8から図11に示される。即ち、図8〜図11はそれぞれOpenFile、SetExpr、GetNode、CloseFileリクエストの処理を示している。この場合はOpenFileなので図8の処理を実行する。
【0028】
先ずtest.svgが送信可能かを調べる(ステップS801)。test.svgが存在しない場合や、読み込み権限がない場合は失敗となり、エラー情報を送信して終了する(ステップS804)。
【0029】
成功した場合は構造化文書解析準備など、セッションの作成を行い、そのIDも作成する(ステップS802)。次に、このセッションIDをリプライとして送信する(ステップS803)。ここではセッションIDとして”12”が返されたとする。これでOpenFileの処理は終了である。このときエラーが発生していた場合は処理全体を終了させる(ステップS704)。
【0030】
成功した場合は、そのリクエストがCloseFileかどうかを確認する(ステップS705)。CloseFileであれば処理を終了する。それ以外の場合は再びクエストを待つ(ステップS701)。リプライとして送信された”12”という情報を、受信装置302が受信する(ステップS1204)。リプライはSVG処理部に渡される(ステップS1205)。
【0031】
次に、SVG処理部は必要なノード情報の条件を設定するため、SetExprリクエストを呼び出す。2ページ目の処理に必要な情報は「svg要素内のpageSet要素内にある2番目のpage要素内の情報」であり、これをXPath式で表すと次のようになる。
”/svg/pageSet/page[2]”
よってこの式と先ほどのセッションIDがリクエスト生成部に渡される。
この結果以下のリクエストが生成、送信される。
GET /serv?method=SetExpr&sid=12&expr=%2F/svg%2F/pageSet%2Fpage%5B2%5D 1.1
となる。なお’/’、’[’、’]’はURL内で直接使用できないため、それぞれ%2F、%5B、%5Dに置きかえる。このリクエストも同様に受信、デシリアライズされ、リクエストの処理が行われる(ステップS701、ステップS702、ステップS703)。
【0032】
SetExprは図9に従って処理される。先ず指定されたセッションがあるかを確認する(ステップS901)。存在しなければエラー情報が送信され(ステップS905)、終了する。この場合、セッションIDである12は、先ほど作成されて保存されているため存在しているため、XPath式の文法が合っているかをXPath処理部108によって確認する(ステップS902)。文法違反であればエラー情報を送信して終了する(ステップS905)。
【0033】
XPath式が合っていれば、ノード情報との比較用の内部情報として格納する(ステップS903)。そしてSetExprの成功時のリプライである”SUCCESS”を送信する(ステップS904)。
【0034】
次にSVG処理部は実際のノード取得を行うため、GetNodeリクエストを呼び出す。このリクエストもリクエスト生成部に渡され、以下のような形式で送信される。
GET /serv?method=GetNode&sid=12 1.1
このリクエストも同様に受信、デシリアライズされ、図10に従って処理される。
【0035】
先ず、SetExprリクエストの処理と同様に、セッションの存在を確認する(ステップS1001)。次に、対象文書をすべて読んだかを確認する(ステップS1002)。この段階ではまだ読んでいないため、対象文書を1ノード読み込む(ステップS1003)。この結果最初のノードであるsvgタグ(501)が読み込まれる。
【0036】
次にXPath式が指定されているかを確認する(ステップS1004)。指定されていなければ、読み込んだノード情報を送信する(ステップS1006)。この場合は指定されているため、XPath式とマッチしているかを確認する。
【0037】
svgタグ501の位置をXPath式で表すと”/svg”であるため、マッチしていない。よってこの情報は破棄し(ステップS1007)、再びステップS1002以降の処理を行う。このようにしてノードを上から順に一つずつたどると、506のpageタグのときにXPath式にマッチする。マッチした場合はこのノードの情報を送信し(ステップS1006)、処理を終了する。
【0038】
クライアント302はこのノード情報を受信し(ステップS1204)、情報をSVG処理部206に渡す。SVG処理部はこの情報を用いて処理を行う。その後、SVG処理部は更にノード情報を取得するためGetNodeリクエストを呼び出す。これも前述したGetNodeリクエストと同様に処理され、circleタグ507が読み込まれる。このノードはXPath式にマッチした要素内の情報であるため、ノード情報が送信される(ステップS1006)。以下同様にGetNodeに対して、508の終了タグまでノード情報が送信される。
【0039】
更に次にGetNodeリクエストが呼ばれると、これ以上マッチするノードがないため文書終端(512)まで解析され、EndOfFileが返される(ステップS1009)。このリプライにより、SVG処理部206は、これ以上必要な情報がないことがわかり、取得終了のためCloseFileリクエストを呼び出す。
【0040】
CloseFileリクエストは図11に従って処理される。SetExprなどと同様、セッションの存在を確認し(ステップS1101)、存在すればセッション情報を破棄する(ステップS1102)。そして”SUCCESS”をリプライとして送信する(ステップS1103)。このリプライを受信して、SVG処理部に渡すことで処理はすべて終了となる。
【0041】
以上の処理を行うことで構造化文書を受信するときに、受信側にとって必要な情報のみ取得することを、送信側が文書フォーマットの詳細を識別することなしに行うことが可能になる。
【0042】
なお、本実施形態では通信が必ず正しく行われることを前提としているが、ネットワーク回線の切断などによって期待しているリクエストまたはリプライが返って来ないことがあり得る。このような事態に対応するため、タイムアウト時間を設定し、指定された時間内に通信がない場合は、それまでの情報を破棄し、それ以降の処理を中断させる、といった処理が必要であることは言うまでもない。
【0043】
本実施形態では、取得するノードの条件としてXPathを用いたが、その他の方式で行うことも可能である。また、ノードの種類と名前で指定し、「次のabc要素まで取得」という指定も可能である。
また、本実施形態では必要なノードを取得するのにすべてGetNodeリクエストを用いて一つずつ取得していた。しかしならが、必要な範囲が特定できる場合は、指定された範囲までをすべて取得するようなリクエストを追加することも可能である。
【0044】
更に、本実施形態のように受信側が取得リクエストを出し、それに応じてノード情報を取得するというプル型の方式ではなく、指定されたノードのみを送信側が非同期に送信すると言うプッシュ型にすることも可能である。
また、送信装置はリクエストを受信してから構造化文書の解析を行っていたが、リクエストが来る前にある程度解析を行い、その情報をキャッシュしておくことで、より高速に処理することも可能である。
また、本実施形態でははじめに受信側が送信側に対して文書取得要求を送信しているが、はじめに送信側から送信要求を送ることで処理を開始することも可能である。
【図面の簡単な説明】
【0045】
【図1】本発明の構造化文書転送システムにおける送信装置の構成を示すブロック図である。
【図2】本発明の構造化文書転送システムにおける受信装置の構成を示すブロック図である。
【図3】本発明の構造化文書転送システムの構成を示す図である。
【図4】本発明の構造化文書転送システムに係る構造化文書解析部が持つAPIの一覧を示す図である。
【図5】本発明の実施形態における転送されるSVG文書の例を示す図である。
【図6】本発明の構造化文書転送システムに係る送信装置の処理の概要を示すフローチャートである。
【図7】本発明の構造化文書転送システムにおけるノード取得リクエストの処理の詳細を示すフローチャートである。
【図8】本発明の構造化文書転送システムにおけるノード読み飛ばしリクエストの処理の詳細を示すフローチャートである。
【図9】本発明の構造化文書転送システムにおけるノード読み飛ばしリクエストの処理の詳細を示すフローチャートである。
【図10】本発明の構造化文書転送システムにおけるノード読み飛ばしリクエストの処理の詳細を示すフローチャートである。
【図11】本発明の構造化文書転送システムにおけるノード読み飛ばしリクエストの処理の詳細を示すフローチャートである。
【図12】本発明の構造化文書転送システムにおけるノード取得リクエストの処理の詳細を示すフローチャートである。
【符号の説明】
【0046】
101 CPU
102 ROM
103 RAM
104 記憶部
105 ネットワークインタフェース
106 構造化文書解析部
107 リクエスト処理部
108 XPath処理部
201 CPU
202 ROM
203 RAM
204 記憶部
205 ネットワークインタフェース
206 SVG処理部
207 リクエスト生成部
208 表示部
301 送信装置
302 受信装置

【特許請求の範囲】
【請求項1】
構造化文書を保持し、受信装置からの受信の依頼に対して該構造化文書を送信する送信装置と、前記構造化文書を受信して処理を行う前記受信装置からなる構造化文書転送システムであって、
前記送信装置は、前記構造化文書の解析及びノード情報の取得依頼を受信する手段と、
前記構造化文書を解析して前記ノード情報を作成する解析手段と、
前記構造化文書のノードに対する条件を受信する手段と、
前記解析手段によって得られた前記ノード情報が前記条件に合っているかを比較する比較手段と、
前記比較手段によって前記条件に合っているとみなされた前記ノード情報を送信する手段とを有し、
前記受信装置は、前記構造化文書の解析及びノード情報の取得依頼を送信する手段と、
前記構造化文書のノードに対する条件を送信する手段と、
前記ノード情報を受信する手段とを有することを特徴とする構造化文書転送システム。
【請求項2】
前記構造化文書は、XMLであることを特徴とする請求項1に記載の構造化文書転送システム。
【請求項3】
前記送信装置は、非同期に前記受信装置に送信することを特徴とする請求項1に記載の構造化文書転送システム。
【請求項4】
前記送信装置は、前記ノードの取得依頼に対応して前記ノード情報を送信することを特徴とする請求項1に記載の構造化文書転送システム。
【請求項5】
前記ノードに対するノード条件は、XPathで指定されることを特徴とする請求項1に記載の構造化文書転送システム。
【請求項6】
前記解析手段は、予め前記ノード情報の解析を行い、該ノード情報を保持しておく手段を持つことを特徴とする請求項1に記載の構造化文書転送システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2009−199185(P2009−199185A)
【公開日】平成21年9月3日(2009.9.3)
【国際特許分類】
【出願番号】特願2008−37900(P2008−37900)
【出願日】平成20年2月19日(2008.2.19)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】