連載:[完全版]究極のC#プログラミング

Chapter18 LINQ to XML

川俣 晶
2010/05/06

18.2 XML最大の災厄

 XMLという技術を襲った最大の災厄とは、“僕の賢さ”を誇示しようとする“精神の子供たち”の大挙流入にあるといえる。ここでいう“精神の子供たち”とは、自分自身を自らの能力以上に優れた存在だと思い込んでいる者たちを指す。別のいい方をすれば、自己評価と社会からの評価にギャップがあるという問題を抱え込んでいる者たちだともいえる。つまり、「僕は本当はもっと優秀なのに、社会はそれを認めてくれない」という屈折を抱えた者たちである。

 通常、社会と触れ合うことで、このような「思い込み」は「錯覚」であることが思い知らされ、自己評価を下げることで社会的評価との整合を取る。これが、精神的な意味で「子どもから大人になる」ということである。

 ところが、XMLが生まれた前後の時代、1990年代後期から2000年代にかけては、インターネットが世界を変えるというある種の幻想が社会に蔓延し、インターネットを社会に普及させる担い手を自認すれば、それだけで優秀な人材であるかのように社会も承認してしまう風潮が生まれた。だが、その優秀さを認めない者たちもいる。昔ながらの泥臭い現場を知っている者たちには、そのような風潮が「時代のムード」でしかなく、根拠がないことがわかってしまうのである。

 したがって、“精神の子供たち”は、彼らに対して自らの優秀さを証明しなければならない。そのとき、彼らの目の前に運良く(あるいは運悪く)飛び込んできたのがXMLである。

 XMLは、SGMLの後継言語として生まれたが、誰でも使えるようにSGMLの過剰に複雑な機能を除去して成立したものであった。そして、普及戦略として「簡単である」、「誰でも使える」というイメージがアピールされた。その結果として、さほど高い技術力を持たない“精神の子供たち”であっても、XMLを扱うことができた。

 一方で、単純明快にするために多くの機能をそぎ落として成立したXMLには、含まれていない機能も多くあった。そこで、“精神の子供たち”は、XMLを使って“僕らの賢さ”を証明できることに気づいたわけである。つまり、大人気のXMLに、“僕”の知っているこの機能を付加すれば、XMLはもっとすばらしい存在になり、それを成した“僕の賢さ”が証明できるというわけである。

 もちろん、このような発想をした時点で、彼は自分で思うほど優秀ではないことを露呈している。なぜなら、誰もが知っている機能を追加することよりも、実用性を失わずに機能を削るほうが、はるかに優れた知性の証明になるからだ。しかし、世の中の風潮に後押しされ、彼らはそのことに気づくことができない。

 その結果、本来のXMLの中核であるExtensible Markup Languageの周辺には、膨大な数のさまざまな言語や技術が生み出された。そして、それらの多くは使い物にならなかった。肥大化しすぎて容易に実装できなかったり、大企業しか実装できなかったり、そもそも、仕様としての整合性が成立していなかったり、似て非なる言語が競合したり、単に作成者の技術力や見識不足で消えてなくなったり……。中には「本物のプロ」が見れば最初から破綻が予見できた技術も決して少なくなかった。

 このような風潮は、実際に泥臭い現場で使うための技術ではなく、「“僕の賢さ”を証明する手段」の上に成立しているため、派手ではない技術にはあまり注目が集まらない傾向がある。その典型例が、DOM(Document Object Model)である。

 DOMは、プログラムからXML文書を操作するための最も基本的なAPIとして標準化されたものである。XMLに対応と称する言語、ライブラリ、開発環境の大多数がサポートしているといっても過言ではないほど、普及したものだ。

 しかし、その内容はといえば、あまりに悲惨でありすぎる。

 以下、W3C勧告のDOMではなく、.NET FrameworkのDOM実装をベースにして具体例を見てみよう。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter18 LINQ to XML
    1.18.1 LINQプロバイダーを導入する別の理由
  2.18.2 XML最大の災厄
    3.18.3 DOMの憂鬱
    4.18.4 E4XのXMLサポート
    5.18.5 LINQ to XMLというブレークスルー
    6.18.6 単純化されたXML文書生成
    7.18.7 まとめ―ストレスレスなXMLの扱い/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間