XML wellformed XML document XML xml version 1

  • Slides: 35
Download presentation

整形式XML文書 (well-formed XML document) XMLの構文の規則のすべてに準拠している <? xml version=“ 1. 0” encoding=“Shift_JIS”? > <!-- かんたんなXML文書

整形式XML文書 (well-formed XML document) XMLの構文の規則のすべてに準拠している <? xml version=“ 1. 0” encoding=“Shift_JIS”? > <!-- かんたんなXML文書 --> <cars> <car id=“ 1001” country=“日本”> <name>乗用車</name> <price>150</price> </car> <car id=“ 1002” country=“アメリカ”> <name>トラック</name> <price>250</price> </cars> 階層構造(木構造) cars car ルート要素 要素 name price 乗用車 150 デモ会 ryuryu 2009/12/23 5

属性名 id 従業員番号 name 従業員名 sex 従業員の性別 year 従業員の入社年度 salary email 従業員の給料 従業員のEmailアドレス manager

属性名 id 従業員番号 name 従業員名 sex 従業員の性別 year 従業員の入社年度 salary email 従業員の給料 従業員のEmailアドレス manager 従業員のマネージャーの従業員番号 リレーション EMPLOYEE(従業員) EMPLOYEE テーブル 内容 id name sex year email salary manager 1 芽根 宗五郎 MAN 1979 sougorou_mene@xyz. ne. jp 1080 8 2 室宮 信之助 MAN 1976 nobunosuke_muromiya@xyz. ne. jp 1200 8 3 四十栄 光栄 MAN 1972 terue_yotoei@zzz. ne. jp 1400 8 4 山柿 重四郎 MAN 1971 sigesirou_yamagaki@bbb. or. jp 1500 8 5 仁保 つぎ江 WOMAN 1983 tugie_zinbo@abc. co. jp 1030 8 ・・・ ・・・ ・・・ MAN 2002 tomoe_tougo@abc. co. jp 500 4 MAN 2006 kazutosi_nagakami@aaa. co. jp 400 5 19 東護 外茂枝 20 永上 計利 21 ryuryu (中略) ・・・ ryuryu@db. ics. keio. ac. jp デモ会 ryuryu 2009/12/23 2 11

