ダウンロード サンプルソース (12.6 KB)
SDOを使ってXMLを作成、永続化する
CreatePO.javaクラス(リスト2を参照)で、このサンプルのXML作成フェーズが完結します。このクラスで特に注目する必要があるのは、コメントが付けられた7ヶ所です。
package com.company.sdo.po; import commonj.sdo.DataObject; import commonj.sdo.helper.DataFactory; public class CreatePO { public static void main(String[] args) throws Exception { //1. Define Types and Properties with XSD Util.definePOTypes(); //2. Create the root DataObject DataObject purchaseOrder = DataFactory.INSTANCE.create(Constants.PO_NAMESPACE, "PurchaseOrderType"); //3. Set data type Property for the root DataObject purchaseOrder.setString("orderDate", "1999-10-20"); //4. Create child DataObjects DataObject shipTo = purchaseOrder.createDataObject("shipTo"); //5. Set data type Property for the child DataObject shipTo.set("country", "US"); shipTo.set("name", "Alice Smith"); shipTo.set("street", "123 Maple Street"); shipTo.set("city", "Mill Valley"); shipTo.set("state", "CA"); shipTo.setString("zip", "90952"); DataObject billTo = purchaseOrder.createDataObject("billTo"); billTo.set("country", "US"); billTo.set("name", "Robert Smith"); billTo.set("street", "8 Oak Avenue"); billTo.set("city", "Mill Valley"); billTo.set("state", "PA"); billTo.setString("zip", "95819"); purchaseOrder.set("comment", "Hurry, my lawn is going wild!"); DataObject items = purchaseOrder.createDataObject("items"); //6. Create a child DataObject for the child DataObject “items” DataObject item1 = items.createDataObject("item"); item1.set("partNum", "872-AA"); item1.set("productName", "Lawnmower"); item1.setInt("quantity", 1); item1.setString("price", "148.95"); item1.set("comment", "Confirm this is electric"); DataObject item2 = items.createDataObject("item"); item2.set("partNum", "926-AA"); item2.set("productName", "Baby Monitor"); item2.setInt("quantity", 1); item2.setString("price", "39.98"); item2.setString("shipDate", "2007-11-21"); DataObject item3 = items.createDataObject("item"); item3.set("partNum", "998-AA"); item3.set("productName", "Carpet"); item3.setInt("quantity", 1); item3.setString("price", "439.98"); item3.setString("shipDate", "2007-12-01"); //7. Persist the XML data to an XML file //Util.storeXML(purchaseOrder,"purchaseOrder", // Constants.PO_XML_ORIGINAL); /*use the following line instead of the above * one for tracking changes*/ Util.storeXML(purchaseOrder,"purchaseOrder", Constants.PO_XML); } }
- Define Types and Properties with XSD(XSDでデータ型とプロパティを定義する)― データはXMLスキーマによってモデル化されるため、最初に必要なことは、このスキーマに基づいてSDOのデータ型とプロパティをランタイムに定義することです。この操作を行うのは、Utilクラスの
definePOTypes()メソッドから呼び出されるXSDHelperです。
public static void definePOTypes() throws Exception { FileInputStream fis = new FileInputStream(PO_MODEL_ORIGINAL); XSDHelper.INSTANCE.define(fis, null); fis.close(); }
- Create the root DataObject(ルートデータオブジェクトを作成する)― SDOの動的APIは、データオブジェクト階層(オブジェクト別にプロパティを持つ階層)またはDataGraph(データオブジェクトのグラフをメタデータごとパッケージ化したもの)によって構造化データを表します。SDOのDataFactoryインターフェイスを使って未接続のデータオブジェクトを作成できるため、ここで必要な作業は、注文処理のルートデータオブジェクトを作成することです。
- Set data type Property for the root DataObject(ルートデータオブジェクトのデータ型プロパティを設定する)― SDOの場合、注文はデータ型です。スキーマの定義に従うと、注文のデータ型プロパティは
orderDateであり、これは日付型です。コメント3の下の行で、orderDateに日付の文字列を設定します。これは、JavaのDateオブジェクトを作成し、DataObjectのsetDate()メソッドを使用することに相当します。
- Create child DataObjects(子データオブジェクトを作成する)― データオブジェクトpurchaseOrderには、複数の子データオブジェクトがあります。たとえば、コメント4の下の行では、"shipTo"と名前を指定してshipTo子オブジェクトをpurchaseOrderから直接作成します。これは、DataFactoryを使って未接続のshipToデータオブジェクトを作成し、これをDataObjectのいずれかの
setDataObject()メソッドを使ってpurchaseOrderの子として設定することに相当します。
DataObject shipTo = DataFactory.INSTANCE.create(CONSTANTS.PO_NAMESPACE, "USAddress"); ...... PurchaseOrder.setDataObject("shipTo", shipTo);
- Set data type Property for the child DataObject(子データオブジェクトのデータ型プロパティを設定する)― USAddressデータ型の定義に従い、shipToデータオブジェクトにはさまざまなデータ型プロパティが与えられます。コメント5の下の行で、これらのプロパティを作成します。
- Create a child DataObject for the child DataObject “items”(子データオブジェクト"items"の子データオブジェクトを作成する)― ここでは、XMLをモデル化した場合のSDOデータモデルの階層的な特性について説明します。ItemsはルートデータオブジェクトpurchaseOrderの子であり、これに複数のitemデータオブジェクトの子が含まれます。
- Persist the XML data to an XML file(XMLデータをXMLファイルに永続化する)― SDOの動的APIに用意されたXMLHelperインターフェイスを使って、XMLデータをXMLファイルに永続化できます。コメント7の下のコードで、Utilクラスを呼び出し、メソッドを次のように定義します。
public static void storeXML(DataObject data, String rootElementName, String xmlFile) throws Exception { OutputStream stream = new FileOutputStream(xmlFile); XMLHelper.INSTANCE.save(data, PO_NAMESPACE, rootElementName, stream); }
永続化した注文処理用XMLファイルは、「po_original.xml」という名前です。
XML用のSDO動的APIは非常に簡単に使用できるため、DOM APIを使って同等の操作を行うよりもずっと便利です。
次のセクションでは、SDOの動的APIを使って注文処理に改良を加え、変更を追跡できるようにします。
この記事は参考になりましたか?
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Young Yang(Young Yang)
ウォール街の金融会社に勤務する上級エンタープライズアーキテクト。数学博士号を取得。IBM社のeビジネスデザイン、DB2管理、ビジネスインテリジェンス、XMLおよび関連テクノロジ、WebSphere Application Serverの認定資格、BEA社のWebLogic Application S...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
