MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > パスの取り扱い | << | >> |
本節では、 SASAX における XML 文書の "パス" の扱いについて説明します。
SASAX は、 現時点での XML 文書における階層情報を "パス" として知る機能を提供しています。 SASAX において、 "パス" は (1) URI、 (2) 名前および (3) 属性群を格納する "要素" のリストとして扱われます。
"パス" および "要素" は、
"Path
" および "Path.Element
" として定義されています。
Path
は、
自身と他のインスタンスの間で、
例えば先祖性(ancestor-ness)や子孫性(descendant-ness)
といったものを比較するユーティリティを提供しています。
XML 文書における現在の階層を "パス" として記録するのは、 さほど(性能的に)高価なことではありませんが、 そのような情報が不要な場合には単なるオーバヘッドに過ぎません。
そのため、
SASAX はそのような(例えば "パス" 情報の取り扱い)機能を
"拡張" として定義しており、
拡張を個別に有効化/無効化する切り替え機能を提供することで、
実行時の解析コストを低減させています。
"パス拡張" は "PathExtension
" として定義されています。
はじめに、
JVM プロセス毎に1回、
PathExtension
の
register()
を起動することで、
SASAX に "パス拡張" を "拡張" として認識させる必要があります。
その後は、
PathExtension
の
enable()
メソッドを用いて、
解析ごと(実際には ElementDrivenHandler
ごとですが)
に "パス拡張" を有効化/無効化することが出来ます。
PathExtension.register(); ElementDrivenHandler handler = new ElementDrivenHandler(rootElement); PathExtension.enable(handler); handler.parse(document);
パス取り扱いの例として、
各 "startElement" 時におけるパス階層を出力するコードを以下に示します。
このコードは
src/bin 配布版の src/demo/sasax/src
配下にある
PathDemo からの抜粋です。
このクラスはバイナリ配布版中の
demo.jar
に含まれています。
public Element startElement(ParseContext context, String uri, String lName, Attributes attrs) throws SAXException // { // 現在のパス階層の出力 Path path = PathExtension.getPath(context); Iterator elements = path.getElements(); while(elements.hasNext()){ Path.Element element = (Path.Element)(elements.next()); System.out.print("/"); System.out.print(element.getLName()); } System.out.println(""); return this; }
"文書の解析" に示すコードにより、 パスを扱いながら XML 文書を解析することが出来ます。
PathExtension.register(); PathDemo rootElement = new PathDemo(null); ElementDrivenHandler handler = new ElementDrivenHandler(rootElement); PathExtension.enable(handler); handler.parse(reader);
本節におけるクラス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
表記 | 完全名 |
---|---|
Element | jp.ne.dti.lares.foozy.sasax.Element |
ElementDrivenHandler | jp.ne.dti.lares.foozy.sasax.ElementDrivenHandler |
ParseContext | jp.ne.dti.lares.foozy.sasax.ParseContext |
ParseContextImpl | jp.ne.dti.lares.foozy.sasax.ParseContextImpl |
Path | jp.ne.dti.lares.foozy.sasax.Path |
PathExtension | jp.ne.dti.lares.foozy.sasax.PathExtension |
MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > パスの取り扱い | << | >> |