C++とXML

#contents

'''''!!注意!!'''''
ここに書かれている内容は不正確なものばかりです.
このページの内容を参考にする場合は,正確な情報を得るために(最後にあげた)参考文献を必ず参照するようにしてください.
'''''ˇˇ注意ˇˇ'''''
ここに暑帰ˇ欷皮い肽谌荬喜徽ˇ_なものばかりですˇ
このペジの内容を参考にする绊幐悉希ˇˇ_な情办C虻盲毪郡幛耍ˇ钺幛摔ⅳ菠浚ˇ慰嘉南驻虮丐翰握栅工毪瑜Δ摔筏皮ˇ坤丹ぃˇ

* C++ で XML 文暑帰耩Qう方法 [#edcd32c9]

* C++ で XML 文書を扱う方法 [#edcd32c9]
このペジは C++ から XML 文暑帰耩Qう方法をˇ琐C筏拷Y果を暑帰い郡猡韦扦梗ˇ
XML についての漠然とした知佤しかない C++ ˇˇ者がˇプログラム内で XML 文暑帰耩Qいˇプログラムの入出力インタフェスとして XML 文暑帰蛴盲い毪长趣ˇ扦毪瑜Δ摔胜毪蓼扦耋ˇい皮いˇ膜猡辘扦梗ˇ
俘ˇは「2004年3月捎点での自分」としますˇ

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

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

対象は「2004年3月時点での自分」とします.


* XML とは [#ac4fdf7a]

ここから始めると途方もなく長い話になりそうです.
ここから始めると途方もなく觐い羽になりそうですˇ

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

* XML の基躲 [#p66c0922]

* XML の基礎 [#p66c0922]
XML を貌うために必要なキワドˇボキャブラリˇとして以下のキワドは理解しておくべきでしょうˇˇ定ˇはˇ宜追加していきますˇ

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

- XML
- DTD
- XML Schema
- 整形式
- 名前空間
- 名前空ˇ

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

- SOAP
- XSLT

** 文書の構造定義 [#w2d32adc]
** 文暑帰亡碟箅帵ˇ [#w2d32adc]

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]
* プログラミングインタフェス [#i4134e26]

XML 文書をアプリケーションが扱うためのプログラミングインタフェース(いわゆる API)にはいくつかの標準的なインタフェースがある.
XML 文暑帰颔ⅴ抓辚暴`ションが貌うためのプログラミングインタフェスˇいわゆる APIˇにはいくつかのˇ<实膜圣ぅ螗骏榨З`スがあるˇ

>XML をアプリケーション上で扱うライブラリを作る場合,いろいろなインタフェースが考えられるが,
>ライブラリ毎に全く異なるインタフェースを持っていると,別のライブラリを扱う場合に
>一からインタフェースを勉強し直す必要がでてしまうなど,何かと不便.そのため,業界として標準的なインタフェースを決めたのだろう.
>もちろん,ライブラリ固有の(業界非標準)インタフェースは数多くある.
>ただ,業界の標準&#12539;非標準にかかわらず,「2つの方法のどちらか」といえる方法があるらしい.
>下記に述べる「イベントモデル」と「オブジェクトモデル」である.
>XML をアプリケション上で貌うライブラリを作る绊幐希ˇい恧い恧圣ぅ螗骏榨З`スが考えられるがˇ
>ライブラリ予帰巳ˇˇ库幦るインタフェスを持っているとˇˇのライブラリを貌う绊幐悉态>一からインタフェスを勉疥し直す必要がでてしまうなどˇ何かと不便ˇそのためˇ溪界としてˇ<实膜圣ぅ螗骏榨З`スを詹めたのだろうˇ
>もちろんˇライブラリ固有のˇ溪界非ˇ<剩ˇぅ螗骏榨З`スは数多くあるˇ
>ただˇ溪界のˇ<ˇamp;#12539;非ˇ<胜摔ˇˇ铯椁海ˇ福菠膜畏椒à韦嗓沥椁ˇ工趣いà敕椒àˇⅳ毪椁筏ぃˇ>下ˇに述べる「イベントモデル」と「オブジェクトモデル」であるˇ


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

アプリケーションが XML 文書を扱うための技術(概念といった方がいいだろうか)には,大きく分けて2種類ある.
''イベントモデル''と''オブジェクトモデル''である.
アプリケションが XML 文暑帰耩Qうための技掀ˇ概念といった方がいいだろうかˇにはˇ大きく分けて2葛眍あるˇ
''イベントモデル''と''オブジェクトモデル''であるˇ

>イベントモデルは イベント指向モデル,イベント指向インタフェースなどとも呼ばれる.
>オブジェクトモデルはドキュメントモデル,文書モデル,オブジェクトモデル指向インタフェースなどとも呼ばれる.
>イベントモデルは イベント指ˇモデルˇイベント指ˇインタフェスなどとも呼ばれるˇ
>オブジェクトモデルはドキュメントモデルˇ文暑帲猊钎耄ˇˇ芝弗Дˇ去猊钎胫赶颔ぅ螗骏榨З`スなどとも呼ばれるˇ

それぞれに有名な標準があり,イベントモデルを用いたAPIには ''SAX'' が,オブジェクトモデルを用いたAPIには ''DOM'' がある.SAX は業界標準であり,DOM は W3C の標準である.そのため,XML を扱うための一般的なインタフェースは DOM であるが,C++ や Java などのアプリケーションから XML を扱うには DOM では効率が悪い場合があり,イベントモデルが用いられることも多い.
それぞれに有名なˇ<胜ˇⅳ辏ˇぅ佶螗去猊钎毪蛴盲い楞PIには ''SAX'' がˇオブジェクトモデルを用いたAPIには ''DOM'' があるˇSAX は溪界ˇ<胜扦ⅳ辏ˇOM は W3C のˇ<胜扦ⅳ耄ˇ饯韦郡幔ˇML を貌うための一般的なインタフェスは DOM であるがˇC++ や Java などのアプリケションから XML を貌うには DOM ではюa胜ˇ砚帰绊幐悉ˇⅳ辏ˇぅ佶螗去猊钎毪ˇ盲い椁欷毪长趣舛啶ぃˇ
もちろんˇどちらのモデルにも非ˇ<胜胜猡韦ˇⅳ耄g装予帰朔ˇˇ胜ˇⅳ毪人激盲皮いい坤恧Γˇ
さてˇここまでは''基躲知佤''で啡ˇ的な利益のある情办C扦悉胜ぃ++ プログラマにとってこれら2つのプログラミングインタフェスの一番大きないはˇ''XML 文暑帰颔幞猡晟悉巳ˇ空归_する必要があるかどうかか''だろうˇ

もちろん,どちらのモデルにも非標準なものがある.実装毎に非標準があると思っていいだろう.
DOM はオブジェクトモデルであるためˇ一度 XML 文暑帰蜃ˇ摔筏颇诓康膜衰磨戛`ˇ造を
作り上げる必要があるˇデタにアクセスする礻にはメモリ上にXML文暑帰ˇ嬖冥工毪韦坤ˇ椋ˇ比悸XML 文暑帰未螭丹ˇ辘袱骏幞猊辘ˇ匾ˇ摔胜耄ˇ
SAX をはじめとするイベントモデルではˇXML 文暑帰巫ˇ酥肖衰姗`ザアプリケションのコルバックˇ数が呼ばれるˇXML 文暑帰蚪馕ˇ工毪摔膝姗`ザアプリケションが独自に解析ルチンを持つ必要があるˇと思うˇˇ

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

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

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

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

** SAX と DOM の実装 [#y46e88a0]
[2] の 表.2 を参考にしようˇ

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

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

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


* 参考文ˇ [#k52fd93e]



* 参考文献 [#k52fd93e]

-[1] C++ による XML 開発技法
-[1] C++ による XML ˇˇ技法
-- ファビオ&#12539;アルシニェガス著
-- ピアソン&#12539;エデュケーション
-- ピアソン&#12539;エデュケション
-- ISBN 4894714140
-[2] C/C++ developers: XMLツールボックスの中身を充実させる
-[2] C/C++ developers: XMLツルボックスの中身を充啡させる
-- http://www-6.ibm.com/jp/developerworks/xml/020118/j_x-ctlbx.html

* 更新履歴 [#w86493c4]
* 更新履釉 [#w86493c4]

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 六合彩图库]
「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 六合彩图库]


トップ   糠惮 办枉 帽胳浮瑚 呵姜构糠   ヘルプ   呵姜构糠のRSS