SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
RDBを中核とした
                XMLDBの開発

                情報科学類 200711429 井上 寛之
                アドバイザ教官:北川 博之, 天笠 俊之, 川島 英之



Tuesday, January 15, 13
XMLとは
               拡張可能なマークアップ言語

                     データや文書を論理的な構造として表現できる

                  <筑波大学>
                    <情報学群>
                      <情報科学類>
                        <学生 学籍番号= 200711429 >
                          <名前>井上 寛之</名前>
                          ......


Tuesday, January 15, 13
XMLとは
                               筑波大学
                         情報学群
               拡張可能なマークアップ言語
                      学生
                        情報科学類
                          井上 寛之
                データや文書を論理的な構造として表現できる

                  <筑波大学>
                    <情報学群>
                      <情報科学類>
                        <学生 学籍番号= 200711429 >
                          <名前>井上 寛之</名前>
                          ......


Tuesday, January 15, 13
データベースとは


               特定のテーマに沿ったデータを集めて
               管理し、容易に検索・抽出などの再利
               用をできるようにしたもの



                                 from Wikipedia: データベース

Tuesday, January 15, 13
関係データベース
          (Relational Database)

            昨今「データベース」と言えば、「関係データベース」

            関係モデルに従った厳密なテーブル設計

            SQLによる問い合わせ
                           列名         データ型         Nullの許容
                            Id          int         FALSE
                          Name     nvarchar(100)    TRUE
                          Belong        int         TRUE

        SELECT Name FROM Person WHERE Belong = 3

Tuesday, January 15, 13
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
XMLデータベースの種類
              ネイティブXMLデータベース

                    XML文書をそのまま管理する

              リレーショナルXMLデータベース

                    XML文書をそのまま管理しているように見えるだけ

                    実はXML文書をテーブル形式に変換し、RDBに格納




Tuesday, January 15, 13
目的
                          XMLDBがよくわからない




Tuesday, January 15, 13
目的
                          XMLDBがよくわからない



                           作るのが手っ取り早い


Tuesday, January 15, 13
作ったもの

                          RDB
                                         SQL


                                Record




Tuesday, January 15, 13
作ったもの
                          XMLDB
                           RDB
                                           SQL         XPath


                                  Record         XML




Tuesday, January 15, 13
作ったもの
            リ レ ー シ ョ ナ ル X M L デ ー タ ベ ース
                            XML文書をそのまま管理しているように見えるXMLDB



                          1. XMLから関係テーブルへの出力

                          2. CSVファイルからRDBテーブルへの入力

                          3. XPathからSQLへの変換

                          4. 最終的なXML出力



Tuesday, January 15, 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-SQL


Tuesday, January 15, 13
1.XMLから関係テーブルへの出力

   SAX : Simple Api for Xml
                 スタックを用いて効率的にXMLを処理する

                              文書の始まり/終わり ,
                              要素の始まり/終わり ,
                          属性 , テキスト などを見つけて、
                           イベント駆動的に処理をする


                → 省メモリで巨大なXMLを読む事ができる
Tuesday, January 15, 13
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
1.XMLから関係テーブルへの出力


                              Persons


         Person           id= 0    Person   id= 1



                Name      Belong   Name     Belong



                  深さ
Tuesday, January 15, 13
1.XMLから関係テーブルへの出力


                              Persons


         Person           id= 0    Person   id= 1



                Name      Belong   Name     Belong



                  深さ
Tuesday, January 15, 13
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/Person


Tuesday, January 15, 13
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
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
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/Person




Tuesday, January 15, 13
3.XPathからSQLへの変換

               Jay と呼ばれるパーサジェネレータを用いた

                     が、使い方がよくわからない




Tuesday, January 15, 13
3.XPathからSQLへの変換

               Jay と呼ばれるパーサジェネレータを用いた

                     が、使い方がよくわからない




                          結局自分で簡単なパーサーを書きました




