Internet Explorer 5 における XML サポートの拡張
Charlie Heinemann
Program Manager, XML
Microsoft Corporation
March 18, 1999 日本語版最終更新日 1999 年 9 月 28 日
この記事は、 MSDN Online Voices に掲載されたコラム "Extreme XML" を転載したものです。
1年前の今日、あなたに対して初めて「極端な」態度をとった日です。あのときは、ひどい音楽を扱ったすばらしい情報を well-formed XML に変える方法をアドバイスしたことを覚えています。そこで、今回は、昔に思いをはせながら、私たちがはるか遠くまでやってきたことを示したいと思います。過去の回想場面の中にも、数こそ少ないものの良いものがあります。そして新しいものの中にも優れたものがあります。Microsoft® Internet Explorer 5 による XML サポートの拡張もその1つです。
より簡単になった、Visual Basic から XML オブジェクトモデルへのアクセス
昨年の6月には、従兄弟の悩みについて少しだけ話をしましたが、その中で、私はMicrosoft XMLパーサー内部でのデータ型のサポートについてそれとなくほのめかしました。そのときの記事で、私は、パーサーにアクセスして、データをナビゲートするMicrosoft Visual Basic®コードをいくつか紹介しました。Internet Explorer 5では、以前にもまして簡単に、パーサーにアクセスして、XML Object Model (XML OM)をナビゲートできるようになっています。もう DOMNodes を XMLDOMNodes にキャストする必要もありません。必要な作業は、次の4つの基本的なオブジェクトを扱うことだけです。
- XMLDOMDocument
- XMLDOMNode
- XMLDOMNodeList
- XMLDOMNamedNodeMap
私は、昨年の6月からこの記事を、付随するサンプルを含めて更新してきました。新しいコードを見てもらえば、Visual BasicアプリケーションからXMLデータへのアクセスがいかに簡単になったかすぐにわかります。ところで、下の2に対する答えをどなたかご存知ですか?
DOWN
2. Marked-up information is a tad crazy. (4)
サーバーへ POST するより良い方法
「XML をサーバー上へ配置する」と題した別の記事で、私は、XMLのサーバーへの送信を隠れた IFRAMES と長いXML文字列を使って実現する方法を説明しました。しかし、この間に私たちは、これよりもはるかに簡単な方法で送信できる XMLHTTP オブジェクトを開発しました。
XMLHTTP オブジェクトを使えば、XMLツリーそのものをオブジェクトとして送信することができます。次のスクリプトは"Happy Days Are Here Again""のアップデート版から借用したものですが、ここでは、XMLHTTP オブジェクトを作成し、このオブジェクトを使って"template"という名前のXMLツリーをサーバーの位置に送信しています。
var httpOb = new ActiveXObject("Microsoft.XMLHTTP");
httpOb.Open("POST","http://myServer/postCust.asp", false);
var customer = template.XMLDocument.documentElement;
customer.childNodes.item(0).text = custName.value;
customer.childNodes.item(1).text = custRelation.value;
customer.childNodes.item(2).text = custClass.value;
httpOb.send(template.XMLDocument);
XMLHTTP オブジェクトとそのプロパティやメソッドについての概要は、XML DOM Reference に記載されています。
XMLをファイルとしてサーバーに書き戻す新たな組み込みサポート
"Happy Days Are Here Again"で、私はASPファイルを使ってオリジナルのXMLを一度更新しました。Microsoft Jscript®オブジェクトの FileSystemObject を使って更新済みのXMLをサーバーに保存し、サーバーに戻しました。これまでは、この手順を実行するのに次の5行からなるコードが必要でした。
SAVEDXML = CUSTLIST.xml
Set FS = CreateObject("Scripting.FileSystemObject")
Set CUSTFILE = FS.CreateTextFile(Server.MapPath
("customers.xml"),True)
CUSTFILE.WriteLine(SAVEDXML)
CUSTFILE.Close
このドキュメントで紹介する新しいsaveメソッドでは、XMLを1行のコードで保存できます。
CUSTLIST.save(Server.MapPath("customers.xml"))
ところで、Moranを綴るとき、rを1つにしますか、それとも2つにしますか?
構文解析の制御をさらに強化
昨年の8月に、私は、あなたの突飛なスキーマをJuniorがめちゃめちゃにしないよう、防御策を授けました。「XML、検証、そしてチーズ増量」の記事で、私たちは文書型定義(DTD)全般について説明し、あなたのデータを検証しました。私は、この記事を更新して、DTD以外にスキーマの説明も加えました。この記事を見れば、スキーマでデータを検証する方法がよくわかるはずです。
ここで、構文解析の制御に話題を移します。Internet Explorer 5 のパーサーでは、自分のデータの検証を行うかどうかを、そのデータが自分に関連付けられたスキーマやDTDを持っている場合であっても選択でき、さらには、実体参照のような外部要素を解決するかどうかの選択もできます。この機能を提供する2つのプロパティ validateOnParse と resolveExternals は、互いに独立しています。したがって、ドキュメントを検証しないように選択しても、実体参照を取得することができます。
これらのプロパティについて詳しくは、XML DOM reference を調べてみてください。Internet Explorer 5 に付属しているXMLパーサー内での検証のサポートについては、XML Data reference を参照してください。
XMLノードをオブジェクトに変換
2月のコラム 「XSL を使用したデータのソートとフィルタ処理」 で、私は、XSLを使ってXML Data Source Object (XML DSO)のデータをソートし、フィルタ処理する方法を説明しました。この記事では、新しいXMLを loadXML メソッドを持つ文字列としてロードすることで、XSLを使って変換されたXMLにバインドしています。私がこの方法を取らざるを得なかったのは、 transformNode はXMLを文字列としてのみ返すからです。
xmldso.loadXML(xmldoc.documentElement.transformNode
(xsldoc.documentElement));
現在、私たちは、XMLオブジェクト モデルの中でXSLサポートを拡張する中で、XMLをオブジェクトに変換するメソッドを提供しています。これにより、変換対象のノードに呼び出しを行い、新しいツリーをパラメータとして含むオブジェクトやスタイルシートをこのメソッドに渡すことができます。
xmldoc.documentElement.transformNodeToObject
(xsldoc.documentElement,xmldso.XMLDocument);
この操作で、XML Document Objectの xmldso は、変換された新しいXMLをツリーとして含むことになります。このため、long BSTR を処理する必要も、オブジェクトを文字列に変換したり、逆にオブジェクトに戻したりする必要もなくなります。
ますますノスタルジックに
1年を振り返ってみると、実に驚きだと言わざるを得ません。叔父 Edd が営むピザ屋の商売も繁盛しており、突然電話をかけてくる従兄弟も電話の回数が次第に減ってきました。Internet Explorer 5 内でのXMLサポートは大きな成長を見せています。今では、XSLとクエリーのサポート、DOMのフルサポート、スキーマ、XMLを直接ブラウズする方法、できたてのハイパフォーマンスなDSOが現実のものとなっています。
Internet Explorer 5 では、XMLベースの本格的なWebアプリケーションを作成できます。このことを実証するために私たちはデモを用意しています。このデモこそXMLベースのWebアプリケーションそのものです。XML Sports Demo をチェックアウトしてください。特にクールなのがスポーツ情報を提供しているMicrosoft Agentです。情報はXMLの中にあり、このXMLはXSLによってMicrosoft Agentコードに変換されます。
Charles Heinemann は、Microsoft の Weblications team のプログラム マネージャです。
|