大容量XML文書のデータ更新が 可能なXML編集ライブラリ

Slides:



Advertisements
Similar presentations
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Advertisements

電子書籍の検索機能の改善 木下研究室 201002713 鴫原 善寿. 背景 スマートフォンなどの携帯端末の普及と ともに電子書籍に注目が浴びた。中でも amazon の kindle など電子書籍の専用端末も 現れた。 電子書籍はデータなので本棚もいらず、 持ち運びも容易になるなど様々な恩恵を もたらした。
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
Javaのための暗黙的に型定義される構造体
On the Enumeration of Colored Trees
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
卒研:データベースチーム 第4回 DOMを使った処理
アルゴリズムとデータ構造 2011年6月13日
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
アスペクト指向プログラミングと Dependency Injection の融合
二分探索木によるサーチ.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
第10回 2007年6月29日 応用Java (Java/XML).
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
XBRLで記述された財務データを扱う言語処理系の提案
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
第2回 2007年4月20日 応用Java (Java/XML).
XMLゼミ 1.3 XML文書の表示 1.4 XMLの役割 1.5 XMLとプログラミング M2 正木 裕一.
半構造化テキストに対する 文字列照合アルゴリズム
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
数独の解生成と 解に対する番号付け 理学部 情報科学科 渡辺研究室 戸神星也.
第13回 2007年7月20日 応用Java (Java/XML).
アルゴリズムとデータ構造1 2005年6月24日
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
バイトコードを単位とするJavaスライスシステムの試作
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
項目間の対応関係を用いた XBRL財務報告書自動変換ツールの試作
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
15.cons と種々のデータ構造.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
統合開発環境によって表現された 言語機構によるコードのモジュール化
構造的類似性を持つ半構造化文書における頻度分析
設計情報の再利用を目的とした UML図の自動推薦ツール
アルゴリズムとデータ構造 2012年6月11日
独習XML ~第1章 XMLの基礎~ 1.1 XML文書の基礎 1.2 XMLとHTML
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
サブゼミ第7回 実装編① オブジェクト型とキャスト.
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 2012年10月11日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

大容量XML文書のデータ更新が 可能なXML編集ライブラリ 理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 00_01519 石川 零 注目すべき箇所のみを書く そのほかは口で説明する 1枚1分

XMLデータの利用例 例:DBLP – 196MBの文献リスト Z氏が書いた論文の題名、学会、年度のデータを集めたい references <conferences> <year>2003</year> <conference> <conference-name>OOPSLA</conference-name> <paper> <title>HydroJ: object-oriented pattern matching for evolvable distributed systems </title> <author>Keunwoo Lee</author> </paper> ... </conference> <conference-name>AOSD</conference-name> </conferences> </references> conferences ...... conference- name … conference XML文書のある利用例について説明します。 XMLはデータ記述言語として様々な分野で利用されています。 例えばDBLPから196MBの文献リストが配られています。 今回例に挙げるのはこれを簡単にした文献リストですが、このような文献リストから、 Zさんが書いた論文の題名、その論文が発表された学会、発表年度のデータをセットにして 集めて取り出したいとします。 この左の図がその文献リストの一部を表すXMLデータです。 XMLはデータを構造化して扱うことができ、その構造化されたデータは、右図のような形をしています。 データの一番上のノードはreferencesというノードです。その子ノードはconferencesといい、 その学会で発表された論文のリストを年度別に持っています。このconference-name ノードは、 その学会の名前を表しています。 Conferenceは、その学会のある年に行われた論文リストを表しています。子要素である Yearが行われた年を表しています。 その子要素にはpaper要素があります。これは1つの論文を表していて、その子要素に題名を表す Title要素と、著者を表すauthor要素を持っています。 この例では、Z氏の書いた論文の題名と学会、年度のデータを集めるという操作を考えます。 言うべきこと:  このXMLデータは、住所の情報を元に操作する機会が多く、そのため住所を元に構造化されて並べられている  必要なのは大容量XMLデータの一部 XMLで様々なデータを扱おうという動きがあり、そのため、大容量のXMLデータを扱う機会も増えている。 大容量のXMLデータでも、必要なのはその一部である。またデータ全体をメモリ上に上げて操作することはできない。 Todo: 図を書く。 この例で、プログラムが必要なデータは(右図)になる。 ・例を示す ・例を変更、階層がより深くて分散しているものが良い ・XML文書が巨大になるという事を説明したいが、このスペースでは難しいので省く ・この時点で、この場合では欲しいノードが散らばっていることについて説明する 例を書き直す 絵を書き直す ...... year paper paper title author title author

