#freeze
C++とXML

#contents

'''''。」吭。'''''
ここにかれている坪否は音屎_なものばかりです
このペ`ジの坪否を歌深にする栽は屎_な秤鵑魑辰襪燭瓩烹恷瘁にあげた歌深猟廚魃悗魂燐佞垢襪茲Δ砲靴討ださい
'''''!!注意!!'''''
ここに書かれている内容は不正確なものばかりです.
このページの内容を参考にする場合は,正確な情報を得るために(最後にあげた)参考文献を必ず参照するようにしてください.


* C++ で XML 猟をQう圭隈 [#edcd32c9]
* C++ で XML 文書を扱う方法 [#ff6fb8a6]

このペ`ジは C++ から XML 猟をQう圭隈を{砲靴申Y惚をいたものです
このページは C++ から XML 文書を扱う方法を調査した結果を書いたものです.

XML についての町隼とした岑Rしかない C++ _k宀がプログラム坪で XML 猟をQいプログラムの秘竃薦インタフェ`スとして XML 猟を喘いることができるようになるまでをいていくつもりです
XML についての漠然とした知識しかない C++ 開発者が,プログラム内で XML 文書を扱い,プログラムの入出力インタフェースとして XML 文書を用いることができるようになるまでを書いていくつもりです.

鵑蓮2004定3埖r泣での徭蛍々とします
対象は「2004年3月時点での自分」とします.


* XML とは [#ac4fdf7a]
* XML とは [#g9b5d368]

ここから兵めると余圭もなくLいになりそうです
ここから始めると途方もなく長い話になりそうです.

室g議な協xは麿にjるとして徭蛍の嶄での協xは仝サ`ビスやアプリケ`ション揖平のデ`タ住Qに宴旋でよく聞われている辛嬬マ`クアップ冱Z々でアプリケ`ションの坪何侘塀として聞われるよりも麿のアプリケ`ションにしてデ`タを巷_したり渇竃したりするいわゆるデ`タ住Q喘余に聞われることの謹いすなわちアプリケ`ションの翌何侘塀として聞われることの謹い猟と深えています
技術的な定義は他に譲るとして,自分の中での定義は「サービスやアプリケーション同士のデータ交換に便利でよく使われている拡張可能マークアップ言語」で,アプリケーションの内部形式として使われるよりも,他のアプリケーションに対してデータを公開したり抽出したりするいわゆるデータ交換用途に使われることの多い,すなわちアプリケーションの外部形式として使われることの多い文書と考えています.


* XML の児A [#p66c0922]
* XML の基礎 [#m320a54c]

XML をQうために駅勣なキ`ワ`ド┘椒ャブラリとして參和のキ`ワ`ドは尖盾しておくべきでしょう╋xはm卷弖紗していきます
XML を扱うために必要なキーワード(ボキャブラリ)として以下のキーワードは理解しておくべきでしょう.(定義は適宜追加していきます)

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

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

- SOAP
- XSLT

** 猟の夛協x [#w2d32adc]
** 文書の構造定義 [#s7d0118d]

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

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


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

XML 猟をアプリケ`ションがQうためのプログラミングインタフェ`ス┐い錣罎 APIにはいくつかの糞弔淵ぅ鵐織侫З`スがある
XML 文書をアプリケーションが扱うためのプログラミングインタフェース(いわゆる API)にはいくつかの標準的なインタフェースがある.

>XML をアプリケ`ション貧でQうライブラリを恬る栽いろいろなインタフェ`スが深えられるが
>ライブラリ阿鉾くなるインタフェ`スを隔っているとeのライブラリをQう栽に
>匯からインタフェ`スを茶し岷す駅勣がでてしまうなど採かと音宴そのためI順として糞弔淵ぅ鵐織侫З`スをQめたのだろう
>もちろんライブラリ耕嗤のI順掲複インタフェ`スは方謹くある
>ただI順の・掲覆砲かわらず仝2つの圭隈のどちらか々といえる圭隈があるらしい
>和に峰べる仝イベントモデル々と仝オブジェクトモデル々である
>XML をアプリケーション上で扱うライブラリを作る場合,いろいろなインタフェースが考えられるが,
>ライブラリ毎に全く異なるインタフェースを持っていると,別のライブラリを扱う場合に
>一からインタフェースを勉強し直す必要がでてしまうなど,何かと不便.そのため,業界として標準的なインタフェースを決めたのだろう.
>もちろん,ライブラリ固有の(業界非標準)インタフェースは数多くある.
>ただ,業界の標準・非標準にかかわらず,「2つの方法のどちらか」といえる方法があるらしい.
>下記に述べる「イベントモデル」と「オブジェクトモデル」である.


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

アプリケ`ションが XML 猟をQうための室g┯田遒箸い辰新修いいだろうかには寄きく蛍けて2Nある
''イベントモデル''と''オブジェクトモデル''である
アプリケーションが XML 文書を扱うための技術(概念といった方がいいだろうか)には,大きく分けて2種類ある.
''イベントモデル''と''オブジェクトモデル''である.

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

それぞれに嗤兆な覆ありイベントモデルを喘いたAPIには ''SAX'' がオブジェクトモデルを喘いたAPIには ''DOM'' があるSAX はI順覆任△蝪DOM は W3C の覆任△襭そのためXML をQうための匯違議なインタフェ`スは DOM であるがC++ や Java などのアプリケ`ションから XML をQうには DOM では紳覆い栽がありイベントモデルが喘いられることも謹い
それぞれに有名な標準があり,イベントモデルを用いたAPIには ''SAX'' が,オブジェクトモデルを用いたAPIには ''DOM'' がある.SAX は業界標準であり,DOM は W3C の標準である.そのため,XML を扱うための一般的なインタフェースは DOM であるが,C++ や Java などのアプリケーションから XML を扱うには DOM では効率が悪い場合があり,イベントモデルが用いられることも多い.

もちろんどちらのモデルにも掲覆覆發里あるg廾阿坊覆あると房っていいだろう
もちろん,どちらのモデルにも非標準なものがある.実装毎に非標準があると思っていいだろう.

さてここまでは''児A岑R''でg|議な旋吩のある秤鵑任呂覆ぃC++ プログラマにとってこれら2つのプログラミングインタフェ`スの匯桑寄きな`いは''XML 猟をメモり貧に畠何婢_する駅勣があるかどうかか''だろう
さて,ここまでは''基礎知識''で実質的な利益のある情報ではない.C++ プログラマにとってこれら2つのプログラミングインタフェースの一番大きな違いは,''XML 文書をメモり上に全部展開する必要があるかどうかか''だろう.

DOM はオブジェクトモデルであるため匯業 XML 猟を恠砲靴督擴慎弔縫張蟋`夛を
恬り貧げる駅勣があるデ`タにアクセスするHにはメモリ貧にXML猟が贋壓するのだから輝隼 XML 猟の寄きさに鬉犬織瓮皀蠅駅勣になる
DOM はオブジェクトモデルであるため,一度 XML 文書を走査して内部的にツリー構造を
作り上げる必要がある.データにアクセスする際にはメモリ上にXML文書が存在するのだから,当然 XML 文書の大きさに応じたメモリが必要になる.

SAX をはじめとするイベントモデルではXML 猟の恠勃个縫罘`ザアプリケ`ションのコ`ルバックv方が柵ばれるXML 猟を盾裂するにはユ`ザアプリケ`ションが鏡徭に盾裂ル`チンを隔つ駅勣がある┐繁爾Γ
SAX をはじめとするイベントモデルでは,XML 文書の走査中にユーザアプリケーションのコールバック関数が呼ばれる.XML 文書を解析するにはユーザアプリケーションが独自に解析ルーチンを持つ必要がある(と思う).


** SAX と DOM のg廾 [#y46e88a0]
** SAX と DOM の実装 [#i32a3581]

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

''DOM のg廾狼''としては貧にあげた MSXML や libxmlXerces などがある剃に冱えば MSXMLlibxmlXerces などは SAX と DOM のI圭のインタフェ`スを隔つ
''DOM の実装系''としては上にあげた MSXML や libxml,Xerces などがある.逆に言えば MSXML,libxml,Xerces などは SAX と DOM の両方のインタフェースを持つ.

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





* 歌深猟 [#k52fd93e]
* 参考文献 [#f87c6d30]

-[1] C++ による XML _k室隈
-- ファビオ・アルシニェガス广
-- ピアソン・エデュケ`ション
-[1] [[C++ による XML 開発技法>http://www.amazon.co.jp/exec/obidos/ASIN/4894714140/takkejp-22/ref=nosim/]]
-- ファビオ・アルシニェガス著
-- ピアソン・エデュケーション
-- ISBN 4894714140
-[2] C/C++ developers: XMLツ`ルボックスの嶄附を割gさせる
>[[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

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

2004-03-30 (諮) 11:31:39
仝SAX と DOM のg廾々までをいてみた
[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