| MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 複合要素 | << | >> |
本節では、 SASAX を用いて、 他の要素から構成される複合要素を解析する方法について説明します。
XML Schema によるスキーマおよび文書例を "文書構造" に示します。
XML Schema によるスキーマ:
<xs:schema
targetNamespace="http://www.lares.dti.ne.jp/~foozy/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:local="http://www.lares.dti.ne.jp/~foozy/">
<xs:simpleType name="int">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="string">
<xs:restriction base="xs:token"/>
</xs:simpleType>
<xs:element name="composite">
<xs:complexType>
<xs:sequence>
<xs:element name="int" type="local:int"
form="qualified"/>
<xs:element name="string" type="local:string"
form="qualified"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
例:
<foozy:composite
xmlns:foozy="http://www.lares.dti.ne.jp/~foozy/">
<foozy:int>
12245678
</foozy:int>
<foozy:string>
optional text message
</foozy:string>
</foozy:composite>
対象文書が以下の特徴を持つことがわかります。
前述の文書を解析するためのオブジェクト群は、 "要素オブジェクト(群)の生成" に示すようにして生成されます。
String uri = "http://www.lares.dti.ne.jp/~foozy/"; CompositeElement compositeElement = new CompositeElement(null, uri, "composite"); IntElement intElement = new IntElement(compositeElement, uri, "int"); composite.addMustItem(intElement); StringElement stringElement = new StringElement(compositeElement, uri, "string"); composite.addOptionalItem(stringElement);
"composite" 配下の要素は、
生成後に "composite" に対して登録されています。
登録メソッドの違い
(addMustItem と addOptionalItem)
は、要素の必須性の違いです。
備考:
CompositeElement にまつわる想定外の挙動の多くは、
addMustItem(あるいは addOptionalItem)
の起動し忘れに起因しています。
これらの起動の有無を確認してください。
"文書の解析" に示すコードにより、 XML 文書を解析することができます。
ElementDrivenHandler handler = new ElementDrivenHandler(compositeElement); handler.parse(reader);
ElementDrivenHandler#parse 起動後、
"intElement" 要素に対して、
IntElement クラスの
getInteger メソッドを起動することによって、
整数値を取得することが出来ます
(あるいは、
"stringElement" 要素に対して、
StringElement クラスの
getString メソッドを起動することによって、
文字列値を得られるかもしれません)。
これらのメソッドの引数に関する詳細に関しては、
"固有要素" ないし
API ドキュメントを参照してください。
チュートリアル本節におけるコードの完全なものは、
配布物の src/demo/sasax/src 配下にある
jp.ne.dti.lares.foozy.sasax.CompositeDemo です。
このクラスはバイナリ配布版中の demo.jar に含まれています。
本節におけるクラス図を以下に示します。
本節におけるオブジェクト図を以下に示します。
ElementDrivenHandler、CompositeElement および Element 実装クラスにおける処理フローは以下のようになります。
加えてシーケンス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 |
|---|---|
| CompositeElement | jp.ne.dti.lares.foozy.sasax.CompositeElement |
| ElementDrivenHandler | jp.ne.dti.lares.foozy.sasax.ElementDrivenHandler |
| IntElement | jp.ne.dti.lares.foozy.sasax.IntElement |
| StringElement | jp.ne.dti.lares.foozy.sasax.StringElement |
| MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 複合要素 | << | >> |