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.
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>@* > > >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev