XSD vs Dingo
Although Microsoft and Mono both include XSD.exe with their distribution, both of them only generate concrete classes with XmlSerialization support. For small personal projects, concrete classes are appropriate, but for large complex applications, using JAXB style compilation is more appropriate. For those not familiar with JAXB, it generates an interface and concrete class. This means applications only reference the interface and do not use the concrete classes directly. It means the same class in a GUI can have different implementation than on the server.
That decision is up to each user. From first hand experience, many people end up writing their own schema compilers, because XSD does not meet their needs. If XSD is sufficient for your requirements, then Dingo won't provide any benefits. In some cases, Dingo may be more compliant than XSD and generates better code.
Not at all. I wrote Dingo from scratch and purposely tried not to copy other compilers. Although I have experience with JAXB, Castor, and MS XSD, the implementation and design is different. It took me about 5 weeks of coding at night to get a complete Alpha. Dingo is very similar to Apache Jaxme in design. Jaxme has much more functionality than Dingo, but Jaxme is for Java and not C# or .NET.
I honestly can't say. Although I use XmlSchema.xsd to generate the classes, I did deviate from it to get XmlSerialization to work correctly. There's definitely going to be areas where Dingo is not compliant, but it's open source. Feel free to post a bug entry if you find something not compliant. As far as I know, Dingo should work on most schemas that use complexType definitions.
There are some features I have in mind for Dingo in future releases, but for now, Dingo is fairly complete and has features other schema compilers do not have.
I am actively developing Dingo and use it for my own projects, so it should be stable. During the development process, I compared the generated source with MS XSD and Mono XSD. In most cases, the source will be identicle. Where the source will differ from MS and Mono is JAXB style compilation. The design pattern is based on established techniques that are sound and mature. For a description of the differences, go to Dingo vs XSD.
As of 9/2004, Dingo does work with Mono. Whether or not there may be incompatability issues is unknown. If there are, please file a bug entry or post a message. I will work with the Mono developers to track down the problem and try to resolve it. With assistance from Atushi, I was able to use Mono with Dingo. Quicktips has basic instructions for using Mono.
My original plan was to get schema support solid first. After that, I was planning on supporting RelaxNG, DTD and XMI. In theory, it shouldn't be too hard. Dingo has a set of base interfaces, which new parsers can implement. This will allow Dingo to plugin new language parsers. If anyone feels like writing a parser for RelaxNG, DTD or XMI, feel free to drop me an email and I'll help.
To put it simply, there are people out there much much smarter than me. My hope is that others will contribute to it and help make it better. I try to be as practical as possible, so it makes sense to relase it to the world. Since I've done quite a bit of contract work over the 5 years, I often need to use the same basic tools over and over again. Doing things the proprietary way, most people end up writing the same tools over and over again. Frankly, I find that a terrible waste of time and is very inefficient. By spending a little of my own time to write Dingo and releasing it freely, I can use it in future projects. Plus, there isn't really any money to be made from schema compilers. Even if there was money to be made on schema compilers, I would rather be developing large scale applications. Although I enjoy writing tools, it is after all just a tool.
Since I am a jakarta committer on JMeter, I plan to donate Dingo to Apache once it has reached a point where I consider it mature and worthy of the Apache stamp. Apache is already a great resource for high quality applications and libraries. I'm also 1000% objective and unbiased. Joking aside, it would be great to have Dingo under the Apache umbrella. If a community develops around Dingo, I may consider submitting it to Mono as an alternative to the stock XSD. Since I'm biased against XSD, I won't bother enumerating all the limitations of XSD. Each developer can reach those conclusions on their own.
Revised 9-9-2004 Peter
|Copyright 2004 Peter Lin|