【装飾子】 att (cont. ) クエリー実行結果 グルーピング要素にも 属性の付加が可能 GENERATE XML [ [ e. id@{att=従業員ID, attend},

【装飾子】 att (cont. ) クエリー実行結果 グルーピング要素にも 属性の付加が可能 GENERATE XML [ [ e. id@{att=従業員ID, attend}, e. name@{tag=従業員名, attstart}, e. sex@{att=性別, attend}, e. salary@{tag=給料} ]!@{tag=従業員, attstart} ]!@{tag=従業員リスト} FROM employee e デモ会 ryuryu 2009/12/23 14

クエリー実行結果 null値の処理(3通りの装飾子指定) null値処理の装飾子を何も 指定しない場合は、デフォルト によりEMPTY_ON_NULL GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, e. sex@{tag=性別,

クエリー実行結果 null値の処理(3通りの装飾子指定) null値処理の装飾子を何も 指定しない場合は、デフォルト によりEMPTY_ON_NULL GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, e. sex@{tag=性別, ABSENT_ON_NULL}, e. year@{tag=入社年度, NULL_ON_NULL}, e. email@{tag=Eメール}, e. salary@{tag=給料, EMPTY_ON_NULL} ]!@{tag=従業員リスト} FROM employee e デモ会 ryuryu 2009/12/23 16

【関数】 fatelement関数 クエリー実行結果 【装飾子】 element GENERATE XML EMPTY_ON_NULL [ [fatelement(e. name@{element=従業員名}, att 1=e. id,

【関数】 fatelement関数 クエリー実行結果 【装飾子】 element GENERATE XML EMPTY_ON_NULL [ [fatelement(e. name@{element=従業員名}, att 1=e. id, att 2=e. sex), fatelement(e. salary@{element}) ]!@{tag=従業員} ABSENT_ON_NULL ]!@{tag=従業員リスト} FROM employee e ※ 装飾子elementは省略できない elemen名を空白にした場合は、 DBの属性名をタグ名として取り出す デモ会 ryuryu 2009/12/23 17

【装飾子】 notag クエリー実行結果 GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, ‘給料データ’@{notag}, e. salary, e.

【装飾子】 notag クエリー実行結果 GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, ‘給料データ’@{notag}, e. salary, e. email@{notag} ]!@{tag=従業員リスト} FROM employee e デモ会 ryuryu 2009/12/23 18

【関数】 null関数 クエリー実行結果 GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, /*e. sex@{tag=性別}, */ null(e.

【関数】 null関数 クエリー実行結果 GENERATE XML [ [e. id@{tag=従業員ID}, e. name@{tag=従業員名}, /*e. sex@{tag=性別}, */ null(e. salary@{tag=給料}) ]!@{tag=従業員} ]!@{tag=従業員リスト} FROM employee e デモ会 ryuryu 2009/12/23 22

STORE テーブル DEPT テーブル id city address id name store manager 1 東京 渋谷

STORE テーブル DEPT テーブル id city address id name store manager 1 東京 渋谷 1 食料品 3 1 2 神奈川 横浜 2 日用雑貨 3 2 3 埼玉 3 婦人衣料品 1 5 4 紳士衣料品 1 3 5 スポーツ用品 2 4 6 家電製品 2 6 7 ペット用品 2 7 大宮 EMPLOYEE テーブル id name sex year email salary manager 1 芽根 宗五郎 MAN 1979 sougorou_mene@xyz. ne. jp 1080 8 2 室宮 信之助 MAN 1976 nobunosuke_muromiya@xyz. ne. jp 1200 8 3 四十栄 光栄 MAN 1972 terue_yotoei@zzz. ne. jp 1400 8 4 山柿 重四郎 MAN 1971 sigesirou_yamagaki@bbb. or. jp 1500 8 5 仁保 つぎ江 WOMAN 1983 tugie_zinbo@abc. co. jp 1030 8 ・・・ ・・・ ・・・ MAN 2002 tomoe_tougo@abc. co. jp 500 4 MAN 2006 kazutosi_nagakami@aaa. co. jp 400 5 19 東護 外茂枝 20 永上 計利 21 ryuryu (中略) ・・・ ryuryu@db. ics. keio. ac. jp デモ会 ryuryu 2009/12/23 2 28

GENERATE XML [ [(ASC 1)e. id@{att=ID番号, attend}, fatelement(e. name@{element=従業員名}, att=e. sex), e. salary@{tag=給料, attstart},

GENERATE XML [ [(ASC 1)e. id@{att=ID番号, attend}, fatelement(e. name@{element=従業員名}, att=e. sex), e. salary@{tag=給料, attstart}, e. year@{att=入社年度, attend, ABSENT_ON_NULL}, e. email@{tag=Eメール, ABSENT_ON_NULL} ]!@{tag=従業員, attstart} ]!@{tag=従業員リスト} FROM employee e SQL/XML SELECT XMLELEMENT(NAME "従業員リスト", XMLAGG( XMLELEMENT(NAME "従業員", XMLATTRIBUTES(e. id AS “従業員 ID"), XMLELEMENT(NAME "従業員名", XMLATTRIBUTES(e. sex), e. name), XMLELEMENT(NAME "給料", XMLATTRIBUTES(e. year AS " 入社年度"), e. salary), XMLFOREST(e. email AS "Eメール") ) )) FROM employee e デモ会 ryuryu 2009/12/23 29

グルーピング階層を複数生成する場合における評価 GENERATE XML [[s. id@{att=店舗ID, attend}, s. city@{tag=支店名}, s. address@{tag=支店所在地}, [[d. id@{att=売場ID, attend}, d.

グルーピング階層を複数生成する場合における評価 GENERATE XML [[s. id@{att=店舗ID, attend}, s. city@{tag=支店名}, s. address@{tag=支店所在地}, [[d. id@{att=売場ID, attend}, d. name@{tag=売場名}, [[e. id@{att=従業員ID, attend}, e. name@{tag=従業員名, attstart}, e. sex@{att=性別, attend}, e. salary@{tag=年棒, attstart}, e. year@{att=入社年度, attend}, e. email@{tag=Eメール} ]!@{tag=従業員, attstart}]!@{tag=従業員リスト} ]!@{tag=売場, attstart}]!@{tag=売場リスト} ]!@{tag=店舗, attstart}]!@{tag=店舗リスト} FROM store s, dept d, employee e WHERE s. id=d. store and d. manager=e. manager デモ会 ryuryu 2009/12/23 30

グルーピング階層を複数生成する場合における評価 SQL/XML SELECT XMLELEMENT(NAME "店舗リスト", XMLAGG( XMLELEMENT(NAME "店舗", XMLATTRIBUTES(s. id AS "店舗ID"), XMLELEMENT(NAME "支店名",

グルーピング階層を複数生成する場合における評価 SQL/XML SELECT XMLELEMENT(NAME "店舗リスト", XMLAGG( XMLELEMENT(NAME "店舗", XMLATTRIBUTES(s. id AS "店舗ID"), XMLELEMENT(NAME "支店名", s. city), XMLELEMENT(NAME "支店所在地", s. address), XMLELEMENT(NAME "売場リスト", XMLELEMENT(NAME "売場", XMLATTRIBUTES(d. id AS "売場ID"), XMLELEMENT(NAME "売場名", d. name), XMLELEMENT(NAME "従業員リスト", XMLELEMENT(NAME "従業員", XMLATTRIBUTES(e. id AS "従業 員ID"), XMLELEMENT(NAME "従業員名", XMLATTRIBUTES(e. sex AS "性別"), e. name), XMLELEMENT(NAME "給料", XMLATTRIBUTES(e. year AS "入 社年度"), e. salary), XMLELEMENT(NAME "Eメール", e. email) ))))) )) FROM store s, dept d, employee e WHERE s. id=d. store and d. manager=e. manager デモ会 ryuryu 2009/12/23 31

GENERATE XML GENERATE [[s. *, [[d. *, [[e. * ]!@{tag=従業員}]!@{tag=従業員リスト} ]!@{tag=売場}]!@{tag=売場リスト} ]!@{tag=店舗}]!@{tag=店舗リスト} FROM store

GENERATE XML GENERATE [[s. *, [[d. *, [[e. * ]!@{tag=従業員}]!@{tag=従業員リスト} ]!@{tag=売場}]!@{tag=売場リスト} ]!@{tag=店舗}]!@{tag=店舗リスト} FROM store s, dept d, employee e WHERE s. id=d. store and d. manager=e. manager XML SELECT XMLELEMENT(NAME "店舗リスト", SQL/XML XMLAGG( XMLELEMENT(NAME "店舗", XMLFOREST(s. *), XMLELEMENT(NAME "売場リスト", XMLELEMENT(NAME "売場", XMLFOREST(d. *), XMLELEMENT(NAME "従業員リスト", XMLELEMENT(NAME "従業員", XMLFOREST(e. *) ))))) )) FROM store s, dept d, employee e WHERE s. id=d. store and d. manager=e. manager デモ会 ryuryu 2009/12/23 32

三者間の包含関係 SQL/XML Super. SQL GENERATE XML 赤堀版 Super. SQL GENERATE XML ryuryu版 デモ会 ryuryu

三者間の包含関係 SQL/XML Super. SQL GENERATE XML 赤堀版 Super. SQL GENERATE XML ryuryu版 デモ会 ryuryu 2009/12/23 33