You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@tuscany.apache.org by Gerardo Corro <ro...@hotmail.com> on 2008/04/01 10:34:16 UTC

RE: Convert HelperContext to XSD

thanks, it was what I was looking for.> To: tuscany-user@ws.apache.org> Subject: RE: Convert HelperContext to XSD> From: frankb@ca.ibm.com> Date: Mon, 31 Mar 2008 12:15:43 -0400> > There's a simple example in XSDHelperTestCase.> testXSDGeneration_DynamicSDOType().> > Frank.> > Gerardo Corro <ro...@hotmail.com> 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: rob_gar_esp@hotmail.comTo: tuscany-user@ws.apache.orgSubject: > > 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: tuscany-user@ws.apache.org> Subject: Re: Convert HelperContext > > to XSD> From: frankb@ca.ibm.com> Date: Mon, 31 Mar 2008 10:27:13 > > -0400> > Take a look at XSDHelper.generate().> > Frank.> > Gerardo > > Corro <ro...@hotmail.com> 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: tuscany-user-unsubscribe@ws.apache.org> For > > additional commands, e-mail: tuscany-user-help@ws.apache.org> > > > > 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: tuscany-user-unsubscribe@ws.apache.org> For additional commands, e-mail: tuscany-user-help@ws.apache.org> 
_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE