|
WebObjects 5.2.3 | ||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
Interface Summary | |
WOXMLCoding | このインターフェイスは、マッピングモデルが使われない場合、このインターフェイスを実装したクラスを、WOXMLCoderに XMLデータとしてエンコードさせます。 |
Class Summary | |
WOXMLCoder | オブジェクトをXMLデータにエンコードします。 |
WOXMLDecoder | XMLデータからオブジェクトにデコードします。 |
Exception Summary | |
WOXMLException | このクラスはパースプロセス中に起こる多くの例外をとらえ、あなたがコーディングすべき例外処理を軽減します。 |
XMLデータのエンコード、デコード機能を提供します
XMLフレームワークには、オブジェクトをXMLデータとしてエンコードまたはデコードする、二つの重要なクラス、WOXMLCoderと
WOXMLDecoderがあります。このクラスはまた、WWWのような外部ソースからもたらされるXMLをパースしたり、または生成したり、といった役
割もあります。
いわゆる「外部の」XMLを扱う場合、その要素とプロパティ、またはマッピングモデル(エディタやXMLエディタで作った)を使って、オブジェクトを
XMLフォーマットにマッピングするなどの作業が発生します。
マッピングモデルは、デコードプロセスにおいて優れた操作性をもたらし、外部ソースからの、または外部ソースに向けたXMLのエンコード、デコードにおい
て主に利用されます。
マッピングモデルを使わずにWOXMLCoder、WOXMLDecoderでカスタムオブジェクトをエンコード、デコードしようとするなら、カスタムク
ラスは以下のような実装になります。
マッピングモデルを利用するか、または対象オブジェクトが以下の場合には、上記の制限はありません。
例外はSAXパーサーによって出力されますが、単純化のためWOXMLExceptioオブジェクトとしてラップされることで、コードがキャッチす べき例外は劇的に少なくなります。
マッピングモデルはテキストエディタまたはXMLエディタを使って生成することができます。
モデルはルートである<model> 要素で囲まれ、一つ以上の<entity>
要素-それぞれゼロまたはそれ以上の<property> 要素を含む-を持つテキストファイルです。
シンプルなモデルの例:
<model> <entity name="Command" xmlTag="command"> <property name="qty" xmlTag="quantity" attribute="YES"/> <property name="movie" xmlTag="movie"/> <property name="customer" xmlTag="customer"/> </entity> <entity name="MyMovie" xmlTag="movie"> <property name="title" xmlTag="name" attribute="YES"/> <property name="dateReleased" xmlTag="date"> <property name="roles" xmlTag="role"> <property name="category" xmlTag="cat"/> </entity> <entity name="com.webobjects.eocontrol.EOGenericRecord" xmlTag="role"> <property name="roleName" xmlTag="name" attribute="YES"/> </entity> </model>
マッピングモデルをつくる場合、エンコード時に<property>要素がユニークでなければならないことに注意してください(つまり
同じ<property>要素を持つ二つのマッピングをつくることはできません)。
これはXMLタグをエンコードする際にもあてはまります。同じXMLタグに二つのマッピングをつくってはいけません。
<model> 要素はマッピングファイルのルート要素で、マッピング情報を内包します。アトリビュートはありません。<model> 要素は最低一つの<entity> 要素がなければいけません。
<entity> 要素は、生成されるXMLデータとエンコードされるオブジェクトの関係を記述します。
最初の<entity> 要素は生成されるXMLデータのルート要素となります。それに続く<entity>
要素はルート要素の完全な記述であることが求められます。
二つの必須アトリビュートと多くのオプショナルなアトリビュートを持ちます。
name=
property (必須)xmlTag=
tag (必須)ignoreUnmappedTags="YES" | "NO"
(オプショナル)unmappedTagsKey=
key (オプショナル)contentsKey=
key(オプショナル)... <entity name="com.webobjects.foundation.NSMutableDictionary" xmlTag="text" contentsKey="contents" /> ...
以下のXMLが対応します:
<text>Hello, <b>World!</b></text>
NSMutableDictionaryオブジェクトがひとつのkey-valueペアとしてつくられます。
"contents”というKeyはvalueとして、二つの要素から成るNSMutableArrayを持ちます:"Hello"という文
字列とkey-valueペア:"b"というKeyは文字列"World!"というvalueを持ちます。
アトリビュートを特定する時には、この<entity>要素に対する
<property>要素をつくる必要はありません。どこにも使えるところがないからです。そのかわりに、keyとそれに対応する
NSMutableArrayとして扱われるValueを持つ、key-valueコーディングペアが存在することを確認してください。
<entity> 要素内には、0個以上の<property> 要素を含めることができます。
<property>
要素はエンティティオブジェクトのプロパティと、そのプロパティから生成されるXMLデータとのマッピングを記述します。それぞれのエンティティオブジェ
クトのプロパティは、最終的にXMLデータとなるValueを持つkey-valueコーディングペアです。<property>
要素は二つの必須項目といくつかのオプションがあります。
name=
key (必須)xmlTag=
tag (必須)attribute="YES" | "NO"
(オプショナル)ではなく<command movie="someValue" ... </command>
デフォルトは"NO"です。<command> ... <movie>someValue</movie> ... </command>
forceList="YES" | "NO"
(オプショナル)デフォルトでは、デコードは、property_foo というkeyとtype_barタイプのオブジェクトであるvalueを持つkey-valueコーディングをコールします。forceList= "YES" の場合は、type_barタイプの単一オブジェクトを持つNSMutableArrayのインスタンスになります。<property_foo> <type_bar>some_Value</type_bar> </property_foo>
以下のようなXML構造をデコードする場合、
<property_foo> <type_bar>value1</type_bar> <type_bar>value2</type_bar> </property_foo>
常にproperty_foo というkeyと、2つのtype_barオブジェクトを持つNSMutableArray のvalueからなるkey-valueコーディングをコールすることに注意してください。
デフォルトは"NO" です。codeBasedOn="TAG"
(オプショナル)reportEmptyValues="YES" | "NO"
(オプショナル)outputTags="class" | "property" | "both" | "neither"
(オプショナル)<model> <entity name="com.webobjects.foundation.NSMutableDictionary" xmlTag="text"> <property name="p" xmlTag="ignore" outputTags="neither"/> </entity> <entity name="Paragraph" xmlTag="p"> <property name="text.contents" xmlTag="text" outputTags="class"/> </entity> <entity name="ItemList" xmlTag="ul"> <property name="contents" xmlTag="li" outputTags="both"/> </entity> <entity name="Item" xmlTag="item"> <property name="contents" xmlTag="ignore" outputTags="class"/> </entity> <entity name="LineBreak" xmlTag="br"/> <entity name="ExternalLink" xmlTag="a"> <property name="url" xmlTag="href" attribute="YES"/> <property name="anchorText" xmlTag="ignore" outputTags="neither"/> </entity> </model>
|
Last updated Thu Oct 21 15:04:16 PDT 2004. | ||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |