JP4086253B1 - Xml文書の処理方法および処理プログラム - Google Patents

Xml文書の処理方法および処理プログラム Download PDF

Info

Publication number
JP4086253B1
JP4086253B1 JP2006352851A JP2006352851A JP4086253B1 JP 4086253 B1 JP4086253 B1 JP 4086253B1 JP 2006352851 A JP2006352851 A JP 2006352851A JP 2006352851 A JP2006352851 A JP 2006352851A JP 4086253 B1 JP4086253 B1 JP 4086253B1
Authority
JP
Japan
Prior art keywords
row
column
data
xml document
tag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006352851A
Other languages
English (en)
Other versions
JP2008165403A (ja
Inventor
清 高木
Original Assignee
清 高木
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 清 高木 filed Critical 清 高木
Priority to JP2006352851A priority Critical patent/JP4086253B1/ja
Application granted granted Critical
Publication of JP4086253B1 publication Critical patent/JP4086253B1/ja
Publication of JP2008165403A publication Critical patent/JP2008165403A/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Document Processing Apparatus (AREA)

Abstract

【課題】XML文書の文書内容の把握・参照、XML文書の作成・編集を容易にし、XML文書の構造変換、非構造化文書のXML文書化、および等価ファイルの作成を行う。
【解決手段】対象とするXML文書から取得したパス情報を表見出しとし、XML文書の文書内容を等価テーブルに展開する。ブロック型展開方法は、要素による入れ子をブロックによる入れ子として展開する。展開方法に対応した復元方法によって、等価テーブルからXML文書を復元する。ブロック型展開方法・ブロック型復元方法の定位置性を利用して、XML文書の構造変換、非構造化文書のXML文書化を行う。また、配置テーブルから配置データを検出し、1次元配列に整理し、パス情報を含めて等価ファイルを作成する。XML文書の文書内容の把握・参照、XML文書の作成・編集を容易にし、XML文書の構造変換、非構造化文書のXML文書化、および等価ファイルの作成を行う。
【選択図】図20

Description

本発明は、XML文書の処理方法および処理プログラムに関する。特に、XML文書を等価テーブルに展開する方法、等価テーブルからXML文書を復元する方法、XML文書の構造変換、非構造化文書のXML文書化、および等価ファイルの作成を行うための方法に関するものである。
構造化文書は、論理構造をもつ文書や木構造データを表現し、またコンピュータで取り扱うために、タグによってマークアップされた文書である。タグは、要素内容を説明するとともに、要素の入れ子関係を明確にする。主な構造化文書として、1986年にISO(International Standard Organization)で規格化されたSGML(Standard Generalized Markup Language)と、1998年にW3C(World Wide Web Consortium)で規格化されたXML(Extensible Markup Language)とがある。インターネットの普及に伴って事実上標準となったHTML(HyperText Markup Language)は、SGMLの応用言語である。
XMLは、SGMLを簡素化した規格であり、特徴的な相違点は次のとおりである。
1)SGMLの仕様では、省略タグ機構あるいは短縮タグ機構を、SGML宣言および文書型定義DTD(Document Type Definition)で定義する。しかし、XMLの仕様では、これらの機構を削除している。
2)SGMLの仕様では、省略タグ機構あるいは短縮タグ機構を認めているため、DTDが必須となる。XMLの仕様では、DTDなどのスキーマを明示しないあるいはスキーマに基づいていない「整形式XML文書(Well-formed XML)」を認めている。
XMLのDTDは、文書で使用することのできるタグ名や属性、要素の出現順序、要素の出現回数などを規定する。ただし、DTDは、XML文書と書式が相違すること、データ型を規定していないこと、および名前空間に非対応であることなどに弱点がある。このため、W3Cによる「XML Schema」、OASIS(Organization for the Advancement of Structured Information Standards)による「RELAX NG」などのスキーマ言語が、規格化されている。
これらのスキーマに基づいた「妥当なXML文書(Valid XML)」は、文書の解釈が一意となり、文書の処理を確実に行うことができる。また、「整形式XML文書」の場合でも、文書の解釈に不確実性は生じない。このような背景から、異なる組織間やシステム間で、文書中心型のXML文書とともに、データ中心型のXML文書による情報交換も増加している。
XML文書を取り扱う上で、文書の表示、作成または構造変換などの操作や処理を速やかに行えることが重要となる。W3Cでは、XML文書を取り扱う技術の標準化を進めている。主要な勧告の概要は下記のとおりである。
1)DOM(Document Object Model);XML文書の参照や作成などの各種処理を目的とするアプリケーションインターフェース。
2)XPath(XML Path Language);XML文書の特定部分を経路(パス)と順序を指定するための言語。
3)XSLT(XSL Transformations);XML文書の文書構造を変換するための言語。
上記の勧告では、いずれもXML文書を順序ありの木構造データとして取り扱っている。特にDOMは、要素や属性などをDOM木の枝または葉部分に忠実に展開し、要素と木構造とを1対1の密な関係で保持している。
一方で、XML文書を従来のプログラムやシステムで取り扱うために、XML文書を木構造データ以外のデータに変換する技術が開発されている。
たとえば、一部の表計算ソフトウェアでは、XML文書の内容をワークシートに展開する方法がある。マイクロソフト社製Excel2003は、XML文書をワークシートに展開する機能(特許文献1参照)、およびワークシートをXML文書として出力する機能を含んでいる。XML文書中のデータを概観する際は、簡単かつ有効な手段である。ただし、当該ソフトウェアのヘルプ情報によると、XML文書の出力に関して多くの制約が示されている。
特開2004−265405号公報
XML文書を木構造データとして取り扱う上記従来技術では、下記の問題点を含む。
1)木構造データは、配列に比べ複雑なデータ構造であり、木構造データを取り扱うプログラムは一般に複雑なものとなる。
2)DOMを用いる処理は、XML文書の全データをDOM木に展開するために、文書サイズよりも大きなメモリ量が必要となる。また、文書サイズによっては展開あるいは復元などの処理に多大な時間を要する場合がある。したがって、処理装置のハードウェア資源に応じた、DOMで取り扱うことができる文書サイズの上限が存在することになる。
また、上記XML文書の内容をワークシートに展開する機能やワークシートの内容をXML化して出力する機能を備えた表計算ソフトウェアは、XML文書中のデータを概観するのには便利であるが、混合内容モデルを含むXML文書を展開した際に一部のデータが欠落することや、展開の過程で一部のデータの出現順序が失われることがあるため、展開したXML文書を、展開前の状態に復元できるとは限らない。
本発明は、上記問題に鑑みてなされたものであって、その第1の目的は、ユーザがXML文書を取り扱う際に、文書内容の把握・参照、あるいはXML文書の作成・編集を容易にするために、XML文書から等価テーブルに展開する方法、および等価テーブルからXML文書を復元する方法を提供することにある。また、第2の目的は、さらに、展開した等価テーブルの特徴を利用して、XML文書の構造変換、非構造化文書のXML文書化、および等価ファイルの作成を行うための方法を提供することにある。
本発明の第1の視点によれば、コンピュータが、所定の記憶装置に格納した処理プログラムを実行することにより、所定の記憶装置から処理対象とするXML文書を読み込み、該XML文書に含まれる要素の入れ子関係を整理し、階層の深さを示す階層値と、タグ名とからなるパス情報を取得するステップと、前記コンピュータが、前記処理プログラムにより、前記パス情報を列(行)見出しとするテーブルを作成するステップと、前記コンピュータが、前記処理プログラムにより、前記XML文書に含まれる要素から、該要素に応じた配置データを作成し、該要素のパスと前記パス情報との関係および前記要素の出現順序により、前記テーブルにおける前記配置データを格納すべき位置を決定し、前記配置データを前記テーブルの前記位置に格納するステップと、前記コンピュータが、前記処理プログラムにより、前記パス情報、前記テーブルに配置データを展開したテーブルの範囲および前記テーブルを関連付けて保存するステップと、を含むことを特徴とするXML文書展開方法およびこのXML文書展開方法をコンピュータで実施するためのプログラムが提供される。
本発明の第2の視点によれば、コンピュータが、所定の記憶装置に格納した処理プログラムを実行することにより、所定の記憶装置から、上記したXML文書展開方法によって展開されたテーブルと、該XML文書を復元する際に用いるタグ名と階層の深さを示す階層値を示すパス情報と、XML文書を復元する前記テーブルの復元範囲と、を読み出すステップと、前記コンピュータが、前記処理プログラムにより、前記テーブルの復元範囲から該テーブルに格納された配置データを検出し、前記配置データの内容と配置位置から前記配置データのタグ付けを行い、XML文書を復元するステップと、を含むことを特徴とするXML文書復元方法およびこのXML文書復元方法をコンピュータで実施するためのプログラムが提供される。
前記各方法をより具体的に示せば、次のとおりである。XML文書の文書構造を反映したパス情報を表見出しとする。パス情報は、対象とするXML文書から取得する。XML文書が順序固定型スキーマに基づく場合、パス情報を当該スキーマから取得してもよい。
表計算ソフトウェアを利用する場合、パス情報を見出し情報とする配置テーブルをワークシートに設定することができる。パス情報および配置データを表示する必要がない場合、メモリ上に2次元配列の配置テーブルを設定し、パス情報とは要素番号で対応付けすることもできる。最終的に得られる等価テーブルは、たとえば、パス情報、展開範囲および配置テーブルで構成される。なお、対象とするXML文書は、処理を簡素化するために整形し、構文リストに格納しておくことが望ましい。
非終端要素についてはノードマークを配置データとし、終端要素については要素内容を配置データとする。各要素のパスとパス情報から要素番号を特定し、要素番号に対応する配置列に配置データを配置する。属性、タグ間文字データまたはコメント系データは、開始タグと終了タグに付随するデータとみなし、配置データに付加することができる。
本発明の一具体例であるライン型展開方法は、すべてのXML文書を対象とし、XML文書の文書内容をその記述順序で等価テーブルに展開する方法であり、配置行は、配置済みデータが新たな配置データによって上書きされる場合に改行する。ライン型復元方法は、前記等価テーブルを列方向に走査しXML文書を復元する方法である。
本発明の別の具体例であるブロック型展開方法は、順序固定型XML文書を対象とし、要素による入れ子をブロックによる入れ子として等価テーブルに展開する方法である。まず、開始タグに対応する終了タグから要素(部分木)を特定し、当該要素から子要素を識別し、第1子要素を親要素と同じ配置行に配置し、第2子以降の子要素を兄要素の配置行の次行に配置する。この際、さらに子孫要素を含む子要素については、兄弟要素よりも子孫要素を優先して配置する。
ブロック型復元方法は、前記ブロックによる入れ子構造から、XML文書(=要素による入れ子構造)を復元する方法であり、子ブロックを含むブロックについては、兄弟ブロックよりも子ブロックを優先して復元する。具体的には、まず、対象とするブロックに対して、終端要素が出現するまで列分割処理と行分割処理とを繰り返し分割する。行分割処理の過程で、ノードマークを含む配置データが出現する際に開始タグを出力し、ノードマークを含まない配置データが出現する際にその配置データを開始タグと終了タグで囲み出力し、行分割処理から戻る際に終了タグを出力する。さらに、ブロック中に未処理範囲が残存する場合、未処理範囲を新たなブロックとしさらに分割する。
XML文書を展開する際に、展開する必要のない要素については、パス情報から当該要素およびその子孫要素を削除することによって、展開する必要のない要素を連結し展開することができる。
また、ブロック型展開方法とブロック型復元方法を利用することにより、XML文書の構造変換も容易化される。このXML文書の構造変換は、変換元のパス情報と変換先のパス情報について、対応する要素番号を用いて対応付けを行い、変換時に対応する要素番号を元に、変換元となる要素番号の列から変換先となる要素番号の列に複写することによって、変換先の等価テーブルを作成する。
また、ブロック型展開方法とブロック型復元方法を利用することにより、ワークシート上の定形書式の文書やデータからXML文書を作成することも容易化される。このワークシート上の定形書式の文書やデータからXML文書を作成する際は、等価テーブルとリンク対応付けする。また、逆方向のリンク対応付けによって、XML文書内容をワークシート上の所定位置に表示することができる。CSV形式ファイルに代表される定形ファイルからXML文書を作成する際は、定形ファイルのデータを、等価テーブルとリンク対応付けされた一定の領域に再配置する。
本発明の第3の視点によれば、XML文書に復元可能なデータ構造が提供される。2次元の配置テーブルを1次元化するために、配置テーブルを横方向/縦方向のいずれかを優先して走査し、配置データを検出し、要素番号、行番号および配置データを各々の1次元配列に格納し等価データとする。また、パス情報と等価データとから等価ファイルを作成する。
本発明によれば、XML文書の文書構造を規定するスキーマの有無、およびXML文書の階層の深さにかかわらず、XML文書の文書構造を配列に格納するとともに、XML文書の文書内容を別の配列に格納するため、文書構造の配列と文書内容の配列とを独自に取り扱うことが可能となる。これにより、XML文書を処理するプログラムを、より簡素かつ効率的なものとすることができる。
その理由は、たとえば、XML文書の文書内容が、もともと1つまたは複数のリストまたはテーブルのデータから構成されている場合、木構造データとして処理するプログラムよりも、1つまたは複数の配列として処理するプログラムが、使用メモリおよび処理速度の面で有利となることにある。
本発明によればさらに、XML文書の文書構造と文書内容とを格納した配列からXML文書を復元することが可能となる。これにより、XML文書の作成などの各種処理をより簡素化することができる。
たとえば、ユーザは、XML文書が展開された等価テーブルの配置データをもとに、当該XML文書の文書内容を参照することができる。また、等価テーブルの配置データを、作成あるいは編集することによって、新たなXML文書を作成することができる。
また、ブロック型展開方法とブロック型復元方法による配置データの定位置性を利用して、XML文書の構造変換を行うことができ、1つのXML文書から関連する1つまたは複数のXML文書を作成することができる。さらに、表計算ソフトウェアのリンク機能を用いることによって、非構造化文書のXML文書化を行うことができる。
また、配置テーブルから配置データを検出し、1次元配列の等価データを作成することができる。さらに、パス情報と等価データとからCSV形式の等価ファイルを作成することができる。等価ファイルを用いることによって、XML文書を処理するプログラムは簡素になる。また、等価ファイルは、一部のXML文書を除き、元のXML文書よりも小さなファイルサイズとなり、圧縮効果が認められる。
以下では、本発明の具体的な実施の形態について、XML文書を構造化文書の代表として、図面を参照しながら詳細に説明する。各図面において、同一の構成要素は同一の符号とする。なお、パス情報と2次元配列との内容については、表計算ソフトウェアのワークシート上にパス情報と2次元配列との領域を有する等価テーブルを用いて示す。
図1は、本発明を実現するためのコンピュータの一例を模式的に示す図である。コンピュータは、演算装置(CPU)101、主記憶装置(メインメモリ;RAM)102、不揮発性記憶装置(ROM)103、ハードディスク装置等の外部記憶装置104、キーボード、マウス等の入力装置105、液晶ディスプレイやCRT等の表示装置106、および通信制御装置107を備える。各装置は、バス108を介して相互に接続される。外部記憶装置104としては、代表的にはハードディスク装置であるが、フロッピー(登録商標)ディスクドライブ、光磁気記憶装置、着脱可能な半導体記憶装置、あるいは通信制御装置107を介してネットワーク上のコンピュータの外部記憶装置としてもよい。
外部記憶装置104等の記憶装置には、本発明を実現するための処理プログラム、解析済みパス情報、パス情報対応表、および処理対象とするXML文書等のデータを格納しておき、実行時に記憶装置から呼び出し、当該プログラムをCPU101で実行すればよい。また、各種の変数や配列は、CPU101の作業領域として使用可能な主記憶装置RAM102に保持し、処理対象のXML文書や等価ファイルは、外部記憶装置104等に保持すればよい。
なお、コンピュータは、文書またはデータを作成することなどの処理が可能な情報処理装置であればよく、パーソナルコンピュータ(PC)のほかに、メインフレームコンピュータ、携帯電話、携帯端末(PDA)、プログラム可能な計測装置や電化製品などの各種コンピュータが含まれる。
本発明によるXML文書の処理方法について、以下の実施例に区分して説明する。ここで、実施例1から3は、XML文書と等価テーブルとの変換方法を示し、実施例4から8は、等価テーブルを用いて行う編集処理などの応用例を示す。
実施例1:XML文書の概要および展開のための準備処理
実施例2:ライン型展開方法およびライン型復元方法
実施例3:ブロック型展開方法およびブロック型復元方法
実施例4:等価テーブルを用いた解析・編集方法
実施例5:展開時の連結処理
実施例6:XML文書の構造変換
実施例7:非構造化文書のXML文書化方法
実施例8:等価ファイルの作成方法
(1)XML文書の概要および展開のための準備処理
本願では、XML文書を等価テーブルに展開する際に、要素の出現順序を確保する方法として、後述するライン型展開方法およびブロック型展開方法の2方法を開示する。これら展開方法の詳細については後述するものとして、ここでは、XML文書の概要を示すとともに、XML文書を展開するための準備処理および展開後の後処理について説明する。具体的には、展開時に用いるパス情報、パス情報の取得方法、配置データの記述方法、等価テーブルの構成、および共通する準備処理と後処理のフローについて説明する。
(1.1)XML文書の概要
始めにXMLの基本的な用語を説明し、簡単なXML文書についての解釈例を示す。
(1.1.1)要素
要素は、開始タグと終了タグとの間に要素内容を含む。要素内容には、文字データまたは要素を複数含むことができる。このため要素は、複数の子要素を入れ子として含むことができる。XMLの仕様では、要素は以下のように定義される(省略可能な空白文字を省く)。ここで、カンマ(",")は連続的な接続を示し、バー("|")は選択を示す。また、アスタリスク("*")は複数の繰り返しを示す。なお、本願では、名前空間を示す接頭辞はタグ名に含まれるものとする。
要素 = (開始タグ,要素内容,終了タグ)|空要素
開始タグ = "<",タグ名,属性*,">"
属性 = " ",属性名,"=","属性値"
要素内容 = 文字データ|要素*
終了タグ = "</",タグ名,">"
空要素 = (開始タグ,終了タグ)|("<",タグ名,属性*,"/>")
要素以外に、コメント、CDATAセッションおよび処理命令があり、以下の書式で記述される。本願では、これらを「コメント系データ」と一括して取り扱う。
コメント = "<!−−",コメント内容,"−−>"
CDATAセッション = "<![CDATA[",内容,"]]>"
処理命令 = "<?",処理対象," ",処理内容,"?>"
(1.1.2)内容モデル
XMLの内容モデルは、複数の要素を"A,B,・・,Z"のように展開した形で示すと次の内容モデルに区分される。
a)要素内容モデル:子要素として要素のみを含むモデルである。なお、本願では、要素内容モデルを順序固定性の観点より、下記のように順序型の要素内容モデルと選択型の要素内容モデルに細区分する。両者を組み合わせた型については、選択型の要素内容モデルとする。
a−1)順序型:A=(B,C,・・,Z)
a−2)選択型:A=(B|C|・・|Z)、A=(B,(C|D),・・Z)
b)混合内容モデル:子要素に文字データと混在してほかの要素を含むモデルである。子要素に自己の要素を含む場合、再帰的に出現する要素となる。
A=(#PCDATA,A|B|C|・・|Z)*
c)任意内容モデル:子要素として要素型宣言で宣言した要素や文字データを含むモデルである。
A="ANY"=(#PCDATA|宣言した要素)*
d)空要素:子要素として何も含まないモデルである。
A="ENPTY"
なお、文字データからのみなるモデル(たとえば、B=(#PCDATA))は、要素内容モデル、混合内容モデルおよび任意内容モデルに伴って出現する。
(1.1.3)XML文書例
次に簡単なXML文書の例(文書例1)を示す。ここで、要素をA,B,・・、要素に対応するタグ名をa,b,・・、また文字データをt1,t2,・・とする。
<a Doc="Sample1">t1<b>t2<c>t3</c>t4</b>t5<d>t6</d>t7</a>
XML文書では、改行を含まない1行のXML文書、あるいは開始タグや要素内容の途中での改行など、多様な記述が許される。これは、スペース、タブ、改行および復帰の文字コードをすべて空白文字として取り扱っている。このため、XML文書の解釈・解析を行うにあたっては、XML文書を等価かつ取り扱いやすい書式で整形しておくことが望ましい。文書例1は、改行文字と字下げの文字を無視した場合、下記の表現と等価である。
<a Doc="Sample1">t1
<b>t2
<c>t3</c>t4
</b>t5
<d>t6</d>t7
</a>
文書例1の各要素は、下記の要素内容、属性および子要素を含むものとして解釈される。ここで、角括弧内の数値は階層の深さ(以下、「階層値」と記す)を示す。
要素A[1]:属性:Doc="Sample1",t1,要素B,t5,要素D,t7
要素B[2]:t2,要素C,t4
要素C[3]:t3
要素D[2]:t6
(1.1.4)パス
XML文書の特定部分に対する経路と順序を指定するXPathでは、下記のように記述される。
ロケーションステップ="軸","ノードテスト",0回以上の"[述部]"
ロケーションパス=現位置の要素から対象要素(対象ノード)までの集合
本願では、特に断らない限り、ロケーションパスはルート要素から対象要素までの絶対ロケーションパス(以下、「パス」と記す)により示す。また、ロケーションステップの軸はいずれも子要素を示す"child::"となるため、ロケーションステップは軸を省略した省略記法で記述する。述部については出現順序によって兄弟要素を識別する際に記述する。
文書例1の各要素に対応するパスは、下記のとおりである。パスは、XML文書中において、開始タグの出現によってロケーションステップを積み、終了タグの出現によって前記ロケーションステップを降ろすスタックとなる。
要素A:/a
要素B:/a/b
要素C:/a/b/c
要素D:/a/d
(1.2)パス情報について
本発明によるXML文書を等価テーブルに展開し、また復元する方法は、いずれも等価テーブルの見出し情報としてのパス情報に基づいて実行している。ここではパス情報について、スキーマが規定する文書構造の自由度、パス情報の順序固定性、展開方法との関係、取得方法および利用の観点から説明する。
(1.2.1)パス情報の自由度と順序固定性
文書例1の解釈例は、スキーマが明示されていない場合でも、開始タグと開始タグに対応する終了タグをもとにして、XML文書の要素とその要素内容を把握することができることを示している。また、各要素のパスも特定できることを示している。つまり、XML文書に含まれる要素の入れ子関係よりパスを特定し、XML文書の文書内容についてパスを用いて整理することができることを示す。
本願では、スキーマに基づいたパスの集合、あるいはXML文書で実際に使用されているパスの集合を、「パスリスト」と記す。さらに、パスリストは、「階層値」と「タグ名」とからなる「パス情報」に置換することができる。
後述する等価テーブルでは、表の見出しとしてパス情報を用いるため、対象とするXML文書に応じて固定されたパス情報が必要となる。つまり、パス情報の自由度がないことを前提としている。さらに、後述するブロック型展開方法では、パス情報の順序が固定されている必要がある。
パス情報の取得する方法として、XML文書の文書構造を規定するスキーマからパス情報を取得する方法と、文書例1のようにXML文書からパス情報を取得する方法とが考えられる。スキーマに基づいたパスとXML文書中のパスについて、自由度と順序の固定性との観点から整理すると以下のようになる。
「選択型の要素内容モデル」、「混合内容モデル」または「任意内容モデル」を多く含むスキーマは、タグの組み合わせについての自由度が高いことになり、これらのモデルが少なくなるほど、タグの組み合わせについての自由度は低くなる。さらに、これらのモデルを含まないスキーマは、タグの組み合わせについての自由度はなくなる。すなわち、順序型の要素内容モデルと空要素とから構成されるスキーマは、タグの組み合わせが固定されることになり、またタグの組み合わせの順序も固定されることになる。
XML文書は、文書作成時にスキーマを反映した結果として、タグの組み合わせが固定され、パスの自由度がないものとして把握することができる。また、自由度のあるスキーマ、すなわちタグの組み合わせの順序が固定されていないスキーマに基づくXML文書の場合には、パスの順序は固定されない。逆に、自由度のないスキーマ、すなわちタグの組み合わせの順序が固定されたスキーマに基づくXML文書の場合には、パスの順序は固定される。
等価テーブルで使用するパス情報は、パス情報の自由度がないことを前提としている。このため、スキーマから等価テーブルで使用するパス情報を取得できるケースは、自由度のないスキーマの場合、すなわち「順序型の要素内容モデル」と「空要素」とから構成されるスキーマの場合に限られる。また、XML文書は、文書作成時に固定化されたパス情報となっているため、いずれのXML文書からもパス情報を取得することが可能である。この際、XML文書から取得したパス情報の順序固定性は、スキーマが規定する文書構造の順序固定性に従うことになる。
スキーマとXML文書の関係について自由度の観点から表現すると、タグの組み合わせについて自由度が高いスキーマほどXML文書は多様な文書表現が可能となり、自由度が低いスキーマほどXML文書は定形書式の文書となる。さらに、自由度が0となるスキーマの場合には、XML文書は固定化された書式となるとともに、要素の出現順序も固定される。XML文書は、スキーマが規定する文書構造の自由度が高いほど「文書」としての性格が強く、その自由度が低くなるにつれて「データ」としての性格が強くなる。
本願では、順序固定性の観点から、「選択型の要素内容モデル」、「混合内容モデル」または「任意内容モデル」を含みパス情報の順序を決めることができないスキーマ、および順序固定性が不明であるスキーマを「順序非固定型スキーマ」と記し、当該スキーマに基づいたXML文書を「順序非固定型XML文書」と記す。また、順序固定のパス情報を決めることができるスキーマ、すなわち順序型の要素内容モデルと空要素とから構成されるスキーマを「順序固定型スキーマ」と記し、当該スキーマに基づいたXML文書を「順序固定型XML文書」と記す。なお、順序固定性が不明であるスキーマとは、スキーマ言語の文法自体が不明なスキーマや、解析することが困難なスキーマを含める。また、整形式XML文書は、スキーマとの整合性が自明でないため、「順序非固定型XML文書」として扱うものとする。
「順序非固定型XML文書」と「順序固定型XML文書」の関係は、「整形式XML文書」と「妥当なXML文書」の関係と同様に、排他的に区分されるものではなく、図2に示すように前者が後者を包含する関係となる。図2において、点線で囲まれた領域Aは「順序非固定型XML文書」を表しており、実線で囲まれた領域Bは「順序固定型XML文書」を表している。
すなわち、「順序非固定型XML文書」をXML文書の一般解とすると、「順序固定型XML文書」はXML文書の特殊解とみなすことができる。たとえば、整形式XML文書(つまり「順序非固定型XML文書」)でも、背景となるスキーマが順序固定性を満たしかつ当該スキーマに基づいていることが確実な場合には「順序固定型XML文書」として扱うことができる。
(1.2.2)XML文書と展開方法との関係
ここでは、パス情報の順序固定性によるXML文書の区分、およびXML文書の区分と展開方法の適用性との関係について説明する。
ライン型展開方法は、順序非固定型XML文書(順序固定型XML文書も含む)を対象とした展開方法であり、パス情報の順序固定性を利用していない。このため、XML文書から取得したパス情報で十分である。
ブロック型展開方法は、順序固定型XML文書を対象とした展開方法であり、パス情報の順序固定性を利用している。順序固定型スキーマに基づくXML文書は順序固定型XML文書となるため、このXML文書から取得したパス情報をもとにして展開方法を行うことができる。なお、XML文書から取得したパス情報は、一部のパスが欠落する不完全なパス情報となる可能性がある。文書内容の参照や編集を行う場合は、不完全なパス情報でも十分である。
しかし、後述する構造変換処理、応用プログラムにXML文書の文書内容を引き渡す処理を行う場合、順序が固定されかつ欠落のない完全なパス情報が必要となる。完全なパス情報は、順序固定型スキーマを解析することによって取得することができる。しかし、順序非固定型スキーマの場合にはパスの順序が固定されないため、等価テーブルの見出し情報として有意なパス情報は取得できない。
部分的に順序非固定型スキーマとなる内容モデルを含むために順序非固定型XML文書に区分される文書の場合、処理上の制約を設けることによって、順序固定型XML文書として取り扱うことができる。
たとえば、文書の種類に応じて書式が異なる際に、ルート要素に近い所で「選択型の要素内容モデル」を用いているケースがある。このような場合には、「選択型の要素内容モデル」を「順序型の要素内容モデル」としてみなし、順序固定型XML文書として取り扱うことができる。ただし、ブロック型展開方法では、「選択型の要素内容モデル」に相当する要素の順序が保たれないため、展開および復元の過程で順序の確認が必要となる。
また、末端となる要素あるいは末端に近い要素が「選択型の要素内容モデル」となっているケースや、文字データ(#PCDATA)に強調や下線などの部分的な文字飾りを加えるために「混合内容モデル」を含むケースがある。このような場合、「選択型の要素内容モデル」や「混合内容モデル」を1つの要素内容としてまとめて取り扱うことによって、順序固定型XML文書として取り扱うことができる(実施例4「連結処理」参照)。
(1.2.3)XML文書からパス情報の取得
図3(a)は、順序非固定型XML文書のパスリストの例として、インターネットで公開されているあるXHTML文書から取得したパスリストを示したものである。このパスリストは、XML文書中のパスに着目し走査し、新規に出現するパスを単にパスリストに追加したものである(角括弧内の数値はパスの出現番号を示す)。その結果、パスリストは、共通の親をもつパスでも分散して出現することになり、後述の展開方法や復元方法などの処理を行うためには十分ではなく、並び替えを行う必要がある。
パスリストの先頭部(図3(a)[1]〜[15])では、下記の規則性があり、これらの規則性をパスリストの全体に適用し、パスで区分した要素を特定するための番号を決定し、この番号を「要素番号」とする。
1)ある着目するパスについて、親要素を示すパスが着目するパスよりも必ず先に出現する。
2)ある着目するパスについて、弟要素を示すパスと子要素を示すパスが共に存在する場合には、子要素を示すパスが先に出現する。
図3(b)は、図3(a)のパスリストを対象として、パスの出現順序を考慮した深さ優先探索(Depth first search)を行い、探索を行う際の順序によって要素番号を決定し、要素番号で並び替えたパスリストである(角括弧内の数値は要素番号を示す)。並び替えた後のパスリストは、要素番号を添字とする「階層値」と「タグ名」との2つの配列に置換することができ、パス情報とすることができる。ここで、「階層値」は、各パスのロケーションステップのステップ数に相当し、ルート要素から着目要素までの階層の深さを示す値である。具体的には、ルート要素の階層値を1とし、その子要素の階層値を2、その孫要素の階層値を3とし、階層の深さが増すにつれて1ずつ増加していくものとする。「タグ名」は、各パスの階層値に応じたロケーションステップに相当する。
図4(a)および図4(b)は、共に図3(b)に示すパスリストからパス情報に置き換え、表示したリストである。図4(a)は階層値とタグ名を要素番号順に列記したリストである。また、図4(b)は階層値に応じてタグ名の表示行を下方へ移動させたリストである。階層値が表示用の最大行数を超える場合には、最大行数に固定し表示するものとする。図4(b)の表示方法によれば、タグによる階層性を視覚的に把握することができる。
図5は、XML文書からパス情報を取得する方法を示すフローチャートである。図5に示すフローは、後述するXML文書の展開方法を示すフローチャート(図10)のステップ1006に相当する。なお、XML文書を整形した構文リストはステップ1002で作成されているものとする。
まず、階層値の初期値をK=0とし、ルート要素の開始タグが出現した段階で階層値K=1とし、以降、開始タグが出現する度に初期値Kをインクリメントさせ、終了タグ出現する度に初期値Kをデクリメントさせる。このように、常に階層値Kを監視しながら、XML文書の終了まで走査する。空要素は、開始タグと終了タグを組み合わせたものとして取り扱う。ルート要素の終了タグが出現した段階で階層値K=0となれば、開始タグと終了タグの個数が等しいことを示す。走査の段階において、開始タグより取得したタグ名をロケーションステップとし、階層値Kをロケーションステップのステップ数とするパスを作成し(ステップ501)、取得済みのパスリストのパスと比較することによって新規に出現するパスか否かを判定する。新規に出現するパスは、パスリストに追加し取得済みのパスとする(ステップ502)。
次に、パスリストにおいてルート要素から子要素のパスを検索し、出現する子要素のパスに要素番号を付ける処理を行い、さらに子要素と兄弟関係のパスよりも子要素の子要素(=孫要素)のパスを優先し、子要素のパスから孫要素のパスを検索し要素番号を付ける処理を再帰的に繰り返す。これによって、すべてのパスに対して要素番号を付け(ステップ503)、要素番号でパスリストの整列を行う(ステップ504)。さらに、要素番号で整列した後のパスリストを、階層値とタグ名に置換することによってパス情報を得る(ステップ505)。
XML文書が順序非固定型XML文書である場合には、要素の出現順序が固定されていない文書であるため、偶然性を伴う順序であってもパス情報として問題はない。たとえば、図3(b)に示す"/html/body"の子ロケーションステップにあたる"h1"、"h2"、"div"および"p"などのタグ名は、必ずしもこの順序で出現する必要はなく、XHTML文書を作成した際の文書内容による偶然性を伴う順序である。
しかしながら、XML文書が順序固定型XML文書である場合でも、同じ要素の繰り返しで、先の繰り返しで出現する要素よりも後の繰り返しで異なる要素が先に出現し、要素の出現順序が逆転するケースが発生する。したがって、XML文書が順序固定型XML文書に区分される場合(ステップ506)、XML文書から取得したパス情報について、XML文書を再走査することによってパス情報の順序を検証する必要がある(ステップ507)。パス情報に逆転部分が含まれる場合、逆転部分がなくなるまで、逆転部分の入れ替え処理を繰り返し行う必要がある(ステップ507〜ステップ509)。
(1.2.4)スキーマからパス情報の取得
前述したように、構造変換処理、あるいは応用プログラムにXML文書の文書内容を引き渡す処理などを行う場合には、欠落のない完全なパス情報が必要となる。完全なパス情報を取得するためには、スキーマの解析が必要となるが、当然のことながらスキーマ言語によって文法は異なり、対象とするスキーマによっては非常に難解な処理となる。パス情報を取得することに限れば、いずれのスキーマ言語でも、スキーマから内容モデルを特定し、親子関係となる要素から階層値とタグ名を識別し、パス情報を決定することになる。
パス情報を取得する別の方法として、解析対象とするスキーマに基づいたXML文書の中からできる限り多くのパス情報を含むXML文書を選択し、前記のXML文書から取得する方法でパス情報を決定する。このパス情報とスキーマが規定する内容とを照合し、不足するパスがあればパス情報に補完すればよいことになる。
この際、スキーマ言語「XML Schema」および「RELAX NG」によるスキーマは、共に「順序非固定型XML文書」に区分されるXML文書であり、後述するライン型展開方法によってスキーマの文書内容を展開することができる。このため、XML文書から取得したパス情報に対して、XML形式のスキーマを別の等価テーブルに展開し、その展開内容に基づいて、補完すればよい。
スキーマの解析あるいはスキーマに基づいて補完したパス情報は、いずれもスキーマに基づいたパス情報となる。このパス情報を「解析済みパス情報」として記録しておくことにより、後の展開方法において再利用することが可能となる。
(1.2.5)パス情報の利用
文書例1は、非常に簡単な文書例であるため、以降の説明では図6に示すXML文書(文書例2)も用いる(角括弧内の数値はXML文書の行数を示す)。文書例2は、スキーマを明示していないが「順序固定型XML文書」であるXML文書とし、ライン型展開方法、ブロック型展開方法、編集、および構造変換の対象文書とする。
文書例2から図5に示す方法により取得したパス情報を、図7(a)に示す。取得したパス情報から、終端要素の識別、ある要素の子孫要素が展開されうる範囲およびパスを決定することができる。
図7(b)は、終端要素の識別とある要素の子孫要素が展開されうる範囲とを説明するための図である。終端要素の識別は、次の要素が子要素とならないことを判定すればよく、着目する要素の階層値K1と次の要素の階層値K2について、K2≠K1+1(K2<K1+1)の場合には終端要素と判定される。
一方、次の要素の階層値K2が子要素となる階層値(K2=K1+1)であり、着目する要素が要素内容モデルである場合には非終端要素となる。しかし、「混合内容モデル」または「任意内容モデル」である場合、子要素を含み非終端要素となるケースと、文字データ(#PCDATA)からなる終端要素となるケースとが発生するため、パス情報から両者を一意に決定することはできない。したがって、「順序非固定型XML文書」である場合には、子要素を含むか否かの判定によって非終端要素と終端要素とを識別することになる。逆に「順序固定型XML文書」である場合、非終端要素と終端要素とを一意に判定することができる。
また、非終端要素の階層値を超える階層値が連続する範囲は、当該非終端要素の子孫要素が展開されうる範囲となる。本願では、終端要素の場合も含め、ある要素の子孫要素が展開されうる範囲の終端となる要素番号を「終端番号」と記す。図では丸で囲むタグ名から延びる矢印先端の要素番号が終端番号となる。終端要素の場合、当該要素の要素番号が終端番号となり、展開されうる列範囲の幅は1となる。
ある要素番号のパスは、当該要素番号までの最後に出現した各階層値のタグ名を特定し、階層値1から当該要素番号の階層値までの"/タグ名"を連結することによって得ることができる。すべての要素番号に対するパスを得ることによって、パスリストが作成される。
図7(c)は、終端要素(=True)の識別、終端番号およびパスを整理した図である。なお、終端要素の"−"記号は、終端要素と非終端要素とを一意に識別することはできないことを示す。
パス情報は、階層値とタグ名とからなる配列であり、階層の深さに特に制約はない。このため、階層が非常に深いXML文書でも、そのパス情報から要素の親子関係と兄弟関係を表現することができる。また、要素番号別に、終端要素の識別、終端番号およびパスを容易に特定することができる。たとえば、図7(a)の要素番号6に対応する配置列に文字列"Z"が配置されている場合、階層値=4、タグ名="F"、終端番号=6、終端要素="True"、およびパス="/A/B/E/F"となる。"Z"は、配置列が終端要素であることと後述する付加データの書式に一致しないことにより、付加データを伴わない要素内容と判定され、要素内容="Z"となる。また、要素Fの先祖階層または親階層にあたる要素A、要素Bおよび要素Eは、孫子要素または子要素として"<F>Z</F>"を含むことになる。
また、パス情報からXML文書の文書構造を規定するスキーマを、部分的に推定することができる。図8は、図7(a)から推定される文書型定義(DTD)を示したものである。ここで、要素の出現回数については、ルート要素を除き特定することができないため、「0回以上("*")」としている。また、要素の出現順序については、「順序固定型XML文書」であることを前提とし、子要素のタグ名をカンマ(",")で連結している。「順序非固定型XML文書」である場合、順序固定性が不確実な部分をバー("|")で連結することになる。
(1.3)要素内容・その他データの記述方法
XML文書から抽出した要素内容、属性およびコメント系データを配置する際に、要素内容や属性などを分散して格納することは、処理の複雑化を招くとともに、参照や編集などの操作の障害となる。本願では、パス情報で区分される要素について、要素内容や属性など性質の異なるデータを1つの文字列(以下、「配置データ」と記す)にまとめ、後述する等価テーブルに配置する。以下では、XML文書から要素内容や属性などを抽出し、配置データとして表現する際の書式を示す。
また、XML文書のルート要素を含めその範囲内に含まれる、すべての要素(属性を含む)、要素内容およびコメント系データを、配置の対象データとし、これらをまとめて「文書内容」と記す。なお、XML文書のXML宣言部などルート要素が出現するまでの記述部分が必要となる場合、元のXML文書を参照することによって得ることができる。
(1.3.1)配置データの区分について
本願では、非終端要素の出現を明示的に示すマーク(以下、「ノードマーク」と記す)を等価テーブルに配置することによって非終端要素の出現を表現する。したがって、着目する要素が非終端要素の場合に「ノードマーク」を、終端要素の場合に「要素内容」を配置データとして等価テーブルに格納する。
順序非固定型XML文書では、対応しないタグ間にも非終端要素の要素内容の一部である文字データ(以下、「タグ間文字データ」と記す)が出現する。たとえば、前述の文書例1では、t1、t2、t4、t5およびt7がタグ間文字データに相当する。これらのタグ間文字データを終端要素の要素内容である文字データt3およびt6と同等に取り扱うことはXML文書の復元を困難にする。このため、本実施の形態では、タグ間文字データを直前の開始タグまたは直前の終了タグから連続する文字データとみなし、直前の開始タグまたは直前の終了タグに付随する文字データとして取り扱う。
(1.3.2)配置データの書式について
[ノードマーク]
XML文書の展開時に非終端要素となる開始タグが出現した際に、ユニークな「ノードマーク」を用いて表現する。本実施の形態では、「ノードマーク」を"→"または"→[番号]"で表現した配置データとする。ここで、"[番号]"は非終端要素の出現順序を示したもので、ユーザの理解を容易にするために付加する番号であり、必須のものではない。
[要素内容]
開始タグと開始タグに対応する終了タグ間の要素内容を、そのまま配置データとする。空要素あるいは要素内容が空の場合、空マーク("")を配置データとする。
[属性]
開始タグに含まれる属性は、以下に示すユニークな符号(ただし、文書中の文字列と重複する場合は異なる符合)を用いてマーク付けを行い、当該開始タグの配置データに付加する。
"{At{属性*}}":属性*=開始タグに含まれるすべての属性
[タグ間文字データ]
タグ間文字データは、次のようなユニークな符号(ただし、文書中の文字列と重複する場合は異なる符合)を用いてマーク付けを行い、直前の開始タグまたは終了タグの配置データに付加する。
"{Ts{文字列}}":文字列=開始タグ直後に出現するタグ間文字データ
"{Ts{文字列}}":文字列=終了タグ直後に出現するタグ間文字データ
[コメント系データ]
コメント系データ(コメント、CDATAセッションおよび処理命令)は、次のようなユニークな符号(ただし、文書中の文字列と重複する場合は異なる符合)を用いてマーク付けを行い、直前の開始タグまたは終了タグの配置データに付加する。
"{Cs{コメント}}":コメント=開始タグ直後に出現するコメント系データ
"{Ce{コメント}}":コメント=終了タグ直後に出現するコメント系データ
本願では、上記の"{At|Ts|Ts|Cs|Cs{*}}"形式となるデータを「付加データ」と呼び、開始タグまたは終了タグに伴って出現した際に、ノードマークまたは要素内容からなる配置データに付加するものとする。前述の文書例1では、各要素の配置データは次のようになる。
要素A:"→[1]{At{Doc="Sample1"}}{Ts{t1}}"
要素B:"→[2]{Ts{t2}}{Te{t5}}"
要素C:"t3{Te{t4}}"
要素D:"t6{Te{t7}}"
(1.4)等価テーブルについて
XML文書の文書内容を表形式データとしてテーブル(以下、「等価テーブル」と記す)に展開することが可能であれば、要素の速やかな把握、参照材料としての取得、従来アプリケーションと整合を取ることなどの作業が容易となる。さらに、展開した等価テーブルで文書内容の編集を行い、XML文書として復元することが可能であれば、XML文書を更新することができる。
XML文書を展開し復元するための等価テーブルに求められる条件は、単一のテーブルであること、理解しやすいテーブルであること、および参照や編集などの操作を容易にできることである。逆に、要素の複数テーブルへの分散、要素の複数箇所での出現、あるいは順序情報の出現などは、テーブルの理解あるいは操作を妨げることになる。上記の観点より、本願における等価テーブルについての考え方を整理し以下に示す。
(a)等価テーブルの数と大きさ
単一のテーブルを基本とし、テーブルの大きさを制限しない。テーブルは、あくまでもXML文書の参照や編集などを行うための一時的な作業テーブルであるため、巨大なテーブルとなってもかまわない。
(b)要素の順序情報
等価テーブルに要素の順序情報を含めずに、等価テーブルへの配置方法により要素の順序を特定する。仮に、テーブルに要素の順序情報を含めた場合、単に要素を追加したい場合でも順序情報の編集を行う必要が生じる。この際、順序情報をユーザが編集することは困難さと煩雑さを伴う作業となる。また、さまざまな操作に対応した順序情報の変更は、煩雑な処理となる。
(c)等価テーブルの見出し
XML文書またはスキーマから取得したパス情報を、等価テーブルの見出しとする。このことによって、さまざまなパス情報のXML文書を取り扱うことができる。なお、本実施の形態ではパス情報を列方向に配置するが、パス情報を行方向に配置することも当然可能である。
(d)等価テーブル中の文書数
同一文書構造のXML文書を複数展開する場合、同じパス情報となるため、1つの等価テーブルに複数のXML文書を展開することが可能である。このことによって、展開された文書内容の比較や、複数文書にまたがる処理が容易となる。
本実施の形態では、パス情報や展開した文書内容を表示するために、表計算ソフトウェア(マイクロソフト社製Excel2000またはExcel2003)を使用する。この表計算ソフトウェアの利点は、アプリケーション用プログラム言語が使用できること、ワークシート上に等価テーブルを設定することできセルに配置された値は直ちに表示されること、およびユーザによる参照や編集が容易であることである。なお、単に「編集」などと記述している部分は、上記表計算ソフトウェアによる編集機能を用いている。
図9は、ワークシート上に入出力領域や等価テーブルなどの領域を配置した例を示す図である。ワークシート900において、入力領域901および出力領域902は、XML文書の入力行と出力行を確認するための領域であり、同時に各種の符号化文字集合に対応したエディタや関連するアプリケーションと、コピーアンドペーストによって入出力を行うための領域である。作業領域903は、構文リストの表示や、入力XML文書と出力XML文書との比較結果を表示するための領域である。
等価テーブル904は、スキーマ領域905、処理対象範囲906および配置領域907から構成される。
スキーマ領域905は、XML文書あるいはスキーマから取得したパス情報、およびその他スキーマ情報を、等価テーブル904の見出し情報を配置する領域である。なお、その他スキーマ情報とは、出現順序、出現回数、データ型などである。いずれのその他スキーマ情報も、本願で示す展開方法および復元方法に関与しない情報である。このため、スキーマ領域にはパス情報のみを示す。
処理対象範囲906は、等価テーブル904において対象とするXML文書の展開の範囲を表示し、また、復元を行う際に配置テーブルの復元対象範囲を指定するために使用する。開始行J_min、終了行J_max、開始列I_min、終了列I_maxの順で表示する。同一文書構造の複数のXML文書を等価テーブルに展開する際には、XML文書の文書内容を追記するために、既存文書の展開終了行の次行(既存文書が存在しない場合は開始行=1)から展開し、展開後に処理対象範囲を配置する。また、等価テーブルを復元する際には、複数の文書にまたがる範囲あるいは矩形範囲を対象範囲とすることによって、複数のXML文書あるいはXML文書の断片(部分木)を復元することができる。
配置領域907は、XML文書から取得した配置データを格納する領域であり、文字列型の2次元配列「配置テーブル(J,I)」からなる。ここで、JとIは共に正整数の添字であり、Jは配置行を、Iは配置列を示す。配置行Jは、後述するライン型展開方法またはブロック型展開方法の各展開ルールによって決定する。配置列Iは、各要素のパスと後述する要素識別用パスリストとを照合し要素番号Iを特定し決定する。初期状態では、配置列I=要素番号Iとなるが、パス情報を一部削除するなど編集がなされた場合、配置列と要素番号の対応表を作成し対応させる。
配置領域に、前述の"{At|Ts|Ts|Cs|Cs{*}}"形式の付加データが多く含まれると、配置データの視認性が悪く、属性値の参照も行いにくい。また、配置データを数値データとして取り扱う際には、付加データを分離した後に数値化する必要がある。さらに、ほかのプログラムにデータを引き渡す際に、プログラム側で分離するための処理が必要となる。このため、配置領域中の付加データを分離して格納するための付加データ領域908を設けている。ただし、XML文書や用途によっては付加データ領域908を必要としないケースもあり、付加データ領域の使用は選択機能とする。
なお、等価テーブルなどを表示装置105に表示する必要がない場合、処理に適したプログラム言語を用いて、メモリ上の配列に設定することができる。この際、等価テーブルは、パス情報、処理対象範囲および配置テーブルをあわせたものとする。
(1.5)展開前および展開後の処理フロー
本願では、XML文書を等価テーブルに展開する際に、後述するライン型展開方法またはブロック型展開方法によって、要素の出現順序を確保している。以下、これら展開方法の共通する展開前の準備処理および展開後の後処理について説明する。
図10は、XML文書を等価テーブルに展開する際の準備処理および後処理を示すフローチャートである。まず、ユーザが指定したXML文書の展開方法とパス情報の取得方法とを読み込む(ステップ1001)。なお、ユーザの指定が無い場合は、コンピュータが汎用的な方法を選択する。具体的には、XML文書の展開方法はライン型展開方法とし、またパス情報の取得方法はXML文書からパス情報を取得する方法とする。
次に、対象とするXML文書を入力領域から読み込み、開始タグと終了タグを参照して、読み込み部分の文書構造が以下に示すいずれかのパターンに一致するように整形し、文字列型配列である構文リストに格納する(ステップ1002)。
a)開始タグ
b)開始タグ+要素内容+終了タグまたは、空要素タグ
c)終了タグ
具体的には、文書整形用のキューを用意し、XML文書の各行をキューに追加する。この際、タブ、改行および復帰は空白文字とするためスペースに置換する。開始タグと終了タグとの個数が3個以上または文末部となった時点で、上記のパターンのいずれに一致するかを判定し、判定したパターンをキューから取り出し、構文リストに格納する。また、「コメント系データ」や後述の「タグ間文字データ」に相当する文字列は、直前の開始タグまたは終了タグから連続する文字データとして取り扱う。したがって、上記a)またはc)の場合は2つ目のタグが出現する直前までの文字列を、上記b)の場合は3つ目のタグが出現する直前までの文字列をキューから取り出す。
字下げなどによる空白文字を取り扱う必要がない場合、すなわち、要素内容モデルからのみ構成され「タグ間文字データ」が出現しても要素内容とならない場合には、構文リストに格納する時点(ステップ1002)で、これらの空白文字を取り除くことができる。実施例では、字下げなどの空白文字を取り除いて示す。
ステップ1003は、等価テーブルにパス情報が配置済みまたは未配置による分岐である。パス情報が配置済みである場合、すなわち同一文書構造の複数のXML文書を展開する場合、配置済みのパス情報を取得し(ステップ1004)、ステップ1010に進む。パス情報が未配置である場合、すなわち新規のXML文書を展開する場合、ステップ1005に進み、パス情報の取得方法によって分岐する。なお、配置済みのパス情報について変更する必要がある場合には、展開の開始前に入力手段を用いて変更すればよい。
ステップ1006から1007は、XML文書からパス情報を取得するケースであり、図5に示す方法でXML文書からパス情報を取得し(ステップ1006)、取得したパス情報を配置する(ステップ1007)。
ステップ1008から1009は、解析済みパス情報を参照しパス情報を取得するケースである。XML文書からスキーマファイル名を抽出し、スキーマファイル名で「解析済みパス情報」を検索する(ステップ1008)。解析済みパス情報が存在する場合は解析済みパス情報を取得し(ステップ1009)、解析済みパス情報が存在しない場合には、XML文書からパス情報を取得する(ステップ1006)。取得したパス情報を配置する(ステップ1007)。
ステップ1010では、階層値とタグ名とからなるパス情報から、終端要素の識別、終端番号の取得および要素識別用のパスリストの作成を行う。
ステップ1011は、ステップ1001の展開方法による分岐であり、ステップ1012のライン型展開方法(図11参照)、またはステップ1013のブロック型展開方法(図16参照)のいずれかを呼び出し実行する。
ステップ1014は、XML文書の展開を終えた後に、等価テーブルに展開した範囲(行範囲:J_min〜J_max、列範囲:I_min〜I_max)を、処理対象範囲906に配置する。
(1.6)パス情報についてのまとめ
実施例1では、XML文書の概要を示すとともに、展開で用いるパス情報、パス情報の取得方法、配置データの記述方法、等価テーブルの構成、および展開方法前後の処理フローについて説明した。以下、パス情報にかかわる特徴を整理して示す。
1)パス情報は、階層値とタグ名とからなる配列であり、等価テーブルの見出し情報とする。パス情報からは、要素番号別に、終端要素の識別、終端番号およびパスを特定することができ、XML文書に含まれる要素の親子関係と兄弟関係とを把握することができる。
2)パス情報の順序固定性の観点より、スキーマについては「順序非固定型スキーマ」と「順序固定型スキーマ」に、XML文書については「順序非固定型XML文書」と「順序固定型XML文書」に識別される。
3)パス情報は、XML文書から取得することができ、順序固定型スキーマの場合、当該スキーマを解析することによっても取得することができる。
(2)ライン型展開方法およびライン型復元方法
ここでは、XML文書を等価テーブルにライン型展開方法と、等価テーブルからXML文書を復元するライン型復元方法について説明する。ライン型展開方法およびライン型復元方法は、XML文書について開始タグと終了タグを用いて要素を表現したリストであると捉え、開始タグ、要素内容、終了タグからなる要素の記述順序でリストを展開し、また復元する方法である。
具体的には、ライン型展開方法は、XML文書を走査し、常に開始タグと終了タグを監視し、タグから組み立てたパスを要素識別用パスリストと照合することによって要素番号を特定し、配置データを等価テーブルに展開する。また、ライン型復元方法は、展開した等価テーブルを列方向に走査し、配置データを検出しXML文書を復元する方法である。なお、XML文書の文書内容を、等価テーブルの各行について終端と次行の開始端とを連結した「1つの線」に展開するため、「ライン型」と表現している。
ライン型展開方法は、「順序非固定型XML文書」あるいは「順序固定型XML文書」にかかわらず、すべてのXML文書を対象とすることができる。また、ライン型展開方法によって得られる等価テーブルから、ライン型復元方法によってXML文書を復元することができる。したがって、ライン型展開方法とライン型復元方法は、汎用的な展開方法と復元方法となる。
(2.1)ライン型展開方法
ライン型展開方法では、構文リストを読み込むつどパスを組み立て、要素識別用パスリストと照合し要素番号を求め、要素番号に対応する配置列を決定する。配置済みデータが上書きされる場合に改行し、配置データを配置テーブルに配置する。
図11は、第1の展開方法であるライン型展開方法を示すフローチャートであり、図10に示すように、XML文書を整形し構文リストに格納する処理(ステップ1002)、およびパス情報の取得とパス情報にかかわる処理(ステップ1010)を実行した後に、呼び出される(ステップ1012)。
まず、構文リストの範囲、展開開始行および階層値の初期値を設定する(ステップ1101)。ここで、構文リストの範囲はルート要素の範囲を設定する。展開開始行J_Staは、展開対象のXML文書を配置テーブルに配置する際の先頭行であり、既存データが存在しない場合はJ_Sta=1、存在する場合はJ_Sta=J_Max+1とし既存データに追加する。
ステップ1102からステップ1120のループは、構文リストの行数Lをカウンタ変数とし、すべての行を順次展開するためのループである。
まず、構文リストから行(L)を取得する(ステップ1103)。行(L)が、開始タグから開始する場合(ステップ1104)はステップ1105へ進み、空要素タグから開始する場合(ステップ1115)はステップ1116へ進み、それ以外の場合(ステップ1117)はステップ1118へ進む。
開始タグから開始するの場合(ステップ1104)、まず、階層値Kをインクリメントし、パスを組み立て、要素識別用パスリストと照合することによって要素番号Iを特定する(ステップ1105)。
次に、ステップ1106で開始タグに対応する終了タグを含む場合、要素内容を配置データに格納し、階層値Kをデクリメントする(ステップ1109)。
ステップ1106で開始タグに対応する終了タグを含まない場合、さらに要素番号Iが終端要素に相当するか否かを判定する(ステップ1107)。終端要素に相当する場合、すなわち後述する展開時の連結処理に相当する場合、開始タグと開始タグに対応する終了タグ間の文字列を連結して配置データに格納し、階層値Kをデクリメントする(ステップ1110)。なお、開始タグと開始タグに対応する終了タグとが異なる行に存在する場合、変数Lを終了タグの行まで進める。
ステップ1107で要素番号Iが終端要素に相当しない場合、非終端要素としてノードマーク"→"を配置データに格納する(ステップ1108)。
空要素タグから開始するの場合(ステップ1115)、パスを組み立て、要素識別用パスリストと照合することによって要素番号Iを特定し、空マーク("")を配置データに格納する(ステップ1116)。なお、階層値については増減させない。
上記の配置データに対して、属性、タグ間文字データまたはコメント系データがあれば配置データに付加する(ステップ1111)。
配置行Jは、要素番号Iに対応する配置列Iが、ステップ1112で、配置列I>前配置列I_Preが偽である場合、つまり配置列I≦前配置列I_Preとなる場合に、配置行Jをインクリメントさせ、改行する(ステップ1113)。上記の配置データを配置テーブル(J,I)に配置し、また前配置列I_Pre=配置列Iとする(ステップ1114)。
終了タグから開始するの場合(ステップ1117)、まず、階層値Kをデクリメントし、パスを組み立て、要素識別用パスリストと照合することによって要素番号Iを特定する(ステップ1118)。終了タグ後のタグ間文字データまたはコメント系データがあればこれらを付加データとし、配置テーブル(J,I)に付加する(ステップ1119)。ここで、配置行Jは終了タグに対応する開始タグの配置行である。
(2.2)ライン型展開方法の結果
図12は、文書例2をライン型展開方法により展開した等価テーブルの例である。図12に示す等価テーブルでは、左横書き文書を読むように、各行を横方向にトレースすることによって、等価テーブルの内容を把握することができる。
また、図13は、ライン型展開方法による等価テーブルの展開構造を説明するため、図12の配置データに代えて述部付きのロケーションステップを示す図である。なお、ロケーションステップの述部番号は、まず全要素の述部番号を初期化(0を設定)しておき、等価テーブルの各行を横方向にトレースし配置データが出現する際に、要素の述部番号をインクリメントさせる。同時に、当該要素が子孫要素を含む場合、当該子孫要素の述部番号をすべて初期化する。述部付きのパス作成方法は、コンピュータが、要素番号別の要素カウンタの配列および階層値別の階層値別パスの配列を設定するステップと、前記コンピュータが、前記テーブルを走査し、配置データの存在により要素の出現を検出した場合に、該要素の前記要素カウンタをインクリメントさせるとともに、該要素が子孫要素を伴う場合は前記子孫要素の要素カウンタをすべて0に設定するステップと、前記コンピュータが、前記要素のタグ名および前記要素カウンタの値から作成した述部付きロケーションステップを、前記階層値別パスに格納するステップと、階層値1から前記要素の階層値までの前記階層値別パスに格納された述部付きロケーションステップを連結しパスを作成するステップと、を含む。
図12および図13に示すように、ライン型展開方法による等価テーブルのデータ構造は、単に出現する配置データを配置列Iと重複しないように配置行Jを求めているデータ構造である。したがって、後述するブロック型展開方法による等価テーブルよりも単純である。
順序固定型XML文書をライン型展開方法によって展開した配置データは、等価テーブルのあるまとまった領域に配置され、一方で空白領域も発生する。元の文書に表形式のデータが連続して含まれる場合、等価テーブルでは表形式の右下部分と左上部分とが接する形で連なり、右下方向に下る出現パターンとなる。たとえば、図13のC[5]とD[1]の関係がこれに相当する。また、先行する要素の出現順序と出現回数によって後続の要素の配置行は変化する。同一要素の出現回数が増加するにつれて行数が増加し、パス情報と配置データとの離隔が大きくなる。これらの事項は、配置データの参照や編集を行う際の欠点となる。
(2.3)ライン型復元方法
ライン型復元方法は、処理対象範囲の配置テーブル(J,I)を対象として、列方向に走査し、ノードマークが出現する場合には開始タグ(I)を出力し、要素内容が出現する場合には、開始タグ(I)、要素内容および終了タグ(I)を連結して出力する。ノードマークまたは要素内容に属性などのデータが付加されている場合、これを分離して復元する。この際、階層値が減少する場合、終了タグを終了タグ用配列から取り出し出力する。
図14は、第1の復元方法であるライン型復元方法を示すフローチャートである。なお図14では、「開始タグ付加データ」は開始タグ後タグ間文字データと開始タグ後コメント系データを示し、「終了タグ付加データ」は終了タグ後タグ間文字データと終了タグ後コメント系データを示す。
まず、パス情報を読み取り(ステップ1401)、処理対象範囲906から復元する範囲を読み取り設定する。開始タグに対応する終了タグに関連する3項目のデータ(終了タグ、終了タグ後タグ間文字データ、終了タグ後コメント系データ)を階層値に応じて格納するための終了タグ用配列(スタック用配列)、および階層値K1、K2を初期化する(ステップ1402)。
ステップ1403からステップ1413のループは、展開範囲を走査するための配置行Jと配置列Iによるループである。配置テーブル(J,I)が空である場合(すなわち、配置テーブル(J,I)が未配置である場合)には、ループを繰り返す(ステップ1404)。
配置テーブル(J,I)に配置データが存在する場合、まずK1に現在の階層値(I)を格納する(ステップ1405)。K1が旧階層値K2未満(ステップ1406)となる場合、閉じていないタグに対応するために、既に格納されている終了タグ用配列よりK2−1からK1までの終了タグ、終了タグ後タグ間文字データおよび終了タグ後コメント系データを取り出し、出力する(ステップ1407)。
ステップ1408で配置データにノードマークを含む場合、開始タグ、属性、開始タグ後タグ間文字データおよび開始タグ後コメント系データの出力を行う(ステップ1409)。また、終了タグ用配列に終了タグ、終了タグ後タグ間文字データ、終了タグ後コメント系データを積む(ステップ1410)。
ステップ1408で配置データにノードマークを含まない場合、すなわち終端要素の要素内容を含む場合、開始タグ、属性、要素内容および終了タグを連結して出力する。この際、開始タグ後タグ間文字データ、開始タグ後コメント系データが存在する場合、これらを開始タグに続けて出力し、終了タグ後タグ間文字データ、終了タグ後コメント系データが存在する場合、これらを終了タグに続けて出力する(ステップ1411)。
現在の階層値K1を旧階層値K2に格納し(ステップ1412)、ステップ1403からステップ1413のループを繰り返す。
ループ終了後は、ステップ1407と同様に、終了タグ用配列よりK2−1から要素番号I_minの階層値までの終了タグ、終了タグ後タグ間文字データおよび終了タグ後コメント系データを取り出し、出力する(ステップ1414)。
(2.4)ライン型展開方法とライン型復元方法のまとめ
ライン型展開方法とライン型復元方法の主な特徴は以下のとおりである。
1)ライン型展開方法およびライン型復元方法は、パス情報の順序固定性にかかわらず、すべてのXML文書を対象とし展開と復元を行うことが可能である。
2)ライン型展開方法による等価テーブルは、左横書きの文書を読む場合と同様に、配置テーブルに展開された内容の把握を容易に行うことができる。
(3)ブロック型展開方法およびブロック型復元方法
ここでは、XML文書を等価テーブルにブロック型展開方法と、等価テーブルからXML文書を復元するブロック型復元方法について説明する。ブロック型展開方法およびブロック型復元方法は、XML文書の入れ子をなす要素(部分木)を、等価テーブルにおいて入れ子をなすブロックに対応させて処理を行う方法である。
ブロック型展開方法は、XML文書の要素について、開始タグと開始タグに対応する終了タグ間の部分木を特定し、特定した部分木を等価テーブルに入れ子をなすブロックとして展開する。また、ブロック型復元方法は、等価テーブルからブロックを特定しXML文書を復元する方法である。等価テーブルは、親子要素の関係をブロックによる入れ子関係で確保し、また兄弟要素の出現順序をブロックの配置順序で確保する。なお、部分木をブロックとして等価テーブルに展開するため、「ブロック型」と表現している。
前述のライン型展開方法では、配置データの出現順序を配置列と配置行によって確保している。したがって、先行する要素の出現順序と出現回数によって、後続する要素の配置行は変化する。ブロック型展開方法は、「順序固定型XML文書」の順序固定性を利用して、できる限り定位置に配置する方法である。
ブロック型展開方法の対象とするXML文書が「順序非固定型XML文書」である場合、展開することは可能であるものの、等価テーブルに展開する際に異タグ名の兄弟要素の出現順序が失われる。このため、展開した等価テーブルから元のXML文書を正しく復元することは期待できない。
ブロック型展開方法の対象とするXML文書が「順序固定型XML文書」である場合、異タグ名の兄弟要素の出現順序が文書自体の順序固定性によって確保されるため、ブロック型展開方法による等価テーブルから、元のXML文書をブロック型復元方法によって復元することができる。したがって、ブロック型展開方法とブロック型復元方法は、実質的に「順序固定型XML文書」を対象とした展開方法と復元方法となる。以下の説明では、ブロック型展開方法の対象とするXML文書が「順序固定型XML文書」であることを前提とする。
(3.1)ブロック型展開方法
ブロック型展開方法で対象とするXML文書例として、図6に示す文書例2を使用する。図15は、要素による入れ子構造を説明するために、各要素の範囲を囲み表示したものである。なお、非終端要素については番号を付しているが、終端要素の番号については図面の簡素化のため省略している。
要素A(要素1501)は、XML文書全体を示すルート要素であり、子要素B(要素1502など)および子要素Hを含む。要素B(要素1502など)は、子要素C、子要素Dおよび子要素E(要素1503など)を含む。さらに、要素E(要素1503など)は、子要素Fおよび子要素Gを含む。要素1504から1511についても同様である。要素は子要素を含む入れ子構造をなしており、要素を部分木として把握できる。
XML文書中のすべての要素を対象とし展開する場合、ある着目する要素について開始タグで開いた際には、開始タグに対応する終了タグで閉じる操作を行うまで間、着目する要素の子孫要素が対象となる。閉じる操作を行った後に、着目する要素の弟要素が存在すれば弟要素を対象とし、着目する要素の弟要素が存在しなければ上位の要素に戻ることになる。
つまり、子要素方向(深さ方向)の処理と、弟要素方向(幅方向)の処理とが発生し、子要素方向(深さ方向)の処理を優先して行うことが、すべての要素をもれなく処理することにつながり、また処理順序も一意となる。入れ子構造の深さが限定されていないXML文書を対象とする場合、まず、ルート要素を処理開始時の着目する要素とし、子要素とその弟要素を再帰的に呼び出して処理を進めることになる。別の表現では、対象とするXML文書を木とみなすと、木の外周をルート要素(根)から行きがけ順でなぞる際に出現する要素(節、葉)の順序が、処理順序となる。いずれの表現でも、処理順序はXML文書中での要素の記述順序となる。
「順序固定型XML文書」の特徴として、順序固定性があげられる。これは、複数の異タグ名の子要素を含む場合、同タグ名の子要素が連続して出現し、異タグ名の子要素が混合して出現することはない。たとえば、図15の場合、いずれの要素Bも、出現しない子要素を除いて、子要素C、子要素D、子要素Eの順に出現する。このことは、「順序固定型XML文書」を等価テーブルに配置する際に、第1子の子要素を、親要素と同じ配置行に配置し、第2子以降の子要素を、兄要素の配置行(兄要素が複数の配置行となる場合はその最終行)の次行に配置することができることを示す。
また、「順序固定型XML文書」の場合、混合内容モデル」や「任意内容モデル」を含まないため、非終端要素が終端要素となり得るケースは発生しない。このため、図7に示す終端要素の識別について、非終端要素と終端要素とを一意に区分することができる。また、字下げなどの空白文字を含めタグ間文字列は有意でない。
図16および図17は、図10のステップ1014に相当する第2の展開方法であるブロック型展開方法を示すフローチャートである。なお、ライン型展開方法とは、配置行Jの求め方が異なっており、配置列Iの求め方、配置データの取り扱い、および属性などの付加データの取り扱いについては同様である。ブロック型展開方法およびブロック型復元方法のフローチャートでは、簡素化のために付加データに関する記述を省略している。
まず、構文リストの行範囲L0〜L1、展開開始行J0および要素番号IBの初期値を設定する(ステップ1601)。ここで、構文リストの行範囲はルート要素の範囲を設定する。展開開始行J0は、展開対象のXML文書を配置テーブルに配置する際の先頭行であり、既存データが存在しない場合はJ0=1、存在する場合はJ0=J_Max+1とし既存データに追加する。要素番号IBは、異タグ名の兄弟要素が複数存在する場合、最初に処理するための兄弟要素となる要素番号を示し、初期値としてルート要素を示すIB=1を初期値とする。次に、設定した初期値に基づいて要素分割処理を呼び出す(ステップ1602)。
要素分割処理(ステップ1700)は、ステップ1602から呼び出されるとともに、ステップ1707およびステップ1709からも呼び出され、構文リストの行範囲L0〜L1、配置行J0、要素番号IBを引数とする再帰処理である。
まず、行範囲L0〜L1間で最初に出現する開始タグTと、開始タグTに対応する終了タグTを含む行Lを取得する(ステップ1701)。次に、処理対象の要素番号IBの階層値Kから親階層の階層値(=K−1)を求め、スタックされている親階層のパス(IBがルート要素を示す場合には空)とタグTからパスを作成し、要素識別用パスリストと照合することによって要素番号Iを特定する(ステップ1702)。 さらに、要素番号Iとその子孫要素となる列範囲がすべて空となる配置行Jを展開開始行J0から検索する(ステップ1703)。
ステップ1704は、要素番号Iが終端要素か否かを判定する。要素番号Iが終端要素である場合は、タグT(L0〜L)の要素内容を配置テーブル(J,I)に配置する(ステップ1705)。
ステップ1704で、要素番号Iが非終端要素である場合、ノードマークを配置テーブル(J,I)に配置し(ステップ1706)、要素番号Iの子要素を対象とした要素分割処理(L0+1,L,J,I+1)を呼び出す(ステップ1707)。
ステップ1708は、引数の行範囲L0〜L1間をすべて処理したか否か行Lとの関係から判定する。残りの行が存在する場合、すなわち弟要素が存在する可能性があることになり、弟要素を対象とした要素分割処理(L+1,L1,J0,IB)を呼び出す(ステップ1709)。残りの行が存在しない場合、要素分割処理を呼び出した処理に戻る。
図17のフローチャートによれば、第1子要素を親要素と同じ配置行に配置し、第2子以降の子要素を兄要素の配置行の次行に配置することができる。
図17のフローチャートでは、子要素および弟要素を処理するつど再帰処理が発生する。再帰処理の深さを制限することなく実行した場合、スタックメモリ不足による障害を引き起こす可能性が高くなる。
子要素を対象とした再帰処理(ステップ1707)は、XML文書の階層の深さが増す際に呼び出されることになる。XML文書では階層の深さは、一般に10未満であることが多く、多く見積もっても階層の深さは100未満である。
一方、弟要素を対象とした再帰処理(ステップ1709)は、同タグ名あるいは異タグ名にかかわらず、弟要素が存在する限り呼び出されることになる。たとえば、図書リストを想定した場合、図書名など同タグ名の要素が繰り返し出現することになる。この際、図17のフローチャートに基づく処理では、繰り返し回数がある限界(たとえば、数千回)を超えた際に、スタックメモリ不足による障害を引き起こす可能性が高くなる。
図18のフローチャートは、弟要素の再帰処理を、同タグ名の要素による繰り返し処理と、異タグ名の要素による繰り返し処理とに置換したものである。なお、図17と図18において、ステップ1800から1804はステップ1700から1704に、またステップ1809から1811はステップ1706から1708に相当するステップであり、重複する説明は省略する。
ステップ1805から1808は、同タグ名の要素の繰り返し処理を行うステップであり、タグTの要素内容(L0〜L)を配置テーブル(J,I)に配置(ステップ1805)する。次の開始タグT2を取得し(ステップ1806)、同タグ名の終端要素が連続して出現する際に(ステップ1807)、配置行Jをインクリメントし、行範囲L0をL+1とし(ステップ1808)、ステップ1805に戻る。
ステップ1811から1812は、弟要素が存在する場合の繰り返し処理を行うステップである。引数の行範囲L0〜L1間をすべて処理したか否か行Lとの関係から判定し(ステップ1811)、残りの行が存在する場合、すなわち弟要素が存在する可能性がある場合、行範囲L0をL+1とし(ステップ1812)、ステップ1801に戻る。
図18のフローチャートでは、再帰処理の深さは階層値に比例(階層値×1)することとなり、スタックメモリの使用量は制限されることになる。このため、スタックメモリ不足を発生する可能性は限りなく低くなり、スタックメモリによる制約を受けることなく、XML文書を展開することができる。以降の説明において特に断りがない限り、ブロック型展開方法は、図18に示す要素分割処理によるものとする。
(3.2)ブロック型展開方法の結果
図19は、文書例2をブロック型展開方法による等価テーブルの例である。この等価テーブルの内容を速やかに理解するためには、ブロックの識別、ブロックによる入れ子構造、およびブロックによる入れ子構造とXML文書の要素(部分木)による入れ子構造の関係を把握しておく必要がある。これらの事項について順に説明した後に、等価テーブルの内容の把握方法について説明する。
図20は、図19の等価テーブルからブロックを識別した図である。図には、ブロックによる入れ子構造を説明するため、非終端要素となるブロックに番号を付しているが、終端要素となるブロックについては図面の簡素化のため番号を省略している。ブロックを識別する上でのポイントは下記のとおりである。
1)非終端要素の出現を示すノードマークは、ブロックの開始行と開始列を示す。
2)ブロックの列範囲は、ノードマークとその子孫要素が展開されうる列範囲となる。すなわち、ノードマークの配置列Iから終端番号(I)までの範囲となる。
3)ブロックの行範囲は、ノードマークの子孫要素が配置されている行範囲となる。
4)終端要素は、1列1行の大きさのブロックとなる。
なお、ブロック型復元方法では、上記3)ブロックの行範囲を、ノードマークの配置行から、同列の次のノードマークが親ブロック中に存在する場合、その直前行までとし、同列の次のノードマークが親ブロック中に存在しない場合、親ブロックの下端行までとする。このことによって、兄弟関係となるブロック間に間隙が生じることはない。たとえば、図20のブロック2004がすべて削除された場合でも、ブロック2003とブロック2005間に間隙が生じることはない。
ブロックは入れ子構造をなすため、基本的には、上位階層のブロックから子孫階層の子ブロックに向かって識別する。図20の各ブロックの入れ子関係は、以下のとおりである。
ブロック2001は、XML文書全体を示す要素Aに対応するブロックであり、子要素B、子要素Hに対応するブロック(ブロック2002など)を含む。ブロック2002は、要素Bに対応するブロックであり、子要素C、子要素D、子要素Eに対応するブロック(ブロック2003など)を含む。さらに、ブロック2003は、要素Eに対応するブロックであり、子要素F、子要素Gに対応するブロックを含む。ブロック2004から2011も同様であり、親要素に対応するブロックに囲まれるとともに、子要素を含む場合は子要素に対応するブロックを含むことになる。
このように、ブロック型展開方法による等価テーブルは、ブロックによる入れ子構造として把握することができる。ここで、ブロックを区画する線は、要素番号の階層値に応じた等高線とみなすことができる。たとえば、要素Aのブロックは階層値1の等高線となり、要素Bおよび要素Hのブロックは階層値2の等高線となる。つまり、ブロックの階層性は、パス情報の階層値を反映したものとなる。
次に、XML文書の要素(部分木)による入れ子構造(図15参照)とブロックによる入れ子構造との関係について説明する。図20のブロック2001から2011は、それぞれ図15の要素1501から1511に対応している。つまり、図20のブロックによる入れ子構造と、図15に示すXML文書の要素による入れ子構造とは、1:1の関係で対応する。また、終端要素を含めて、ブロックの出現順序と要素の出現順序についても、1:1の関係で対応する。
以上のように、XML文書の要素による入れ子構造は、ブロック型展開方法による等価テーブルにおいて、ブロックによる入れ子構造として反映され、また出現順序も保たれている。等価テーブルの内容の把握は、まずブロックによる入れ子構造を把握することから開始することになる。たとえば、図19のノードマーク"→[1]"、"→[2]"、"→[3]"に対応するブロックは、図20のブロック2001、2002、2003となり、各ブロックの内容は、次のように把握される。
ノードマーク"→[1]"に対応する要素A(ブロック2001)は、4つの要素B(ノードマーク"→[2]"、"→[7]"、"→[9]"、"→[10]"に対応するブロック2002、2007、2009、2010)と、2つの要素H("h1"と"h2"を要素内容とするブロック)とから構成される。
ノードマーク"→[2]"に対応する要素B(ブロック2002)は、5つの要素C("c1"〜"c5"を要素内容とするブロック)と、2つの要素D("d1"と"d2"を要素内容とするブロック)と、4つの要素E(ノードマーク"→[3]"〜"→[6]"に対応するブロック2003〜2006)とから構成される。
ノードマーク"→[3]"に対応する要素E(ブロック2003)は、1つの要素F("f1"の要素内容とするブロック)と、1つの要素G("g1"の要素内容とするブロック)とから構成される。
着目するブロックの内容を把握する際に、ブロックを構成する子ブロックに替わって、その子ブロックを構成する子孫ブロックで置換して把握することも可能である。しかし、たちまち複雑かつ難解となることが容易に想像される。このことは、言い換えると、着目するブロックについて構成する子ブロックのみを特定することが、速やかな内容の把握につながることを示している。子ブロックを特定する際には、子ブロックの大きさはかかわらず、着目するブロックの階層値よりも1つ大なる階層値の子ブロックのみを特定することが重要となる。
着目するブロックに異タグ名の子ブロックを複数含む場合、パス情報の順序固定性により、必ず要素番号の小さい順かつ配置行の順に子ブロックが出現する。決して、異タグ名の子ブロックが混合して出現することはない。したがって、着目するブロックにおいて子ブロックの順序は一意に特定され、兄ブロックあるいは弟ブロックとして識別することができる。
上記の要素Aについては、要素Bのブロックが要素Hのブロックよりも必ず先に出現し、また、要素Bの子ブロックでは上位から下位に向かう順に子ブロックが出現することになる。
なお、ライン型展開方法では、「等価テーブルでは、左横書き文書を読むように、各行を横方向にトレースすることによって、等価テーブルの内容を把握することができる。」と記述した。ブロック型展開方法での同様の表現は、「着目するブロックについて、左から右に向かう縦書き文書を読むように、子ブロックを縦方向にトレースすることによって、子ブロックの順序を把握することができる。」となる。
ブロック型展開方法による等価テーブルの内容を把握するためには、まず、着目するブロックを特定し、上記の方法で子ブロックの順序を把握する。子ブロックが終端要素である場合、そのまま配置データを把握する。子ブロックがさらに孫ブロックを含む場合、深さ方向の配置データを把握するために、子ブロックを着目するブロックとして移動し、子孫ブロックが存在しなくなるまで着目するブロックの移動を繰り返す。子孫ブロックが存在しない場合には、元の着目するブロックに復帰する。
子ブロックに弟ブロックが存在する場合、幅方向の配置データを把握するために、弟ブロックが終端要素である場合はその配置データを要素内容として把握し、弟ブロックがさらに孫ブロックを含む場合は弟ブロックを着目するブロックとし、深さ方向の配置データを把握する。弟ブロックが存在しない場合、元の着目するブロックに復帰する。
着目するブロックから子ブロックを特定し深さ方向の配置データを把握することと、復帰した子ブロックから弟ブロックを特定し幅方向の配置データを把握することとを、順次繰り返すことによって、着目するブロックの配置データを把握することができる。
図21は、図19の配置データに代えて述部付きのロケーションステップを示す図である。ブロック型展開方法による等価テーブルについて、図20のブロックによる区分と、図21のロケーションステップによる順位付けとによって、要素の構成と順序をより明確にすることができる。
ブロックの識別において前述したように、終端要素も1つのブロックとしてみなす。これは、たとえば要素Bおよび要素H、あるいは要素C、要素Dおよび要素Eのように、ブロックの大きさが異なる場合でも兄弟要素として同格の関係にあることによる。さらに、後述する連結処理によると、要素Bや要素Eのように子要素を伴う場合でも、これら要素を1つの終端要素として取り扱うことができる(図32参照)。
前述したようにブロック型展開方法では、ある親要素の第1子となる子要素を、親要素の出現を示すノードマークの配置行と同じ行に配置するため、ブロック型展開方法による等価テーブルには下記に示す2つの特徴がある。
第1の特徴として、ある親要素の第1子から構成される「直系」に相当する子孫要素、すなわちロケーションステップの述部が[1]となる子孫要素は、先行して出現する子孫要素の種類と数に影響されることなく、その親要素と同じ行と配置されることになる。すなわち、第1子の子孫要素の配置行はそろうことになり、第1子の子孫要素については定位置性を有することになる。
第2の特徴として、もともと表形式データからなるデータをXML文書化し、さらにブロック型展開方法による等価テーブルでは、元の表形式データと類似した形状の表形式データとして展開されることになる。
(3.4)ブロック型復元方法
ブロック型復元方法は、列範囲と行範囲とで区画される任意のブロックが、図20に示すように、1つまたは複数の子要素からなるブロック(部分木)を含むものとして捉え、ノードマークの配置をもとにして終端要素が出現するまで列分割処理と行分割処理とを繰り返し分割する。一方の分割処理(行分割処理)で、ノードマークが出現する際に開始タグを出力し、終端要素が出現する際にその要素内容を出力し、分割処理から戻る際に終了タグを出力する。ブロック中に未処理範囲が残存する場合、未処理範囲を新たなブロックとしさらに分割する。処理対象範囲の全体を処理することによって、XML文書を復元する方法である。
図22から図24および図26から図27は、第2の復元方法であるブロック型復元方法を示すフローチャートである。ここで、図22は、ブロック型復元方法の開始処理を示す図である。図23および図24は、基本的な分割処理を説明するための図であり、図26および図27は、実用的な分割処理を示す図である。いずれの図も、フローチャートの明確化のため、属性などの付加データの取り扱いについて省略している。付加データが伴っている場合、ライン型復元方法(図14参照)の場合と同様に取り扱うものとする。
図22は、ブロック型復元方法の開始処理を示すフローチャートである。まず、パス情報である階層値(I)とタグ名(I)を取得し、要素番号別に終端要素(I)と終端番号(I)の識別を行う(ステップ2201)。次に、処理対象範囲906から復元する範囲を読み取り(ステップ2202)、行範囲(J_min,J_max)と列範囲(I_min,I_max)を引数として列分割処理を呼び出す(ステップ2203)。
列分割処理は、行範囲(J0〜J1)と列範囲(I0〜I1)からなるブロックを対象として、行範囲を固定した状態で、異タグ名の兄弟要素を要素番号順に分割し、分割した列範囲で行分割処理を呼び出すと処理と、残りの列範囲を対象とした列分割を行う処理とから構成される。
図23は、列分割処理の基本型を示すフローチャートである。フローチャートに従って説明すると、まず、ブロックを区分する列IEを終端番号(I0)から特定し(ステップ2301)、配置テーブル(J0,I0)に配置データが存在することを確認した上で(ステップ2302)、細分割した列範囲(I0,IE)で行分割処理を呼び出す(ステップ2303)。
ステップ2302で配置データが存在しない場合、あるいは行分割処理からの復帰した後に、未処理の列範囲(IE+1,I1)に列幅があれば(ステップ2304)、さらに列範囲をIE+1〜I1と狭めて列分割処理を呼び出す(ステップ2305)。未処理の列範囲が存在しなければ、列分割処理を終了し戻る。
行分割処理は、行範囲(J0〜J1)と列範囲(I0〜I1)からなるブロックを対象として、列範囲を固定した状態で、同名の兄弟ブロックを配置順に分割し、分割した行範囲からXML文書を作成する処理と、残りの行範囲を対象とした行分割を行う処理とから構成される。XML文書を作成する処理は、終端要素を出力する処理と、非終端要素(子要素)を出力する処理とからなり、子要素を出力する処理は前記の列分割処理を介して行分割処理を呼び出す再帰処理となる。
図24は、行分割処理の基本型を示すフローチャートである。フローチャートに従って説明すると、まず、XML文書を作成する行範囲として、開始行JS=J0、終端行JE=J0と設定する(ステップ2401)。
I0列が終端要素か否かを判定し(ステップ2402)、終端要素である場合には、開始タグ(I0)、配置テーブル(JE,I0)、終了タグ(I0)を連結し出力する(ステップ2403)。
I0列が終端要素でない場合には、終端行JEを求めるために、I0列に配置されている次のノードマークを行範囲J0+1〜J1間で検索し、対象ブロック中に次のノードマークが存在する場合、次のノードマークの直前行をJEとし、対象ブロック中に次のノードマークが存在しない場合、JE=J1とする(ステップ2404)。
開始タグ(I0)の出力後(ステップ2405)に、分割した行範囲(JS,JE)と要素I0の子要素の列範囲(I0+1,I1)を引数として列分割処理(ステップ2300)を呼び出し(ステップ2406)、子要素を処理し復帰した後に終了タグ(I0)を出力する(ステップ2407)。
対象ブロック中に未処理の行範囲(JE+1,J1)が存在する場合(ステップ2408)、配置テーブル(JE+1,I0)に値が存在することを確認し(ステップ2409)、行範囲をJE+1からJ1と狭めて行分割処理を呼び出す(ステップ2410)。ステップ2408で未処理の行範囲が存在しない場合、あるいはステップ2409で値が存在しない場合、行分割処理を終了し戻る。
列分割処理と行分割処理とは、行分割処理の出力処理を除外すると、両者は類似したフローとなる。さらに、未処理部分(弟要素)に対する分割処理を除外すると、次のように、非終端要素(子要素)に対する分割処理が明確になる。
列分割処理は、要素(I0)の展開されうる列範囲の終端を、終端列IE=終端番号(I0)として求め(ステップ2301)、対象とする列範囲を(I0,IE)として、行分割処理を呼び出す(ステップ2303)。
行分割処理は、要素(I0)が終端要素でない場合、開始行JS(=J0)に対応する終端行JEを求め(ステップ2404)、対象とする行範囲を(JS,JE)とし、また列範囲を子要素の範囲(I0+1,I1)として、列分割処理を呼び出す(ステップ2406)。
ブロック型復元方法は、対象とするブロックを列分割処理に渡し、以降、対象とするブロックから子ブロックを特定し深さ方向の分割を繰り返すことと、復帰した子ブロックから弟ブロックを特定することを繰り返す。この過程で、対象とするブロック中の配置データをすべて特定し、XML文書を復元する。
なお、対象とするブロックを列分割処理あるいは行分割処理のいずれに渡しても、通常、同じXML文書が復元される。しかし、同一階層値の要素が複数含まれる場合、たとえば、後述する矩形領域を復元する場合、あるいは、パス情報の編集によって階層値=1の要素(ルート要素)が複数となる場合、列分割処理を先に呼び出す必要がある。
図25は、図19に示す等価テーブルから図22から図24に示すブロック型復元方法によってXML文書(図6、文書例2参照)を復元する際の、処理番号(No)、処理、処理を呼び出す時の引数(J0,J1,I0,I1)、再帰処理の深さおよび対象となる配置データの変化状況を整理した図である。ここで、処理は列分割処理(Out_I)と行分割処理(Out_J)との区分である。引数(J0,J1)は対象とするブロックの行範囲を、引数(I0,I1)は対象とするブロックの列範囲を示す。再帰処理の深さは親処理から子処理を呼び出す際に1を加算した値である。また、対象とする要素・配置データは、列分割処理では対象とする要素について開始タグの書式で示し、行分割処理ではノードマークあるいは要素内容からなる配置データを示す。
再帰処理の深さが単調に増加している範囲(たとえば、[1]〜[10])の処理では、対象とするブロックが順次に狭められていることが読み取れる。
また、再帰処理の深さが変化していない部分(たとえば、[18])、あるいは減じている部分(たとえば、[35])での処理は、子処理を呼び出した親処理への復帰を1回あるいは複数回繰り返した後に、改めて新たな子処理を呼び出している部分である。親処理は、子処理よりも再帰処理の深さが1少ない直前の処理であり、たとえば、[35]の場合は再帰処理の深さが4である[4]が親処理となる。この際、対象とするブロックは、行範囲または列範囲のいずれか一方が継続され、他方が狭められることになる。
図23および図24のフローチャートでは、子要素、同タグ名の弟要素、および異タグ名の弟要素を処理するつど再帰処理が発生する。ブロック型展開方法の場合と同様に、再帰処理の深さを制限することなく実行した場合、スタックメモリ不足による障害を引き起こす可能性が高くなる。
図26のフローチャートは、図23の異タグ名の弟要素を特定するための再帰処理(ステップ2305)を、開始端を示す変数ISを用いて繰り返し処理(ステップ2606)に置換したものである。また、図27のフローチャートは、図24の同タグ名の弟要素による再帰処理(ステップ2410)を、終端要素の場合は終了端を示す変数JEを用いて、また非終端要素の場合は開始端を示す変数JSを用いて繰り返し処理(ステップ2706、ステップ2712)に置換したものである。図23および図24の弟要素を特定するための再帰処理を、図26および図27では開始端と終了端となる変数を用いて単純なループ(繰り返し処理)に置換したものであり、処理の考え方は図23および図24と同じである。
図28は、図25と同様に、処理番号(No)、処理、処理を呼び出す時の引数(J0,J1,I0,I1)、再帰処理の深さおよび対象となる配置データについての変化状況を整理した図である。再帰処理の深さが単調に増加している範囲(たとえば、[1]〜[6])では、対象とするブロックが順次に狭められていることが読み取れる。また、図24の行分割処理では1つの処理で1つの配置データを対象とするが、図27の行分割処理では1つの処理で同タグ名の兄弟要素となる複数の配置データを対象とする。
図23および図24による処理の場合、再帰処理の深さは、階層値および兄弟要素数によって増加し、その最大深さは16となる。一方、図26および図27による処理の場合、再帰処理の深さは、兄弟要素数には影響されず、その最大深さは8となる。再帰処理の深さは階層値に比例(階層値×2)することとなり、スタックメモリの使用量は制限されることになる。このため、スタックメモリ不足を発生する可能性は限りなく低くなり、スタックメモリによる制約を受けることなく、XML文書を復元することができる。以降の説明において特に断りがない限り、ブロック型復元方法は、図26および図27に示す列分割処理と行分割処理によるものとする。
(3.5)矩形領域の復元
ブロック型復元方法では、復元の対象範囲を設定(ステップ2202)した後に、行分割処理と列分割処理とを実行している。このことは、任意の矩形領域を復元の処理対象範囲(906)として設定することが可能となることを示す。範囲の設定は、図28に示す引数のほか、複数の親要素のブロック範囲にまたがった範囲でもよい。たとえば、行範囲=1〜10、列範囲=3〜7とし復元した場合、要素Aおよび要素Bのノードマークの有無にかかわらず、対象範囲の要素C〜要素Gが復元される。
また、複数のXML文書が1つの等価テーブルに展開されている場合、複数のXML文書の展開範囲にまたがった範囲を設定することによって、複数のXML文書を復元することができる。
なお、上記のケースでは復元した文書に、見かけ上複数のルート要素が出現する可能性がある。復元した文書をXML文書の断片として取り扱う際は、見かけ上複数のルート要素が出現しても問題ない。しかし、復元した文書を1つのXML文書として取り扱う際には、XMLの仕様では複数のルート要素を認めていないため、復元した文書の全体をさらに上位階層のタグで囲む必要がある。たとえば、複数のルート要素のタグ名が「日報」である場合、すべての「日報」の要素を「月報」などの上位階層のタグ名で囲めばよい。
(3.6)ブロック型展開方法とブロック型復元方法のまとめ
「順序固定型XML文書」を対象とするブロック型展開方法とブロック型復元方法の主な特徴は以下のとおりである。
1)ブロック型展開方法は、XML文書の要素について入れ子をなす部分木として特定し、特定した部分木について、部分木から作成したパスと要素識別用パスリストとを照合し要素番号を特定し対応する配置列を求め、第1子の子要素を親要素と同じ配置行に配置する。第2子以降の子要素を兄要素の最終配置行の次行に配置する。この展開方法によると、子孫要素の配置行がそろうことになり、子孫要素の定位置性が得られる。
2)ブロック型展開方法による等価テーブルは、パス情報に基づいて、入れ子をなすブロックとして展開される。親子要素の関係をブロックによる入れ子関係で確保し、また兄弟要素の出現順序をブロックの配置順序で確保している。
3)ブロック型復元方法は、入れ子をなすブロックから親子要素を特定し、ブロックの配置順序から兄弟要素を特定する過程で、XML文書を復元する。この復元方法によると、矩形領域、あるいは同一等価テーブルの複数のXML文書を対象として復元することができる。
(4)等価テーブルを用いた解析・編集方法
XML文書の文書内容は、いずれの展開方法でも等価テーブルに配置され、表示装置106に表示される。このため、等価テーブルを用いてXML文書の文書内容を参照や編集などを容易に行うことができる。特に、XML文書の元となるデータが表形式データである場合、ブロック型展開方法で得られる等価テーブルは、元の表形式データに類似したデータ構造となる。このため、参照や編集などを効率的に行うことができる。
(4.1)配置データの解析
XML文書の文書内容について集計、分析あるいはグラフ化などの解析を行う際には、等価テーブル中のパス情報と配置データを解析材料とし、表計算ソフトウェアの各種機能を用いて、効率的に解析を行うことが可能である。なお、配置テーブルではすべて文字データとして取り扱っているため、数値データとして取り扱う場合には、文字データから数値データに変換する必要がある。
(4.2)パス情報・配置データの編集
等価テーブルは、パス情報と配置データとを分離し配置している(図9参照)。等価テーブルの編集にあたっては、パス情報と配置データのそれぞれを別々に編集することが可能である。また、列の削除や移動などのようにパス情報と配置データとを同時に編集することも可能である。なお、復元する際には毎回パス情報を読み取っているため、パス情報を編集した場合でも、編集したパス情報が直ちに復元されるXML文書に反映される。
図29は、図19に示した等価テーブルを元にした編集例を示す図である。図29では、図19の等価テーブルから編集した部分を2重枠線で示している。具体的には、図19の等価テーブルに対して以下に示す7項目の編集を行っている。なお、図30は、編集後の図29の等価テーブルに対応するロケーションステップを示す図であり、編集前のロケーションステップを示す図21と比較されるものである。また、図31は、図29の編集後の等価テーブルをブロック型復元方法により復元したXML文書を示す図であり、編集前の文書例2(図6参照)と比較されるものである。
1)タグ名の変更
図29では、図19のタグ名"B"をタグ名"BB"に変更している。その結果、図31に示す復元されたXML文書のタグ名は、"BB"となる(図31の2行目など)。
2)要素の削除
図29では、図19の要素Dの削除(要素番号の削除)を行っている。その結果、図31に示す復元されたXML文書に要素Dは出現しない。
3)要素の出現順序の変更
図29では、図19において同一階層の要素である要素Fと要素Gとを入れ替えている。その結果、図31に示す復元されたXML文書では、要素Gが要素Fの前に現れる(図31の7〜8行目など)。
4)要素の階層値の変更
図29では、図19の要素Hの階層値を2から3に変更している。その結果、要素Hのパスは"/A/H"から"/A/BB/H"となり、図31に示す復元されたXML文書では、要素Hは要素BBに含まれる(図31の16〜17行目)。
5)配置データの変更
図29では、図19の要素Cの配置データ"c1"を"c1_c1"に変更している。その結果、図31に示す復元されたXML文書では、変更した配置データに対応する要素内容が"c1_c1"となる(図31の3行目)。
6)ノードマークの移動
図29では、要素BBの7行目のノードマークを4行目へ移動している。その結果、移動前後では、要素BBの子孫要素に対して親子関係および述部を大きく変化させることになる。たとえば、要素Cについて、図21のB[1]/C[1]〜C[5]とB[2]/C[1]が、図30のBB[1]/C[1]〜C[3]とBB[2]/C[1]〜C[3]になる。
7)ブロック単位で配置データの移動
図29では、9行目と10行目の要素BBとその子孫要素を入れ替えている。その結果、図31に示す復元されたXML文書では、要素BBの子孫要素が入れ替わる(図31の35〜40行目と41〜43行目)。
上述の編集例は、ブロック型復元方法で得られる等価テーブルを対象とした基本的な操作を示している。なお、ライン型復元方法による等価テーブルの場合も基本的には同じ操作となる。ただし、ライン型復元方法の場合、編集例3)に示す列の入れ替え操作や、編集例6)に示すノードマークの入れ替え操作は、終了タグに付随する文字データやコメント系データの出現順序を乱すことになる。
また、等価テーブルにおいて、タグ名の変更、タグ名の追加またはタグ名の削除などパス情報の編集を行うことによって、簡易な構造変換を行うことができる。たとえば、要素を名前空間によって識別することが必要となる場合、名前空間を示す接頭辞を現在のタグ名に付加すればよいことになる。さらに、スキーマを検討する際には、ひな形となるXML文書を展開し、パス情報と配置テーブルを同時に変更することによって、実際のデータを伴った形でスキーマを検討することができる。
なお、等価テーブルのデータ構造は、データ保持の観点からはもろいデータ構造である。たとえば、パス情報と配置データとの対応関係は、共通の要素番号で対応するだけの疎な結合関係である。また、要素の出現順序は、先祖要素や親要素のノードマークの配置位置によって決定される。タグ名、階層値、ノードマークの配置位置などに対する少しの変更でも、XML文書の文書構造や要素の出現順序を大きく変更させることになる。しかしながら、編集の観点からは少しの変更で簡単に編集できるデータ構造であると言える。
(4.3)解析・編集処理のまとめ
ここでは、等価テーブルを用いた解析方法と編集方法について示した。編集方法の主な特徴は以下のとおりである。
1)XML文書の内容を視認性に富む表形式の等価テーブルに展開していることと、広く普及している表計算ソフトウェアを用いてことにより、等価テーブルを用いた解析や編集操作は、一般ユーザでも十分に可能である。
2)タグ名の変更、タグ名の追加または削除などパス情報の編集を行うことによって、簡易な構造変換を行うことができる。
(5)展開時の連結処理
(5.1)連結処理について
本願では、ある非終端要素に対して、その子孫要素をすべて連結した文字列を当該非終端要素の要素内容とみなすことによって、非終端要素を終端要素として取り扱う処理を、「連結処理」と呼ぶ。連結処理は、参照や編集などの対象となる部分が限られすべての要素を展開することが望ましくない部分を終端要素としてまとめる場合、あるいは部分的に「混合要素内容モデル」などの順序非固定となる要素を含むために「順序非固定型XML文書」に区分されるXML文書に対して、順序非固定となる要素を終端要素としてまとめることによって、「順序固定型XML文書」として取り扱うことができる。
なお、すべての要素を展開することが望ましくない具体的な例としては、編集対象としない要素あるいはテキスト形式で編集することが困難な要素の場合(たとえば、単なる数値情報や図形情報など)、展開することによってユーザのXML文書の理解が妨げられる場合、あるいは特定要素の繰り返しが非常に多く含まれすべての要素を展開すると展開領域が著しく大きくなる場合などである。また、「順序固定型XML文書」として取り扱いが必要となる例としては、後述の等価テーブルを用いた構造変換処理を行う場合などである。
(5.2)連結処理の手順
パス情報のある要素のタグ名を削除(または要素番号の削除)した場合、ライン型展開方法またはブロック型展開方法は削除されたタグ名を把握することができない。ある非終端要素に含まれるすべての子孫要素が削除された場合、当該非終端要素は終端要素として識別されることになり、XML文書中に削除されたタグ名の子孫要素が出現しても、終端要素の要素内容として展開されることになる(図11のステップ1110、図18のステップ1805参照)。
図32は、文書例2に対して、要素Eの子要素(F、G)のタグ名を削除(要素番号を削除)し、ブロック型展開方法による等価テーブルを示している。要素Eは、子孫要素(F、G)が連結された要素内容となる。また、図33は、配置データのロケーションステップを示した図である。
図34は、図32の等価テーブルからXML文書を復元した図である。図34の10行目は、要素Eの連結された要素内容がそのまま復元されている。なお、図34のXML文書は、文書例2とは字下げと改行の位置とが異なっており、両文書の空白文字を無視した場合、XML文書として等価な文書である。
また、連結処理を行った場合、すべての要素を展開する場合と比べて、等価テーブルの領域が小さくなるとともに展開処理および復元処理の処理速度が向上する効果がある。
(5.3)連結処理のまとめ
連結処理の主な特徴は以下のとおりである。
1)参照や編集などの対象となる部分が限られており、すべての要素を展開することが望ましくない場合、展開不要部分の連結処理が有効となる。
2)「順序非固定型XML文書」の順序非固定部分を連結処理することにより、「順序固定型XML文書」として取り扱うことができる。
3)連結処理は、すべての要素を展開する場合と比べて、等価テーブルの領域が小さくなるとともに展開処理および復元処理の処理速度が向上する効果がある。
(6)XML文書の構造変換
(6.1)XML文書の構造変換方法
異なる組織あるいはシステムでXML文書による情報交換を行う際には、共通するスキーマに基づいたXML文書である必要がある。また、十分に検討されたスキーマでも、内容の拡充や外的環境の変化などの要因によって、スキーマの更新がなされる。共通するスキーマあるいは更新されたスキーマに対応するためのXML文書の変更は、XML文書の構造変換に相当する。以下では、類似するスキーマに基づいたXML文書について、等価テーブルを用いて構造変換を行う方法について説明する。
ここで、XML文書の構造変換について、変換の可逆性の観点から区分すると次のとおりである。
1)双方向変換:XML文書AからXML文書Bへの変換、およびその逆方向の変換を行うような場合、双方向の変換となる。この場合、基本的には、文書に含まれる全要素が変換の対象となる。具体例を示すと、異なる組織間あるいはシステム間でのスキーマの相違およびスキーマの更新時に行われる構造変換が、これに該当する。
2)一方向変換:XML文書Aの部分的な要素を、1つまたは複数のXML文書Bに転送するような場合、一方向の変換となる。この場合、XML文書BからXML文書Aを復元することはできない。
対象とするXML文書は、双方向変換の場合には、変換元のXML文書と変換先のXML文書とが、「順序固定型XML文書」であることを前提とする。変換元のXML文書および変換先のXML文書がともに順序固定型スキーマに基づく場合、両者の順序固定型スキーマから固定したパス情報、および両者の対応関係を定めたパス情報対応表を、作成することができる。
一方向変換の場合、変換元のXML文書は「順序固定型XML文書」であることを前提とするが、変換先のXML文書は特定のスキーマに基づかない「整形式XML文書」であってもよい。なお、変換元のXML文書が「順序非固定型XML文書」の場合、前述の「連結処理」によって「順序固定型XML文書」として取り扱える場合は除き、固定したパス情報が得られないため、基本的に適用できない。
図35(a)から(c)は、3つのパス情報の例を示している。図35(a)に示すパス情報3501は、文書例2のパス情報である。図35(b)に示すパス情報3502は、パス情報3501に対して要素X、YおよびZを追加したパス情報である。また、図35(c)に示すパス情報3503はHTMLのタグ名を用いたパス情報の例である。
図36は、パス情報対応表の例を示している。図36のパス情報対応表は、3つのパス情報3501から3503の間における要素番号の対応関係を定義したものである。たとえば、共通番号8は、パス情報3501の5番目の要素(E)と、パス情報3502の7番目の要素(E)と、またパス情報3503の6番目の要素(tr)とが対応することを示している。
パス情報対応表は、複数のパス情報を対象として、パス情報3501とパス情報3502の関係のように、同一または類似する内容の要素について要素番号で整理し示したものである。また、上記パス情報3503のように、HTMLのタグ名からなるパス情報との対応関係も含めることができる。ただし、要素番号7と8の「td」ように、兄弟要素で同一のタグ名が出現し得るため、パス情報3501からパス情報3503への一方向の変換処理となる。
図37は、パス情報対応表を参照して実行する構造変換を示す概念図を示している。パス情報対応表3701を参照することによってパス情報Aとパス情報Bの要素の対応関係を得ることができる。XML文書Aをブロック型展開方法により展開した配置領域Aを列単位(要素番号単位)で取得し、配置領域Bの対応する列に転送する。等価テーブルBをブロック型復元方法によりXML文書Bを復元することによって、XML文書Aから構造変換されたXML文書Bを得ることができる。
(6.2)構造変換結果
図38は、文書例2(パス情報3501)の展開内容(図19参照)を、パス情報3502を持つ等価テーブルに変換して得られる等価テーブルを示す図である。図38の等価テーブルの復元結果は、文書例2のXML文書と同じ内容となる。当然のことながら、パス情報3501を持つ等価テーブルに存在していない要素(X、Y、Z)はパス情報3502を持つ等価テーブルにも存在しない。逆に、パス情報3502を持つ等価テーブルからパス情報3501を持つ等価テーブルに変換する際には、パス情報3502を持つ等価テーブルに要素(X、Y、Z)が存在する場合でも、これらの要素は伝達されず、構造変換後の等価テーブルから欠落することになる。
図39は、文書例2(パス情報3501)の展開内容(図19参照)を、パス情報3503を持つ等価テーブルに変換して得られる等価テーブルに、さらに変更を加えた例を示す図である。パス情報3503はHTML文書の断片を作成するためのパス情報であり、HTML固有のタグ名からなる。図39において、2重線枠は等価テーブルの変換後に変更を加えた内容を示している。具体的には、要素番号3の「table」にノードマークと線の太さを示す属性(「→{At{border="1"}}」)、要素番号6の「tr」の空部分にノードマーク(「→」)、および要素番号7から8の「td」の空部分に「−」を追加している。
図40(a)は、図39に示す等価テーブルをブロック型復元方法によって復元したXML文書を示している。図40(b)は、図40(a)のXML文書をHTMLブラウザによって表示した際の表示イメージを示している。図40(a)および(b)に示すように、パス情報3501に基づいたXML文書から、HTML文書の断片を作成することができる。なお、図39のパス情報に連続する同階層の要素「td」が存在すること、表示を整えるための配置データが追加されていることから、図40(a)に示す復元リストから元XML文書に戻すことはできない。一般に、XML文書からHTMLなどの表示用言語への変換は、一方向の変換となる。
(6.3)構造変換の適用性
上述したパス情報とパス情報対応表を用いた構造変換の例は、異なるスキーマが複数存在する際に、あるスキーマに基づいたXML文書から異なるスキーマに基づいたXML文書への構造変換を、簡素化することができることを示す。ただし、完全な構造変換は期待できない。
たとえば、定形書式の文書やデータを中心とするビジネス文書について、同種の文書である場合、異なる組織でもXML文書の基本的項目についてはおおむね一致する。相違点は、要素の入れ子構造、要素の出現順序、新規要素、要素と属性の使い分け、タグ名、属性名などである。上述した構造変換方法は、これらの相違点の中で、要素の入れ子構造、要素の出現順序、タグ名の相違について吸収することができる。しかし、新規要素、要素と属性の使い分け、属性名の相違などについては、吸収することができない。
このため、新規要素に対するデータの補完、あるいは要素と属性の使い分けの調整などが必要となる。ただし、上述した構造変換方法は、変換先となるXML文書の元(ソース)を作成することになるため、変換先となるXML文書を新規に作成することに比べて、効率的な変換作業を行うことができる。すなわち、上述した構造変換方法は、正確には構造変換を支援する方法と言える。なお、より効率的な変換を行うためにXSLTを併用してもよい。
一般のユーザは、類似したスキーマに基づいた複数のXML文書が存在する際に、これらのXML文書を等価テーブルに展開することによって、パス情報の対応関係を把握することができる。このことは、一般のユーザでも、パス情報対応表を作成し、パス情報とパス情報対応表を用いたXML文書の構造変換を行うことができることを示す。以下に、上述したパス情報とパス情報対応表を用いた構造変換の応用例を示す。
(例1)1つのXML文書から関連する1つまたは複数のXML文書を作成することができる。この際、変換先となるXML文書は、図40に示すように表示用言語に基づいたXML文書であってもよい。
(例2)複数のXML文書が1つの等価テーブルに展開されている場合、複数のXML文書を同時に変換すること可能である。また、複数のXML文書を取りまとめて1つのXML文書にすることも可能である。たとえば、「日報」をルート要素する複数のXML文書が1つの等価テーブルに展開されている場合、「日報」から「月報」で必要とする項目(要素)を抽出し、両者のパス情報とパス情報対応表とを作成した上で構造変換を行い、「月報」をルート要素とする1つのXML文書に取りまとめることができる。
(6.4)構造変換のまとめ
ここで説明したパス情報とパス情報対応表を用いた構造変換方法の特徴は以下のとおりである。
1)ユーザはパス情報対応表を作成することによって、XML文書の構造変換を行うことができる。
2)1つのXML文書から関連する1つまたは複数のXML文書を作成することができる。
3)複数のXML文書が1つの等価テーブルに展開されている場合、複数のXML文書を取りまとめて1つのXML文書にすることも可能である。
(7)非構造化文書のXML文書化方法
(7.1)定形書式の非構造化文書のXML文書化について
一般に、XML文書を作成する際には、まず、XML文書の材料となる文書またはデータを収集する必要がある。次に、従来の方法では、XMLエディタや特定のスキーマに基づいたXML文書を作成することのできる専用プログラムを用いて、XML文書を作成することになる。この際、材料となる文書またはデータを入力領域にコピーアンドペーストを併用した入力作業を行い、XML文書を作成することになる。
本発明による等価テーブルを用いて配置データを編集し、XML文書を作成する方法でも、XML文書の材料を収集する作業と入力作業については上記の場合と同様である。ライン型復元方法による場合、先行する要素によって後続する要素の配置行が決定されるため、基本的には要素の出現順に配置データを作成する必要があり、要素の挿入が発生する際には後続する要素の配置行をすべて移動させる必要がある。また、ブロック型復元方法による場合、XML文書の要素による入れ子構造と等価テーブルのブロックによる入れ子構造を理解した上で、適切にノードマークを配置する必要がある。いずれの方法であっても、XML文書の作成はユーザにとって労力とコストのかかる作業となる。
一方、ビジネス文書やデータの多くは、ワードプロセッサや表計算ソフトウェアを用いて、一定の書式で既に作成されていることが多い。また、ビジネス用の専用プログラムで用いられるデータは、データ互換性を考慮して、データをカンマで区切るCSV形式(Comma Separated Values)のテキストデータで記録されることが多い。CSV形式とは異なるファイル形式も多く存在するが、CSV形式に変換できるファイル形式も多い。
本願では、表計算ソフトウェア用いて作成された定形書式の文書やデータや、CSV形式に代表されるデータファイルを「定形書式の非構造化文書」として捉える。これらの文書やデータやデータファイルを対象としたXML文書化の方法について説明する。
(7.2)ワークシート上の文書・データのXML文書化
(7.2.1)ワークシート上の文書・データの特徴
ワークシート上の文書やデータ(以下、「シート情報」と記す)は、組織や個人で独自に作成され、目的や要求に応じて改変されながら継続的に利用される。独自の構造をもつ場合でも、文書やデータはある一定の位置あるいは領域に配置される。以下では、シート情報のこのような性質を、文書やデータの配置に「定位置性がある」と表現する。
シート情報は、文書やデータの記載位置を規定する枠組みがスキーマに対応し、定位置性を持って一定の位置または領域に記載された文書やデータがXML文書の要素内容に対応する。このため、シート情報を「順序固定型の文書」とみなすことができる。したがって、シート情報の定位置性と、ブロック型展開方法による等価テーブルに配置される配置データの定位置性とを利用し、シート情報から等価テーブルの配置データへの対応付けを行うことによって、シート情報からXML文書へ変換することが可能となる。また、逆方向の対応付けを行うことによって、XML文書からシート情報への変換も可能となる。
(7.2.2)XML文書化の方法
図41は、シート情報からXML文書へ変換時のデータの流れを示すが概念図である。まず、シート情報を含んでいるワークシートの未使用領域に、等価テーブルと同じ構造のテーブル(以下、「写像テーブル」と記す)を配置する。シート情報4101から写像テーブル4102への表計算ソフトウェアのリンク機能を用いた対応付け、写像テーブル4102から等価テーブル4103へ値の複写、さらに等価テーブル4103からXML文書4104へ変換する。
シート情報4101と写像テーブル4102と対応付けは、シート情報の表題情報部分4101(a〜b)を写像テーブル4102(a〜b)に対応させ、シート情報の表形式部分4101cを写像テーブルの表形式部分4102cに対応させることによって行われる。対応付けの後に、写像テーブル4102から等価テーブル4103に値を複写し、さらに、ブロック型復元方法によってXML文書4104を作成する。なお、写像テーブル4102を介さずに直接シート情報4101と等価テーブル4103の対応付けを行うことも可能である。この場合、ワークシートの管理が非常に煩雑となるとともに、再利用することが困難となる。
XML文書4104からシート情報4101を得る場合は、基本的に上述した処理と逆方向の処理を行えばよい。この操作によって、ユーザが従来使用しているワークシートを用いて、XML文書の文書内容の確認、参照、印刷などの操作を行うことができる。
なお、シート情報4101あるいはXML文書4104が多重の繰り返しを含む場合、ある程度単純な構造となるまで両者を細分化し、細分化した文書やデータの部分的な変換を繰り返し行い、XML文書の断片を作成し、組み立てる方法も有効となる。
シート情報4101からXML文書4104への対応付けを行う際の要点は以下のとおりである。
1)写像テーブル4102でノードとなる要素については、子孫要素が存在する際にノードマークを記入する。繰り返し要素が出現する際は、繰り返し回数を固定し配置行を求める。
2)シート情報4101の一部情報がXML文書4104で属性値として表現される場合、属性として文字列化する。属性が複数存在する場合、一定の順序で文字列の組み立てを行う。
3)XML文書4104で書式指定のある数値情報は、書式の変換を行った後に文字列化する。
また、XML文書4104からシート情報4101への対応付けを行う際の要点は以下のとおりである。
1)繰り返し要素が出現する際は、繰り返し回数を固定した配置行に対応付けを行う。
2)XMLの仕様では複数の属性を含む場合、属性の順序を規定していない。したがって、属性名をもとに属性値を取り出し、対応付けする工夫が必要となる。
3)等価テーブル4103では文字列と数値を区別していないため、シート情報4101が数値情報である場合に数値化する。
(7.3)CSV形式ファイルのXML文書化
(7.3.1)CSV形式データの特徴
CSV形式は、個々のプログラムで一定の順序で、データをカンマで区切って列記したデータ形式である。CSV形式ファイルでは、データの繰り返しや分岐を、次に示す一定の表現で制御する。1)データの繰り返し回数の記述、2)データの繰り返し終端を示すマークの挿入、3)データ内容の開始を示すマークによる分岐、4)データ内容を複数ファイルへの分散などである。
データの表現方法が上記1)または2)から構成されるCSV形式データは、XMLの「順序型の要素内容モデル」に相当する。また、データの表現方法が上記1)または2)に加えて3)または4)を用いて構成されたCSV形式データは、XMLの「選択型の要素内容モデル」に相当する。
「選択型の要素内容モデル」を含むCSV形式データの場合でも、3)または4)はルート要素に近い所での選択となるため、CSV形式データをワークシート上に展開し、一定の位置または領域に再配置することによって、「順序型の要素内容モデル」として扱うことができる。その結果、XML文書とCSV形式データとの変換が可能となる。
CSV形式データをワークシートに展開し再配置した際のデータ配置の定位置性と、ブロック型展開方法による等価テーブルにおける配置データの定位置性とを利用して、両者の対応付けを行うことによって、CSV形式データからXML文書へ変換することができる。またXML文書からCSV形式データへの変換も可能である。
(7.3.2)XML文書化の方法
図42は、単一のCSV形式ファイル4201または複数のCSV形式ファイル群4202から、写像テーブル4205までのデータの流れを示す図である。表計算ソフトウェアのCSV形式ファイル読み込み機能を用いて、CSV形式ファイル4201またはCSV形式ファイル群4202のデータをCSV変換用ワークシート4203に読み取る。
ユーザは、CSV形式データのデータ構造とデータ内容を参照することにより、CSV変換用ワークシート4203の読み取りデータをシート情報4204に再配置する。
ワークシート上の文書やデータをXML文書化する場合と同様に、XML文書の作成に必要なデータは、シート情報4204に含まれるデータから、表計算ソフトウェアのリンク機能を用いて、写像テーブル4205に対応付けすることによって得ることができる。最後に、写像テーブル4205から等価テーブル(不図示)に値を複写し、ブロック型復元方法によってXML文書を作成する。
なお、CSV形式データまたはXML文書が、多重の繰り返し構造や多数の分岐構造などにより非常に複雑な構造を有する場合、ある程度単純な構造となるまで両者を細分化し、細分化した文書やデータの部分的な変換を繰り返し行い、最終的に組み立てる方法が有効となる。ここで説明した方法によれば、一般ユーザでも、CSV形式ファイルからXML文書を作成することができる。
また、CSV形式ファイルのデータ構造が明確な場合、写像テーブル4205からシート情報4204へ向かう対応付けを行うことができる。XML文書をブロック型復元方法によって展開した等価テーブルを写像テーブル4205に複写し、対応付けによってシート情報4204に表示される値をCSV変換用ワークシート4203に再配置することによって、XML文書の文書内容をCSV形式ファイルに変換することが可能となる。
(7.4)非構造化文書のXML文書化のまとめ
定形書式の非構造化文書のXML文書化によって次の効果が得られる。
1)ユーザが使用している独自の構造と書式をもつワークシートにデータを入力し本来の処理を行うと同時に、XML文書を作成することができる。
2)XML文書の要素の確認、参照、印刷などの操作を、ユーザが使用している独自の構造をもつワークシートで行うことができる。
3)CSV形式ファイルを入出力データとして用いる従来のプログラムでも、等価テーブルを介してXML文書を取り扱うことができる。
(8)等価ファイルの作成方法
(8.1)等価データと等価ファイルについて
XML文書を対象としてある処理を行うプログラム(以下、「応用プログラム」と記す)が、等価テーブルに展開された配置データを利用する際には、下記の2事項が問題となる。
第1に、応用プログラムに、ライン型展開方法またはブロック型展開方法を実行するプログラムを組み込むことは、2次元配列を事前に用意する必要がある。しかしながら、2次元配列の大きさを適切に決めることは一般に困難であるため、許容されるメモリを用いて巨大な2次元配列を用意し処理を行うことになる。このことは、目的とする処理で使用するメモリに加えて、さらに多くのメモリが必要となる。また、巨大な2次元配列がメモリ中に長く存在することは望ましくない。
第2に、配置テーブルは、配置データが配置されていない空の配列要素を非常に多く含む、疎な2次元配列である。たとえば、ある値を特定の列から検索する際に、空の配列要素が連続する場合でも、対象範囲の配列要素をすべて検索しなくてはならず、効率的であるとは言い難い。特に、XML文書中に特定の要素を多く含む場合、配置テーブルの行数は増大し、上記の問題は顕著化する。
このため、ライン型展開方法またはブロック型展開方法を行うプログラムが、配置テーブルから配置データを検出し、リスト化した1次元配列(以下、「等価データ」と記す)またはファイル(以下、「等価ファイル」と記す)を作成することによって、応用プログラムは、等価データまたは等価ファイルを受け取り、処理を行うことができる。
等価データまたは等価ファイルを用いることによって、応用プログラムを簡素化することができる。また逆に、応用プログラムが等価データまたは等価ファイルを作成し、ライン型復元方法またはブロック型復元方法を実行するプログラムが、等価データまたは等価ファイルのいずれかを受け取ることによって、XML文書を作成することも可能となる。
図43は、上記の説明を補足するために、従来技術も含め、XML文書(データ)と応用プログラムとのデータの流れを示す図である。なお、図43中の展開・復元方法は、上述したライン型展開方法とライン型復元方法、あるいはブロック型展開方法とブロック型復元方法を示す。また、リスト化処理は、後述する等価テーブルから等価データまたは等価ファイルを作成する処理およびその逆方向の処理を示す。
図43(a)は、XML文書(データ)を取り扱うためにDOMを組み込んだ応用プログラムの例を示す(従来技術)。この場合、応用プログラムは、DOM木にアクセスしながら処理を行うことになる。
図43(b)は、等価テーブルを用いて処理を行う例を示している。この場合、等価テーブルの配置データを対象として、表計算ソフトウェアの各種機能を用いてユーザが操作する、あるいは等価テーブルにアクセスできるプログラム言語を用いて応用プログラムを組み込み、処理を行うことになる。
図43(c)は、等価テーブルと等価な内容をもつ等価データまたは等価ファイルを用いて処理を行う例を示す。応用プログラムは、等価データまたは等価ファイルとの入出力インターフェースを介してデータの受け渡しを行う。この場合、応用プログラムは、目的とする処理内容に、入出力インターフェースを付加すればよく、応用プログラムは簡素化される。
(8.2)等価データと等価ファイルの作成方法
等価データを作成する場合、まず、配置テーブルに対応する、要素番号、行番号および配置データを格納するための3つの1次元配列を用意する。処理対象範囲に基づいて配置テーブルの対象領域を決定し、列方向(横方向)または行方向(縦方向)のいずれかを優先して対象領域を走査し、配置データ(空でない配列要素)を検出し、その要素番号、行番号および配置データをそれぞれの1次元配列に格納する。
ここで、優先する方向とは、対象領域を走査する際の要素番号および行番号からなる二重ループにおいて、内側のループの走査方向を指す。たとえば、行方向を優先する走査の場合、同列番号の開始行から終了行までの行方向の走査を、各列で繰り返し行うことになる。また、走査の方向は、後続の処理によって適切な方向とする。たとえば、検索を主体とする処理の場合、行方向を優先した等価データの作成が有利となる。なお、要素番号と列番号は、パス情報を変更していない場合には共に同じ値となり、要素番号を列番号とみなすことができる。
図44は、図19に示すブロック型展開方法による配置テーブルを、行方向を優先して走査し、作成した等価データの内容を示す図である。当然のことながら、等価データは、要素番号によって整列されており、また同一の要素番号の等価データは行番号によって整列されている。
等価ファイルの書式は、等価テーブルと等価ファイルとのデータ変換が容易であることと、応用プログラムが等価ファイルを容易に取り扱えることとが条件となる。このため、等価ファイルの書式をCSV形式とする。さらに、データ内容を示すタグを用いて形式的にXML形式とする。
ルート要素、配置テーブルに関する情報、パス情報およびデータ情報のタグ名を、それぞれ「xml_conv」、「info」、「path」および「data」とする。XML文書とすることによって、データ内容の追加、データ順序の変更およびインターネット上でデータ交換が容易となる。なお、ここで示す等価ファイルの書式やタグ名は一例であって、限定されるものではない。
等価ファイルを作成する場合、まず、配置テーブルに関する情報とパス情報とを等価ファイルに出力する。次に、等価データを作成する場合と同様に、処理対象範囲に基づいて配置テーブルの対象領域を決定し、配置テーブルに対して列方向(横方向)または行方向(縦方向)のいずれかを優先して走査し、配置データ(空でない配列要素)を検出し、その要素番号、行番号および配置データを、等価ファイルに追加出力する。
配置テーブルに関する情報「info」は、等価ファイル作成時の対象範囲を示し、列範囲について「"Col=",開始列,終了列(改行)」、行範囲について「"Row=",開始行,終了行(改行)」の書式で出力したものである。展開方法や走査方向などの項目を、後続の処理が必要とする場合、これらの項目を追加すればよい。
パス情報「path」は、パス情報を「要素番号,階層値,タグ名(改行)」の書式で出力したものである。また、パス情報は、パス情報に加えてスキーマが規定する出現順序、出現回数または書式などの情報を含む場合、スキーマ情報「schema」に置換してもよい。なお、「解析済みパス情報」を参照できるなど、パス情報を取得するための適切な別の手段が存在する場合、パス情報「path」を省略することができる。
データ情報「data」は、配置テーブルの処理対象範囲を列方向(横方向)または行方向(縦方向)に走査し、配置データを検出し、「要素番号,行番号,"配置データ"(改行)」の書式で出力したものである。走査方向により、要素番号または行番号のいずれか一方が整列されることになる。
配置データから付加データを分離している場合、属性、開始タグ後のタグ間文字データ、終了タグ後のタグ間文字データ、開始タグ後のコメント系データおよび終了タグ後のコメント系データのタグ名を、それぞれ「At」、「Ts」、「Te」、「Cs」および「Ce」とし、分離した文字列をそれぞれのタグ名で囲み、「要素番号,行番号,"文字列"(改行)」の書式で出力する。
なお、XML文書の非終端要素の出現を示す情報としてのノードマークは、等価ファイルにおいても必要な情報であるが、ノードマークを"→"または"→[番号]"で表現する必要性はない。終端要素の空マーク("")と区別できる場合、空の文字列("")としてもよい。
また、ライン型展開方法による付加データを分離していない配置テーブルから列方向(横方向)を優先し走査する場合に限っては、行番号を省略することができる。XML文書の文書内容に対応する配置データが文書内容の記述順序に従って検出されるため、行番号を省略した等価ファイルでも、XML文書の文書内容とその記述順序は保持される。具体的には、配置テーブルに関する情報「info」から行範囲の情報を省き、データ情報「data」については、「要素番号,"配置データ"(改行)」の書式で出力する。
等価ファイルを取り扱う応用プログラムが行番号を必要とする場合、行番号を容易に作成することができる。具体的には、行番号の初期値として任意の値を設定し、着目するデータの要素番号について、1つ前に出現したデータの要素番号と同じあるいは未満の場合、行番号をインクリメントさせることによって行番号を得ることができる。
図45は、図19に示すブロック型展開方法による配置テーブルを、行方向を優先して走査し出力したリストである。また、図46は、図12に示すライン型展開方法による配置テーブルを、列方向を優先して走査し出力したリストであり、ノードマークを空の文字列("")とし、行番号を省略している。
図45と図46に示す等価ファイルは、元のXML文書と等価な文書構造と文書内容を有するファイルである。しかしながら、元のXML文書に比べて、非常に単純な構造のファイルである。また、等価ファイルは、データ内容を示すタグを用いて形式的にXML形式としている。このため、CSV形式ファイルとして読み込む際に、開始タグが各データ内容の開始を示し、また終了タグが各データ内容の終端を示すことになり、データ内容を示す開始タグと終了タグによって読み取りの分岐と終了とを容易に行うことができる。
応用プログラムは、データ情報「data」の内容を、等価データの形式あるいは配置テーブルに準じた2次元配列に容易に格納することができる。また、応用プログラムが等価ファイル中のデータを部分的に参照する場合、等価ファイルのパス情報をもとに、処理に必要となるデータの要素番号を特定し、当該要素番号のデータを応用プログラムの変数や配列に直接格納してもよい。
また、応用プログラムが等価ファイルを作成し、ライン型復元方法またはブロック型復元方法を実行するプログラムが等価ファイルを読み込み、XML文書を作成することも当然可能である。この場合、応用プログラムは、間接的ではあるものの、XML文書を作成する機能を有することになる。
したがって、応用プログラムは、等価ファイルを用いることによってXML文書を間接的に取り扱うことができる。応用プログラムは、XML文書を直接的に取り扱うプログラムに比べて、簡素化されることになる。このことは、処理の効率化、すなわち使用メモリの低減および処理速度の向上につながる。このため、ハードウェア資源が乏しく、従来の方法ではXML文書の処理が困難な処理装置でも、等価ファイルを用いることによって、XML文書を処理することが可能となる。
(8.3)等価ファイルのファイルサイズ
図6に示す文書例2、図45と図46に示す等価ファイルのファイルサイズは、Shift_JISコードとし、改行コードを改行と復帰の2バイトとする場合、文書例2が599バイト(字下げ分を含めない場合は409バイト)、図45に示す等価ファイルが584バイト、図46に示す等価ファイルが436バイトとなる。図45と図46に示すファイルサイズは、文書例2の字下げ分も含めたファイルサイズ(599バイト)よりはやや減少しているものの、文書例2の字下げ分を含めないファイルサイズ(409バイト)よりも増加している。したがって、圧縮の効果があるとは言えない。
しかし、対象とした文書例2はタグ名が1文字と短いものであり、通常のXML文書のタグ名は1文字よりも長いため、等価ファイルに変換することで圧縮の効果を期待することができる。仮に、文書例2のタグ名を10文字とした場合、XML文書のファイルサイズが1265バイト(字下げ分を含めない場合は1075バイト)となる。増加分の666バイトは、XML文書に含まれるタグ数(74タグ)について、タグ名の長さの増加分(9バイト)を乗じた値に相当する。
この場合、図45と図46に相当する等価ファイルのファイルサイズは、それぞれ656バイトと508バイトとなる。両者の増加分72バイトは、パス情報「path」の8タグ名について、タグの長さの増加分(9バイト)を乗じた値に相当する。文書例2の字下げを含めた場合、図45と図46との低減割合は、それぞれ52%(656/1265)と40%(508/1265)となる。文書例2の字下げを含めない場合でも、図45と図46との低減割合は、それぞれ61%(656/1075)と47%(508/1075)となる。
多くのXML文書でファイルサイズを低減することができ、XML文書によってはファイルサイズが40%となる。しかしながら、順序非固定型XML文書では、基本的に改行や復帰も空白文字として取り扱う必要があり、タグ間文字データが非常に多く出現することになる。特に、XHTML文書では短いタグ名が多用されることもあって、その等価ファイルのファイルサイズは、元のXML文書と比べて10%程度増加することもある。
XML文書を等価ファイルに変換することによるファイルサイズの低減割合は、タグ名の長さと要素内容および属性などの長さとの相対的な割合、改行や字下げなどを含めタグ間文字データの取り扱い、並びに、符号化文字集合などによって変動する。
なお、等価ファイルのファイルサイズをさらに減少させるためには、パス情報の削除(パス情報の取得について適切な別の手段が存在する場合)、冗長な文字列の省略(たとえば、有意でない空白文字などの省略)、配置データの短縮文字列による置換、汎用圧縮技術の適用などを併用して行えばよい。
(8.4)等価ファイルのまとめ
等価ファイルの主な特徴について整理すると、以下のとおりである。
1)等価ファイルは、等価テーブルの内容をリスト化したファイルであり、XML文書と等価な内容を有するものの、非常に単純な構造のファイルとなる。
2)応用プログラムは、等価ファイルを入出力ファイルとすることによって、間接的にXML文書を取り扱うことができ、プログラムの簡素化や処理効率の改善につながる。
3)ハードウェア資源が乏しい処理装置でも、等価ファイルを用いることによって、XML文書を処理することが可能となる。
4)多くのXML文書で、等価ファイルのファイルサイズは、元のXML文書のファイルサイズよりも減少し、圧縮の効果が認められる。
上述した発明の実施形態(実施例1〜8)では、XML文書を対象として説明した。XMLの仕様では開始タグと終了タグの省略を認めていないため、「スキーマが明示されないXML文書でも、文書構造を明確にすることができる」という特徴がある。この特徴をもとにして、XML文書の文書構造を取得した上で、XML文書の文書内容を等価テーブルあるいは等価ファイルに展開し、また復元することも可能となる。したがって、SGML文書などの構造化文書でも、開始タグと終了タグの省略がなく要素の入れ子関係が明確な場合、あるいはスキーマに基づいて省略されたタグを確実に補完することができる場合は、本発明による方法を適用することができる。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において、種々の変更が可能であることはもちろんである。
本発明を実現するためのコンピュータシステムの例を示す図である。 順序非固定型XML文書と順序固定型XML文書との包含関係を示す図である。 XML文書(XHTML文書)のパスリストの例を示す図である。 パス情報の例を示す図である。 XML文書からパス情報を取得する方法を示すフローチャートである。 XML文書の例を示す図である。 終端要素、終端番号およびパスを説明する図である。 パス情報から推定される文書型定義(DTD)の例を示す図である。 等価テーブルなどを配置したワークシートの例を示す図である。 XML文書を等価テーブルに展開する際の準備処理および後処理を示すフローチャートである。 ライン型展開方法を示すフローチャートである。 ライン型展開方法による等価テーブルの例を示す図である。 ライン型展開方法による配置データのロケーションステップを示す図である。 ライン型復元方法を示すフローチャートである。 XML文書の要素による入れ子構造の例を示す図である。 ブロック型展開方法における開始処理を示すフローチャートである。 ブロック型展開方法における要素分割処理を示すフローチャートである。 ブロック型展開方法における要素分割処理を示すフローチャートである。 ブロック型展開方法による等価テーブルの例を示す図である。 ブロック型展開方法による等価テーブルのブロックによる入れ子構造の例を示す図である。 ブロック型展開方法による配置データのロケーションステップの例を示す図である。 ブロック型復元方法における開始処理を示すフローチャートである。 ブロック型復元方法における列分割処理を示すフローチャートである。 ブロック型復元方法における行分割処理を示すフローチャートである。 分割処理における引数、再帰処理の深さ、および対象とする要素・配置データについての変化状況の例を示す図である。 ブロック型復元方法における列分割処理を示すフローチャートである。 ブロック型復元方法における行分割処理を示すフローチャートである。 分割処理における引数、再帰処理の深さ、および対象とする要素・配置データについての変化状況の例を示す図である。 等価テーブルの編集例を示す図である。 等価テーブル編集後のロケーションステップの例を示す図である。 等価テーブルをブロック型復元方法により復元したXML文書の例を示す図である。 XML文書を連結処理により展開した等価テーブルの例を示す図である。 連結処理による配置データのロケーションステップの例を示す図である。 等価テーブルからブロック型復元方法により復元したXML文書の例を示す図である。 パス情報の例を示す図である。 要素番号の対応関係を示すパス情報対応表の例を示す図である。 パス情報対応表を用いた構造変換の概要を説明する図である。 構造変換先の等価テーブルの例を示す図である。 構造変換先の等価テーブルに変更を加えた例を示す図である。 復元リストとHTMLブラウザによる表示イメージを示す図である。 シート情報からXML文書へ変換時のデータの流れを示す図である。 CSV形式ファイルから写像テーブルまでのデータの流れを示す図である。 XML文書と応用プログラムとのデータの流れを示す図である。 等価データの例を示す図である。 ブロック型展開方法による等価テーブルから行方向を優先して走査した等価ファイルの例を示す図である。 ライン型展開方法による等価テーブルから列方向を優先して走査した等価ファイルの例を示す図である。
符号の説明
101 CPU
102 RAM
103 ROM
104 外部記憶装置
105 入力装置
106 表示装置
107 通信制御装置
108 バス
900 ワークシート
901 入力領域
902 出力領域
903 作業領域
904 等価テーブル
905 スキーマ領域
906 処理対象範囲
907 配置領域(配置テーブル)
908 付加データ領域
1501〜1511 要素
2001〜2011 ブロック
3501〜3503 パス情報
3701 パス情報対応表
4101 シート情報
4102 写像テーブル
4103 等価テーブル
4104 XML文書
4201 CSV形式ファイル
4202 CSV形式ファイル群
4203 CSV変換用ワークシート
4204 シート情報
4205 写像テーブル

