| MAP | SASAX ドキュメント > SASAX とは何か - (3/3) [ <| 1| 2| 3| > ] |
XML 文書に記述された値(群)から、 固有の Java オブジェクトを生成したい場合もあるでしょう。 その要求に応えるために、 SASAX では要素の値(ないし構成要素の値) の確定を通知する手段が提供されています。
例えば、
XML 文書中の "composite"(およびその構成要素)から、
ユーザ固有のコンテナである "CompositeContainer"
を生成するコードを "通知の受信" に示します。
// <composite>
// <int>123456</int>
// <string>string value</string>
// </composite>
public class Composite
extends CompositeElement
{
final private IntElement int_ =
new IntElement(this, "", "int");
final private StringElement string_ =
new StringElement(this, "", "string");
////////////////////////////////////////
public Composite(Element parent){
super(parent, "", "composite");
addMustItem(int_);
addMustItem(string_);
}
////////////////////////////////////////
// Overriding of class CompositeElement
protected void notifyDetermined()
throws SAXException //
{
Integer integer = int_.getInteger(false);
String string = string_.getString(false);
CompositeContainer value =
new CompositeContainer(integer, string);
// 処理例: どこか他の場所への value の格納
}
}
上述のように、
"notifyDetermined" メソッドをオーバライドすることで、
値(群)の確定通知を受け取ることが出来ます。
"名前空間に関する貧弱さ" で述べているように、 SAX API は名前空間への対応が XML パーサ次第であるため、 要素/属性名の識別に関する複雑さを持っています。
SASAX は、 名前空間に対応していない SAXParser に対して、 擬似的な名前空間対応性を付加するための適合クラスを提供しています。 名前空間非対応の SAXParser による解析処理の例を、 "名前空間対応サポート" に示します。
// "adaptee" は DefaultHandler の派生クラスです PrefixMappingAdapter adapter = new PrefixMappingAdapter(adaptee); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(inputSource, adapter);
上記例では、
仮に(デフォルトの)SAXParser が名前空間非対応であっても、
"startElement()" および
"endElement()" イベントにおいて、
"adaptee" は "名前空間 URI" および
"局所名" を受け取ることが出来ますし、
"startElement()" において、
属性を "名前空間 URI" および "局所名" で問い合わせることが出来ます。
これにより SASAX は名前空間対応環境を前提とできるため、 API 上では "名前空間 URI" および "局所名" のみの取り扱いとなり、 処理ロジックの記述が容易になります。
これに加えて、 SASAX は "名前空間 URI 接頭辞" と "名前空間" の間での、 マッピング問い合わせ機能を提供しています。 これにより、 接頭辞付きの要素/属性値の検証を容易に行うことが出来ます。
| MAP | SASAX ドキュメント > SASAX とは何か - (3/3) [ <| 1| 2| 3| > ] |