Or even better, if you have a working example of:
 
XSDHelper.INSTANCE.generate
 
It will be very appreciated.
 
Thanks in advanced.
 
///RG


From: [EMAIL PROTECTED]: [EMAIL PROTECTED]: RE: Convert HelperContext to 
XSDDate: Mon, 31 Mar 2008 09:13:52 -0600


Hi, I made an slight adaptation to an existing example of the distribution, 
however I get exceptions at runtime. Please assist:  package 
org.apache.tuscany.samples.sdo.advanced;import java.util.ArrayList;import 
java.util.List;import org.apache.tuscany.samples.sdo.SampleBase;import 
org.apache.tuscany.sdo.api.SDOUtil;import commonj.sdo.DataObject;import 
commonj.sdo.Property;import commonj.sdo.Type;import 
commonj.sdo.helper.DataFactory;import commonj.sdo.helper.HelperContext;import 
commonj.sdo.helper.TypeHelper;import commonj.sdo.helper.XSDHelper;public class 
MedicalScenario1 extends SampleBase {    private static final String sdoApiUri 
= "commonj.sdo";    private static final String peopleURI = 
"www.example.org/people";    private static final String medicalURI = 
"www.example.org/MedicalTest";    boolean typesViaAPI = false;    public 
MedicalScenario1(String[] args, Integer userLevel) {        super(userLevel, 
SAMPLE_LEVEL_ADVANCED);        typesViaAPI = true;    }    public 
MedicalScenario1(Integer userLevel) {        super(userLevel, 
SAMPLE_LEVEL_ADVANCED);    }    /**     * @param args     * @throws Exception   
  */    public static void main(String[] args) throws Exception {        
MedicalScenario1 s = new MedicalScenario1(args, COMMENTARY_FOR_NOVICE);        
s.run();    }    /*     *  metadata for the sample documenting the areas of SDO 
that are explored     */    public static int[] CORE_FUNCTION = {        
SDOFacets.CONTAINMENT,        SDOFacets.CREATE_TYPES_USING_THE_SDO_API,        
SDOFacets.CREATE_TYPES_USING_XML_SCHEMA,        SDOFacets.OPEN_CONTENT,        
SDOFacets.NON_CONTAINMENT    };    public static int[] SIGNIFICANT_FUNCTION = { 
       SDOFacets.CREATE_DATAOBJECTS_BY_NAME,        
SDOFacets.ISMANY_PROPERTIES,        SDOFacets.GENERIC_DATA_GRAPH_TRAVERSAL,     
   SDOFacets.SAVING_DATA_TO_XML    };    public void runSample() throws 
Exception {        HelperContext scope = SDOUtil.createHelperContext();         
commentary("In this execution of the sample we use Types created\n" + "using 
the SDO API");        createTypesViaAPI(scope);        commentary(              
  COMMENTARY_FOR_NOVICE,                "The DataFactory associated with the 
scope that the types were created within\n" + "can be used to create an 
instance of the Person Type\n\n" + "DataFactory dataFactory = 
scope.getDataFactory();\n" + "DataObject person1 = 
dataFactory.create(\"www.example.org/people\", \"Person\");");        
DataFactory dataFactory = scope.getDataFactory();        DataObject person1 = 
dataFactory.create("www.example.org/people", "Person");        commentary("The 
setString() of dataObject method is used to set the properties of the\n" + "new 
Person DataObject, including a unique identifier reference value\n" + "for the 
Person instance.\n\n" + "person1.setString(\"id\", \"1\");\n" + 
"person1.setString(\"name\", \"Joe Johnson Snr.\");\n" + 
"person1.setString(\"gender\", \"male\"););");        person1.setString("id", 
"1");        person1.setString("name", "Joe Johnson Snr.");        
person1.setString("gender", "male");        commentary("An alternative approach 
to using the DataFactory directly to create\n" + "all DataObjects is to use a 
top-down approach,  where we create the\n" + "root object for a data graph,  
and then use the createDataObject(String propertyName)\n" + "method to create 
the contained DataObjects.  Here we create the overall\n" + "medical test 
DataObject,  and then create the contained \"referrals\" DataObject\n\n" + 
"DataObject test = dataFactory.create(\"www.example.org/MedicalTest\", 
\"Test\");\n" + "DataObject referrals = 
test.createDataObject(\"referrals\");");        DataObject test = 
dataFactory.create("www.example.org/MedicalTest", "Test");        DataObject 
referrals = test.createDataObject("referrals");        commentary("Now we can 
add the person we created earlier into the set of people who have\n" + "been 
referred for this medical test.\n\n" + "test.set(\"referrals\", referrals);\n" 
+ "referrals.getList(\"person\").add(person1);");        test.set("referrals", 
referrals);        referrals.getList("person").add(person1);        
commentary("Let's take a look at how the current state of the data" + "graph is 
rendered in XML ...");        
System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));        commentary("The scenario 
unfolds and the Joe Johnson Snr. becomes a patient\n\n" + "DataObject patients 
= test.createDataObject(\"patients\");\n" + 
"patients.getList(\"person\").add(person1);");        DataObject patients = 
test.createDataObject("patients");        
patients.getList("person").add(person1);        commentary("Having added Joe 
Johnson Snr. to the set of patients we can see\n" + "the way that SDO preserves 
a single containment hierarchy within a\n" + "datagraph.  If we look at the XML 
rendering of the graph again, we will\n" + "see that by adding him to the set 
of patients he has been removed from the\n" + "containment property associated 
with the referrals set ...");        
System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));        commentary("The 'Person' Type 
we are making use of here has been designed to be\n" + "multi-purpose,  in that 
the type has been declared to be 'Open'.\n" + "That means that we can make use 
of 'Open Content' Properties\n" + "(If the type system has been defined using 
an XML schema\n" + "then these properties will derive from global elements)\n" 
+ "We can look up open content Properties using the TypeHelper\n\n" + "Property 
conditionProperty = scope.getTypeHelper().getOpenContentProperty(\n" + "    
\"www.example.org/MedicalTest\", \"condition\");");        Property 
conditionProperty = scope.getTypeHelper().getOpenContentProperty(               
 "www.example.org/MedicalTest", "condition");        commentary("We can create 
a value of the appropriate Type for this open\n" + "content Property\n\n" + 
"DataObject condition = dataFactory.create(conditionProperty.getType());\n" + 
"condition.setString(\"name\", \"Panar Syndrome\");");        DataObject 
condition = dataFactory.create(conditionProperty.getType());        
condition.setString("name", "Panar Syndrome");        commentary("If you ask a 
DataObject that has an 'Open' Type for its list of\n" + "values associated with 
an open content Property, and the DataObject\n" + "doesn't currently have any 
values for the Property,  it will return\n" + "an empty list. We can use the 
list to add values for the Property\n\n" + "List conditions = 
person1.getList(conditionProperty);\n" + "conditions.add(condition);");        
List conditions = person1.getList(conditionProperty);        
conditions.add(condition);        commentary("A further look at the data graph 
in XML form shows\n" + "the presence of the new condition Property's value 
...");        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));        commentary("Having looked at 
the way SDO handles Open content\n" + "We now turn our attention to 
'non-containment' relationships.\n" + "To do this we first create the set of 
people in the test that\n" + "constitute the blood relatives of patients -- 
'relatives'\n" + "and define a new person to be Joe Johnson Snr's child.\n\n" + 
"DataObject relatives = test.createDataObject(\"relatives\");\n" + "DataObject 
person2 = relatives.createDataObject(\"person\");\n" + 
"person2.setString(\"id\", \"2\");\n" + "person2.setString(\"name\", \"Joe 
Johnson Jnr.\");\n" + "person2.setString(\"gender\", \"male\");");        
DataObject relatives = test.createDataObject("relatives");        DataObject 
person2 = relatives.createDataObject("person");        person2.setString("id", 
"2");        person2.setString("name", "Joe Johnson Jnr.");        
person2.setString("gender", "male");        commentary("Another quick look at 
the XML rendering of the graph confirms that\n" + "the set of relatives now 
includes Joe Johnson Jnr, but we haven't yet\n" + "defined who he is related 
to, or how.");        System.out.println(scope.getXMLHelper().save(test,        
        "www.example.org/MedicalTest", "test"));        commentary("The Person 
type has a Property 'relative'\n" + "so we create a relative for Joe Johnson 
Snr.\n\n" + "DataObject relation = person1.createDataObject(\"relative\");\n" + 
"relation.set(\"target\", person2);\n" + "relation.set(\"relationship\", 
\"child\");");        DataObject relation = 
person1.createDataObject("relative");        relation.set("target", person2);   
     relation.set("relationship", "child");        commentary("Now when we look 
at the XML rendering of the data graph\n" + "we can see that the action of 
setting the 'target' of the\n" + "relationship to Joe Johnson Jnr didn't 
displace him from the\n" + "set of 'relatives',  because the 'target' Property 
is a\n" + "non-containment Property.  This non-containment relationship\n" + 
"is reflected in the XML by a reference to the Person DataObject\n" + 
"describing Joe Johnson Jnr, \"2\" ...\n" + "If the Type system has been 
created from an XML schema then the\n" + "unique ID of the target can be used 
in the serialization.\n" + "If however the type system was defined dynamically, 
 then the reference\n" + "will be represented as an XPath from the root of the 
data graph.");        System.out.println(scope.getXMLHelper().save(test,        
        "www.example.org/MedicalTest", "test"));        commentary("Now that 
the graph is complete we can use the PrintDataGraph sample utility\n" +         
       "to reveal the full SDO nature of the final data graph\n\n" +            
    "");        PrintDataGraph printer = new 
PrintDataGraph(COMMENTARY_FOR_ADVANCED);        printer.printDataObject(test);  
      System.out.println(printer.getBuf());    }    /**     * @throws Exception 
    * @throws FileNotFoundException     */    private void 
createTypesViaAPI(HelperContext scope) throws Exception {        List 
typeDeclarations = new ArrayList();        TypeHelper typeHelper = 
scope.getTypeHelper();        Type stringType = typeHelper.getType(sdoApiUri, 
"String");        Type dateType = typeHelper.getType(sdoApiUri, "Date");        
Type booleanType = typeHelper.getType(sdoApiUri, "Boolean");        // 
<complexType name="Person">        // <sequence>        // <element name="dob" 
type="date"/>        // <element name="relative" maxOccurs="unbounded" 
type="tns:Relative"/>        // <any namespace="##other" processContents="lax" 
maxOccurs="unbounded"/>        // </sequence>        // <attribute name="id" 
type="ID"/>        // <attribute name="name" type="string"/>        // 
<attribute name="gender" type = "tns:Gender"/>        // </complexType>        
DataObject personTypeDesc = createTypeDescription(scope, peopleURI,             
   "Person");        typeDeclarations.add(personTypeDesc);        
addPropertyDescription(personTypeDesc, stringType, "name");        
addPropertyDescription(personTypeDesc, dateType, "dob");        
addPropertyDescription(personTypeDesc, stringType, "id"); // set to unique      
  // identifier?        addPropertyDescription(personTypeDesc, stringType, 
"gender"); // restrict?        DataObject relativeType = 
createTypeDescription(scope, peopleURI,                "Relative"); // forward 
declare the Relative type        typeDeclarations.add(relativeType);        
DataObject rp = addPropertyDescription(personTypeDesc, relativeType,            
    "relative");        rp.setBoolean("many", true);        
personTypeDesc.set("open", Boolean.TRUE);        // <complexType 
name="Relative">        // <attribute name="target" type="IDREF" 
sdoxml:propertyType="tns:Person"        // use="required"/>        // 
<attribute name="relationship" type="string" />        // <attribute 
name="genetic" use="optional" type="boolean"/>        // </complexType>        
addPropertyDescription(relativeType, stringType, "relationship");        
addPropertyDescription(relativeType, booleanType, "genetic");        DataObject 
targetPersonProp = addPropertyDescription(relativeType,                
personTypeDesc, "target");        targetPersonProp.setBoolean("containment", 
false);        // <complexType name="PersonSet">        // <sequence>        // 
<element name="person" type="tns:Person" maxOccurs="unbounded"/>        // 
</sequence>        // </complexType>        DataObject pSet = 
createTypeDescription(scope, peopleURI, "PersonSet");        
typeDeclarations.add(pSet);        DataObject pSetProperty = 
addPropertyDescription(pSet, personTypeDesc,                "person");        
pSetProperty.setBoolean("many", true);        // <complexType name="Condition"> 
       // <sequence>        // <element name="diagnosed" type="date" />        
// </sequence>        // <attribute name="name" type="tns:ConditionName" />     
   // </complexType>        DataObject condition = createTypeDescription(scope, 
medicalURI, "Condition");        typeDeclarations.add(condition);        
addPropertyDescription(condition, booleanType, "diagnosed");        
addPropertyDescription(condition, stringType, "name"); // constrain?        // 
<complexType name="Test">        // <sequence>        // <element 
name="referrals" type="people:PersonSet" />        // <element name="patients" 
type="people:PersonSet" />        // <element name="relatives" 
type="people:PersonSet" />        // </sequence>        // </complexType>       
 DataObject testType = createTypeDescription(scope, medicalURI, "Test");        
typeDeclarations.add(testType);        addPropertyDescription(testType, pSet, 
"referrals");        addPropertyDescription(testType, pSet, "patients");        
addPropertyDescription(testType, pSet, "relatives");        List types = 
typeHelper.define(typeDeclarations);        DataObject p = 
scope.getDataFactory().create("commonj.sdo", "Property");        p.set("type", 
typeHelper.getType(medicalURI, "Condition"));        p.set("name", 
"condition");        p.setBoolean("many", true);        
p.setBoolean("containment", true); // why is this not the default?        
typeHelper.defineOpenContentProperty(medicalURI, p);        
System.out.print("XSD create is: " + XSDHelper.INSTANCE.generate(types));    }  
  /**     * @param uri     * @param name     * @return     */    private 
DataObject createTypeDescription(HelperContext scope, String uri,            
String name) {        DataObject typeDesc = 
scope.getDataFactory().create(sdoApiUri, "Type");        typeDesc.set("name", 
name);        typeDesc.set("uri", uri);        return typeDesc;    }    private 
DataObject addPropertyDescription(            DataObject 
containerTypeDescription, Object propertyType,            String propertyName) 
{        DataObject property = 
containerTypeDescription.createDataObject("property");        
property.set("type", propertyType);        property.setString("name", 
propertyName);        property.setBoolean("containment", true);        return 
property;    }}  > To: [email protected]> Subject: Re: Convert 
HelperContext to XSD> From: [EMAIL PROTECTED]> Date: Mon, 31 Mar 2008 10:27:13 
-0400> > Take a look at XSDHelper.generate().> > Frank.> > Gerardo Corro 
<[EMAIL PROTECTED]> wrote on 03/31/2008 10:16:06 AM:> > > > > Hi, > > > > I 
wonder if theres a way to create a XSD DSO definition from a > HelperContext.> 
> > > I mean, the normal process is to setup a HelperContext from an XSD, > > 
from there read an XML file that contains the actual DSOs.> > > > I want to go 
the create Types through the API, and then persist them> > as an XSD. I wonder 
if there's a way to do that.> > > > Thanks!!!!> > 
_________________________________________________________________> > Connect to 
the next generation of MSN Messenger > > 
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-> > 
us&source=wlmailtagline> > 
---------------------------------------------------------------------> To 
unsubscribe, e-mail: [EMAIL PROTECTED]> For additional commands, e-mail: [EMAIL 
PROTECTED]> 

Discover the new Windows Vista Learn more! 
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. 
It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us

Reply via email to