使用SDO跟踪XML数据的变化

来源: 作者:佚名 2008-02-29 出处:pcdog.com

apache  arp  eclipse  java  xml  
上一页 1 2 3 4 下一页 

   CreatePO.java类完成了建立XML的工作。代码如下

   

 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.  使用XSD定义类型和属性
     Util.definePOTypes();
//2.  建立根DataObject
     DataObject purchaseOrder =
DataFactory.INSTANCE.create(Constants.PO_NAMESPACE, "PurchaseOrderType");
//3.  设置根DataObject的数据类型属性
     purchaseOrder.setString("orderDate", "1999-10-20");
//4.  建立子DataObject
     DataObject shipTo = purchaseOrder.createDataObject("shipTo");
//5.  设置子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.  为子DataObject “item”建立一个子DataObject
     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.  将XML数据保存在一个XML文件中
     Util.storeXML(purchaseOrder,"purchaseOrder", Constants.PO_XML);
}
}

    1. 使用XSD定义类型和属性;由于我们的数据是基于XML格式的,因此,我们首先需要在运行时定义SDO类型的属性。这个功能由Util类的definePOTypes()方法完成。在definePOTypes方法内部调用了XSDHelper类。definePOTypes()方法的代码如下:

   

 public static void definePOTypes() throws Exception {
FileInputStream fis = new FileInputStream(PO_MODEL_ORIGINAL);
XSDHelper.INSTANCE.define(fis, null);
fis.close();
}

    2. 建立根数据对象:SDO的动态API可以通过数据对象的层次和属性或是一个DataGraph(包含了数据对象元数据的一个图)来描述结构化数据。SDO提供了用于建立一个未连接的数据对象的DataFactory接口。

    3. 设置根数据对象的数据类型属性:订购单在SDO中是一个类型,并且根据schema,它有一个叫orderDate的数据类型属性,这是一个日期类型。

    4. 建立子数据对象:数据对象订购单有一些子数据对象。例如,上面代码中的注释4在purchaseOrder中建立shipTo子结点。除了这种方法,我们还可以使用DataFactory来建立一个未连接的shipTo数据对象,并使用setDataObject方法将他设置成purchaseOrder的一个子结点。代码如下:

    DataObject shipTo = DataFactory.INSTANCE.create(CONSTANTS.PO_NAMESPACE, "USAddress");
           ......
    PurchaseOrder.setDataObject("shipTo", shipTo);

    5. 设置子对象结点的数据类型属性:基于USAddress类型的定义,shipTo数据对象有不同的数据类型属性。上面注释5建立了这些属性。

    6. 为子数据对象“item”建立一个子数据对象:这部分显示了建立XML时SDO数据模型。

    在下一部分将讨论如何使用SDO的动态API,我们可以编辑订购单,并且在同时跟踪他们的变化。 


更多内容请看PCdog.com--开发应用专题
上一页 1 2 3 4 下一页 
上一篇:J2SE综合:深入了解Java 5.0的垃圾收集
下一篇:Java入门-高手对 CLASSPATH 的详解