Tuesday, January 15, 13
3.XPathからSQLへの変換 - 例1

                                             //Belong




                          文章内のすべての「Belong」要素を取ってこい




                          SELECT * FROM Table WHERE Path LIKE '/%/Belong%'



Tuesday, January 15, 13
3.XPathからSQLへの変換 - 例2

                                  /Persons/Person[1]




              Persons要素の子要素の、1番目のPerson要素を取ってこい




               SELECT TOP(1) * FROM Table WHERE Path LIKE '/Persons/Person%'



Tuesday, January 15, 13
DEMO
Tuesday, January 15, 13
4.最終的なXML出力

               実装が不十分

                     出力されるが正しいXMLではない




Tuesday, January 15, 13
まとめ

               コード量

                     4000行前後(GUI部分を除く)

               プロジェクトはオープンソースに

                     http://www.codeplex.com/floridum




Tuesday, January 15, 13
まとめ
               これまであまり意識しなかった「巨大なXML文書」
               を意識したコードを書く事ができた

                     1GByte級のXMLを変換する事も大丈夫!

               XML関連だけではなく、パーサ/パーサジェネレー
               タなどの知識も身に付いた

                     しかし作り込みが甘いので、改善したい



Tuesday, January 15, 13

Mais conteúdo relacionado

Destaque

6 Doamne Cine Esti
6 Doamne Cine Esti6 Doamne Cine Esti
6 Doamne Cine Estialexcurbet
 
Pres Superlizzy Mc D Europe
Pres Superlizzy Mc D EuropePres Superlizzy Mc D Europe
Pres Superlizzy Mc D Europefabiomuratori
 
Thomaswhiteresume1
Thomaswhiteresume1Thomaswhiteresume1
Thomaswhiteresume1Thomas Whtie
 
Processing workshop intro
Processing workshop introProcessing workshop intro
Processing workshop introJuraj Bednar
 
David Scott Irevised Pp
David Scott Irevised PpDavid Scott Irevised Pp
David Scott Irevised PpDavid Scott
 
Ultimate Hq Wallpapers
Ultimate Hq WallpapersUltimate Hq Wallpapers
Ultimate Hq Wallpapersfondas vakalis
 
Work Experience from Fugro and Svitzer
Work Experience from Fugro and SvitzerWork Experience from Fugro and Svitzer
Work Experience from Fugro and Svitzerlondal
 
Connecting With Customers
Connecting With CustomersConnecting With Customers
Connecting With Customershometown
 
Coaching & Intervisie Logeioncongres 2008
Coaching & Intervisie Logeioncongres 2008Coaching & Intervisie Logeioncongres 2008
Coaching & Intervisie Logeioncongres 2008Lex_Hofstra
 
Album FotogràFic
Album FotogràFicAlbum FotogràFic
Album FotogràFicAniram_89
 
Dannys Slides
Dannys SlidesDannys Slides
Dannys SlidesMary Rose
 
Credit Its A Brand New Day
Credit Its A Brand New DayCredit Its A Brand New Day
Credit Its A Brand New Daypeglover
 

Destaque (19)

Deberes Del 4 Al 8 De Mayo
Deberes Del 4 Al 8 De MayoDeberes Del 4 Al 8 De Mayo
Deberes Del 4 Al 8 De Mayo
 
6 Doamne Cine Esti
6 Doamne Cine Esti6 Doamne Cine Esti
6 Doamne Cine Esti
 
Carpe Diem
Carpe DiemCarpe Diem
Carpe Diem
 
Pres Superlizzy Mc D Europe
Pres Superlizzy Mc D EuropePres Superlizzy Mc D Europe
Pres Superlizzy Mc D Europe
 
Thomaswhiteresume1
Thomaswhiteresume1Thomaswhiteresume1
Thomaswhiteresume1
 
Processing workshop intro
Processing workshop introProcessing workshop intro
Processing workshop intro
 
David Scott Irevised Pp
David Scott Irevised PpDavid Scott Irevised Pp
David Scott Irevised Pp
 
ICS Capabilites
ICS CapabilitesICS Capabilites
ICS Capabilites
 