ユーザが望むデータ構造は、元の構造から変化する 取り出したいデータ構造 データを元の構造と異なる側面から取り出したい 学会別や年度別ではなく著者名 取り出したいデータ構造が、元の構造から変化 部分木ではだめ references conferences paper title author conference references year conference- paper title author conferences ......  取り出したいデータについて見てみましょう。  このXMLデータはこのように、学会別、年度別に構造化されています。  そのため、例えばある学会の、ある年度のデータを取り出したいときは、このように、データの 部分木という形で指定する事ができます。これはXMLデータが、学会別、年度別に構造化されているからです。 //この赤で囲まれた要素は、取り出したいデータを、どの要素から見ているかを示したものです。  しかし、この例で必要なのは、authorがZ氏であるようなpaper要素に対して、title要素と、その要素の1つ上に あるyear要素と、さらに1つ上にあるconference-name要素を1つにまとめたものです。  そのため、必要なデータ構造というのは、このような、paper要素から見て、子要素であるtitle要素とauthor要素と それより上にあるyear要素、conference-name要素を1つにした、このようなデータ構造であると言えます。  このように、元のデータ構造とは異なる側面からデータを見た場合、取り出したいデータ構造は 元のデータ構造と違ったものであるという事が言えます。  このとき、データは部分木で表すことができません。 100歳以上の人は全国各地にいるため、必要なデータはこの図のように、 XMLデータの中のあちこちの枝に散らばって存在します。 それぞれのデータは、このようにノードの親子関係や、子孫関係を表す枝によって結びついている。 例えばこの人のデータと、住んでいる地域を表すノードは関連付けて取り出す必要がある。 また、これらのデータは部分木として取り出すことはできない。 このXMLデータは国民のデータを住所を元に管理しているので、ある町に住む人のデータは部分木で表すことが できるが、しかし年齢という観点から見ると、必要なデータはXML文章中に散らばってしまう。 これらの必要なデータは、要素の親子関係、子孫関係を表す枝によって結びついている。 例えば100歳以上の人のデータと、住んでいる地域を表すノードは子孫関係で結びついていて、 これらを関連付けて取り出す必要がある。 言うべきこと:  このXML文書は、住んでいる地域を元にしてデータを調べるのに都合よく構造化されている。  そのため、ある地域に住む国民を探すなら、部分木で取り出せる  しかし、ある年齢に一致する国民を探す場合、欲しいデータはXMLデータ中に散らばってしまう XMLに含まれるデータは、ある1つの観点から構造化されたもので、必ずしも他の目的にあったデータ構造とは限らない。 →別な目的からデータを扱う場合、必要なデータが構造化されておらず、XML文書に散らばってしまう。 Todo:一見構造化されたデータが、別な観点から見るとまとまっていない事を示す。 ・「この例では」欲しいノードが、枝葉に散らばっている事をきちんと説明する ・aspect指向における、関心事がone moduleに固まっているということは、ここでは部分木に対応している。  one module に固まっていないのと同様に、ノードも固まっていない。部分木にならないという事を しっかりと説明する。 ・横断木を使う場合は、言葉の意味をきちんと説明しなければいけない ・Xealの場合、欲しいノードを木構造に変換するわけではないので、敢えて「木構造として抽出したい」と 述べる必要はない。 なぜ欲しいノード群が散らばってしまうのか → … conference conference- name ...... year paper paper title author title author ある観点から構造化されたXMLデータ ユーザが望むデータ構造は、元の構造から変化する

