Your SlideShare is downloading. ×
0
RDBを中核とした                XMLDBの開発                情報科学類 200711429 井上 寛之                アドバイザ教官:北川 博之, 天笠 俊之, 川島 英之Tuesday, ...
XMLとは               拡張可能なマークアップ言語                     データや文書を論理的な構造として表現できる                  <筑波大学>                    <情報...
XMLとは                               筑波大学                         情報学群               拡張可能なマークアップ言語                      学生 ...
データベースとは               特定のテーマに沿ったデータを集めて               管理し、容易に検索・抽出などの再利               用をできるようにしたもの                       ...
関係データベース          (Relational Database)            昨今「データベース」と言えば、「関係データベース」            関係モデルに従った厳密なテーブル設計            SQLに...
XMLデータベース          (XML Database)             XML文書をそのままデータ構造として持つDB                   または、そのまま持っているように見えるDB             厳...
XMLデータベースの種類              ネイティブXMLデータベース                    XML文書をそのまま管理する              リレーショナルXMLデータベース                  ...
目的                          XMLDBがよくわからないTuesday, January 15, 13
目的                          XMLDBがよくわからない                           作るのが手っ取り早いTuesday, January 15, 13
作ったもの                          RDB                                         SQL                                RecordTuesda...
作ったもの                          XMLDB                           RDB                                           SQL         X...
作ったもの            リ レ ー シ ョ ナ ル X M L デ ー タ ベ ース                            XML文書をそのまま管理しているように見えるXMLDB                    ...
環境               Mac OS X 10.5(Mono)                     Emacs/Mono Develop(IDE)               Windows Vista / XP(VMware F...
1.XMLから関係テーブルへの出力   SAX : Simple Api for Xml                 スタックを用いて効率的にXMLを処理する                              文書の始まり/終わり ...
1.XMLから関係テーブルへの出力                          <?xml version="1.0" encoding="utf-8"?>                          <Persons>      ...
1.XMLから関係テーブルへの出力                              Persons         Person           id= 0    Person   id= 1                Nam...
1.XMLから関係テーブルへの出力                              Persons         Person           id= 0    Person   id= 1                Nam...
1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス                     0,0,StartElement,Persons,null,1,/Persons                ...
1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス              0,0,StartElement,Persons,null,1,/Persons         4,3,Text,null,...
1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス              0,0,StartElement,Persons,null,1,/Persons         4,3,Text,null,...
2.CSVファイルからRDBテーブルへの入力              0,0,StartElement,Persons,null,1,/Persons              1,1,StartElement,Person,null,1.1...
3.XPathからSQLへの変換               Jay と呼ばれるパーサジェネレータを用いた                     が、使い方がよくわからないTuesday, January 15, 13
3.XPathからSQLへの変換               Jay と呼ばれるパーサジェネレータを用いた                     が、使い方がよくわからない                          結局自分で簡単なパ...
3.XPathからSQLへの変換 - 例1                                             //Belong                          文章内のすべての「Belong」要素を取って...
3.XPathからSQLへの変換 - 例2                                  /Persons/Person[1]              Persons要素の子要素の、1番目のPerson要素を取ってこい  ...
DEMOTuesday, January 15, 13
4.最終的なXML出力               実装が不十分                     出力されるが正しいXMLではないTuesday, January 15, 13
まとめ               コード量                     4000行前後(GUI部分を除く)               プロジェクトはオープンソースに                     http://www....
まとめ               これまであまり意識しなかった「巨大なXML文書」               を意識したコードを書く事ができた                     1GByte級のXMLを変換する事も大丈夫!      ...
Upcoming SlideShare
Loading in...5
×

RDBを中核としたXMLDBの開発

571

Published on

RDBを中核としたXMLDBの開発

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
571
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "RDBを中核としたXMLDBの開発"

  1. 1. RDBを中核とした XMLDBの開発 情報科学類 200711429 井上 寛之 アドバイザ教官:北川 博之, 天笠 俊之, 川島 英之Tuesday, January 15, 13
  2. 2. XMLとは 拡張可能なマークアップ言語 データや文書を論理的な構造として表現できる <筑波大学> <情報学群> <情報科学類> <学生 学籍番号= 200711429 > <名前>井上 寛之</名前> ......Tuesday, January 15, 13
  3. 3. XMLとは 筑波大学 情報学群 拡張可能なマークアップ言語 学生 情報科学類 井上 寛之 データや文書を論理的な構造として表現できる <筑波大学> <情報学群> <情報科学類> <学生 学籍番号= 200711429 > <名前>井上 寛之</名前> ......Tuesday, January 15, 13
  4. 4. データベースとは 特定のテーマに沿ったデータを集めて 管理し、容易に検索・抽出などの再利 用をできるようにしたもの from Wikipedia: データベースTuesday, January 15, 13
  5. 5. 関係データベース (Relational Database) 昨今「データベース」と言えば、「関係データベース」 関係モデルに従った厳密なテーブル設計 SQLによる問い合わせ 列名 データ型 Nullの許容 Id int FALSE Name nvarchar(100) TRUE Belong int TRUE SELECT Name FROM Person WHERE Belong = 3Tuesday, January 15, 13
  6. 6. XMLデータベース (XML Database) XML文書をそのままデータ構造として持つDB または、そのまま持っているように見えるDB 厳密なデータ構造を必要としない → 非常に柔軟 問い合わせ言語には「XPath」「XQuery」を用いる <?xml version="1.0" encoding="utf-8"?> <Persons> <Person id="0"> //Belong[@id= 3 ]/Name <Name>Hiroyuki Inoue</Name> <Belong id="3" /> </Person>Tuesday, January 15, 13
  7. 7. XMLデータベースの種類 ネイティブXMLデータベース XML文書をそのまま管理する リレーショナルXMLデータベース XML文書をそのまま管理しているように見えるだけ 実はXML文書をテーブル形式に変換し、RDBに格納Tuesday, January 15, 13
  8. 8. 目的 XMLDBがよくわからないTuesday, January 15, 13
  9. 9. 目的 XMLDBがよくわからない 作るのが手っ取り早いTuesday, January 15, 13
  10. 10. 作ったもの RDB SQL RecordTuesday, January 15, 13
  11. 11. 作ったもの XMLDB RDB SQL XPath Record XMLTuesday, January 15, 13
  12. 12. 作ったもの リ レ ー シ ョ ナ ル X M L デ ー タ ベ ース XML文書をそのまま管理しているように見えるXMLDB 1. XMLから関係テーブルへの出力 2. CSVファイルからRDBテーブルへの入力 3. XPathからSQLへの変換 4. 最終的なXML出力Tuesday, January 15, 13
  13. 13. 環境 Mac OS X 10.5(Mono) Emacs/Mono Develop(IDE) Windows Vista / XP(VMware Fusion) Visual Studio 2008(Visual C#) SQL Server 2005 Express Edition Transact-SQLTuesday, January 15, 13
  14. 14. 1.XMLから関係テーブルへの出力 SAX : Simple Api for Xml スタックを用いて効率的にXMLを処理する 文書の始まり/終わり , 要素の始まり/終わり , 属性 , テキスト などを見つけて、 イベント駆動的に処理をする → 省メモリで巨大なXMLを読む事ができるTuesday, January 15, 13
  15. 15. 1.XMLから関係テーブルへの出力 <?xml version="1.0" encoding="utf-8"?> <Persons> <Person id="0"> <Name>Hiroyuki Inoue</Name> <Belong id="3" /> </Person> <Person id="1"> <Name>いのうえ ひろゆき</Name> <Belong id="2" /> </Person> </Persons>Tuesday, January 15, 13
  16. 16. 1.XMLから関係テーブルへの出力 Persons Person id= 0 Person id= 1 Name Belong Name Belong 深さTuesday, January 15, 13
  17. 17. 1.XMLから関係テーブルへの出力 Persons Person id= 0 Person id= 1 Name Belong Name Belong 深さTuesday, January 15, 13
  18. 18. 1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス 0,0,StartElement,Persons,null,1,/Persons 1,1,StartElement,Person,null,1.1,/Persons/Person 2,1,Attribute,id,0,1.1,/Persons/Person 3,2,StartElement,Name,null,1.1.1,/Persons/Person/Name 4,3,Text,null,Hiroyuki Inoue,1.1.1.1,/Persons/Person/Name 5,2,StartElement,Belong,null,1.1.2,/Persons/Person/Belong 6,1,Attribute,id,3,1.1.2,/Persons/Person 7,1,StartElement,Person,null,1.2,/Persons/Person 8,1,Attribute,id,1,1.2,/Persons/Person 9,2,StartElement,Name,null,1.2.1,/Persons/Person/Name 10,3,Text,null,いのうえ ひろゆき,1.2.1.1,/Persons/Person/Name 11,2,StartElement,Belong,null,1.2.2,/Persons/Person/Belong 12,1,Attribute,id,2,1.2.2,/Persons/PersonTuesday, January 15, 13
  19. 19. 1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス 0,0,StartElement,Persons,null,1,/Persons 4,3,Text,null,Hiroyuki Inoue,1.1.1.1,/Persons/Person/Name 1,1,StartElement,Person,null,1.1,/Persons/Person 2,1,Attribute,id,0,1.1,/Persons/Personencoding="utf-8"?> <?xml version="1.0" 3,2,StartElement,Name,null,1.1.1,/Persons/Person/Name <Persons> 4,3,Text,null,Hiroyuki<Person id="0"> Inoue,1.1.1.1,/Persons/Person/Name 5,2,StartElement,Belong,null,1.1.2,/Persons/Person/Belong <Name>Hiroyuki Inoue</Name> 6,1,Attribute,id,3,1.1.2,/Persons/Person <Belong id="3" /> 7,1,StartElement,Person,null,1.2,/Persons/Person </Person> 8,1,Attribute,id,1,1.2,/Persons/Person <Person id="1"> 9,2,StartElement,Name,null,1.2.1,/Persons/Person/Name <Name>いのうえ ひろゆき</Name> 10,3,Text,null,いのうえ ひろゆき,1.2.1.1,/Persons/Person/Name <Belong id="2" /> 11,2,StartElement,Belong,null,1.2.2,/Persons/Person/Belong </Person> 12,1,Attribute,id,2,1.2.2,/Persons/Person </Persons>Tuesday, January 15, 13
  20. 20. 1.XMLから関係テーブルへの出力通し番号、深さ、ノードタイプ、名前、値、ノード番号、パス 0,0,StartElement,Persons,null,1,/Persons 4,3,Text,null,Hiroyuki Inoue,1.1.1.1,/Persons/Person/Name 8,1,Attribute,id,1,1.2,/Persons/Person 1,1,StartElement,Person,null,1.1,/Persons/Person 2,1,Attribute,id,0,1.1,/Persons/Personencoding="utf-8"?> <?xml version="1.0" <?xml version="1.0" encoding="utf-8"?> 3,2,StartElement,Name,null,1.1.1,/Persons/Person/Name <Persons> <Persons> 4,3,Text,null,Hiroyuki<Person id="0"> Inoue,1.1.1.1,/Persons/Person/Name <Person id="0"> 5,2,StartElement,Belong,null,1.1.2,/Persons/Person/Belong <Name>Hiroyuki Inoue</Name> <Name>Hiroyuki Inoue</Name> 6,1,Attribute,id,3,1.1.2,/Persons/Person <Belong id="3" /> <Belong id="3" /> 7,1,StartElement,Person,null,1.2,/Persons/Person </Person> </Person> 8,1,Attribute,id,1,1.2,/Persons/Person <Person id="1"> <Person id="1"> 9,2,StartElement,Name,null,1.2.1,/Persons/Person/Name <Name>いのうえ ひろゆき</Name> 10,3,Text,null,いのうえ ひろゆき,1.2.1.1,/Persons/Person/Name <Name>いのうえ ひろゆき</Name> <Belong id="2" /> 11,2,StartElement,Belong,null,1.2.2,/Persons/Person/Belong <Belong id="2" /> </Person> 12,1,Attribute,id,2,1.2.2,/Persons/Person </Person> </Persons> </Persons>Tuesday, January 15, 13
  21. 21. 2.CSVファイルからRDBテーブルへの入力 0,0,StartElement,Persons,null,1,/Persons 1,1,StartElement,Person,null,1.1,/Persons/Person 2,1,Attribute,id,0,1.1,/Persons/Person 3,2,StartElement,Name,null,1.1.1,/Persons/Person/Name 4,3,Text,null,Hiroyuki Inoue,1.1.1.1,/Persons/Person/Name 5,2,StartElement,Belong,null,1.1.2,/Persons/Person/Belong 6,1,Attribute,id,3,1.1.2,/Persons/Person 7,1,StartElement,Person,null,1.2,/Persons/Person 8,1,Attribute,id,1,1.2,/Persons/Person 9,2,StartElement,Name,null,1.2.1,/Persons/Person/Name 10,3,Text,null,いのうえ ひろゆき,1.2.1.1,/Persons/Person/Name 11,2,StartElement,Belong,null,1.2.2,/Persons/Person/Belong 12,1,Attribute,id,2,1.2.2,/Persons/PersonTuesday, January 15, 13
  22. 22. 3.XPathからSQLへの変換 Jay と呼ばれるパーサジェネレータを用いた が、使い方がよくわからないTuesday, January 15, 13
  23. 23. 3.XPathからSQLへの変換 Jay と呼ばれるパーサジェネレータを用いた が、使い方がよくわからない 結局自分で簡単なパーサーを書きましたTuesday, January 15, 13
  24. 24. 3.XPathからSQLへの変換 - 例1 //Belong 文章内のすべての「Belong」要素を取ってこい SELECT * FROM Table WHERE Path LIKE /%/Belong%Tuesday, January 15, 13
  25. 25. 3.XPathからSQLへの変換 - 例2 /Persons/Person[1] Persons要素の子要素の、1番目のPerson要素を取ってこい SELECT TOP(1) * FROM Table WHERE Path LIKE /Persons/Person%Tuesday, January 15, 13
  26. 26. DEMOTuesday, January 15, 13
  27. 27. 4.最終的なXML出力 実装が不十分 出力されるが正しいXMLではないTuesday, January 15, 13
  28. 28. まとめ コード量 4000行前後(GUI部分を除く) プロジェクトはオープンソースに http://www.codeplex.com/floridumTuesday, January 15, 13
  29. 29. まとめ これまであまり意識しなかった「巨大なXML文書」 を意識したコードを書く事ができた 1GByte級のXMLを変換する事も大丈夫! XML関連だけではなく、パーサ/パーサジェネレー タなどの知識も身に付いた しかし作り込みが甘いので、改善したいTuesday, January 15, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×