​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

Reply via email to