Hi all,

Is there any particular reason as to why we are sticking into avro schema
for the datamapper implementation?

AFAIS the only tool (open/non-open source) that exist for XSD to avro
conversion, is the same that  has been used by the team when we attempted
the data mapper first 2 years back.

This generates JAVA model from XSD schema using JAXB and generate the avro
schema from the generated JAVA model.

This has drawbacks :

1. Unable to gen avro for element children that are not wrapped by
complex-type,
2. Unable to identify namespaces
3. Unable to generate single avro for a nested XSD, which I fixed by
inserting the separate JSON objects generated accordingly to get the final
nested avro schema.


for (1) we need to manipulate the xsd give an insert complex-type tags.
(2) cannot be supported with JAXB based generator,  need to evaluate
optional approach for this.



meanwhile I am evaluating [2] as well.


[2] https://github.com/elodina/xml-avro

Regards
Awanthika




Awanthika Senarath
Software Engineer, WSO2 Inc.
Mobile: +94717681791



On Thu, Feb 25, 2016 at 5:42 PM, Sohani Weerasinghe <soh...@wso2.com> wrote:

> Hi Awanthika,
>
> We have tried this tool sometime back and as I remember it has some issues
> with namespaces and also it generates separate files for each complex
> datatypes (which I think you are merging and creating a single object) .If
> we are to use this it seems we need to improve this and fix the above
> issues.
>
> 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 Thu, Feb 25, 2016 at 5:04 PM, Awanthika Senarath <awanth...@wso2.com>
> wrote:
>
>> Hi Susinda,
>>
>> I was able to generate a nested avro schema from a nested xsd schema
>> using the tool by doing some changes to the API, as it by default generated
>> the nested schema Json objects as separate root level Json objects being
>> mapped to the parent Json via namespaces.
>>
>> But it has an issue as it does not generate the avro schema correctly
>> when the root xsd has simple fields as children and not complex items,
>>
>> For an example it will correctly parse [1] while it would fail to parse
>> [2]  it will only parse the complexElement in [3] ignoring the simple
>> elements parallel to it.
>>
>> [1] <xs:schema attributeFormDefault="unqualified" elementFormDefault=
>> "qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>>
>>   <xs:element name="pizza">
>>     <xs:complexType>
>>       <xs:sequence>
>>         <xs:element type="xs:string" name="name"/>
>>         <xs:element type="xs:float" name="price"/>
>>         <xs:element name="toppingsList">
>>           <xs:complexType>
>>             <xs:sequence>
>>               <xs:element name="toppings" maxOccurs="unbounded" 
>> minOccurs="0">
>>                 <xs:complexType>
>>                   <xs:sequence>
>>                     <xs:element type="xs:short" name="id"/>
>>                     <xs:element type="xs:string" name="name"/>
>>                     <xs:element type="xs:float" name="extraPrice"/>
>>                     <xs:element type="xs:string" name="category"/>
>>                   </xs:sequence>
>>                 </xs:complexType>
>>               </xs:element>
>>             </xs:sequence>
>>           </xs:complexType>
>>         </xs:element>
>>       </xs:sequence>
>>     </xs:complexType>
>>   </xs:element></xs:schema>
>>
>>
>>
>> [2]<?xml version="1.0"?>
>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
>> attributeFormDefault="unqualified" elementFormDefault="qualified"
>> targetNamespace="urn:sobject.partner.soap.sforce.com">
>>   <xs:element name="type" type="xs:string"/>
>>   <xs:element name="Id" nillable="true" type="xs:string"/>
>>   <xs:element name="Name" type="xs:string"/>
>>   <xs:element name="Amount" type="xs:float"/>
>> </xs:schema>
>>
>> [3] <xs:schema attributeFormDefault="unqualified" elementFormDefault=
>> "qualified" targetNamespace="urn:sobject.partner.soap.sforce.com"
>> xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>>
>>   <xs:element name="type" type="xs:string"/>
>>   <xs:element name="Id" nillable="true" type="xs:string"/>
>>   <xs:element name="Account">
>>     <xs:complexType>
>>       <xs:sequence>
>>         <xs:element type="xs:string" name="type"/>
>>         <xs:element type="xs:string" name="Id" nillable="true"/>
>>         <xs:element type="xs:string" name="Name"/>
>>       </xs:sequence>
>>     </xs:complexType>
>>   </xs:element>
>>   <xs:element name="Name" type="xs:string"/>
>>   <xs:element name="Amount" type="xs:float"/></xs:schema>
>>
>>
>>
>>
>> Regards
>> Awanthika
>>
>>
>> Awanthika Senarath
>> Software Engineer, WSO2 Inc.
>> Mobile: +94717681791
>>
>>
>>
>> On Thu, Feb 25, 2016 at 11:18 AM, Awanthika Senarath <awanth...@wso2.com>
>> wrote:
>>
>>> Hi Susinda,
>>>
>>> Currently I am evaluating approaches for generating avro schema from XSD
>>> keeping option 1 in mind.
>>>
>>> [1] seems to be a reliable option, but the generated avro schema is not
>>> in the accepted format for us.
>>>
>>>
>>> [1] https://github.com/Nokia/Avro-Schema-Generator
>>>
>>>
>>> Regards
>>> Awanthika
>>>
>>> Awanthika Senarath
>>> Software Engineer, WSO2 Inc.
>>> Mobile: +94717681791
>>>
>>>
>>>
>>> On Thu, Feb 25, 2016 at 11:04 AM, Susinda Perera <susi...@wso2.com>
>>> wrote:
>>>
>>>> For Datamapper we have to give an option to do data mapping starting
>>>> from xml payload (that user may already have). For this we need to to
>>>> create avro schema from xml instance. Possible approaches may be
>>>>   1. Generate xml schema(XSD) from xml and then create avro schema from
>>>> XSD.
>>>>   2. Directly generate  avro schema by looking at xml (we have to code
>>>> from the scratch)
>>>>
>>>> I believe that going with option 1 would be good, so that we can handle
>>>> the use case of mapping from xml-schema. Also there are some libraries[1]
>>>> and online tools[2,3] available to generate XSD from xml with some
>>>> limitations. (eg represent leaf values as strings). Also from bit of
>>>> research i found that there are several types of XSD representation
>>>> (Venetian Blind Design, Russian Doll Design, Salami Slice Design) and we
>>>> may need to decide on which would best fit (or easy to convert to) avro
>>>> schema.
>>>> If someone has done similar xml<->XSD conversion, please share your
>>>> ideas and suggestions.
>>>>
>>>> Thanks
>>>>
>>>>
>>>> [1] http://xmlbeans.apache.org/docs/2.0.0/guide/tools.html#xsd2inst
>>>>
>>>> [2] https://devutilsonline.com/xsd-xml/generate-xsd-from-xml
>>>>
>>>> [3]http://www.freeformatter.com/xsd-generator.html
>>>>
>>>>
>>>>
>>>> --
>>>> *Susinda Perera*
>>>> Software Engineer
>>>> B.Sc.(Eng), M.Sc(Computer Science), AMIE(SL)
>>>> Mobile:(+94)716049075
>>>> Blog: susinda.blogspot.com
>>>> WSO2 Inc. http://wso2.com/
>>>> Tel : 94 11 214 5345 Fax :94 11 2145300
>>>>
>>>>
>>>
>>
>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to