Ultimate Hq Wallpapers
Ultimate Hq WallpapersUltimate Hq Wallpapers
Ultimate Hq Wallpapers
 
激 勵 Motivation
激 勵 Motivation激 勵 Motivation
激 勵 Motivation
 
Work Experience from Fugro and Svitzer
Work Experience from Fugro and SvitzerWork Experience from Fugro and Svitzer
Work Experience from Fugro and Svitzer
 
Connecting With Customers
Connecting With CustomersConnecting With Customers
Connecting With Customers
 
Coaching & Intervisie Logeioncongres 2008
Coaching & Intervisie Logeioncongres 2008Coaching & Intervisie Logeioncongres 2008
Coaching & Intervisie Logeioncongres 2008
 
Avivo
AvivoAvivo
Avivo
 
Album FotogràFic
Album FotogràFicAlbum FotogràFic
Album FotogràFic
 
Dannys Slides
Dannys SlidesDannys Slides
Dannys Slides
 
Praveen Khanna
Praveen KhannaPraveen Khanna
Praveen Khanna
 
Yahoo! Mobile AD
Yahoo! Mobile ADYahoo! Mobile AD
Yahoo! Mobile AD
 
Credit Its A Brand New Day
Credit Its A Brand New DayCredit Its A Brand New Day
Credit Its A Brand New Day
 

Mais de Hiroyuki Inoue

クックパッドの開発プロセス
クックパッドの開発プロセスクックパッドの開発プロセス
クックパッドの開発プロセスHiroyuki Inoue
 
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャリアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャHiroyuki Inoue
 
LODのOLAP分析を可能にするETLフレームワークの提案
LODのOLAP分析を可能にするETLフレームワークの提案LODのOLAP分析を可能にするETLフレームワークの提案
LODのOLAP分析を可能にするETLフレームワークの提案Hiroyuki Inoue
 
OLAPを利用したLinked Dataの分析処理
OLAPを利用したLinked Dataの分析処理OLAPを利用したLinked Dataの分析処理
OLAPを利用したLinked Dataの分析処理Hiroyuki Inoue
 
Analytical processing for Linked Data using OLAP
Analytical processing for Linked Data using OLAPAnalytical processing for Linked Data using OLAP
Analytical processing for Linked Data using OLAPHiroyuki Inoue
 

Mais de Hiroyuki Inoue (7)

クックパッドの開発プロセス
クックパッドの開発プロセスクックパッドの開発プロセス
クックパッドの開発プロセス
 
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャリアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
 
PARIS at SWIM seminar
PARIS at SWIM seminarPARIS at SWIM seminar
PARIS at SWIM seminar
 
LODのOLAP分析を可能にするETLフレームワークの提案
LODのOLAP分析を可能にするETLフレームワークの提案LODのOLAP分析を可能にするETLフレームワークの提案
LODのOLAP分析を可能にするETLフレームワークの提案
 
Swim_2013_02_19_jpn
Swim_2013_02_19_jpnSwim_2013_02_19_jpn
Swim_2013_02_19_jpn
 
OLAPを利用したLinked Dataの分析処理
OLAPを利用したLinked Dataの分析処理OLAPを利用したLinked Dataの分析処理
OLAPを利用したLinked Dataの分析処理
 
Analytical processing for Linked Data using OLAP
Analytical processing for Linked Data using OLAPAnalytical processing for Linked Data using OLAP
Analytical processing for Linked Data using OLAP
 

