コンテンツにスキップ

Java API for XML Processing

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Lunacrescens (会話 | 投稿記録) による 2007年4月17日 (火) 14:32個人設定で未設定ならUTC)時点の版 (en:Java API for XML Processing2007-03-13T12:40UTCの概要以外を翻訳(External linksは除く)著者:Sfmontyo, RedWolf, Hirzel, Sam Hocevar, Doug Bellほか)であり、現在の版とは大きく異なる場合があります。

Java API for XML ProcessingJAXP)は、Java言語XMLを扱うためのAPIのひとつ。XML文書の妥当性検証や構文解析のためのインターフェースを提供する。次の2つの基本的な構文解析インターフェースを備える。

Java SE 6からは、3番目のインターフェースが追加されている。

  • Streaming API for XMLによる構文解析インターフェース(StAXインターフェース、JSR 173)

JAXPは、構文解析インターフェースに加え、XML文書のデータや構造の変換を行うためのXSLTインターフェースも提供している。JAXPは、Java Community Processの下でJSR 5(JAXP 1.0)、JSR 63(JAXP 1.1と1.2)、JSR 206(JAXP 1.3)として開発された。J2SE 1.4以降はJAXPの実装を含んでいる。2007年現在の最新バージョンは1.3。

DOMインターフェース

おそらく最も理解しやすいのがDOMインターフェースであろう。XML文書全体を構文解析し、文書内のすべての要素に相当するメモリ内表現を、Document Object Model(DOM) Level 2 Core Specificationで規定されたモデルに基づくクラスで構築する。

DOMパーサー(構文解析機)は、メモリ上にDocument表現を構築 (build) するので、DocumentBuilderと呼ばれる。javax.xml.parsers.DocumentBuilderは、javax.xml.parsers.DocumentBuilderFactoryにより生成される。DocumentBuilderは、XML文書内の全ノードを含んだ木構造のorg.w3c.dom.Documentインスタンスを生成する。木構造内の各ノードは、org.w3c.dom.Nodeインターフェースを実装している。ノードには、XML文書内のデータ型を表すいろいろなノードタイプがある。最も重要なノードタイプとして、次のようなものがある。

  • 要素(element)ノード。属性(attribute)を持つ場合がある。
  • テキスト(text)ノード。要素の開始タグと終了タグの間に記述されたテキストを表す。

全ノードタイプの一覧は、Javaパッケージorg.w3c.domJavadocを参照のこと。

SAXインターフェース

SAXパーサーはSAXParserと呼ばれ、javax.xml.parsers.SAXParserFactoryによって生成される。DOMパーサーと違い、SAXパーサーはメモリ内にXML文書の表現を作らないので、より高速でメモリ使用量が少ない。その代わりに、SAXパーサーは、コールバックを呼び出す、すなわち、あらかじめパーサーに渡しておいたorg.xml.sax.helpers.DefaultHandlerインスタンスのメソッドを呼び出すことで、XML文書の構造をクライアントに通知する。

DefaultHandlerクラスはContentHandlerErrorHandlerDTDHandlerEntityResolverの各インターフェースを実装している。ほとんどのクライアントは、ContentHandlerインターフェースで定義されたメソッドを使うことになる。これらのメソッドは、XML文書内の対応する要素をSAXパーサーが見つけたときに呼び出される。SAXインターフェースの中でもっとも重要なメソッドとして、次のようなものがある。

  • startDocument()endDocument()メソッド。XML文書の先頭と末尾で呼び出される。
  • startElement() and endElement()メソッド。要素の開始地点と終了地点で呼び出される。
  • characters()メソッド。要素の開始タグと終了タグの間にあるテキストデータで呼び出される。

クライアントは、DefaultHandlerのサブクラスでこれらのメソッドをオーバーライドしてデータを処理する。処理の中でデータをデータベースに保存したり、ストリームに書き出したりすることもある。

XSLTインターフェース

XSLTは、XML文書を別の形式のデータに変換できる。