Claims (19)

  1. コンピュータのパス情報取得手段が、所定の記憶装置から処理対象とするXML文書を読み込み、XML文書を開始タグ、空要素タグ、終了タグ、または、開始タグと要素内容と終了タグの組み合わせ、のいずれかを読み出し単位とする構文リストに整形し、
    前記構文リストに含まれる要素の入れ子関係よりパスを特定し、新規に出現するパスをパスリストに追加し、
    前記パスリストについて、深さ優先探索を行う際の探索順序となる順序によって要素番号を決定し、該要素番号を用いて前記パスリストを整列し、前記整列後のパスリストを階層の深さを示す階層値とタグ名とに分離することにより、XML文書に含まれる要素の入れ子関係を整理し、階層の深さを示す階層値と、タグ名とからなるパス情報を取得するステップと、
    前記コンピュータのテーブル作成手段が、前記パス情報を列(行)見出しとするテーブルを作成するステップと、
    前記コンピュータのデータ配置決定手段が、
    前記パス情報から、要素番号を特定するための要素識別用パスリストを作成し、要素番号毎に該要素番号の要素が終端要素となるか否かを識別するステップと、
    前記構文リストから行Lを読み出し、要素の入れ子関係からパスを組み立て、該パスを前記要素識別用パスリストと照合することによって要素番号Iを特定するステップと、
    前記行Lが開始タグを含む際に、前記要素番号Iの要素が終端要素となる場合、該要素の要素内容を配置データとし、前記要素番号Iの要素が終端要素とならない場合、所定のノードマークを配置データとするステップと、
    前記要素に付随する属性、タグ間文字データまたはコメント系データを検出した際に、それぞれ付加データとして前記要素から求めた前記配置データに所定の書式で付加するステップと、
    前記要素番号Iが直前に配置した配置データの要素番号と比較して以下となる場合に、行(列)番号Jを1だけ増加するステップと、
    前記コンピュータのデータ格納手段が、前記テーブルの前記行(列)番号Jおよび要素番号Iに対応する列(行)に、前記配置データを格納するステップと、
    前記コンピュータのデータ保存手段が、所定の記憶装置に、前記パス情報、前記テーブルに配置データを展開したテーブルの範囲および前記テーブルを関連付けて保存するステップと、
    を含むことを特徴とするXML文書展開方法。
  2. コンピュータのパス情報取得手段が、所定の記憶装置から処理対象とするXML文書を読み込み、XML文書を開始タグ、空要素タグ、終了タグ、または、開始タグと要素内容と終了タグの組み合わせ、のいずれかを読み出し単位とする構文リストに整形し、
    前記構文リストに含まれる要素の入れ子関係よりパスを特定し、新規に出現するパスをパスリストに追加し、
    前記パスリストについて、深さ優先探索を行う際の探索順序となる順序によって要素番号を決定し、該要素番号を用いて前記パスリストを整列し、前記整列後のパスリストを階層の深さを示す階層値とタグ名とに分離することにより、該XML文書に含まれる要素の入れ子関係を整理し、階層の深さを示す階層値と、タグ名とからなるパス情報を取得するステップと、
    前記コンピュータのテーブル作成手段が、前記パス情報を列(行)見出しとするテーブルを作成するステップと、
    前記コンピュータのデータ配置決定手段が、
    記パス情報から、要素番号を特定するための要素識別用パスリストを作成し、要素番号毎に該要素番号の要素が終端要素または非終端要素のいずれになるかを識別するステップと、
    前記構文リストのルート要素の行範囲(L0,L1)、前記テーブルの展開開始行J0および要素番号IB=1を引数とし、XML文書を展開する要素分割処理を呼び出すステップと、
    前記コンピュータのデータ保存手段が、所定の記憶装置に、前記パス情報、前記テーブルに配置データを展開したテーブルの範囲および前記テーブルを関連付けて保存するステップと、
    を含むことを特徴とするXML文書展開方法。
  3. 前記要素分割処理は、
    数である行範囲(L0,L1)から、最初に出現する開始タグTおよび該開始タグTに対応する終了タグを含む行Lを取得し、要素を特定するステップと、
    記特定した要素番号IBの親階層のパスとタグ名Tからパスを組み立て、該パスを前記要素識別用パスリストと照合することによって要素番号Iを特定するステップと、
    記テーブルから前記要素番号Iおよびその子孫要素の列(行)範囲で配置データが未配置である行(列)番号Jを前記展開開始行(列)J0から検索するステップと、
    前記要素番号Iの要素が終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、前記要素の要素内容を配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記要素から求めた前記配置データに所定の書式で付加し、前記配置データを格納するステップと、
    前記要素番号Iの要素が非終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、所定のノードマークを配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記配置データに所定の書式で付加し、前記配置データを格納するとともに、行範囲(L0+1,L)、前記配置行(列)Jおよび要素番号I+1を引数とし、要素分割処理を呼び出すステップと、
    前記行範囲(L0,L1)に未処理の行範囲が含まれる場合に、行範囲(L+1,L1)、前記展開開始行(列)J0および前記要素番号IBを引数とし、要素分割処理を呼び出すステップと、
    を含むことを特徴とする請求項に記載のXML文書展開方法。
  4. 前記要素分割処理は、
    数である行範囲(L0,L1)から、最初に出現する開始タグTおよび当該開始タグTに対応する終了タグを含む行Lを取得し、要素を特定するステップと、
    記特定した要素番号IBの親階層のパスとタグ名Tからパスを組み立て、該パスを前記要素識別用パスリストと照合することによって要素番号Iを特定するステップと、
    記テーブルから前記要素番号Iとその子孫要素の列(行)範囲で配置データが未配置である行(列)番号Jを前記展開開始行(列)J0から検索するステップと、
    前記要素番号Iの要素が終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、前記要素の要素内容を配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記要素から求めた前記配置データに所定の書式で付加し、前記配置データを格納し、さらに、開始タグTと同名の開始タグが連続し出現する場合は、同名の他の開始タグに対応する終了タグを含む行Lを取得し、要素を特定するとともに、前記行(列)番号Jを1だけ増加し、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、前記要素の要素内容を配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記要素から求めた前記配置データに所定の書式で付加し、前記配置データを格納することを繰り返すステップと、
    前記要素番号Iの要素が非終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、所定のノードマークを配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記配置データに所定の書式で付加し、前記配置データを格納するとともに、行範囲(L0+1,L)、前記配置行(列)Jおよび要素番号I+1を引数とし、要素分割処理を呼び出すステップと、
    前記行範囲(L0,L1)に未処理の行範囲が含まれる場合に、L0=L+1とし、要素分割処理の最初のステップに戻るステップと、
    を含むことを特徴とする請求項に記載のXML文書展開方法。
  5. コンピュータのテーブル読出手段が、所定の記憶装置から、請求項1に記載のXML文書展開方法によって展開されパス情報を見出しとするテーブルと、XML文書を復元する前記テーブルの復元範囲と、を読み出し、更に、前記パス情報からタグ名(I)と、階層値(I)とを取得するステップと、
    前記コンピュータのXML文書復元手段が、
    前記テーブルの復元範囲を読み取り、前記復元範囲を列(行)方向に走査し、該テーブルに配置された配置データを検出し、列(行)番号から要素番号Iを特定するステップと、
    前記要素番号Iに対応する階層値(I)が直前に検出した配置データの階層値より小さい場合に、前記階層値(I)までの終了タグおよび前記終了タグに付随する付加データを所定のスタック用配列から取り出し所定の書式で出力するステップと、
    配置データから、要素内容と、属性またはコメント系データを示す付加データが付加されている場合に前記付加データと、を取り出し、前記配置データが所定のノードマークを含む場合に、開始タグ(I)および前記開始タグに付随する付加データを所定の書式で出力するとともに、終了タグ(I)および前記終了タグに付随する付加データを前記スタック用配列に積み、前記配置データが所定のノードマークを含まない場合に、前記配置データから要素内容を取り出し、開始タグ(I)、前記要素内容、終了タグ(I)および付加データを所定の書式で出力するステップと、
    前記走査終了時に未出力の終了タグおよび前記終了タグに付随する付加データを前記スタック用配列から取り出し出力するステップと、
    を含むことを特徴とするXML文書復元方法。
  6. コンピュータのテーブル読出手段が、所定の記憶装置から、請求項2ないし4いずれか一に記載のXML文書展開方法によって展開されパス情報を見出しとするテーブルと、XML文書を復元する前記テーブルの復元範囲と、を読み出し、更に、前記パス情報からタグ名(I)と、階層値(I)とを取得するステップと、
    前記コンピュータのXML文書復元手段が、
    記パス情報から、列(行)番号から特定した要素番号毎に該要素番号の要素が終端要素または非終端要素のいずれになるかを識別し、各要素の子孫要素が配置されうる列(行)範囲の終端となる列(行)番号である終端番号を識別するステップと、
    記テーブルの復元範囲を読み取り、該復元範囲の行(列)範囲および列(行)範囲を対象ブロックし、列(行)分割処理を呼び出すステップと、
    を含むことを特徴とするXML文書復元方法。
  7. 前記列(行)分割処理は、
    (列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、前記開始列(行)番号I0から前記終端番号IEを特定するステップと、
    記テーブルの位置(J0,I0)に配置データが存在する場合に、行(列)範囲(J0,J1)および列(行)範囲(I0,IE)によって特定される範囲を新たな対象ブロックとし、行(列)分割処理を呼び出すステップと、
    記初期対象ブロックに未処理の列(行)範囲が存在する場合に、行(列)範囲(J0,J1)および列(行)範囲(IE+1,I1)によって特定される範囲を新たな対象ブロックとし、列(行)分割処理を呼び出すステップと、
    を含むことを特徴とする請求項に記載のXML文書復元方法。
  8. 前記行(列)分割処理は、
    (列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、開始行(列)番号JSをJ0、終端行(列)番号JEをJ0とするステップと、
    開始列(行)番号I0に配置される配置データが終端要素である場合に、前記テーブルの位置(JE,I0)の配置データから、要素内容と、属性またはコメント系データを示す付加データが付加されている場合に前記付加データと、を取り出し、開始タグ(I0)、前記要素内容、終了タグ(I0)及び前記付加データ所定の書式で出力するステップと、
    開始列(行)番号I0に配置される配置データが非終端要素となる場合に、前記開始列(行)番号I0の行(列)JS+1からJ1間でノードマークを含む配置データを検索し、前記ノードマークを含む配置データが出現する場合は、該配置データの直前行を終端行(列)番号JEとし、前記ノードマークを含む配置データが出現しない場合は、行(列)番号J1を終端行(列)番号JEとし、
    開始列(行)番号I0に配置される配置データが非終端要素となる場合に、前記テーブルの位置(JS,I0)の配置データから、要素内容と、属性またはコメント系データを示す付加データが付加されている場合に前記付加データと、を取り出し、開始タグ(I0)および前記開始タグに付随する前記付加データを所定の書式で出力するステップと、
    (列)範囲(JS,JE)および列(行)範囲(I0+1,I1)によって特定される範囲を新たな対象ブロックとし、列(行)分割処理を呼び出すステップと、
    終了タグ(I0)および前記終了タグに付随する前記付加データを所定の書式で出力するステップと、
    前記初期対象ブロックに未処理の行(列)範囲が存在し、かつ、テーブルの位置(JE+1,I0)に配置データが存在する場合に、行(列)範囲(JE+1,J1)および列(行)範囲(I0,I1)によって特定される範囲を新たな対象ブロックとして行(列)分割処理を呼び出すステップと、
    を含むことを特徴とする請求項6または7に記載のXML文書復元方法。
  9. 記列(行)分割処理は、
    (列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、開始列(行)番号ISをI0とするステップと、
    記開始列(行)番号ISから前記終端番号IEを特定するステップと、
    前記テーブルの位置(J0,IS)に配置データが存在する場合に、行(列)範囲(J0,J1)および列(行)範囲(IS,IE)によって特定される範囲を新たな対象ブロックとし、行(列)分割処理を呼び出すステップと、
    前記初期対象ブロックに未処理の列(行)範囲が存在する場合に、前記開始列(行)番号ISをIE+1とし、前記開始列(行)番号ISから前記終端番号IEを特定するステップに戻るステップと、
    を含むことを特徴とする請求項に記載のXML文書復元方法。
  10. 前記行(列)分割処理は、
    (列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、開始行(列)番号JSをJ0、終端行(列)番号JEをJ0とするステップと、
    開始列(行)番号I0に配置される配置データが終端要素となる場合に、前記開始列(行)番号I0の行(列)JSからJ1の間で配置データを検索し、配置データが存在する場合に、前記配置データから、要素内容と、属性またはコメント系データを示す付加データが付加されている場合に前記付加データと、を取り出し、開始タグ(I0)、前記要素内容、終了タグ(I0)及び前記付加データ所定の書式で出力することを、繰り返すステップと、
    開始列(行)番号I0に配置される配置データが非終端要素となる場合に、前記開始列(行)番号I0の行(列)JS+1からJ1間で所定のノードマークを含む配置データを検索し、前記ノードマークを含む配置データが出現する場合は、該配置データの直前行を終端行(列)番号JEとし、前記ノードマークを含む配置データが出現しない場合は、行(列)番号J1を終端行(列)番号JEとし、
    開始列(行)番号I0に配置される配置データが非終端要素となる場合に、前記テーブルの位置(JS,I0)の配置データから、要素内容と、属性またはコメント系データを示す付加データが付加されている場合に前記付加データと、を取り出し、開始タグ(I0)および前記開始タグに付随する前記付加データを所定の書式で出力するステップと、
    行(列)範囲(JS,JE)および列(行)範囲(I0+1,I1)によって特定される範囲を新たな対象ブロックとし、列(行)分割処理を呼び出すステップと、
    終了タグ(I0)および前記終了タグに付随する前記付加データを所定の書式で出力するステップと、
    前記初期対象ブロックに未処理の行(列)範囲が存在する場合に、前記行(列)番号JE+1を新たな開始行(列)番号JSとし、行(列)範囲(JS,J1)を対象とした出力を、繰り返すステップと、
    を含むことを特徴とする請求項6または9に記載のXML文書復元方法。
  11. XML文書に含まれる要素の入れ子関係を示すパス情報と、請求項ないしいずれか一に記載のXML文書展開方法で展開したテーブルと、から、XML文書と等価な内容を有するデータファイルを作成する等価ファイル作成方法であって、
    コンピュータのパス情報出力手段が、所定の記憶装置から読み出した前記パス情報に基づいて、要素番号、階層値およびタグ名を出力するステップと、
    前記コンピュータの配置データ出力手段が、前記テーブルを列方向または行方向のいずれか1方向を優先して走査し、該テーブルに配置された配置データを検出した場合に、前記データファイルに、該配置データの列(行)番号に対応する要素番号、該配置データの行(列)番号および前記配置データを出力するステップと、
    を含むことを特徴とする等価ファイル作成方法。
  12. XML文書に含まれる要素の入れ子関係を示すパス情報と、請求項1に記載のXML文書展開方法で展開したテーブルとから、XML文書と等価な内容を有するデータファイルを作成する等価ファイル作成方法であって、
    コンピュータのパス情報出力手段が、所定の記憶装置から読み出した前記パス情報に基づいて、要素番号、階層値およびタグ名を出力するステップと、
    前記コンピュータの配置データ出力手段が、前記テーブルを列(行)方向に走査し、該テーブルに配置された配置データを検出した場合に、前記データファイルに、該配置データの列(行)番号に対応する要素番号および前記配置データを出力するステップと、
    を含むことを特徴とする等価ファイル作成方法。
  13. 所定の記憶装置から処理対象とするXML文書を読み込み、該XML文書を開始タグ、空要素タグ、終了タグまたは開始タグと要素内容と終了タグの組み合わせ、のいずれかを読み出し単位とする構文リストに整形する構文リスト整形手段
    前記構文リストに含まれる要素の入れ子関係よりパスを特定し、新規に出現するパスをパスリストに追加し、前記パスリストについて、深さ優先探索を行う際の探索順序となる順序によって要素番号を決定し、該要素番号を用いて前記パスリストを整列し、前記整列後のパスリストを前記階層値とタグ名とに分離するパス情報取得手段、
    前記パス情報を列(行)見出しとするテーブルを作成するテーブル作成手段
    前記パス情報から、要素番号を特定するための要素識別用パスリストを作成し、要素番号毎に該要素番号の要素が終端要素となるか否かを識別する処理と、
    前記構文リストから行Lを読み出し、要素の入れ子関係からパスを組み立て、該パスを前記要素識別用パスリストと照合することによって要素番号Iを特定する処理と、
    前記行Lが開始タグを含む際に、前記要素番号Iの要素が終端要素となる場合、該要素の要素内容を配置データとし、前記要素番号Iの要素が終端要素とならない場合、所定のノードマークを配置データとする処理と、
    前記要素に付随する属性、タグ間文字データまたはコメント系データを検出した際に、それぞれ付加データとして前記要素から求めた前記配置データに所定の書式で付加する処理と、
    前記要素番号Iが直前に配置した配置データの要素番号と比較して以下となる場合に、行(列)番号Jを1だけ増加する処理と、
    前記テーブルの前記行(列)番号Jおよび要素番号Iに対応する列(行)に、前記配置データを格納する処理と、の前記各処理を繰り返し行うデータ格納手段、及び、
    所定の記憶装置に、前記パス情報、前記テーブルに配置データを展開したテーブルの範囲および前記テーブルを関連付けて保存するデータ保存手段として、コンピュータを機能させるためのXML文書展開プログラム。
  14. 所定の記憶装置から処理対象とするXML文書を読み込み、該XML文書を開始タグ、空要素タグ、終了タグ、または、開始タグと要素内容と終了タグの組み合わせ、のいずれかを読み出し単位とする構文リストに整形する構文リスト整形手段、
    前記構文リストに含まれる要素の入れ子関係よりパスを特定し、新規に出現するパスをパスリストに追加し、前記パスリストについて、深さ優先探索を行う際の探索順序となる順序によって要素番号を決定し、該要素番号を用いて前記パスリストを整列し、前記整列後のパスリストを前記階層値とタグ名とに分離するパス情報取得手段、
    前記パス情報を列(行)見出しとするテーブルを作成するテーブル作成手順、
    前記パス情報から、前記要素番号を特定するための要素識別用パスリストを作成し、要素番号毎に該要素番号の要素が終端要素または非終端要素のいずれになるかを識別する手段と、
    前記構文リストのルート要素の行範囲(L0,L1)、前記テーブルの展開開始行J0および要素番号IB=1を引数とし、XML文書を展開する要素分割処理を呼び出す要素分割処理手段、及び、
    所定の記憶装置に、前記パス情報、前記テーブルに配置データを展開したテーブルの範囲および前記テーブルを関連付けて保存するデータ保存手段として、コンピュータを機能させるためのXML文書展開プログラム。
  15. 前記要素分割処理手段は、
    引数である行範囲(L0,L1)から、最初に出現する開始タグTおよび当該開始タグTに対応する終了タグを含む行Lを取得し、要素を特定する処理と、
    前記特定した要素番号IBの親階層のパスとタグ名Tからパスを組み立て、該パスを前記要素識別用パスリストと照合することによって要素番号Iを特定する処理と、
    前記テーブルから前記要素番号Iおよびその子孫要素の列(行)範囲で配置データが未配置である行(列)番号Jを前記展開開始行(列)J0から検索する処理と、
    前記要素番号Iの要素が終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、前記要素の要素内容を配置データとして格納し、さらに、開始タグTと同名の開始タグが連続し出現する場合は、同名の他の開始タグに対応する終了タグを含む行Lを取得し、要素を特定するとともに、前記行(列)番号Jを1だけ増加し、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、前記要素の要素内容を配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記配置データに所定の書式で付加し、前記配置データを格納することを繰り返す処理と、
    前記要素番号Iの要素が非終端要素となる場合に、前記テーブルの前記行(列)番号Jおよび前記要素番号Iに対応する列(行)に、所定のノードマークを配置データとし、前記要素に付随する属性またはコメント系データを検出した際に、それぞれ付加データとして前記配置データに所定の書式で付加し、前記配置データを格納するとともに、行範囲(L0+1,L)、前記配置行(列)Jおよび要素番号I+1を引数とし、要素分割処理を呼び出す処理と、
    前記行範囲(L0,L1)に未処理の行範囲が含まれる場合に、L0=L+1とし、要素分割処理の最初のステップに戻る処理と、を行う請求項14に記載のXML文書展開プログラム。
  16. 所定の記憶装置から、請求項13に記載のXML文書展開プログラムによって展開されパス情報を見出しとするテーブルとXML文書を復元する前記テーブルの復元範囲と、を読み出し、更に、前記パス情報からタグ名(I)と、階層値(I)とを取得する処理と、
    前記テーブルの復元範囲を読み取り、前記復元範囲を列(行)方向に走査し、該テーブルに配置された配置データを検出し、列(行)番号から要素番号Iを特定する処理と、を実行するテーブル読出手段、
    前記要素番号Iに対応する階層値(I)が直前に検出した配置データの階層値より小さい場合に、前記階層値(I)までの終了タグを所定のスタック用配列から取り出し出力する処理と、
    前記配置データが所定のノードマークを含む場合に、開始タグ(I)を出力するとともに、終了タグ(I)を前記スタック用配列に積み、前記配置データが所定のノードマークを含まない場合に、開始タグ(I)、前記配置データおよび終了タグ(I)を連結して出力する処理と、
    前記走査終了時に未出力の終了タグを前記スタック用配列から取り出し出力する処理と、を実行する出力手段、及び、
    前記配置データに付加データが付加されている場合に、前記付加データの所定の書式に基づいて、属性、タグ間文字データまたはコメント系データを復元する付加データ復元手段として、コンピュータを機能させるためのXML文書復元プログラム。
  17. 所定の記憶装置から、請求項14または15に記載のXML文書展開プログラムによって展開されパス情報を見出しとするテーブルと、XML文書を復元する前記テーブルの復元範囲と、を読み出し更に、前記パス情報からタグ名(I)と、階層値(I)とを取得する処理と、
    前記テーブルの復元範囲を読み取り、前記復元範囲を列(行)方向に走査し、該テーブルに配置された配置データを検出し、列(行)番号から要素番号Iを特定する処理と、を実行するテーブル読出手段、及び、
    前記パス情報から、列(行)番号から特定した要素番号毎に該要素番号の要素が終端要素または非終端要素のいずれになるかを識別し、各要素の子孫要素が配置されうる列(行)範囲の終端となる列(行)番号である終端番号を識別する処理と、
    前記テーブルの復元範囲を読み取り、該復元範囲の行(列)範囲および列(行)範囲を対象ブロックとし、列(行)分割処理または行(列)分割処理を呼び出す処理と、を実行する出力手段として、コンピュータを機能させるためのXML文書復元プログラム。
  18. 前記列(行)分割処理は、
    行(列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、開始列(行)番号ISをI0とする処理と、
    前記開始列(行)番号ISから前記終端番号IEを特定する処理と、
    前記テーブルの位置(J0,IS)に配置データが存在する場合に、行(列)範囲(J0,J1)および列(行)範囲(IS,IE)によって特定される範囲を新たな対象ブロックとし、行(列)分割処理を呼び出す処理と、
    前記初期対象ブロックに未処理の列(行)範囲が存在する場合に、前記開始列(行)番号ISをIE+1とし、前記開始列(行)番号ISから前記終端番号IEを特定する処理に戻る処理と、を行う請求項17に記載のXML文書復元プログラム。
  19. 前記行(列)分割処理は、
    行(列)範囲(J0,J1)および列(行)範囲(I0,I1)によって特定される範囲を初期対象ブロックとし、開始行(列)番号JSをJ0、終端行(列)番号JEをJ0とする処理と、
    開始列(行)番号I0に配置される配置データが終端要素となる場合に、行(列)番号J0からJ1までの配置データを検索し、配置データが存在する場合に、開始タグ(I0)、前記配置データおよび終了タグ(I0)を連結して出力することを、繰り返す処理と、
    開始列(行)番号I0に配置される配置データが非終端要素となる場合に、前記開始列(行)番号I0の行(列)JS+1からJ1間で所定のノードマークを含む配置データを検索し、前記ノードマークを含む配置データが出現する場合は、該配置データの直前行を終端行(列)番号JEとし、前記ノードマークを含む配置データが出現しない場合は、行(列)番号J1を終端行(列)番号JEとし、開始タグ(I0)を出力し、行(列)範囲(JS,JE)および列(行)範囲(I0+1,I1)によって特定される範囲を新たな対象ブロックとし、列(行)分割処理を呼び出し、終了タグ(I0)を出力する処理と、
    前記初期対象ブロックに未処理の行(列)範囲が存在する場合に、前記行(列)番号JE+1を新たな開始行(列)番号JSとし、行(列)範囲(JS,J1)を対象とした出力を、繰り返す処理と、を行う請求項17または18に記載のXML文書復元プログラム。
JP2006352851A 2006-12-27 2006-12-27 Xml文書の処理方法および処理プログラム Expired - Fee Related JP4086253B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006352851A JP4086253B1 (ja) 2006-12-27 2006-12-27 Xml文書の処理方法および処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006352851A JP4086253B1 (ja) 2006-12-27 2006-12-27 Xml文書の処理方法および処理プログラム

Publications (2)

Publication Number Publication Date
JP4086253B1 true JP4086253B1 (ja) 2008-05-14
JP2008165403A JP2008165403A (ja) 2008-07-17

Family

ID=39445757

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006352851A Expired - Fee Related JP4086253B1 (ja) 2006-12-27 2006-12-27 Xml文書の処理方法および処理プログラム

Country Status (1)

Country Link
JP (1) JP4086253B1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110955714A (zh) * 2019-12-03 2020-04-03 中国银行股份有限公司 一种将非结构化文本转化为结构化文本的方法及装置
CN112506942A (zh) * 2020-10-29 2021-03-16 望海康信(北京)科技股份公司 数据组合查询方法、系统及相应设备和存储介质
CN117829130A (zh) * 2024-03-06 2024-04-05 湖南亚信安慧科技有限公司 Json字符串解析方法、装置、设备及存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5165998B2 (ja) * 2007-11-14 2013-03-21 日本電信電話株式会社 コンテンツ診断装置,コンテンツ診断プログラム
JP5412905B2 (ja) * 2009-03-18 2014-02-12 日本電気株式会社 ライフサイクル情報処理装置、ライフサイクル情報処理方法及びライフサイクル情報処理プログラム
KR101769528B1 (ko) * 2016-02-26 2017-08-18 세연아이넷(주) 다양한 정보화를 위한 전자화 문서분류 및 규격화 방법

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110955714A (zh) * 2019-12-03 2020-04-03 中国银行股份有限公司 一种将非结构化文本转化为结构化文本的方法及装置
CN110955714B (zh) * 2019-12-03 2023-05-02 中国银行股份有限公司 一种将非结构化文本转化为结构化文本的方法及装置
CN112506942A (zh) * 2020-10-29 2021-03-16 望海康信(北京)科技股份公司 数据组合查询方法、系统及相应设备和存储介质
CN117829130A (zh) * 2024-03-06 2024-04-05 湖南亚信安慧科技有限公司 Json字符串解析方法、装置、设备及存储介质
CN117829130B (zh) * 2024-03-06 2024-05-17 湖南亚信安慧科技有限公司 Json字符串解析方法、装置、设备及存储介质

Also Published As

Publication number Publication date
JP2008165403A (ja) 2008-07-17

Similar Documents

Publication Publication Date Title
US7069501B2 (en) Structured document processing system and structured document processing method
US20090210780A1 (en) Document processing and management approach to creating a new document in a mark up language environment using new fragment and new scheme
US7143344B2 (en) Transformation stylesheet editor
US9690770B2 (en) Analysis of documents using rules
US6931590B2 (en) Method and system for managing documents
US20040221233A1 (en) Systems and methods for report design and generation
JP4086253B1 (ja) Xml文書の処理方法および処理プログラム
US8397157B2 (en) Context-free grammar
US20080134019A1 (en) Processing Data And Documents That Use A Markup Language
WO2006136055A1 (fr) Procédé d'exploration de données texte
US20090083300A1 (en) Document processing device and document processing method
US20070283246A1 (en) Processing Documents In Multiple Markup Representations
EP1830274A1 (en) Server device and name space issuing method
CA2311870A1 (en) Xml based system for updating a domain model and generating a formatted output
CN113608903A (zh) 一种基于xml语言的故障管理方法
US20080005085A1 (en) Server Device and Search Method
CA2422490C (en) Method and apparatus for extracting structured data from html pages
US20090083620A1 (en) Document processing device and document processing method
Simic et al. Prospects of encoding Java source code in XML
WO2005098666A1 (en) Processing data and documents that use a markup language
WO2005098664A1 (en) Processing documents in multiple markup representations
JP2007328741A (ja) 電子文書編集方法、並びにプログラム及び記憶媒体
CN116956836A (zh) 一种基于哈希树算法实现的文档文件高效自动化注释方法
JPH09231220A (ja) 論理構造を用いた文書変換生成方法
Hitz A framework for interactive document recognition

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080215

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110228

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140228

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees