Sohani Weerasinghe Software Engineer WSO2, Inc: http://wso2.com
Mobile : +94 716439774 Blog :http://christinetechtips.blogspot.com/ Twitter : https://twitter.com/sohanichristine On Wed, Mar 2, 2016 at 6:28 AM, Jasintha Dasanayake <[email protected]> wrote: > > > On Tue, Mar 1, 2016 at 9:07 PM, Sohani Weerasinghe <[email protected]> > wrote: > >> Thanks Nuwan for the response. >> >> When generating the avro schema by adding elements to the tree view, user >> can specify the namespace (xml namespace) with the prefix, so that when >> generating the the avro schema we can map the namespace to doc and prefix >> to the namespace in avro. >> > > Yes that's mapping is fine , somehow we need to show at least prefix in > the tree view otherwise user experience won't be nice since user have to > check it explicitly while doing the mapping > Yes, I have implemented that and the prefix will be shown in the tree view. > > Thanks and Regards > /Jasintha. > >> >> Thanks, >> Sohani >> >> Sohani Weerasinghe >> Software Engineer >> WSO2, Inc: http://wso2.com >> >> Mobile : +94 716439774 >> Blog :http://christinetechtips.blogspot.com/ >> Twitter : https://twitter.com/sohanichristine >> >> On Tue, Mar 1, 2016 at 8:54 PM, Nuwan Pallewela <[email protected]> wrote: >> >>> >>> >>> On Tue, Mar 1, 2016 at 7:34 PM, Sohani Weerasinghe <[email protected]> >>> wrote: >>> >>>> Hi All, >>>> >>>> If we consider an XML which has multiple namespaces as below , >>>> >>>> <root> >>>> <h:table xmlns:h="http://www.w3.org/TR/html4/"> >>>> <h:name>Asian Coffee Table</h:name> >>>> <h:width>74</h:width> >>>> <h:length>129</h:length> >>>> </h:table> >>>> <f:table xmlns:f="http://www.w3schools.com/furniture"> >>>> <f:name>African Coffee Table</f:name> >>>> <f:width>80</f:width> >>>> <f:length>120</f:length> >>>> </f:table> >>>> </root> >>>> >>>> The avro schema should be as follows , >>>> >>>> { >>>> "type" : "record", >>>> "name" : "root", >>>> "fields" : [ { >>>> "type" : "record", >>>> "name" : "tableRecord", >>>> * "doc" : "http://www.w3.org/TR/html4/ >>>> <http://www.w3.org/TR/html4/>",* >>>> "namespace" : "http://www.w3.org/TR/html4/" >>>> "fields" : [ { >>>> "name" : "name", >>>> "type" : [ "null", "string" ] >>>> "doc" : "http://www.w3.org/TR/html4/" >>>> } , { >>>> "name" : "width", >>>> "type" : [ "null", "int" ] >>>> },{ >>>> "name" : "length", >>>> "type" : [ "null", "int" ] >>>> }] >>>> }, { >>>> "type" : "record", >>>> "name" : "tableRecord", >>>> * "doc" : "http://www.w3schools.com/furniture >>>> <http://www.w3schools.com/furniture>",* >>>> "namespace" : "http://www.w3schools.com/furniture" >>>> "fields" : [ { >>>> "name" : "name", >>>> "type" : [ "null", "string" ] >>>> } , { >>>> "name" : "width", >>>> "type" : [ "null", "int" ] >>>> },{ >>>> "name" : "length", >>>> "type" : [ "null", "int" ] >>>> }] >>>> } ] >>>> } >>>> >>>> When representing this using the Visual DataMapper Editor, in order to >>>> differentiate the two records, we can add a namespace prefix to the name of >>>> the record as shown below. >>>> >>>> >>>> ​But when generating the Avro Schema, if we pass this value as the name >>>> of the node it throws *org.apache.avro.SchemaParseException: Illegal >>>> character in: y:tableRecord.* >>>> >>> >>> AVRO name should start with [A-Za-z] and subsequently contain only >>> [A-Za-z0-9_]. >>> So we can not pass name with namespace prefix. >>> >>>> >>>> So, if we use only the name (tableRecord, by removing the prefix) to >>>> create the avro schema, how are we going to differentiate the records >>>> separately when generating the mapping config? >>>> >>> >>> We should add above xml namespace prefix as the namespace of AVRO >>> record. Then two elements can be differentiated. >>> For Eg: >>> >>> { >>> "type" : "record", >>> "name" : "root", >>> "fields" : [ { >>> "type" : "record", >>> "name" : "tableRecord", >>> * "doc" : "http://www.w3.org/TR/html4/ >>> <http://www.w3.org/TR/html4/>",* >>> "namespace" : "N1", >>> "fields" : [ { >>> "name" : "name", >>> "type" : [ "null", "string" ], >>> "doc" : "http://www.w3.org/TR/html4/" >>> } , { >>> "name" : "width", >>> "type" : [ "null", "int" ], >>> "doc" : "http://www.w3.org/TR/html4/" >>> },{ >>> "name" : "length", >>> "type" : [ "null", "int" ], >>> "doc" : "http://www.w3.org/TR/html4/" >>> }] >>> }, { >>> "type" : "record", >>> "name" : "tableRecord", >>> * "doc" : "http://www.w3schools.com/furniture >>> <http://www.w3schools.com/furniture>",* >>> "namespace" : "N2", >>> "fields" : [ { >>> "name" : "name", >>> "type" : [ "null", "string" ], >>> *"doc" : "http://www.w3schools.com/furniture >>> <http://www.w3schools.com/furniture>"* >>> } , { >>> "name" : "width", >>> "type" : [ "null", "int" ] >>> *"doc" : "http://www.w3schools.com/furniture >>> <http://www.w3schools.com/furniture>"* >>> },{ >>> "name" : "length", >>> "type" : [ "null", "int" ], >>> *"doc" : "http://www.w3schools.com/furniture >>> <http://www.w3schools.com/furniture>"* >>> }] >>> } ] >>> } >>> >>> Then the full names of the two tableRecords will be N1.tableRecord and >>> N2.tableRecord and AVRO can differentiate these two fields. >>> >>>> >>>> eg: If we are to map a field in y:tableRecord with a field >>>> in y:tableRecord etc. How can we differentiate this? >>>> >>>> This usecase of having multiple namespaces can be displayed graphically >>>> in the Design view by appending a namespace prefix, but it seems this will >>>> have issues in generating the avro schema and the mapping config. >>>> >>> >>> Mapping configuration does not need to be aware of the namespaces as >>> long as they can be differentiate in the diagram. Output from the mapping >>> will look into the output schema and will build the output message with >>> desired namespaces. >>> >>>> >>>> Your suggestions are highly appreciated. >>>> >>>> Thanks, >>>> Sohani >>>> Sohani Weerasinghe >>>> Software Engineer >>>> WSO2, Inc: http://wso2.com >>>> >>>> Mobile : +94 716439774 >>>> Blog :http://christinetechtips.blogspot.com/ >>>> Twitter : https://twitter.com/sohanichristine >>>> >>> >>> >>> >>> -- >>> ---------------------------------------------------------- >>> >>> *Nuwan Chamara Pallewela* >>> >>> >>> *Software Engineer* >>> >>> *WSO2, Inc. *http://wso2.com >>> *lean . enterprise . middleware* >>> >>> Email *[email protected] <[email protected]>* >>> Mobile *+94719079739 <%2B94719079739>@* >>> >>> >>> >> > > > -- > > *Jasintha Dasanayake* > > *Senior Software EngineerWSO2 Inc. | http://wso2.com > <http://wso2.com/>lean . enterprise . middleware* > > > *mobile :- 0711368118 <0711368118>* >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
