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

Reply via email to