既存技術では困難な処理 DOMやSAXでこの処理を行うのは難しい DOM SAX XMLデータ全体を読み込み操作する データ構造の操作が面倒 大容量のXMLデータの操作には非効率 探したデータを別な構造へ変換する手間 SAX XMLデータを木構造として扱わない 複雑な構造を取り出すのがDOMよりさらに困難 このような処理は、既存のXML文書を操作するためのAPIである、DOMやSAXでは困難です。 DOMは、XMLデータを全て読み込み、木構造のデータとして操作するAPIです。 DOMでこの例のような事を行う場合、複雑な構造をした欲しい文献のデータを探すのも大変ですが、 探したデータを別の構造のデータに変換するという手間もあります。 また、DOMはXMLデータを全て読み込んで操作するため、大容量のXMLデータの操作には 効率が悪いと言えるでしょう。 一方SAXは、イベント駆動型のAPIです。XMLデータ全体をメモリ上に読み込まないため、 DOMよりメモリを節約して操作ができますが、XMLデータを木構造として扱わないため、 複雑な構造を取り出すのが、DOMよりさらに困難です。 SAXは文書を先頭から順に読み込み、発見した要素や文字列に対して次々と処理を行うAPIで、大容量の文書が扱える。 しかしSAXは、XMLデータをノードの列として扱い、木構造として扱わないため、要素同士が親子関係かどうかを調べる プログラムを自分で書かなければならない。 そのプログラムは煩雑で、しかもノードが散らばっている場合、コーディングがとても大変になる。 枝に沿って探さないと、見つけるのが大変 SAXは要素を処理する順を決められないため、散らばったノードを探すプログラムの記述が大変 ・この例における処理の特徴と、問題点についてもう一回整理する。 ・DOMやSAXという言葉は、説明しながら出す(アニメーション) ・SAXについては、なぜ横断的なノード集合を扱うのが難しいか、述べる必要がある。  →構造を再構成しなければならないから  (文書の先頭から順にノードを読み込む→処理を行うノードの順番が決まっている   →ノードを処理する順番を決められない   →Ex. あるノードの処理を行った後に、その子ノードを処理する事ができない   →あるノードと、次にくるノードの階層的な位置関係を知ることができない   →読み込まれるノードとノードの関係を、自分で復元して、それが必要なノードかを 判別するプログラムを書く必要がある  SAXでは、要素を処理する順番が決められている  →SAXでは、ノード間の特定の関係(親子関係、兄弟関係)を持つ要素順に処理を行うことはできない  →しかし散らばったノード間の関係は、要素の子孫関係や兄弟関係で表される  →特定の関係を持つ要素を、探すプログラムを書かなければならない // →SAXで散らばったノードを扱うためのプログラムを書かなければならない  →ノードの階層や発見順、名前を  →散らばったノードを探すプログラムは、複雑で大変

Javaライブラリ「Xeal」の提案 XMLデータの参照・修正を支援 拡張したXPath を用いて取り出したいデータ構造を指定 データ構造変換器つきのDOMとみなせる 用途に応じた型でユーザに提供 変更を元のXMLデータへ反映 XMLデータ ユーザプログラム 本研究では、このような処理を行うことのできるライブラリとしてXealを提案します。 XealはXMLデータの参照・修正を支援するライブラリです。 Xpathという言語を拡張したものを用いて、XMLデータから取り出したいデータ構造を指定する ことができます。 これは、大雑把に言えばデータ構造変換器のついたDOMのようであると言う事もできます。 またXealは、XMLデータから取り出したデータ構造を用途に応じた型でユーザに渡すことができます。 また、データの変更を元のXMLデータに反映させることができます。 特徴は箇条書きで、単語で説明 横断木-> ノード群 SAXで必要なコーディングの手間を解消 指示 Xeal 探索 取得 例:社員データを取り出すpath /questionnaires//(this[]) result[age/text()=“20”]/ {(int)following::year/text(), answer/text()} SAXでは困難な横断木の取得を簡単に行うことができる

取り出したいデータ構造の指定法 拡張したXPathを用いてデータ構造を指定 XPathは本来、経路を用いて要素を指定する言語 Paper要素をフィルタリングする条件 /references //paper [author/text()=“Z”]/ { author /text(), title /text(), (ancestor::conferences) / conference-name /text(), (ancestor::conference) / (int) year /text() } references conferences ...... conference- name … conference Xealでは、拡張したXpathを用いてXMLデータ内のデータ構造を指定します。 Xpathは本来、経路を用いて要素を指定するための言語ですが、本研究では、このXpathを データ構造を指定するための言語として用いました。 先程の例で、取り出したかったデータを指定するPathが、この左下の図です。 このPathについて説明します。 まずreference要素から、その子孫要素にあたるpaperという要素を指定しています。 このpaperをフィルタリングする条件として、author要素の内容がZ氏である、 という条件が用いられています。 以下はZ氏の文献に対して、著者、題名、学会の名前、年度を取り出すための記述です。 最初のauthorとtitleは、それぞれpaperの子要素のauthorとtitleを指定しています。 次の要素ですが、これはpaperの祖先に当たるノードで、conferences というノードを 指定しており、さらにその子要素である、conference-name要素を指定しています。 次のyear要素も同様です。  なお、赤字は拡張した文法なので、次のスライドで説明します。 ...... year paper paper title author title author その要素から見て祖先にあたる要素を指定 赤字は拡張した文法

拡張したXPathの文法について 複数のノードを指定:{} データを受け取る時のクラス、型を指定:(type) //paper /{author /text(), title /text()} データを受け取る時のクラス、型を指定:(type) /paper /(int) year /text() 探索のみに利用するノードを指定:() /paper /(ancestor::conference) /year /text() 拡張したXpathの文法について説明します。 まず、複数のノードを指定するための波カッコ記号があります。 これは、paper要素に関連付けて複数の要素を指定するために用いています。 次に、データを受け取る時のクラス、型を指定するキャスト記号があります。 この例では、年度を表すyear要素を、数として扱うためint型と指定しています。 指定した型でどのようにしてデータを受け取るかは、後で説明をします。 また、丸カッコ記号は、探索のみにノードを利用する記号です。 この例で、ancestor::conferenceは、conference-nameを探すための、単なる 位置情報として用いているため、これに対応するノードはユーザにとって 必要ありません。 そのため、この記号を用いています。 /reference //paper [author/text()=“abc”]/ { author /text(), title /text(), (ancestor::conference) /conference-name /text(), (ancestor::conferences) /(int)year /text() }

データを用途に応じた型で提供する仕組み Pathを元にデータを扱うためのクラスを生成し、データをそのクラスのオブジェクトとして提供 DOMのように生の木構造で渡されても、ユーザは不便 pubilc class Paper { String _author; String _title; int _year; String _conference_name; } Path クラス生成器 データを用途に応じた型でユーザへ提供する仕組みについて説明します。 XealはPathを元に、データ構造を扱うためのクラスを生成します。 データはそのクラスのオブジェクトとして、ユーザに提供されます。 例に挙がっていたPathを元に生成されたクラスは、この右の図のように なります。 Author、titleといった、必要なデータをクラスのフィールドとして持つ Paperクラスです。 取り出したデータ構造を、DOMのような木構造で渡されるよりは、 このようなクラスのオブジェクトとして渡された方が、ユーザにとつても 便利でしょう。 またPaperオブジェクトを、VectorやLinkedListの形で提供するための 指定も、Pathに記述することができます。 ノード群を用途に応じた構造、型でユーザへ Pathを元に、用途に応じた構造、型をしたクラスを生成し、 抽出したデータをそのクラスのインスタンスとしてユーザへ渡す →ノード群を、用途に応じたクラスのインスタンスとしてユーザへ →用途に応じたクラスはPathを元に生成され、ノード群を、そのクラスの インスタンスとしてユーザへ 簡潔にして表す。 Xealは、Pathを元にXML文書中から得られた横断木を扱うためのクラスを 生成します。 例えばこのようなPathを元に、探索した横断木を格納するためのクラスとして このようなクラスが生成されます Pathの中に格納する型や構造に関する記述を行うことができ、 横断木はPathで構造を指定したオブジェクトとしてユーザに渡されます。 Paper オブジェクト を Vector や LinkedList で提供するための指定も可能

XSLTとの比較 XSLT:XMLデータからXMLデータへの変換規則を定める言語 変換が非効率的 データの変更が困難 変換したデータを、DOMなどで再度オブジェクトにする手間 データの変更が困難 XSLTで変換したXMLデータに修正を加えても、元のXMLデータへ反映させる事が困難

Xealは高速に処理が可能 XSLTで変換したデータをDOMで操作する場合とXealで、データ構造の取り出しにかかる時間を比較 実験マシン: (UltraSPARC III 750MHz × 2, 1024MB , Solaris 8) 「何を比較した実験か」を明確に説明する 結果  一番速かった  大容量の文書を検索できた 実行時VMメモリ: 64MB 探索に用いたPath: /site//closed_auction/price/text() XSLTは、この容量のデータまでしか処理できなかった 比較対象として選んだ既存技術の組み合わせ XSLTで抽出したデータをDOMで操作 DOMでデータを読み込んだ後にXPath Engineで必要なデータを探索

まとめと今後の課題 XML文書の参照・修正を支援するJavaライブラリの作成 今後の課題 拡張XPathを用いてデータ構造を指定 用途に応じた型でユーザへ渡す 今後の課題 探索速度の向上 探索の条件を動的に与える事ができないか