Hi All, When representing attributes in avro schema, according to [1] the suggested approach is to use @ as a prefix.
Since avro name should start with [A-Za-z] and subsequently contain only [A-Za-z0-9_], shall we represent it as below (adding ATT as a prefix) "name" : "*ATT*_gender" [1] https://docs.google.com/spreadsheets/d/15eyRuxn9rFazULASqtB2DZaSAVznKqSNnIGrwvdpzic/edit?ts=56d5250b#gid=0 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 7:47 AM, Sohani Weerasinghe <soh...@wso2.com> wrote: > > Please find the attached image which represents the prefix in the tree > view > > 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 7:45 AM, Sohani Weerasinghe <soh...@wso2.com> > wrote: > >> >> >> 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 <jasin...@wso2.com> >> wrote: >> >>> >>> >>> On Tue, Mar 1, 2016 at 9:07 PM, Sohani Weerasinghe <soh...@wso2.com> >>> 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 <nuw...@wso2.com> >>>> wrote: >>>> >>>>> >>>>> >>>>> On Tue, Mar 1, 2016 at 7:34 PM, Sohani Weerasinghe <soh...@wso2.com> >>>>> 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 *nuw...@wso2.com <nuw...@wso2.com>* >>>>> Mobile *+94719079739 <%2B94719079739>@* >>>>> >>>>> >>>>> >>>> >>> >>> >>> -- >>> >>> *Jasintha Dasanayake* >>> >>> *Senior Software EngineerWSO2 Inc. | http://wso2.com >>> <http://wso2.com/>lean . enterprise . middleware* >>> >>> >>> *mobile :- 0711368118 <0711368118>* >>> >> >> >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev