(57)【特許請求の範囲】
【請求項１】
複数の個別要素パケットを用いて木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析装置であって、
前記個別要素パケットは、一の個別要素パケットを識別する固有識別子と、他の個別要素パケットを参照するための外部参照子とを有し、前記ファイルは、前記一の個別要素パケットの外部参照子を用いて前記他の個別要素パケットの固有識別子を参照することにより木構造を構成し、
前記ファイルから前記複数の個別要素パケットを順次に入力する個別要素パケット入力部と、
前記複数の個別要素パケットの前記固有識別子または前記外部参照子を抽出する個別要素パケット解析部と、
前記個別要素パケット解析部により抽出された前記固有識別子を一時的に保持する固有識別子保持部と、
前記個別要素パケット解析部により抽出された前記外部参照子を一時的に保持する外部参照子保持部と、
前記個別要素パケット入力部に入力された前記個別要素パケットの前記固有識別子が前記外部参照子保持部に保持されている前記外部参照子と対応する場合に前記個別要素パケットの参照元を確定し、前記個別要素パケット入力部に入力された前記個別要素パケットの前記外部参照子が前記固有識別子保持部に保持されている前記固有識別子と対応する場合に前記個別要素パケットの参照先を確定する参照関係解析部と、
を備え、
前記参照関係解析部は、前記個別要素パケットの参照元が確定する度に前記外部参照子保持部に保持されている前記外部参照子を削除し、前記個別要素パケットの参照先が確定する度に前記固有識別子保持部に保持されている前記固有識別子を削除する、ファイル構造解析装置。
【請求項２】
前記参照関係解析部は、
前記入力された個別要素パケットの外部参照子が前記固有識別子保持部に保持されている前記固有識別子と同一である場合に前記個別要素パケットの参照先が確定したとして、前記固有識別子保持部から該固有識別子を削除し、
前記入力された個別要素パケットの固有識別子が前記外部参照子保持部に保持されている前記外部参照子と同一である場合に前記個別要素パケットの参照元が確定したとして、前記外部参照子保持部から該外部参照子を削除する、
請求項１に記載のファイル構造解析装置。
【請求項３】
前記外部参照子保持部は、前記外部参照子と、該外部参照子に対応した前記固有識別子とを対にして保持し、
前記参照関係解析部は、
前記個別要素パケットの参照元が確定した場合に、前記外部参照子保持部に外部参照子と対にして保持された前記固有識別子を、前記参照元の個別要素パケットの実効的な固有識別子に変更する、請求項１に記載のファイル構造解析装置。
【請求項４】
前記外部参照子と対にして保持され、前記参照関係解析部により変更された個別要素パケットの実効的な固有識別子が該外部参照子と同一であった場合に、木構造のループエラーを検出する、請求項３に記載のファイル構造解析装置。
【請求項５】
前記参照関係解析部により削除された前記固有識別子または前記外部参照子を有する前記個別要素パケットを記憶する個別要素パケット記憶部を備える、請求項１に記載のファイル構造解析装置。
【請求項６】
前記参照解析部は、前記複数の個別要素パケットのうちのいずれかをルート要素パケットとみなして参照関係を解析する、請求項１に記載のファイル構造解析装置。
【請求項７】
前記構造化データ群は、ＭＸＦファイルのヘッダメタデータである、請求項１に記載のファイル構造解析装置。
【請求項８】
複数の個別要素パケットを用いて木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析方法であって、
前記個別要素パケットは、一の個別要素パケットを識別する固有識別子と、他の個別要素パケットを参照するための外部参照子とを有し、前記ファイルは、前記一の個別要素パケットの外部参照子を用いて前記他の個別要素パケットの固有識別子を参照することにより木構造を構成し、
個別要素パケット入力部が、前記ファイルから前記複数の個別要素パケットを順次に入力する個別要素パケット入力ステップと、
個別要素パケット解析部が、前記複数の個別要素パケットの前記固有識別子または前記外部参照子を抽出する個別要素パケット解析ステップと、
固有識別子保持部が、前記個別要素パケット解析ステップにて抽出された前記固有識別子を一時的に保持する固有識別子保持ステップと、
外部参照子保持部が、前記個別要素パケット解析ステップにて抽出された前記外部参照子を一時的に保持する外部参照子保持ステップと、
参照関係解析部が、前記個別要素パケット入力ステップにて入力された前記個別要素パケットの前記固有識別子が前記外部参照子保持ステップにて保持されている前記外部参照子と対応する場合に前記個別要素パケットの参照元を確定し、前記個別要素パケット入力ステップにて入力された前記個別要素パケットの前記外部参照子が前記固有識別子保持ステップにて保持されている前記固有識別子と対応する場合に前記個別要素パケットの参照先を確定する参照関係解析ステップと、を含み、
前記参照関係解析ステップは、さらに、前記個別要素パケットの参照元が確定する度に前記外部参照子保持ステップにて保持されている前記外部参照子を削除し、前記個別要素パケットの参照先が確定する度に前記固有識別子保持ステップにて保持されている前記固有識別子を削除するステップを含む、ファイル構造解析方法。
【請求項９】
コンピュータを、
複数の個別要素パケットを用いて木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析装置であって、
前記個別要素パケットは、一の個別要素パケットを識別する固有識別子と、他の個別要素パケットを参照するための外部参照子とを有し、前記ファイルは、前記一の個別要素パケットの外部参照子を用いて前記他の個別要素パケットの固有識別子を参照することにより木構造を構成し、
前記ファイルから前記複数の個別要素パケットを順次に入力する個別要素パケット入力部と、
前記複数の個別要素パケットの前記固有識別子または前記外部参照子を抽出する個別要素パケット解析部と、
前記個別要素パケット解析部により抽出された前記固有識別子を一時的に保持する固有識別子保持部と、
前記個別要素パケット解析部により抽出された前記外部参照子を一時的に保持する外部参照子保持部と、
前記個別要素パケット入力部に入力された前記個別要素パケットの前記固有識別子が前記外部参照子保持部に保持されている前記外部参照子と対応する場合に前記個別要素パケットの参照元を確定し、前記個別要素パケット入力部に入力された前記個別要素パケットの前記外部参照子が前記固有識別子保持部に保持されている前記固有識別子と対応する場合に前記個別要素パケットの参照先を確定する参照関係解析部と、
を備え、
前記参照関係解析部は、前記個別要素パケットの参照元が確定する度に前記外部参照子保持部に保持されている前記外部参照子を削除し、前記個別要素パケットの参照先が確定する度に前記固有識別子保持部に保持されている前記固有識別子を削除する、ファイル構造解析装置として機能させるための、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル構造解析装置、ファイル構造解析方法およびプログラムに関し、特に、ファイルの木構造を解析するファイル構造解析装置、ファイル構造解析方法およびプログラムに関する。
【背景技術】
【０００２】
一般的に、映像素材は、ビデオテープなどのパッケージメディアに記録される。また、ＳＤＩ（Ｓｉｎｇｌｅ  Ｄｏｃｕｍｅｎｔ  Ｉｎｔｅｒｆａｃｅ）等の各種デジタルインタフェースを介して、サーバに取り込まれ転送される。いったんサーバ上に取り込まれた映像素材はファイルとして扱われることになり、ネットワークによって結合されたサーバ間で転送されたり、共有されたりする。近年のネットワーク伝送は、ＩＰ網に代表される非同期伝送路が一般的となってきており、このような場合に、データファイルの互換性が重要となってくる。
【０００３】
そこで、ファイル交換のためのフォーマットとして、例えばＳＭＰＴＥ３７７Ｍの規格に準拠したＭＸＦ（Ｍａｔｅｒｉａｌ  ｅＸｃｈａｎｇｅ  Ｆｏｒｍａｔ）などの互換性を意識したフォーマットが提案されている。ＭＸＦファイルは、ヘッダ部分、ボディ部分、フッタ部分から構成される構造化ファイルであり、必要に応じて様々なメタデータを、ヘッダ部分、ボディ部分、フッタ部分のいずれか、あるいはそれらのすべてに格納することができる。
【０００４】
ここでヘッダ部分に格納されるメタデータは特にヘッダメタデータと呼ばれ、それは映像の編集情報とともに、コンテンツの識別のためのメタデータ、シーンやショットの説明のためのメタデータなどから構成される。これらのメタデータは、プログラムの全体、もしくはシーンやショットを単位とした場面の説明などの情報を表すために用いられる。このように、ヘッダメタデータによってファイル全体の構造や内容を把握することができるため、ファイル本体と切り離されて、伝送されたり解析されたりされ得る。
【０００５】
すなわち、ファイルの転送等を行う際に、ヘッダメタデータを用いてファイル全体の構造や内容を解析することにより、ファイルの整合性を確認したり補修したりすることが可能となる。通常、ＭＸＦファイルはその詳細な論理構造が木構造として表現されている。ヘッダメタデータもまた、例えばコンテンツの識別のためのメタデータが木構造データとして格納されている。そして、当該木構造データを解析するためには、従来はヘッダメタデータを一括して内部メモリに展開する必要があった。従って、例えばイメージデータのようなデータサイズの大きな情報がヘッダメタデータの一部として格納されている場合などヘッダメタデータのサイズが大きい場合には、すべてのヘッダメタデータを内部メモリに展開することができず、当該木構造データの解析をすることができないという問題があった。
【０００６】
そこで、ヘッダメタデータの構造記述要素とデータ要素とを分離して、構造記述要素のみ内部メモリに展開して木構造解析を行うことにより、データ要素サイズに依存することなく木構造解析を行うことが可能な技術が開示されている（例えば、特許文献１）。
【０００７】
【特許文献１】特開２００７−１４８７５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１では、ヘッダメタデータの構造記述要素とデータ要素を分離するための処理が必要となる。また、木構造が複雑な場合には構造記述要素のすべてを内部メモリに展開することができず、ファイル構造の解析をすることができないという問題があった。
【０００９】
そこで、本発明は、上記問題に鑑みてなされたものであり、本発明の目的とするところは、構造化ファイルのヘッダメタデータのサイズや複雑度に関わらず、ファイル構造の解析をすることが可能な、新規かつ改良されたファイル構造解析装置、ファイル構造解析方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のある観点によれば、複数の個別要素パケットが外部参照されることにより木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析装置が提供される。上記個別要素パケットは、個別要素パケットを識別する固有識別子と、他の個別要素パケットを外部参照する場合に該他の個別要素パケットの固有識別子を用いて外部参照先を示す外部参照子とを含み、上記ファイル構造解析装置は、複数の個別要素パケットを順次に入力する個別要素パケット入力部と、参照先が未確定の個別要素パケットの外部参照子を一時的に保持する外部参照子保持部と、参照元が未確定の個別要素パケットの固有識別子を一時的に保持する固有識別子保持部と、個別要素パケット入力部に入力された複数の個別要素パケットの参照関係を順次に解析し、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子保持部および固有識別子保持部からそれぞれ削除する参照関係解析部と、を備える。
【００１１】
また、上記参照関係解析部は、入力された個別要素パケットの外部参照子が固有識別子保持部に保持されている固有識別子と同一である場合に個別要素パケットの参照先が確定したとして、固有識別子保持部から該固有識別子を削除し、入力された個別要素パケットの固有識別子が外部参照子保持部に保持されている外部参照子と同一である場合に個別要素パケットの参照元が確定したとして、外部参照子保持部から該外部参照子を削除するようにしてもよい。
【００１２】
かかる構成によれば、複数の個別要素パケットを順次入力し、参照先が未確定の個別要素パケットの外部参照子を外部参照子保持部に保持する。また、参照元が未確定の個別要素パケットの固有識別子を固有識別子保持部に保持する。そして、入力された個別要素パケットの参照関係を順次解析して、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子保持部および固有識別子保持部からそれぞれ削除する。
【００１３】
これにより、木構造により構造化されたファイルの参照関係を順次に解析するため、外部参照子や固有識別子のすべてを外部参照子保持部および固有識別子保持部に展開する必要がなくなる。したがって、入力ファイルのヘッダメタデータのサイズが大きい場合や構造が複雑な場合でも記憶容量の制限を考慮することなくファイル構造の解析をすることが可能となる。  
【００１４】
また、外部参照子保持部は、外部参照子と、該外部参照子に対応した固有識別子とを対にして保持し、参照関係解析部は、個別要素パケットの参照元が確定した場合に、外部参照子保持部に外部参照子と対にして保持された固有識別子を、参照元の個別要素パケットの実効的な固有識別子に変更してもよい。ここで実効的な固有識別子とは、参照関係に基づいて個別要素パケットが合成された場合の上位の個別要素パケットの固有識別子をいう。また、外部参照子と対にして保持され、参照関係解析部により変更された個別要素パケットの実効的な固有識別子が該外部参照子と同一であった場合に、木構造のループエラーを検出するようにしてもよい。
【００１５】
かかる構成により、個別要素パケットの参照元が確定した場合に、外部参照子と対にして保持した固有識別子を、参照元の個別要素パケットの固有識別子に変更する。これにより、参照確定部分を抽象化して、複数パケットを合成し、合成パケットにおいて自己参照している場合にループエラーを検出することができる。よって、個別要素パケットの外部参照子や固有識別子のすべてを展開することなく、ファイルの木構造をより正確に解析することが可能となる。
【００１６】
また、参照関係解析部により削除された個別要素パケットを記憶する個別要素パケット記憶部を備えてもよい。かかる構成により、参照関係が確定した個別要素パケットを順次に記憶して、効率的にファイル構造の解析を行うことができる。
【００１７】
また、参照関係解析部は、複数の個別要素パケットのうちのいずれかをルート要素パケットとみなして参照関係を解析するようにしてもよい。かかる構成により、ルート要素が確定しないために参照関係の解析がエラーとなることを避けることが可能となり、より確実にファイル構造の解析をすることができる。
【００１８】
上記構造化データ群は、ＭＸＦファイルのヘッダメタデータであってもよい。ＭＸＦファイルにおいては、ルート要素が確定される構成となっているため、単純ループエラーが存在しない。したがって、より確実にファイル構造の解析をすることができる。
【００１９】
上記課題を解決するために、本発明の別の観点によれば、複数の個別要素パケットが外部参照されることにより木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析方法であって、個別要素パケットは、個別要素パケットを識別する固有識別子と、他の個別要素パケットを外部参照する場合に該他の個別要素パケットの固有識別子を用いて外部参照先を示す外部参照子とを含み、複数の個別要素パケットを順次に入力するステップと、参照先が未確定の個別要素パケットの外部参照子を外部参照子保持部に一時的に保持するステップと、参照元が未確定の個別要素パケットの固有識別子を固有識別子保持部に一時的に保持するステップと、入力された複数の個別要素パケットの参照関係を順次に解析し、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子保持部および固有識別子保持部からそれぞれ削除するステップと、を含むファイル構造解析方法が提供される。
【００２０】
上記課題を解決するために、本発明の別の観点によれば、コンピュータを、複数の個別要素パケットが外部参照されることにより木構造を構成している構造化データ群を含むファイルを解析するファイル構造解析装置であって、個別要素パケットは、個別要素パケットを識別する固有識別子と、他の個別要素パケットを外部参照する場合に該他の個別要素パケットの固有識別子を用いて外部参照先を示す外部参照子とを含み、複数の個別要素パケットを順次に入力する個別要素パケット入力部と、参照先が未確定の個別要素パケットの外部参照子を一時的に保持する外部参照子保持部と、参照元が未確定の個別要素パケットの固有識別子を一時的に保持する固有識別子保持部と、個別要素パケット入力部に入力された複数の個別要素パケットの参照関係を順次に解析し、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子保持部および固有識別子保持部からそれぞれ削除する参照関係解析部と、を備えるファイル構造解析装置として機能させるための、プログラムが提供される。
【００２１】
かかるプログラムは、例えばＣＰＵ、ＲＯＭまたはＲＡＭなどを含むコンピュータのハードウェア資源に、上記のようなファイル構造解析装置の各構成の機能を実行させることができる。すなわち、当該プログラムを用いるコンピュータを、上述のファイル構造解析装置として機能させることが可能である。
【発明の効果】
【００２２】
以上説明したように本発明によれば、構造化ファイルのヘッダメタデータのサイズや複雑度に関わらず、ファイル構造の解析をすることができる。
【発明を実施するための最良の形態】
【００２３】
以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００２４】
（第１の実施形態）
まず、本発明の実施形態の目的について説明する。近年、ネットワーク伝送におけるファイル交換のためのフォーマットとして、例えばＭＸＦファイルなどの互換性を意識したフォーマットが挙げられる。ＭＸＦファイルは、ヘッダ部分、ボディ部分、フッタ部分から構成される構造化ファイルであり、必要に応じヘッダ部分、ボディ部分、フッタ部分のいずれか、あるいはそれらすべてにメタデータを格納することができる。
【００２５】
ここでヘッダ部分に格納されるメタデータすなわちヘッダメタデータには、ファイル全体の構造や内容が格納されており、当該ヘッダメタデータを解析することにより、ファイルの整合性を確認したり補修したりすることが可能となる。従来、ヘッダメタデータに格納されている例えばコンテンツの識別のためのメタデータの木構造を解析するためには、ヘッダメタデータを一括して内部メモリに展開する必要があった。従って、例えばイメージデータのようなデータサイズの大きな情報がヘッダメタデータの一部として格納されている場合などヘッダメタデータのサイズが大きい場合には、すべてのヘッダメタデータを一括して内部メモリに展開することができず、当該木構造の解析をすることができなかった。
【００２６】
そこで、上記のような事情を一着眼点として、本発明の実施形態にかかるファイル構造解析装置１００が創作されるに至った。本実施形態にかかるファイル構造解析装置１００によれば、構造化ファイルのヘッダメタデータのサイズや複雑度に関わらず、ファイル構造の解析をすることが可能となる。以下、このようなファイル構造解析装置１００の構成および動作を詳細に説明する。
【００２７】
なお、本実施形態において、ファイル構造解析装置１００は、編集装置や再生装置等の映像機器を例示でき、撮像装置や映像記録装置とは別体の装置として構成したが、かかる例に限定されない。例えば、ファイル構造解析装置１００を撮像装置と一体として構成したり、映像記録装置と一体として構成したりするようにしてもよい。本実施形態においては、ファイル構造解析装置１００とは別体の撮像装置によって撮像された映像等が外部から入力される構成となっている。
【００２８】
次に、図１に基づいて、本実施形態にかかるファイル構造解析装置１００の構成について説明する。図１は、本実施形態にかかるファイル構造解析装置１００の機能構成を示すブロック図である。図１に示したように、ファイル構造解析装置１００は、個別要素パケット入力部１０２、個別要素パケット解析部１０４、個別要素パケット一時記憶部１０６、外部参照保持部１０８、外部参照子管理部１１０、参照関係解析部１１２、固有識別子管理部１１４、固有識別子保持部１１８、ファイル生成／追記部１２０、ファイル１２１などを備える。
【００２９】
上記したように、ファイル構造解析装置１００には、ファイル構造解析装置１００とは別体の装置で撮影されたり記録されたりした映像等が入力ストリーム５０として入力される。本実施形態において、入力ストリーム５０は木構造で表現できる構造化されたファイルであって、例えばＭＸＦファイルなどを例示できる。以下では、入力ストリーム５０をＭＸＦファイルとして説明するが、かかる例に限定されず、入力ストリーム５０は木構造で表現できる構造化されたファイルであればよい。
【００３０】
ファイル構造解析装置１００の機能構成の詳細を説明する前に、図２〜８に基づいて、ＭＸＦファイルのデータ構造について説明する。図２〜８は、ＭＸＦファイルのデータ構造について説明する説明図である。図２に示したように、ＭＸＦファイルは、ファイルヘッダ（Ｆｉｌｅ  Ｈｅａｄｅｒ）２０１と、ファイルボディ（Ｆｉｌｅ  Ｂｏｄｙ）２０２と、ファイルフッタ（Ｆｉｌｅ  Ｆｏｏｔｅｒ）２０３とから構成される。ファイルヘッダ２０１は、ＭＸＦファイルの先頭に常に位置し、データの先頭を表す情報や、ファイル構造の情報や後述する実データの内容説明の情報などのメタデータを含む。ファイルボディ２０２は、映像、音声、システム、データなどの１つ以上の実データが格納される。ファイルフッタ２０３は、ＭＸＦファイルの最後尾に位置し、データの終わりを表す情報などが格納されている。
【００３１】
なお、ファイルヘッダ２０１、ファイルボディ２０２、ファイルボディ２０３に格納されるデータは、ＳＭＰＴＥ３３６Ｍの規格に準拠したＫＬＶ（Ｋｅｙ、Ｌｅｎｇｔｈ、Ｖａｌｕｅ）構造にコーディングされて配置されている。ＫＬＶ構造とは、その先頭から、キー（Ｋｅｙ）２０４、レングス（Ｌｅｎｇｔｈ）２０５、バリュー（Ｖａｌｕｅ）２０６が順次配置された構造である。キー２０４は、データを識別するタグであって、バリュー２０６に配置されるデータがどのようなデータであるかを表す、ＳＭＰＴＥ２９８Ｍの規格に準拠した１６バイトのラベルが配置される。レングス２０５には、バリュー２０６に配置されるデータのデータ長が配置される。バリュー２０６には、実データが格納され、データ長は可変長である。
【００３２】
図３に示したように、ファイルヘッダ２０１には、パーティションパック（Ｐａｒｔｉｔｉｏｎ  Ｐａｃｋ）２１０、ヘッダメタデータ（Ｈｅａｄｅｒ  Ｍｅｔａｄａｔａ）が配置される。パーティションパック２１０には、ヘッダを特定するためのデータや、ファイルボディ２０２に配置されるデータの形式、ファイルフォーマットを表す情報などが配置される。ヘッダメタデータ２１１には、ファイル構造を記述するストラクチャーメタデータ（Ｓｔｒｕｃｔｕａｌ  Ｍｅｔａｄａｔａ）とファイル内容を記述するディスクリプティブメタデータ（Ｄｅｓｃｒｉｐｔｉｖ  Ｍｅｔａｄａｔａ）の２種類があり、ファイルの作成日やファイルボディ２０２に配置されたデータに関する情報などのファイル単位のメタデータが配置される。
【００３３】
ストラクチャーメタデータには、ファイルボディ２０２のデータ種類の情報を表すエッセンスコンテナ（Ｅｓｓｅｎｃｅ  Ｃｏｎｔａｉｎｅｒ）２１２や、出力するタイムラインの情報を表すマテリアルパッケージ（Ｍａｔｅｒｉａｌ  Ｐａｃｋａｇｅ）２１４や、入力する素材の情報を表すファイルパッケージ（Ｆｉｌｅ  Ｐａｃｋａｇｅ）２１５などが含まれる。ディスクリプティブメタデータ２１６は、ファイルボディ２０２に含まれる実データの内容を記述するメタデータであって、例えばＳＭＰＴＥ３８０Ｍの規格に準拠したＤＭＳ−１などが配置される。
【００３４】
ヘッダメタデータ２１１は、複数のメタデータセットのリンク構造としてその構造が表現される。すべてのメタデータセットには１６バイトのインスタンスＵＩＤ（Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）が付けられ、各メタデータセットがそのＵＩＤを互いに参照することで、メタデータセット間のリンク状態を表す。このリンク状態を解析することにより、ＭＸＦファイルの木構造を解析することが可能となる。
【００３５】
また、図４に示したように、ファイルボディ２０２には、システム（Ｓｙｓｔｅｍ  Ｉｔｅｍ）２２２、映像（Ｐｉｃｔｕｒｅ  Ｉｔｅｍ）２２３、音声（Ｓｏｕｎｄ  Ｉｔｅｍ）２２４、データ（Ｄａｔａ  Ｉｔｅｍ）２２５などの１つ以上の実データを含む、複数のコンテンツパッケージ（Ｃｏｎｔｅｎｔ  Ｐａｃｋａｇｅ）２２１が配置される。
【００３６】
次に、ディスクリプティブメタデータ（以降ＤＭと称する）の詳細について説明する。本実施形態においては、ＤＭのリンク状態を解析することによりＭＸＦファイルの木構造を解析できる。ＤＭの構成を示す一例としてＳＭＰＴＥ３８０Ｍに規定されたＤＭＳ−１（Ｄｅｓｃｒｉｐｔｉｖｅ  Ｍｅｔａｄａｔａ  Ｓｃｈｅｍｅ−１）では、プロダクションフレームワーク（Ｐｒｏｄｕｃｔｉｏｎ  Ｆｒａｍｅｗｏｒｋ）、シーンフレームワーク（Ｓｈｅｎｅ  Ｆｒａｍｅｗｏｒｋ）、クリップフレームワーク（Ｃｌｉｐ  Ｆｒａｍｅｗｏｒｋ）の３つのフレームワークが用意されている。プロダクションフレームワークは、コンテンツの識別と所有権の詳細情報を記述し、コンテンツ全体を対象とするものである。またシーンフレームワークは、コンテンツの個々のシーンに含まれる動作やイベントの情報を記述し、コンテンツの中の連続した部分を記述する。クリップフレームワークは、個々のクリップの撮影や制作の情報を記述する。
【００３７】
図５は、プロダクションフレームワークに基づくＤＭインスタンスの一例を説明する説明図である。図５に示したように、マテリアルパッケージ（Ｍａｔｅｒｉａｌ  Ｐａｃｋａｇｅ）２１４はいくつかのＤＭトラック（ＤＭ  Ｔｒａｃｋ）を含み、プロダクションフレームワークに基づくＤＭインスタンスは、その中のひとつのＤＭトラックをルートとした木構造として構成される。そして各ＤＭトラックは１つのＤＭシーケンス（ＤＭ  Ｓｅｑｕｅｎｃｅ）を持ち、また各ＤＭシーケンスはいくつかのＤＭセグメント（ＤＭ  Ｓｅｇｍｅｎｔ）を持つ。そしてプロダクションフレームワークに基づくＤＭインスタンスの実データは、このＤＭセグメントから外部参照されるかたちで生成される。
【００３８】
ここで木構造を構成する個別要素パケットの参照方法について説明する。例えば図５においてＤＭトラックはＤＭシーケンスを外部参照しているが、これはＤＭシーケンスがもつ固有識別子をＤＭトラックに準備された外部参照子が参照することで実現される。同様にＤＭセグメントがもつ固有識別子をＤＭシーケンスに準備された外部参照子が参照することで、ＤＭシーケンスからＤＭセグメントへの外部参照が実現される。このように、木構造を構成する各個別要素パケットがそれぞれ固有識別子を有し、これを他の個別要素パケットに準備された外部参照子によって参照することにより参照先や参照元との関係を表すことが可能となる。以上、ＭＸＦファイルのデータ構造について説明した。
【００３９】
図１に戻り、上記したように、ＭＸＦファイル等の構造化されたファイルが入力ストリーム５０としてファイル構造解析装置１００に入力される。入力ストリーム５０は、例えば、図６に示したように、木構造で表現される複数のパケット３００である。個別要素パケット入力部１０２は、入力ストリーム５０の個別要素パケットが入力される順に受け付け、個別要素パケット一時記憶部１０６に提供する。
【００４０】
個別要素パケット一時記憶部１０６は、個別要素パケット入力部１０２により提供された個別要素パケットを一時的に記憶する機能を有し、例えば、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの不揮発性メモリや、ハードディスクおよび円盤型磁性体ディスクなどの磁気ディスクや、ＣＤ−ＲＷ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  ＲｅＷｒｉｔａｂｌｅ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）−ＲＷ／／＋ＲＷ／ＲＡＭ（Ｒａｍｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（登録商標））―ＲＥなどの光ディスクや、ＭＯ（Ｍａｇｎｅｔｏ  Ｏｐｔｉｃａｌ）ディスクなどの記憶媒体であってもよい。
【００４１】
個別要素パケット解析部１０４は、入力される個別要素パケットを識別する固有識別子（以降、パケットＩＤ、ＩＤとも称する。）や、個別要素パケットに含まれる外部子を抽出する。外部参照子とは、個別要素パケットが他の個別要素パケットを外部参照している場合に、当該他の個別要素パケットの固有識別子を用いて外部参照先を示すものである。個別要素パケット解析部１０４は、個別要素パケットの解析結果を参照関係解析部１１２に提供する。
【００４２】
参照関係解析部１１２は、個別要素パケット一時記憶部１０６に記憶された個別要素パケットの参照関係を解析する機能を有する。個別要素パケット解析部１０４は、個別要素パケットの参照関係を解析し、参照関係が確定していない個別要素パケットの固有識別子を固有識別子管理部１１４に提供して、当該固有識別子を固有識別子リストに一時的に保持するよう固有識別子管理部１１４に指示する。また、当該個別要素パケットに参照関係が確定していない外部参照子が含まれている場合には、当該外部参照子を外部参照子管理部１１０に提供し、当該外部参照子を外部参照子リストに一時的に保持するよう外部参照子管理部に指示する。ここで、参照関係が確定するとは、抽出された固有識別子を参照する外部参照子が外部参照子リストに存在すること、または抽出された外部参照子が参照する固有識別子が固有識別子リストに存在することをいう。
【００４３】
そして、個別要素パケットの参照関係が確定した場合には、外部参照元が確定した個別要素パケットの固有識別子を固有識別子リストから削除し、外部参照先が確定した場合には、外部参照子を外部参照子リストから削除する。
【００４４】
ところで図６に示したように、木構造を構成する個別要素パケットには、ルート要素３００ａ、ノード要素３００ｂ、リーフ要素３００ｃ、３００ｄなどがある。ルート要素は、外部参照されない固有識別子を有しているか、固有識別子を有さず外部参照子のみを有している個別要素パケットである。あるいは木構造を解析するシステム等により、何らかの方法でルート要素と判別され得る個別要素パケットである場合もある。他方ノード要素は、外部参照される固有識別子を有し、外部参照子を有する。また、リーフ要素は外部参照される固有識別子を有し、外部参照子を有さない。なお、外部参照されない固有識別子を有し、それ自身は外部参照子を有さない孤立要素パケットも入力される個別要素パケットに含まれる可能性がある。
【００４５】
再び図１に戻り、参照関係解析部１１２は、図７に示す木構造化エラーを検出する。木構造化エラーとして検出すべき個別要素パケットは、例えば、図７（ａ）の孤立要素パケット、図７（ｂ）のダングリングフック（参照先が未確定の外部参照子）、図７（ｃ）および（ｄ）のループ参照、図７（ｅ）の重複参照などが例示できる。孤立要素パケットは、図７（ａ）に示したように、それ自身の固有識別子が外部参照されず、またそれ自身は外部参照子を有さない個別要素パケットである。当該個別要素パケットはエラーではないが、木構造を構成しないため、孤立要素パケットとして切り出しておく必要がある。
【００４６】
ダングリングフックは、図７（ｂ）に示したように、存在しない外部参照先を指す外部参照子を有する個別要素パケットである。ループ参照は、図７（ｃ）および図７（ｄ）に示したように、下位ノードの外部参照子が、上位ノードの固有識別子を参照している場合を例示できる。重複参照は、図７（ｅ）に示したように、固有識別子が複数の外部参照子から参照されている場合を例示できる。
【００４７】
図１に戻り、外部参照子管理部１１０は、参照関係解析部１１２の指示に基づき、外部参照子保持部１０８に、参照関係解析部１１２から提供された外部参照子を外部参照子リスト１０９に一時的に保持させる機能を有する。また、参照関係解析部１１２の指示に基づき、外部参照先が確定した外部参照子を外部参照子リスト１０９から削除する機能を有する。
【００４８】
外部参照子保持部１０８は、参照先が未確定の個別要素パケットの外部参照子を一時的に保持する外部参照子リスト１０９を有している。上記したように、外部参照子管理部１１０の管理の下、外部参照子リスト１０９に外部参照子を一時的に保持したり、外部参照子リスト１０９から外部参照子を削除したりする。外部参照子リスト１０９に保持される外部参照子は、入力された個別要素パケットの固有識別子と同一であるものが存在した場合に、入力された個別要素パケットの参照元が確定されたとして、外部参照子リスト１０９から当該外部参照子が削除される。このように、個別要素パケットが入力される都度参照関係が解析されるため、入力されるすべての個別要素パケットの外部参照子をまとめて外部参照子リスト１０９に展開する必要はない。
【００４９】
固有識別子管理部１１４は、参照関係解析部１１２の指示に基づき、固有識別子保持部１１８に、参照関係解析部１１２から提供された固有識別子を固有識別子リスト１１９に一時的に保持させる機能を有する。また、参照関係解析部１１２の指示に基づき、外部参照元が確定した個別要素パケットの固有識別子を固有識別子リスト１１９から削除する機能を有する。
【００５０】
固有識別子保持部１１８は、参照元が未確定の個別要素パケットの固有識別子を一時的に保持する固有識別子リスト１１９を有している。上記したように、固有識別子管理部１１４の管理の下、固有識別子リスト１１９に固有識別子を一時的に保持したり、固有識別子リスト１１９から固有識別子を削除したりする。固有識別子リスト１１９に保持される固有識別子は、入力された個別要素パケットの外部参照子と同一であるものが存在した場合に、入力された個別要素パケットの参照先が確定されたとして、固有識別子リスト１１９から当該固有識別子が削除される。このように、個別要素パケットが入力される都度参照関係が解析されるため、入力されるすべての個別要素パケットの固有識別子をまとめて固有識別子リスト１１９に展開する必要はない。
【００５１】
ファイル生成／追記部１２０は、ファイル１２１を生成したり、参照関係が確定した個別要素パケットをファイル１２１に追記したりする機能を有する。具体的には、ファイル生成／追記部１２０は、固有識別子リスト１１９から削除された固有識別子を有する個別要素パケットを個別要素パケット一時記憶部１０６から取得して、ファイル１２１に記録する。
【００５２】
ファイル１２１は、参照関係が確定した個別要素パケットを記憶する機能を有し、本発明の個別要素パケットの一例である。ファイル１２１は、例えば、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの不揮発性メモリや、ハードディスクおよび円盤型磁性体ディスクなどの磁気ディスクや、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）／ＲＷ（ＲｅＷｒｉｔａｂｌｅ）、ＤＶＤ−Ｒ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）／ＲＷ／＋Ｒ／＋ＲＷ／ＲＡＭ（Ｒａｍｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（登録商標））―Ｒ／ＢＤ−ＲＥなどの光ディスクや、ＭＯ（Ｍａｇｎｅｔｏ  Ｏｐｔｉｃａｌ）ディスクなどの記憶媒体であってもよい。
【００５３】
本実施形態においては、ファイル構造解析装置１００にファイル生成／追記部１２０およびファイル１２１を備える構成としているが、本発明はかかる例に限定されない。例えば、ファイル生成／追記部１２０およびファイル１２１をファイル構造解析装置１００とは別体の装置としてもよい。以上、ファイル構造解析装置１００の機能構成について説明した。次に、ファイル構造解析装置１００におけるファイル構造解析方法について説明する。
【００５４】
図８は、本実施形態にかかるファイル構造解析装置１００のファイル構造解析方法を示すフローチャートである。なお、図８のファイル構造解析方法の説明に際し、図９〜図１５の具体例を適宜参照する。図９〜図１５は、ファイル構造解析方法を具体的に説明する説明図である。なお、以下では、個別要素パケットを単にパケットと称し、固有識別子をＩＤと称し、固有識別子リストをパケットリストと称し、外部参照子をフックと称し、外部参照子リストをフックリストと称して説明する。また、出力ファイルは、ファイル１２１に記録されるファイルである。
【００５５】
図８に示したように、まず、パケットの読出しを行う（Ｓ１０２）。ステップＳ１０２において読み出されたパケットにフックがあるか否かを判定する（Ｓ１０４）。ステップＳ１０４において読み出されたパケットにフックがあると判定された場合に、当該フックを抽出する（Ｓ１０６）。次に、パケットリストにステップＳ１０６において抽出されたフックが参照するパケットがあるか否かを判定する（Ｓ１０８）。すなわち、ステップＳ１０８においては、ステップＳ１０６において抽出されたフックに対応したＩＤが、パケットリストにあるか否かを判定する。
【００５６】
ステップＳ１０８において、当該フックに対応したＩＤがパケットリストになかった場合には、フックをフックリストに登録する（Ｓ１１０）。そして、読み出されたパケットに他のフックがある場合には、ステップＳ１０６〜Ｓ１１４の処理を繰り返す。具体例としては、例えば図９に示したように、最初にパケット３０２が読み出され、パケット３０２のフック「Ｃ」および「Ｄ」が抽出されて、フック「Ｃ」および「Ｄ」がフックリスト１０９に登録される。
【００５７】
図８に戻り、次に入力されたパケットがルートパケットか否かを判定する（Ｓ１１６）。パケットがルートパケットであるか否かは、固有識別子が外部参照されていないか、固有識別子を有さず、外部参照子のみを有しているかにより判定される。また、木構造を解析するシステム等により、何らかの方法でルート要素と判定してもよい。
【００５８】
ステップＳ１１６において、パケットがルートパケットでなかった場合には、当該パケットのＩＤを抽出する（Ｓ１２０）。そしてステップＳ１２０において抽出したパケットのＩＤに対応するフックがフックリストにあるか否かを判定する（Ｓ１２２）。ステップＳ１２２において、パケットのＩＤに対応するフックがフックリストになかった場合には、当該パケットをパケットリストに保持する（Ｓ１２４）。図９に示したように、最初に読み出されたパケット３０２は、ルートパケットではないから、パケットのＩＤ「Ｂ」がパケットリスト１１９に保持される。
【００５９】
次に、図８および図１０を参照して、２番目のパケット３０５が読み出された場合について説明する。まず、２番目のパケットが読み出される（Ｓ１０２）。２番目に読み出されたパケット３０５には、フックがないため、図８のステップＳ１０４においてパケットにフックがないと判断されて、ステップＳ１１６の判断がなされる。パケット３０５はルートパケットではないため（Ｓ１１６）、パケットのＩＤ「Ｅ」が抽出される（Ｓ１２０）。ステップＳ１２０において抽出されたＩＤ「Ｅ」はフックリスト１０９にないため（Ｓ１２２）、パケット３０５のＩＤ「Ｅ」をパケットリスト１１９に保持する（Ｓ１２４）。
【００６０】
次に、図８および図１１を参照して、３番目のパケット３０４が読み出された場合について説明する。２番目に読み出されたパケット３０５と同様に、パケット３０４にはフックがなく（Ｓ１０４）、ルートパケットでもないから（Ｓ１１６）、パケット３０４のＩＤ「Ｄ」が抽出される（Ｓ１２０）。そして、ステップＳ１２０において抽出されたＩＤ「Ｄ」に対応するフックがフックリスト１０９にあるか否かが判定される（Ｓ１２２）。
【００６１】
フックリスト１０９には、最初に読み出されたパケット３０２のフック「Ｄ」が格納されている。したがって、ステップＳ１２２において、パケット３０４のＩＤ「Ｄ」に対応するフックがフックリスト１０９にあると判定されて、フック「Ｄ」がフックリストから削除される（Ｓ１２６）。これにより、パケット３０４の参照元が確定したこととなり、パケット３０４が出力ファイル１２１に追記される（Ｓ１１８）。そして、次のパケットがあれば（Ｓ１２８）、次のパケットが読み出される（Ｓ１０２）。
【００６２】
続いて図８、図１２および図１３を参照して、４番目のパケット３０１が読み出された場合について説明する。まず、パケット３０１にフックがあるか否かが判定されて（Ｓ１０４）、パケット３０１のフック「Ｂ」が抽出される（Ｓ１０６）。そして、ステップＳ１０６において抽出されたフック「Ｂ」がパケットリスト１１９にあるか否かが判定される（Ｓ１０８）。フック「Ｂ」とパケットリスト１１９に格納されているパケット３０２のＩＤ「Ｂ」が同一であるため、パケット３０１の参照先が確定したこととなる。したがって、パケットリスト１１９から、ＩＤ「Ｂ」のパケットを取り出して出力ファイル１２１に追記する（Ｓ１１２）。
【００６３】
そして、パケット３０１にフック「Ｂ」以外のフックがない場合には（Ｓ１１４）、パケット３０１がルートパケットであるか否かを判定する（Ｓ１１６）。パケット３０１は、ルートパケットであるため、パケット３０１（ＩＤ「Ａ」）を出力ファイルへ追記する（Ｓ１１８）。そして、次のパケットがあれば（Ｓ１２８）、次のパケットが読み出される（Ｓ１０２）。
【００６４】
最後に図８、図１４および図１５を参照して、５番目のパケット３０３が読み出された場合について説明する。まず、パケット３０３にフックがあるか否かが判定されて（Ｓ１０４）、パケット３０３のフック「Ｅ」が抽出される（Ｓ１０６）。そして、ステップＳ１０６において抽出されたフック「Ｅ」がパケットリスト１１９にあるか否かが判定される（Ｓ１０８）。フック「Ｅ」とパケットリスト１１９に格納されているパケット３０５のＩＤ「Ｅ」が同一であるため、パケット３０３の参照先が確定したこととなる。したがって、パケットリスト１１９から、ＩＤ「Ｅ」のパケットを取り出して出力ファイル１２１に追記する（Ｓ１１２）。
【００６５】
そして、パケット３０３にフック「Ｅ」以外のフックがない場合には（Ｓ１１４）、パケット３０３がルートパケットであるか否かを判定する（Ｓ１１６）。パケット３０３はルートパケットではないため、パケット３０３のＩＤ「Ｃ」を抽出する（Ｓ１２０）。ステップＳ１２０において抽出したＩＤ「Ｃ」に対応するフックがフックリスト１０９にあるか否かを判定する（Ｓ１２２）。ステップＳ１２２において、ＩＤ「Ｃ」に対応するフックがフックリスト１０９にある場合には、対応するフックをフックリストから削除する（Ｓ１２６）。
【００６６】
図１５に示したように、ＩＤ「Ｃ」に対応するフック「Ｃ」がフックリスト１０９にあったため、フックリスト１０９からフック「Ｃ」を削除する（Ｓ１２６）。これにより、パケット３０３の参照元が確定したこととなるため、パケット３０３を出力ファイル１２１に追記する（Ｓ１１８）。そして、次のパケットがない場合には（Ｓ１２８）、フックリストが空であるか否かを判定する（Ｓ１３０）。ステップＳ１３０において、フックリストが空でなかった場合には、参照関係が確定していないため、参照エラー通知をする（Ｓ１３２）。
【００６７】
次に、パケットリストが空であるか否かを判定する（Ｓ１３４）。ステップＳ１３４において、パケットリストが空でなかった場合には、孤立要素パケットとなるパケットまたはサブツリーがある旨通知する（Ｓ１３６）。以上、本実施形態にかかるファイル構造解析方法について説明した。
【００６８】
本実施形態にかかるファイル構造解析装置１００によれば、複数の個別要素パケットを順次入力し、参照先が未確定の個別要素パケットの外部参照子を外部参照子保持部１０８の外部参照子リスト１０９に一時的に保持する。また、参照元が未確定の個別要素パケットの固有識別子を固有識別子保持部１１８の固有識別子リスト１１９に一時的に保持する。そして、入力された個別要素パケットの参照関係を順次解析して、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子リスト１０９および固有識別子リスト１１９からそれぞれ削除する。
【００６９】
これにより、入力ファイルの木構造を解析する場合に、当該ファイルに含まれる外部参照子や固有識別子のすべてを外部参照子保持部１０９および固有識別子保持部１１９に展開する必要がなくなる。図９〜図１５に示したように、例えば、５つの個別要素パケットでファイルが構成されている場合でも、外部参照子リスト１０９および固有識別子リスト１１９には高々二つ程度の外部参照子や固有識別子が格納されるだけで済む。このように、木構造により構造化されたファイル内部の参照関係を順次に解析するため、ファイルのヘッダメタデータのサイズが大きい場合や構造が複雑な場合でもファイル構造の解析をすることが可能となる。
【００７０】
本実施形態においては、上記したように、すべてのパケットの解析が終了した後に、パケットリストが空でない場合には、孤立パケットを確定したり、サブツリーの最上位パケットを確定したりすることができる。また、フックリストが空でない場合には、存在しない外部参照先を指すフックを有するダングリングフックの検出や、参照先が重複しているなどをエラーとして検出することができる。
【００７１】
（第２実施形態）
ところで、これまで説明した第１実施形態においては、何らかの方法でルート要素を確定させない限り図１６（ａ）に示したような単純ループとなるエラーを検出することができない。上記したＭＸＦファイルにおいては、木構造を解析するシステムのレベルでルート要素が確定できる構成となっているため、図１６（ａ）に示したような単純ループエラーも検出可能であり、第１実施形態のままでも問題はない。しかし一般化された木構造化データ群を解析するファイル構造解析装置としてルート要素が確定されないデータが入力された場合には、図１６（ａ）に示したような単純ループエラーが検出できず、正しくファイル構造を解析することができなくなってしまう。そこで、第２実施形態においては、木構造の参照確定部分を抽象化することにより、複数パケットを合成して、合成パケットにおいて後述する図１６（ｃ）に示したような自己参照している場合に単純ループエラーとしてエラー検出することができるようにした。                                                                                                        
【００７２】
図１６（ｂ）は、複数の個別要素パケットの参照確定部分を抽象化して複数パケットを合成した場合の個別要素パケットを説明する説明図である。図１６（ｂ）に示したように、パケットＡ、Ｂ、Ｃ、Ｄを合成した結果、フック「Ｅ」〜「Ｊ」と実効ＩＤ「Ａ」を有する合成パケットが生成される。すなわち、合成パケットの実行ＩＤが上記した実効的な個別要素パケットの固有識別子となる。また、図１６（ｃ）は、合成パケットにおいて、単純ループエラーとして自己のパケットを参照してしまった場合の個別要素パケットを説明する説明図である。
【００７３】
本実施形態では、上記した単純ループエラーを検出するための処理を追加して、ルート要素が確定していない一般的な木構造化データ群が入力された場合でも、正しくファイル構造を解析することが可能なファイル構造解析装置１００′について説明する。ファイル構造解析装置１００′の機能構成は、第１実施形態にかかるファイル構造解析装置１００とほぼ同様のため、詳細な説明を省略する。
【００７４】
本実施形態においては、フックリスト内のリスト項目に合成パケットの実効ＩＤ（以降、ＩＤｅｆｆとも称する）を持たせ、参照関係が確定次第、パケットのフックのＩＤｅｆｆを適宜更新する。図１７を参照して、ファイル構造解析装置１００′のファイル構造解析方法において追加されるエラー処理について説明する。図１７に示したように、追加される処理は、参照確定ＩＤまたはフックをＩＤｅｆｆとするフックがフックリスト１０９にあるか否かを判定する（Ｓ１４２）。ステップＳ１４２において、参照確定ＩＤまたはフックをＩＤｅｆｆとするフックがフックリスト１０９にある場合には、該当するＩＤｅｆｆを参照確定後のＩＤｅｆｆに更新する（Ｓ１５０）。
【００７５】
そして、ＩＤｅｆｆとフックが同一であった場合（Ｓ１４８）には、図１６（ｃ）に示したように合成パケットとして自己のパケットを参照することに相当するのでループエラーである旨の通知をする（Ｓ１４６）。ステップＳ１４２において、参照確定ＩＤまたはフックをＩＤｅｆｆとするフックがフックリストになかった場合には、該当パケットを出力ファイル１２１に追記する（Ｓ１４４）。なお、ステップＳ１４４における出力ファイル１２１への追記は、図８のステップＳ１１２及びＳ１１８に相当するものであって、当該エラー処理として新たに追加される処理ではない。
【００７６】
次に、図１８に基づいて、本実施形態にかかるファイル構造解析装置１００′のファイル構造解析方法を説明する。図１８は、本実施形態にかかるファイル構造解析方法を示すフローチャートである。なお、図１８のファイル構造解析方法の説明に際し、第１実施形態と同様の処理については、第１実施形態と同様の処理番号を付して説明を省略する。以下、ファイル構造解析方法の説明に際し、図１９〜図２９の具体例を適宜参照する。図１９〜図２９は、ファイル構造解析方法を具体的に説明する説明図である。
【００７７】
まず、図１８および図１９を参照して、１番目のパケット４０２が読み出された場合について説明する。まず、パケット４０２が読み出される（Ｓ１０２）。パケット４０２にフックがある場合に（Ｓ１０４）、当該フック「Ｃ」を抽出し（Ｓ１０６）、パケットリストに該フックを参照するパケットがあるか否かを判定する（Ｓ１０８）。ステップＳ１０８においてパケットリストに該フックを参照するパケットがない場合には、当該フック「Ｃ」をフックリストへ登録する（Ｓ１１０）。そして、パケット４０２のＩＤ「Ｂ」を抽出し（Ｓ２１２）、ステップＳ２１２において抽出したＩＤをＩＤｅｆｆとしてステップＳ２１０において登録した「Ｃ」と対にしてＩＤｅｆｆ「Ｂ」を登録する（Ｓ２１４）。
【００７８】
パケット４０２に残りのフックがあるか否かを判定し（Ｓ１１４）、フック「Ｄ」についてもフック「Ｃ」と同様の処理を行う（Ｓ１０６〜Ｓ１１０、Ｓ２１２、Ｓ２１４、Ｓ１１４）。次に、パケット４０２がルートパケットであるか否かを判定する（Ｓ１１６）。パケット４０２はルートパケットではないため、パケット４０２のＩＤ「Ｂ」を抽出し、ＩＤ「Ｂ」に対応するフックがフックリストにあるか否かを判定する（Ｓ１２２）。ステップＳ２３２においてＩＤ「Ｂ」に対応するフックがフックリストにないと判定された場合には、パケット４０２をパケットリスト１１９に保持する（Ｓ１２４）。
【００７９】
次に、図１８および図２０を参照して、２番目のパケット４０５が読み出された場合について説明する。まず、２番目のパケット４０５が読み出され（Ｓ１０２）、フックがあるか否かが判定されて（Ｓ１０４）、パケット４０５のフック「Ａ」が抽出される（Ｓ１０６）。そして、ステップＳ２０６において抽出されたフック「Ａ」がパケットリスト１１９にないため（Ｓ１０８）、フック「Ａ」をフックリスト１０９に登録する（Ｓ１１０）。そして、パケット４０５のＩＤ「Ｅ」を抽出し（Ｓ２１２）、ステップＳ２１２において抽出したＩＤをＩＤｅｆｆとしてステップＳ２１０において登録した「Ａ」と対にしてＩＤｅｆｆ「Ｅ」を登録する（Ｓ２１４）。そして、パケット４０５のＩＤ「Ｅ」についても、パケット４０２のＩＤ「Ｂ」と同様に、パケットリスト１１９に保持する（Ｓ１２４）。
【００８０】
次に、図１８および図２１を参照して、３番目のパケット４０４が読み出された場合について説明する。３番目に読み出されたパケット４０４にはフックがないため、図１８のステップＳ２０４においてパケットのフックがないと判断されて、ステップＳ２２８の判断がなされる。パケット４０４はルートパケットではないため（Ｓ１１６）、パケットのＩＤ「Ｄ」が抽出される（Ｓ１２０）。そして、ステップＳ２３０において抽出されたＩＤ「Ｄ」に対応するフックがフックリスト１０９にあるか否かが判定される（Ｓ１２２）。
【００８１】
フックリスト１０９には、パケット４０２のフック「Ｄ」が格納されている。したがって、ステップＳ１２２において、パケット４０４のＩＤに対応するフックがフックリスト１０９にあると判定される。次に、ＩＤ「Ｄ」をＩＤｅｆｆとするフックがフックリストにあるか否かを判定する（Ｓ１４２）。ＩＤ「Ｄ」がＩＤｅｆｆとするフックはフックリストにないため、ＩＤ「Ｄ」に対応するフック「Ｄ（Ｂ）」をフックリストから削除する（Ｓ１２６）。これにより、パケット４０４の参照元が確定したこととなり、パケット４０４が出力ファイル１２１に追記される（Ｓ１１８）。そして、次のパケットがあれば（Ｓ１２８）、次のパケットが読み出される（Ｓ１０２）。
【００８２】
図１８、図２２〜２６を参照して、４番目のパケット４０１が読み出された場合について説明する。まず、４番目のパケット４０１が読み出され（Ｓ１０２）、フックがあるか否かが判定されて（Ｓ１０４）、パケット４０１のフック「Ｂ」が抽出される（Ｓ１０６）。そして、ステップＳ２０６において抽出されたフック「Ｂ」に対応するＩＤがパケットリスト１１９にあるため（Ｓ１０８）、フック「Ｂ」をＩＤｅｆｆとするフックがフックリスト１０９にあるか否かを判定する（Ｓ１４２）。フックリスト１０９にＩＤｅｆｆを「Ｂ」とするフック「Ｃ（Ｂ）」があるため、ＩＤｅｆｆ「Ｂ」を読出しパケットのＩＤ「Ａ」に更新する（Ｓ１５０）。図２２は、フック「Ｃ」がもつＩＤｅｆｆ「Ｂ」を読出しパケットの実効ＩＤ「Ａ」に更新した場合を示す説明図である。
【００８３】
そして、ＩＤｅｆｆとフックが同一か否かを判定する（Ｓ１４８）。ステップＳ２２６において更新したＩＤｅｆｆは「Ａ」であり、フックは「Ｃ」であるから、再度ステップＳ１４２に移って次のフックのＩＤｅｆｆについての判定を行う。図２２のフックリスト１０９においてはもはやフック「Ｂ」をＩＤｅｆｆとするフックは存在しない（Ｓ１４２）ので、パケット４０１の参照先であるパケット４０２をパケットリスト１１９から取り出して出力ファイル１２１に追記する（Ｓ１１２）。図２３は、ＩＤ「Ｂ」のパケット４０２を出力ファイル１２１に追記した場合を示す説明図である。
【００８４】
そして、パケット４０１にフック「Ｂ」以外のフックがない場合には（Ｓ１１４）、  パケット４０１がルートパケットであるか否かを判定する（Ｓ１１６）。本実施形態においては、第１実施形態とは異なり、パケット４０１がルート要素であることを判別するいかなる方法も有しないため、ステップ１１６において、パケット４０１はルートパケットではないと判断されて、パケット４０１のＩＤ「Ａ」を抽出する（Ｓ１２０）。ステップＳ２３０において抽出したＩＤ「Ａ」に対応するフックがフックリスト１０９にあるか否かを判定する（Ｓ１２２）。フックリスト１０９にＩＤ「Ａ」に対応するフックがあるため、次に、ＩＤ「Ａ」をＩＤｅｆｆとするフックがフックリスト１０９にあるか否かを判定する（Ｓ１４２）。
【００８５】
フックリスト１０９にＩＤｅｆｆを「Ａ」とするフック「Ｃ（Ａ）」があるため、当該ＩＤｅｆｆ「Ａ」を、パケット４０１のＩＤ「Ａ」に対応するフック「Ａ（Ｅ）」のＩＤｅｆｆ「Ｅ」に更新して、「Ｃ（Ｅ）」とする（Ｓ１５０）。図２４は、フックリスト１０９のフック「Ｃ（Ａ）」のＩＤｅｆｆを「Ｅ」に変更してフック「Ｃ（Ｅ）」とした場合を示す説明図である。
【００８６】
そして、更新したＩＤｅｆｆ「Ｅ」とフック「Ｃ」が同一か否かを判定する（Ｓ１４８）。ステップＳ２４４において更新したＩＤｅｆｆは「Ｅ」であり、フックは「Ｃ」であるから、再度ステップＳ１４２に移って次のフックのＩＤｅｆｆについての判定を行う。パケット４０１のＩＤ「Ａ」をＩＤｅｆｆとするフックがフックリストになければ（Ｓ１４２）、パケット４０１のＩＤ「Ａ」に対応するフック「Ａ（Ｅ）」をフックリスト１０９から削除して（Ｓ１２６）、パケット４０１を出力ファイル１２１に追記する（Ｓ１１８）。図２５は、ＩＤ「Ａ」のパケット４０１を出力ファイル１２１に追記した場合を示す説明図である。そして、次のパケットがある場合には（Ｓ１２８）、次のパケットの読出しを行う（Ｓ２０２）。
【００８７】
図１８、図２６〜図２９を参照して、５番目のパケット４０３が読み出された場合について説明する。まず、５番目のパケット４０３が読み出され（Ｓ１０２）、フックがあるか否かが判定されて（Ｓ１０４）、パケット４０３のフック「Ｅ」が抽出される（Ｓ１０６）。そして、ステップＳ２０６において抽出されたフック「Ｅ」がパケットリスト１１９にあるため（Ｓ１０８）、フック「Ｅ」をＩＤｅｆｆとするフックがフックリスト１０９にあるか否かを判定する（Ｓ１４２）。フックリスト１０９にＩＤｅｆｆを「Ｅ」とするフック「Ｃ（Ｅ）」があるため、ＩＤｅｆｆ「Ｅ」を読出しパケットのＩＤ「Ｃ」に更新する（Ｓ１５０）。図２６は、パケットリスト４０３が読み出された場合の説明図であり、図２７は、フック「Ｃ」のＩＤｅｆｆ「Ｅ」を読出しパケットのＩＤ「Ｃ」に更新した場合を示す説明図である。
【００８８】
そして、ＩＤｅｆｆとフックが同一か否かを判定する（Ｓ２２４）。ステップＳ２２６において更新したＩＤｅｆｆは「Ｃ」であり、フックは「Ｃ」で同一であるから、ループエラー通知をする（Ｓ２２２）。そして、他にパケット４０３のフック「Ｅ」をＩＤｅｆｆとするフックがフックリスト１０９になければ（Ｓ１４２）、パケット４０３の参照先であるパケット４０５をパケットリスト１１９から取り出して出力ファイル１２１に追記する（Ｓ１１２）。図２８は、ＩＤ「Ｅ」のパケット４０５を出力ファイル１２１に追記した場合を示す説明図である。
【００８９】
そして、パケット４０３にフック「Ｅ」以外のフックがない場合には（Ｓ１１４）、パケット４０３がルートパケットであるか否かを判定する（Ｓ１１６）。パケット４０３はルートパケットではないため、パケット４０３のＩＤ「Ｃ」を抽出する（Ｓ１２０）。ステップＳ２３０において抽出したＩＤ「Ｃ」に対応するフックがフックリスト１０９にあるか否かを判定する（Ｓ１２２）。フックリスト１０９にＩＤ「Ｃ」に対応するフックがあるため、次にＩＤ「Ｃ」をＩＤｅｆｆとするフックがフックリスト１０９にあるか否かを判定する（Ｓ１４２）。
【００９０】
フックリスト１０９にＩＤｅｆｆを「Ｃ」とするフック「Ｃ（Ｃ）」があるが、自己参照フックは除かれるため（Ｓ１４２）、パケット４０３のＩＤ「Ｃ」に対応するフック「Ｃ（Ｃ）」をフックリストから削除して（Ｓ１２６）、ＩＤ「Ｃ」のパケット４０３を出力ファイル１２１に追記する（Ｓ１１８）。図２９は、フックリスト１０９からフック「Ｃ（Ｃ）」が削除されて、出力ファイル１２１に追記された場合を示す説明図である。
【００９１】
そして、次のパケットがない場合には（Ｓ１２８）、フックリストが空であるか否かを判定する（Ｓ１３０）。ステップＳ２５０において、フックリストが空でなかった場合には、参照関係が確定していないため、参照エラーを通知する（Ｓ１３２）。次に、パケットリストが空であるか否かを判定する（Ｓ１３４）。ステップＳ２５４において、パケットリストが空でなかった場合には、孤立要素となるパケットまたはサブツリーがある旨通知する（Ｓ１３６）。以上、本実施形態にかかるファイル構造解析方法について説明した。
【００９２】
本実施形態にかかるファイル構造解析装置１００′によれば、第１実施形態にかかるファイル構造解析装置１００と同様に、複数の個別要素パケットを順次入力し、参照先が未確定の個別要素パケットの外部参照子を外部参照子保持部１０８の外部参照子リスト１０９に一時的に保持する。また、参照元が未確定の個別要素パケットの固有識別子を固有識別子保持部１１８の固有識別子リスト１１９に一時的に保持する。そして、入力された個別要素パケットの参照関係を順次解析して、参照関係が確定した度に個別要素パケットの外部参照子および固有識別子を外部参照子リスト１０９および固有識別子リスト１１９からそれぞれ削除する。
【００９３】
さらに、本実施形態においては、外部参照子保持部１０８の外部参照子リスト１０９に外部参照子と当該外部参照子を有する（合成された）実効的な個別要素パケットの固有識別子（実効的な固有識別子）とを対にして保持する。そして、参照関係が確定した場合に、外部参照子と対にして保持した実効的な固有識別子を、参照元の個別要素パケットの実効的な固有識別子に変更する。ここで実効的な固有識別子とは、参照関係に基づいて個別要素パケットが合成された場合の上位の個別要素パケットの固有識別子をいう。これにより、ルート要素を判別する方法が提供されていない場合においても、合成パケットにおいて自己参照している場合にループエラーを検出することができる。よって、個別要素パケットの外部参照子や固有識別子のすべてを展開することなく、ファイル内部の木構造をより正確に解析することが可能となる。
【００９４】
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【図面の簡単な説明】
【００９５】
【図１】本発明の第１の実施形態にかかるファイル構造解析装置の機能構成を示すブロック図である。
【図２】同実施形態にかかるＭＸＦファイルのファイル構成について説明する説明図である。
【図３】同実施形態にかかるＭＸＦファイルにおけるファイルヘッダのデータ構造について説明する説明図である。
【図４】同実施形態にかかるＭＸＦファイルにおけるファイルボディのデータ構造について説明する説明図である。
【図５】同実施形態にかかるＭＸＦファイルにおけるプロダクションフレームワークに基づくＤＭインスタンスの一例を説明する説明図である。
【図６】木構造を構成する個別要素パケットの種類について説明する説明図である。
【図７】木構造化エラーとして検出すべき個別要素パケットについて説明する説明図である。
【図８】同実施形態にかかるファイル構造解析方法を示すフローチャートである。
【図９】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１０】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１１】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１２】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１３】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１４】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１５】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図１６】本発明の第２の実施形態にかかる同実施形態にかかるループエラー検出方法について説明する説明図である。
【図１７】同実施形態にかかるファイル構造解析方法において追加されるエラー処理を示すフローチャートである。
【図１８】同実施形態にかかるファイル構造解析方法を示すフローチャートである。
【図１９】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２０】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２１】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２２】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２３】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２４】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２５】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２６】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２７】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２８】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【図２９】同実施形態にかかるファイル構造解析方法を具体的に説明する説明図である。
【符号の説明】
【００９６】
１００    ファイル構造解析装置
１０２    個別要素パケット（パケット）入力部
１０４    個別要素パケット（パケット）解析部
１０６    個別要素パケット（パケット）一時記憶部
１０８    外部参照子（フック）保持部
１１２    参照関係解析部
１１８    固有識別子（ＩＤ）保持部
【図１】
0004513876.tif 000002
【図２】
0004513876.tif 000003
【図３】
0004513876.tif 000004
【図４】
0004513876.tif 000005
【図５】
0004513876.tif 000006
【図６】
0004513876.tif 000007
【図７】
0004513876.tif 000008
【図８】
0004513876.tif 000009
【図９】
0004513876.tif 000010
【図１０】
0004513876.tif 000011
【図１１】
0004513876.tif 000012
【図１２】
0004513876.tif 000013
【図１３】
0004513876.tif 000014
【図１４】
0004513876.tif 000015
【図１５】
0004513876.tif 000016
【図１６】
0004513876.tif 000017
【図１７】
0004513876.tif 000018
【図１８】
0004513876.tif 000019
【図１９】
0004513876.tif 000020
【図２０】
0004513876.tif 000021
【図２１】
0004513876.tif 000022
【図２２】
0004513876.tif 000023
【図２３】
0004513876.tif 000024
【図２４】
0004513876.tif 000025
【図２５】
0004513876.tif 000026
【図２６】
0004513876.tif 000027
【図２７】
0004513876.tif 000028
【図２８】
0004513876.tif 000029
【図２９】
0004513876.tif 000030