Streaming API for XML
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2009/09/17 01:30 UTC 版)
Streaming API for XML(StAX)は、JavaでXML文書を読み書きするためのAPIである。
従来のXML APIは、次のどちらかである。
- ツリーベース - 文書全体がツリー構造でメモリに読み込まれ、呼び出し元アプリケーションはランダムアクセスできる。
- イベントベース - 文書内に出現したエンティティごとに、登録されたアプリケーションがイベントを受け取る。
これらはそれぞれに利点がある。前者(例えばDOM)は文書へのランダムアクセスが可能であり、後者(例えばSAX)は使用メモリが少なくより高速に動作する場合が多い。
この2つは対極に位置するアクセス手法であると言える。ツリーベースのAPIは制約のないランダムアクセスとデータの操作が可能である一方、イベントベースのAPIは文書を1回スキャンするだけである。
StAXは、その中間の手法として設計された。StAXの考え方では、プログラムの操作点は文書内のある地点を指すカーソルである。アプリケーションがカーソルを進めるということは、必要に応じて自分がパーサーから情報を取り出すことになる(pull型)。これはSAXのようなイベントベースのAPIとは異なる。SAXではパーサーがアプリケーションにデータを送りつけるので(push型)、アプリケーション側が文書内の位置を追跡しなければならない場合は必要に応じてイベントとイベントの間で状態を保持しておく必要がある。
目次 |
起源
StAXは、互換性のない多数のpull型XML APIにその起源を持つ。これらAPIのうち最も有名なXMLPULLの作者(Stefan HausteinとAleksandr Slominski)と、その他のAPIの作者であるBEAシステムズやオラクル、サン、Breeze Factor、ジェームズ・クラークの協働により誕生した。
例
JSR-173の最終仕様、V1.0より(フェアユースに基づき使用)
以下、引用:
- 下記のJava APIは、カーソルの手法でXMLを読むための主要なメソッドである。
// Java public interface XMLStreamReader { public int next() throws XMLStreamException; public boolean hasNext() throws XMLStreamException; public String getText(); public String getLocalName(); public String getNamespaceURI(); // ...以下のメソッドは省略 }
- 書き込み用のAPIは、イベントベースのAPIにおける“StartElement”と“EndElement”に対応するメソッドを持っている。
// Java public interface XMLStreamWriter { public void writeStartElement(String localName) throws XMLStreamException; public void writeEndElement() throws XMLStreamException; public void writeCharacters(String text) throws XMLStreamException; // ...以下のメソッドは省略 }
- 5.3.1 XMLStreamReader
- この例では、InputFactoryをどのようにインスタンス化し、Readerを生成してXML文書中の要素を繰り返し処理するかを示す。
XMLInputFactory f = XMLInputFactory.newInstance(); XMLStreamReader r = f.createXMLStreamReader(... ); while (r.hasNext()) { r.next(); }
実装
- http://stax.codehaus.org/ リファレンス実装
- Woodstox オープンソースのStAX実装
- https://sjsxp.dev.java.net サンのStAX実装
関連項目
JavaでXMLを構文解析するための他の方法としては、以下のものがある。
「Streaming API for XML」の例文・使い方・用例・文例
- PAPIという,航空機用の経路誘導装置
- 5 月15 日の午前8 時30 分から午後3 時まで、Oceanview公園で開催される、毎年恒例のWalk for Petsについてのお知らせです。
- イベントによる収益金の半分は、捨てられたペットのための保護施設であるHome for Petsに使われ、残りはさまざまな動物福祉団体に分配されます。
- 年次監査を行うために、Bradford and Partnersの会計士たちが10 月10 日の午前10 時に当社を訪ねてくる予定です。
- Bradfordの新人会計士2 名が今年の監査を担当すると連絡がありました。
- こんにちは、Bradfordさん。
- 昨日Bradfordさんが受け取られたデスクランプについてお電話を差し上げています。
- 取り違えてしまって申し訳ありませんが、あのランプは別のお客様に送られるはずのもので、誤ってBradfordさんに配送されました。
- Bradfordさんが受け取るはずだった商品は、Anne Keeganさんからの贈り物のご注文でした。
- タックマンモデルとは、チームビルディングにおける5段階、すなわち形成(Forming)、混乱(Storming)、統一(Norming)、機能(Performing)、散会(Adjourning)を示すモデルである。
- 着手する; 〔…の〕端緒を開く 〔for〕.
- 紺 《Oxford 大学およびその選手の色標》.
- 〔音楽会などへの〕優待券, 招待券 〔to, for〕.
- 等位接続詞 《and, but, or, for など; ⇔subordinate conjunction》.
- 【文法】 相関語 《either と or, the former と the latter など》.
- [for a] holiday to [in] France last year. 昨年は休暇をとってフランスへ旅行した.
- (最も奥の), foremost (真っ先の).
- 新大学, 1960 年以降に創設された大学, 板ガラス大学 《Oxford, Cambridge のような石造りの ancient universities, 19 世紀に創設された London 大学のような赤れんが造りの redbrick universities に対して言う; 建築様式がふんだんに plate glass を使ってモダンなことから》.
- コンセプション岬 《California 州にある》.
- être for this policy? この政策はどんな存在理由があるのか.
- Streaming_API_for_XMLのページへのリンク