There's a simple example in XSDHelperTestCase.
testXSDGeneration_DynamicSDOType().

Frank.

Gerardo Corro <[EMAIL PROTECTED]> wrote on 03/31/2008 11:50:16 AM:

> 
> 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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to