RDBを中核としたXMLDBの開発

  • 1. RDBを中核とした XMLDBの開発 情報科学類 200711429 井上 寛之 アドバイザ教官:北川 博之, 天笠 俊之, 川島 英之 Tuesday, January 15, 13
  • 2. XMLとは 拡張可能なマークアップ言語 データや文書を論理的な構造として表現できる <筑波大学> <情報学群> <情報科学類> <学生 学籍番号= 200711429 > <名前>井上 寛之</名前> ...... Tuesday, January 15, 13
  • 3. XMLとは 筑波大学 情報学群 拡張可能なマークアップ言語 学生 情報科学類 井上 寛之 データや文書を論理的な構造として表現できる <筑波大学> <情報学群> <情報科学類> <学生 学籍番号= 200711429 > <名前>井上 寛之</名前> ...... Tuesday, January 15, 13
  • 4. データベースとは 特定のテーマに沿ったデータを集めて 管理し、容易に検索・抽出などの再利 用をできるようにしたもの from Wikipedia: データベース Tuesday, January 15, 13
  • 5. 関係データベース (Relational Database) 昨今「データベース」と言えば、「関係データベース」 関係モデルに従った厳密なテーブル設計 SQLによる問い合わせ 列名 データ型 Nullの許容 Id int FALSE Name nvarchar(100) TRUE Belong int TRUE SELECT Name FROM Person WHERE Belong = 3 Tuesday, January 15, 13
  • 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. XMLデータベースの種類 ネイティブXMLデータベース XML文書をそのまま管理する リレーショナルXMLデータベース XML文書をそのまま管理しているように見えるだけ 実はXML文書をテーブル形式に変換し、RDBに格納 Tuesday, January 15, 13
  • 8. 目的 XMLDBがよくわからない Tuesday, January 15, 13
  • 9. 目的 XMLDBがよくわからない 作るのが手っ取り早い Tuesday, January 15, 13
  • 10. 作ったもの RDB SQL Record Tuesday, January 15, 13
  • 11. 作ったもの XMLDB RDB SQL XPath Record XML Tuesday, January 15, 13
  • 12. 作ったもの リ レ ー シ ョ ナ ル X M L デ ー タ ベ ース XML文書をそのまま管理しているように見えるXMLDB 1. XMLから関係テーブルへの出力 2. CSVファイルからRDBテーブルへの入力 3. XPathからSQLへの変換 4. 最終的なXML出力 Tuesday, January 15, 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-SQL Tuesday, January 15, 13
  • 14. 1.XMLから関係テーブルへの出力 SAX : Simple Api for Xml スタックを用いて効率的にXMLを処理する 文書の始まり/終わり , 要素の始まり/終わり , 属性 , テキスト などを見つけて、 イベント駆動的に処理をする → 省メモリで巨大なXMLを読む事ができる Tuesday, January 15, 13
  • 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. 1.XMLから関係テーブルへの出力 Persons Person id= 0 Person id= 1 Name Belong Name Belong 深さ Tuesday, January 15, 13
  • 17. 1.XMLから関係テーブルへの出力 Persons Person id= 0 Person id= 1 Name Belong Name Belong 深さ Tuesday, January 15, 13
  • 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/Person Tuesday, January 15, 13
  • 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. 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. 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/Person Tuesday, January 15, 13
  • 22. 3.XPathからSQLへの変換 Jay と呼ばれるパーサジェネレータを用いた が、使い方がよくわからない Tuesday, January 15, 13
  • 23. 3.XPathからSQLへの変換 Jay と呼ばれるパーサジェネレータを用いた が、使い方がよくわからない 結局自分で簡単なパーサーを書きました Tuesday, January 15, 13
  • 24. 3.XPathからSQLへの変換 - 例1 //Belong 文章内のすべての「Belong」要素を取ってこい SELECT * FROM Table WHERE Path LIKE '/%/Belong%' Tuesday, January 15, 13
  • 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
  • 27. 4.最終的なXML出力 実装が不十分 出力されるが正しいXMLではない Tuesday, January 15, 13
  • 28. まとめ コード量 4000行前後(GUI部分を除く) プロジェクトはオープンソースに http://www.codeplex.com/floridum Tuesday, January 15, 13
  • 29. まとめ これまであまり意識しなかった「巨大なXML文書」 を意識したコードを書く事ができた 1GByte級のXMLを変換する事も大丈夫! XML関連だけではなく、パーサ/パーサジェネレー タなどの知識も身に付いた しかし作り込みが甘いので、改善したい Tuesday, January 15, 13