From: John R. <jr...@ce...> - 2012-06-22 14:58:28
|
On Jun 22, 2012, at 11:06 AM, Jérôme <rom...@ya...> wrote: >> OK, let's dive in a bit deeper. Ryan has written a pile of java to conform to the JAXB [1] java library. He's doing this backwards, because JAXB is intended to take an XML Schema and auto-create the java. JAXB has some pretty severe limitations, and the results are poor quality XML *and* poor quality Java. Ryan has also written a program called enunciate [2] to take the java and produce even worse-quality (as in it won't even build) C, .Net, Objective-C, and Ruby, with both XML and JSON storage. >> The code itself is, in C++ terms, the class statement and a getter/setter pair for each parameter. Utterly useless for anything more than driving enunciate (which can be thought of as a lame rewrite of javadoc) to produce the documentation. >> Ignore it. Instead, read the specs at >> https://github.com/FamilySearch/gedcomx/blob/master/specifications/file-format-specification.md >> and the linked documents. Until those get hammered into something more-or-less complete, there's no point to writing interface code in any language. > > Looking at tools like SWIG[1], pyxml, generateDS[2], we can also quickly generate a xsd schema! > > Here a simple one for Gramps XML (1.5.0): > http://gramps-addons.svn.sourceforge.net/viewvc/gramps-addons/trunk/contrib/lxml/grampsxml.xsd > I suppose this could be used by 'gramps-connect' (django)? For desktop apps without serveurs connection/transfer/validation/capture, we do not need this type of schema... > > Maybe this could help for completing 'gramps' page[3] on gedcomx project? > > Note, I also added 'superclasses/subclasses' working with generateDS on revision 1359: http://gramps-addons.svn.sourceforge.net/viewvc/gramps-addons?view=revision&revision=1359 > > > [1] "SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages. SWIG is used with different types of target languages including common scripting languages such as Perl, PHP, Python, Tcl and Ruby." > http://www.swig.org/ > > [2] "generateDS.py generates Python data structures (for example, class definitions) from an XML Schema document. These data structures represent the elements in an XML document described by the XML Schema. It also generates parsers that load an XML document into those data structures. In addition, a separate file containing subclasses (stubs) is optionally generated. The user can add methods to the subclasses in order to process the contents of an XML document." > http://cutter.rexx.com/~dkuhlman/generateDS.html > > [3] http://www.gedcomx.org/GRAMPS-Migration-Path.html Jéroôme, I'm intimately familiar with swig, been using it for many years. Wonderful program. Beats the Boost equivalent handily. But it works only in one direction, to wrap C/C++ libraries for use in other languages. There's no C here, and the C generated by Enunciate is crap. Besides, we won't want to wrap a C/C++ implementation of Gramps <-> GedcomX, we'll want to write it in python. But that's not really the issue. GedcomX itself isn't ready for use. Not even close. Any effort implementing it now would be a wasted effort. OTOH, thanks for the GrampsXML schema. I've been meaning to familiarize myself with Gramps's backend structure, and that's an enormous help. But what's with all of the empty complex types? E.g., <element name='first'> <complexType mixed='true'> </complexType> </element> There are tons of them, and many (including the example) look like values of an enum. Regards, John Ralls |