Webアプリ開発事始 第21回

XMLとプログラミング(2)
~JavaScriptによる検索処理の実例
長谷川裕行
有限会社 手國堂

スタイルシートのパターンマッチング

HTML文書からJavaScriptを使って検索を行う実例を紹介しました。もっと単純な検索なら、XSLスタイルシートに記述することもできます。


- パターンマッチング -

XSLスタイルシートでは、XSL Patternsと呼ばれるパターンマッチング機能が利用できます。これを用いれば、XML文書に記述された複数の要素から特定の条件を満たす要素を取り出したり、任意の要素の値をキーにして並べ替えるなどの処理が、スタイルシート内で記述できます。

例えば、要素「部品」の「部品ID」が“230030”となっている項目の「部品名」を取り出すなら、以下のようにします。

  部品マスター/部品[@部品ID="230030"]/部品名

@記号に続けて条件式(例では「部品ID="230030"」)を指定し、その部分を[ ]で囲むだけです。


- スタイルシートにスクリプトを書く -

DOMDocumentオブジェクトでは、複数の要素を取り出すselectNodesメソッドと単一の要素を取り出すselectSingleNodeメソッドで、上記のような条件指定によるクエリを指定できます。

例えば、変数nodeにXML文書内のルート要素「部品マスター」が保持されているとしたら、以下のようにして特定の部品IDを持つ要素の「部品名」の値を、変数resultに代入できます。

  result = node.selectSingleNode("部品[@部品ID="230030"]/部品名")


- 並べ替えのスクリプト -

XSLスタイルシートの中に以下のようなスクリプトを埋め込めば、要素を昇順に並べ替える処理が作れます。

  <SCRIPT type="text/JavaScript">
  <xsl:comment>
  <![CDATA[
  var xmldoc = new ActiveXObject("Microsoft.XMLDom");
  var stylesheet = new ActiveXObject("Microsoft.XMLDom");
  xmldoc.async = false;   ←同期に設定
  xmldoc.load("items.xml"); ←XML文書を読み込む
  var result = stylesheet.selectNodes("//@order-by");
  ]]>
  </xsl:comment>
  </SCRIPT>

DOMDocumentオブジェクトは、アプリケーションでXML文書を操作するための、たくさんの機能を持っています。しかしDOMは、XML文書をすべてメモりに読み込んで処理を行なう仕様となっているため、大規模なXML文書だと非常に時間がかかります。

そのため標準ではXML文書の読み込みが非同期となっている訳ですが、本文で述べたように問題が発生する場合もあります。これを解決するために、asyncプロパティを変更できるという独自仕様が存在する訳です。しかしそれだけでは、処理時間の問題を解決できません。特にインターネット環境では、これは大きな欠点となります。

そこでXMLの開発者たちは「文書を操作してその構造を通知する」という形で、XML文書を先にすべて読み込まないで処理できるSAX(Simple API for XML)という手段を考え出しました。処理が高速化する上、メモリの消費も抑えられます。

マイクロソフトのXMLパーサMSXML(Microsoft XML)では、SAXインターフェイスに完全対応したMSXML SAX2が提供されています。

  SAX ProjectのURL http://www.saxproject.org/


あとがき

4回にわたって、XMLの基本からプログラミングまでを紹介してきました。

Webアプリケーションに限らず、XMLはネットワークを介して異なる環境でデータベースを交換する場合、非常に有効な手段です。

XMLとDOMはW3Cで標準化が進められ、電子商取引、電子政府、出版、放送、医療などなど至る分野で実用化されています。XMLの重要性は、今後ますます高まっていくでしょう。

最後に、XMLの標準化や実用化の動向についての情報を掲載している、主なWebサイトを紹介しておきます。

OASIS(Organization for Structured Information Standards)(英語)
http://www.oasis-open.org
XML.ORG(OASISの下部組織)(英語)
http://www.xml.org
XMLコンソーシアム(日本語)
http://www.xmlconsortium.org/
XMLjapan.org(XMLコンソーシアムの情報発信部門)(日本語)
http://www.xmljapan.org/
EIAJ(日本電子機械協会)(日本語)
http://www.jeita.or.jp/eiaj/japanese/
Med XML コンソーシアム(日本医療情報学会)(日本語)
http://www.medxml.net/
日本電子出版協会(日本語)
http://www.jepa.or.jp/

Downloadサンプルファイル (LZH形式 1.95 KB)


トップページ
部品リスト~mr_parts.xml(リスト1)
items.html~Webページ(リスト2)
finditem.js~検索処理のJavaScript(リスト3)
スタイルシートのパターンマッチング
パターンマッチング
スタイルシートにスクリプトを書く
並べ替えのスクリプト
あとがき

Copyright © MESCIUS inc. All rights reserved.