#freeze
C++とXML

#contents

'''''・・廣吭・・'''''
ここに菩「・譴討い訥敞櫃浪師・_なものばかりです・
このペジの坪否を歌深にする壱ク呂錬・・_な秤一C魑辰襪燭瓩烹・釶瓩砲△欧殖・凌捨掴廚魃悗魂燐佞垢襪茲Δ砲靴討・世気ぃ・
'''''!!注意!!'''''
ここに書かれている内容は不正確なものばかりです.
このページの内容を参考にする場合は,正確な情報を得るために(最後にあげた)参考文献を必ず参照するようにしてください.

* C++ で XML 猟菩「髏Qう圭隈 [#edcd32c9]

このペジは C++ から XML 猟菩「髏Qう圭隈を・末C靴申Y惚を菩「い燭發里任坑・
XML についての町隼とした岑懿しかない C++ ・・宀が・プログラム坪で XML 猟菩「髏Qい・プログラムの秘竃薦インタフェスとして XML 猟菩「鰉辰い襪海箸・任るようになるまでゑ鵝Δていぁδもりです・
拳・は仝2004定3埖瓶泣での徭蛍々とします・
* C++ で XML 文書を扱う方法 [#ff6fb8a6]

このページは C++ から XML 文書を扱う方法を調査した結果を書いたものです.

* XML とは [#ac4fdf7a]
XML についての漠然とした知識しかない C++ 開発者が,プログラム内で XML 文書を扱い,プログラムの入出力インタフェースとして XML 文書を用いることができるようになるまでを書いていくつもりです.

ここから兵めると余圭もなく褌い嚼になりそうです・
対象は「2004年3月時点での自分」とします.

室脇議な協・は麿に・るとして・徭蛍の嶄での協・は仝サビスやアプリケション揖平のデタ住轍に宴旋でよく聞われている宙処辛嬬マクアップ冱廈々で・アプリケションの坪何侘塀として聞われるよりも・麿のアプリケションに拳してデタを巷・したり渇竃したりするいわゆるデタ住轍喘余に聞われることの謹い・すなわちアプリケションの翌何侘塀として聞われることの謹い猟菩「反爾┐討い泙坑・

* XML の児吟 [#p66c0922]
* XML とは [#g9b5d368]

XML を嘆うために駅勣なキワド・ボキャブラリ・として參和のキワドは尖盾しておくべきでしょう・・協・は・卷弖紗していきます・
ここから始めると途方もなく長い話になりそうです.

技術的な定義は他に譲るとして,自分の中での定義は「サービスやアプリケーション同士のデータ交換に便利でよく使われている拡張可能マークアップ言語」で,アプリケーションの内部形式として使われるよりも,他のアプリケーションに対してデータを公開したり抽出したりするいわゆるデータ交換用途に使われることの多い,すなわちアプリケーションの外部形式として使われることの多い文書と考えています.


* XML の基礎 [#m320a54c]

XML を扱うために必要なキーワード(ボキャブラリ)として以下のキーワードは理解しておくべきでしょう.(定義は適宜追加していきます)

- XML
- DTD
- XML Schema
- 屁侘塀
- 兆念腎・
- 整形式
- 名前空間

- パサ
- パーサー
- SAX
- DOM

- SOAP
- XSLT

** 猟菩「蘭禦鼡ヲ・ [#w2d32adc]
** 文書の構造定義 [#s7d0118d]

DTD or XML Schema が聞われる・謹くの壱ク仟DTD が聞われるが・DTD では燕・音怎な何蛍があり・XML Schema などの・夛協・喘の匯乞の冱廈が恬られたらしい・DTD は SGML ベスであり・XML Schema は XML 1.0 ベスであるが・・壓はほとんどの壱ク仟DTD が聞われているようだ・
DTD or XML Schema が使われる.多くの場合 DTD が使われるが,DTD では表現不足な部分があり,XML Schema などの構造定義用の一種の言語が作られたらしい.DTD は SGML ベースであり,XML Schema は XML 1.0 ベースであるが,現在はほとんどの場合 DTD が使われているようだ.

XML ・・宀にとって DTD は駅・の室脇・駅ずマスタしているべきもの・DTD の燕・薦に恪ユ磴任なぁκれぁXML Schema や TREX・RELAX などを藍ム曹オよう・
これらのすべては C++ から旋喘辛嬬である・
XML 開発者にとって DTD は必須の技術.必ずマスターしているべきもの.DTD の表現力に満足できなくなれば XML Schema や TREX,RELAX などを検討しよう.
これらのすべては C++ から利用可能である.


* プログラミングインタフェス [#i4134e26]
* プログラミングインタフェース [#v0d5af8b]

XML 猟菩「鬟▲廛螢羽`ションが嘆うためのプログラミングインタフェス・いわゆる API・にはいくつかの・<糞弔淵ぅ鵐織侫З`スがある・
XML 文書をアプリケーションが扱うためのプログラミングインタフェース(いわゆる API)にはいくつかの標準的なインタフェースがある.

>XML をアプリケション貧で嘆うライブラリを恬る壱ク錬・い蹐い蹐淵ぅ鵐織侫З`スが深えられるが・
>ライブラリ嚠「鉾・・垂ネるインタフェスを隔っていると・・のライブラリを嘆う壱ク呂蓑>匯からインタフェスを茶所し岷す駅勣がでてしまうなど・採かと音宴・そのため・露順として・<糞弔淵ぅ鵐織侫З`スを娉めたのだろう・
>もちろん・ライブラリ耕嗤の・露順掲・<複・ぅ鵐織侫З`スは方謹くある・
>ただ・露順の・<・amp;#12539;掲・<覆砲・・錣蕕今・牽欧弔侶酬┐里匹舛蕕・垢箸い┐觀酬┐・△襪蕕靴ぃ・>和・に峰べる仝イベントモデル々と仝オブジェクトモデル々である・
>XML をアプリケーション上で扱うライブラリを作る場合,いろいろなインタフェースが考えられるが,
>ライブラリ毎に全く異なるインタフェースを持っていると,別のライブラリを扱う場合に
>一からインタフェースを勉強し直す必要がでてしまうなど,何かと不便.そのため,業界として標準的なインタフェースを決めたのだろう.
>もちろん,ライブラリ固有の(業界非標準)インタフェースは数多くある.
>ただ,業界の標準・非標準にかかわらず,「2つの方法のどちらか」といえる方法があるらしい.
>下記に述べる「イベントモデル」と「オブジェクトモデル」である.


** 2つのプログラミングインタフェス [#e0feb224]
** 2つのプログラミングインタフェース [#hb805aee]

アプリケションが XML 猟菩「髏Qうための室脇・古廷といった圭がいいだろうか・には・寄きく蛍けて2乞邇ある・
''イベントモデル''と''オブジェクトモデル''である・
アプリケーションが XML 文書を扱うための技術(概念といった方がいいだろうか)には,大きく分けて2種類ある.
''イベントモデル''と''オブジェクトモデル''である.

>イベントモデルは イベント峺・モデル・イベント峺・インタフェスなどとも柵ばれる・
>オブジェクトモデルはドキュメントモデル・猟菩」皀妊襭・・屮献Д・肇皀妊誦枯鬟ぅ鵐織侫З`スなどとも柵ばれる・
>イベントモデルは イベント指向モデル,イベント指向インタフェースなどとも呼ばれる.
>オブジェクトモデルはドキュメントモデル,文書モデル,オブジェクトモデル指向インタフェースなどとも呼ばれる.

それぞれに嗤兆な・<覆・△蝪・ぅ戰鵐肇皀妊襪鰉辰い雪PIには ''SAX'' が・オブジェクトモデルを喘いたAPIには ''DOM'' がある・SAX は露順・<覆任△蝪・OM は W3C の・<覆任△襭・修里燭瓧・ML を嘆うための匯違議なインタフェスは DOM であるが・C++ や Java などのアプリケションから XML を嘆うには DOM ではюa覆・凾「壱ク呂・△蝪・ぅ戰鵐肇皀妊襪・辰い蕕譴襪海箸盒爐ぃ・
もちろん・どちらのモデルにも掲・<覆覆發里・△襭g廾嚠「坊・・覆・△襪繁爾辰討いい世蹐Γ・
さて・ここまでは''児吟岑懿''で携・議な旋吩のある秤一C任呂覆ぃ++ プログラマにとってこれら2つのプログラミングインタフェスの匯桑寄きないは・''XML 猟菩「鬟瓮發衂呂鉾・腎拷_する駅勣があるかどうかか''だろう・
それぞれに有名な標準があり,イベントモデルを用いたAPIには ''SAX'' が,オブジェクトモデルを用いたAPIには ''DOM'' がある.SAX は業界標準であり,DOM は W3C の標準である.そのため,XML を扱うための一般的なインタフェースは DOM であるが,C++ や Java などのアプリケーションから XML を扱うには DOM では効率が悪い場合があり,イベントモデルが用いられることも多い.

DOM はオブジェクトモデルであるため・匯業 XML 猟菩「鰈・砲靴督擴慎弔縫張蟋`・夛を
恬り貧げる駅勣がある・デタにアクセスする跖にはメモリ貧にXML猟菩「・耡擇垢襪里世・蕋・曳実XML 猟菩「隆鵑さぁ蠅犬織瓮皀蠅・慴・砲覆襭・
SAX をはじめとするイベントモデルでは・XML 猟菩「臨・勃个縫罘`ザアプリケションのコルバック・方が柵ばれる・XML 猟菩「鮟睥・垢襪砲魯罘`ザアプリケションが鏡徭に盾裂ルチンを隔つ駅勣がある・と房う・・
もちろん,どちらのモデルにも非標準なものがある.実装毎に非標準があると思っていいだろう.

さて,ここまでは''基礎知識''で実質的な利益のある情報ではない.C++ プログラマにとってこれら2つのプログラミングインタフェースの一番大きな違いは,''XML 文書をメモり上に全部展開する必要があるかどうかか''だろう.

** SAX と DOM の携廾 [#y46e88a0]
DOM はオブジェクトモデルであるため,一度 XML 文書を走査して内部的にツリー構造を
作り上げる必要がある.データにアクセスする際にはメモリ上にXML文書が存在するのだから,当然 XML 文書の大きさに応じたメモリが必要になる.

''SAX の携廾狼''としては ''expat'' が嗤兆だが・Microsoft 芙が戻工する ''MSXML'' や Gnome による ''libxml''・Apache Software Foundation による ''Xerces'' なども SAX インタフェスを隔つ・
SAX をはじめとするイベントモデルでは,XML 文書の走査中にユーザアプリケーションのコールバック関数が呼ばれる.XML 文書を解析するにはユーザアプリケーションが独自に解析ルーチンを持つ必要がある(と思う).

''DOM の携廾狼''としては貧にあげた MSXML や libxml・Xerces などがある・剃に冱えば MSXML・libxml・Xerces などは SAX と DOM の!圭のインタフェスを隔つ・

[2] の 燕.2 を歌深にしよう・
** SAX と DOM の実装 [#i32a3581]

''SAX の実装系''としては ''expat'' が有名だが,Microsoft 社が提供する ''MSXML'' や Gnome による ''libxml'',Apache Software Foundation による ''Xerces'' なども SAX インタフェースを持つ.

''DOM の実装系''としては上にあげた MSXML や libxml,Xerces などがある.逆に言えば MSXML,libxml,Xerces などは SAX と DOM の両方のインタフェースを持つ.

[2] の 表.2 を参考にしよう.


* 歌深猟・ [#k52fd93e]

-[1] C++ による XML ・・室隈
-- ファビオ&#12539;アルシニェガス广
-- ピアソン&#12539;エデュケション


* 参考文献 [#f87c6d30]

-[1] [[C++ による XML 開発技法>http://www.amazon.co.jp/exec/obidos/ASIN/4894714140/takkejp-22/ref=nosim/]]
-- ファビオ・アルシニェガス著
-- ピアソン・エデュケーション
-- ISBN 4894714140
-[2] C/C++ developers: XMLツルボックスの嶄附を割携させる
>[[http://ecx.images-amazon.com/images/I/5170GZWNC3L._SL160_.jpg>http://www.amazon.co.jp/exec/obidos/ASIN/4894714140/takkejp-22/ref=nosim/]]

-[2] C/C++ developers: XMLツールボックスの中身を充実させる
-- http://www-6.ibm.com/jp/developerworks/xml/020118/j_x-ctlbx.html

* 厚仟堕嘖 [#w86493c4]
* 更新履歴 [#x8910ac0]

2004-03-30 (諮) 11:31:39
仝SAX と DOM の携廾々までを菩「い討澆殖・[http://c32.voip99.net 契邦可創][http://c33.voip99.net 慶岶字亠][http://c34.voip99.net 菰医][http://c35.voip99.net 酌尖][http://c36.voip99.net 凛承][http://c37.voip99.net 一巷喘瞳][http://c38.voip99.net 隠梁可創][http://c40.voip99.net VOD][http://c41.voip99.net 捲廾][http://c42.voip99.net 貿創][http://c43.voip99.net 準醤][http://c44.voip99.net 字国][http://c45.voip99.net 乾寵徳][http://c46.voip99.net 訳鷹][http://c65.voip99.net 窮徨較][http://c66.voip99.net 秀可字亠][http://c67.voip99.net 垢殻本創][http://c68.voip99.net 蒙俯将唔][http://c69.voip99.net 促嚴徭陣][http://c70.voip99.net 匣了柴][http://c71.voip99.net 窮甘鑓][http://c72.voip99.net 契遣譜姥][http://c73.voip99.net 峅妃][http://c74.voip99.net 提栽字][http://c75.voip99.net 幅週岬][http://c76.voip99.net 廬算匂][http://c77.voip99.net 砺来字][http://c78.voip99.net 崙閤][http://c91.voip99.net 簾本字][http://c92.voip99.net 谷娜][http://c93.voip99.net 住宥譜仏][http://6.88aabb.com 鎗栽科][http://www01.agreatserver.com 鎗栽科][http://liuhecai.99bbcc.com ・雇鎗栽科][http://aaa48.zhiliaotuofa.com 菰砿][http://aaa49.zhiliaotuofa.com 欠字][http://aaa50.zhiliaotuofa.com 腰俗][http://w01.voip99.net 延撞匂][http://w02.voip99.net 非錆嗟][http://w03.voip99.net 宣栽匂][http://w04.voip99.net 匙株][http://a45.voip99.com 窮坿][http://a46.voip99.com 蝕購][http://a47.voip99.com 窮坿蝕購][http://a48.voip99.com 涙・巷三][http://a49.voip99.com ic][http://a50.voip99.com 本創字亠][http://a51.voip99.com 垢殻字亠][http://a52.voip99.com 已覚][http://a53.voip99.com 掛態][http://a54.voip99.com 晒垢圻創][http://a55.voip99.com 晒垢譜姥][http://a56.voip99.com 晒垢字亠][http://a57.voip99.com 永芝云][http://a58.voip99.com mp3殴慧匂][http://a59.voip99.com 泣凱字][http://a60.voip99.com 債可][http://w05.voip99.net 滅挺押][http://w06.voip99.net 窮否][http://w07.voip99.net 子峺遮][http://w08.voip99.net 除篇凛][http://w09.voip99.net 用谷][http://w10.voip99.net 昌邦匂][http://w11.voip99.net 隙築][http://w12.voip99.net 諸耕周][http://w13.voip99.net 崙捲][http://w14.voip99.net 宗附匂可][http://cai.tt33tt.com 鎗栽科][http://w27.voip99.net 侮框訳鷹][http://w28.voip99.net 爾高譜姥][http://w29.voip99.net 孚電字][http://w30.voip99.net 架醤][http://w31.voip99.net IP階偏柴継狼由][http://w32.voip99.net 利大窮三][http://w33.voip99.net VOIP利購][http://w34.voip99.net IP窮三][http://a03.voip99.com 網娥巷望][http://a04.voip99.com 島鷹字][http://a05.voip99.com 匣了柴][http://a06.voip99.com 峨恙][http://b74.zhiliaotuofa.com 菰潤更][http://b75.zhiliaotuofa.com 砿可][http://b76.zhiliaotuofa.com 邦菓][http://b77.zhiliaotuofa.com 寮圈][http://b78.zhiliaotuofa.com 雑備][http://b79.zhiliaotuofa.com 岬中][http://b80.zhiliaotuofa.com ・契匂可][http://b81.zhiliaotuofa.com 秀廏字亠][http://b82.zhiliaotuofa.com 試強型][http://b83.zhiliaotuofa.com 完善][http://b84.zhiliaotuofa.com T偐][http://b85.zhiliaotuofa.com 劃廟][http://b86.zhiliaotuofa.com 牝廾][http://6.88aabb.com 鎗栽科][http://www01.agreatserver.com 鎗栽科][http://liuhecai.99bbcc.com ・雇鎗栽科][http://cai.tt33tt.com 鎗栽科][http://k.88aabb.com ・雇鎗栽科][http://g.88aabb.com 鎗栽科夕垂]
2004-03-30 (火) 11:31:39
「SAX と DOM の実装」までを書いてみた.

潟若若菴遵

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS