Thanks Dave,
I'll leave it for now. I will look at your example and the FIXML
generated code in the next couple of weeks and see what I can
determine. For now I think you can ignore this one.
Cheers,
Philip

On 18 January 2017 at 09:48, Dave Kuhlman <dkuhl...@davekuhlman.org> wrote:
> Philip,
>
> I'm glad you have a solution for this (and an ingenious one, too),
> because I don't understand it.
>
> Since you seem to have a solution, please don't much spend (waste)
> too much time with the following, but ...
>
> When I use this schema to generate a module:
>
>     <?xml version="1.0" encoding="UTF-8"?>
>     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>
>         <xs:element name="container" type="containerType"/>
>
>         <xs:complexType name="containerType">
>             <xs:sequence>
>                 <xs:element name="field1" type="xs:string" minOccurs="0"/>
>                 <xs:element name="field2" type="xs:string" minOccurs="0"/>
>                 <xs:element name="field3" type="simpleStringType" 
> minOccurs="0"/>
>                 <xs:element name="field4" type="simpleStringType" 
> minOccurs="0"/>
>             </xs:sequence>
>         </xs:complexType>
>
>         <xs:complexType name="simpleStringType">
>             <xs:simpleContent>
>                 <xs:extension base="xs:string">
>                 </xs:extension>
>             </xs:simpleContent>
>         </xs:complexType>
>
>     </xs:schema>
>
> And, then I use the generated module to parse and export the
> following XML instance doc:
>
>     <?xml version="1.0"?>
>     <container>
>         <field3>an ascii string</field3>
>         <field4>Selçuk &lt; &gt; İstanbul</field4>
>     </container>
>
> What I see is the following:
>
>     <?xml version="1.0" ?>
>     <container>
>         <field3>an ascii string</field3>
>         <field4>Selçuk &lt; &gt; İstanbul</field4>
>     </container>
>
> As you can see, the exported tag name is the element name
> (<xs:element name="container" ...), and *not* the type name
> (<xs:complexType name="containerType" ...).
>
> So, am I interpreting your question wrong?  Or, is there something
> about your XML schema that makes a difference?  Does it have
> something to do with the substitutionGroup?
>
> Is it a bug?  Or, can I ignore this one?
>
> Dave
>
> On Tue, Jan 17, 2017 at 02:30:45PM +1100, Philip Haynes wrote:
>> Thanks Dave,
>> One update. I have changed my workaround to append some code to the
>> bottom of the generated file to create subclasses for all my named
>> elements. I think this will work for me;
>>
>> for name, base_class in GDSClassesMapping.items():
>>    def custom_init(self, *args, **kwargs):
>>       super(self.__class__, self).__init__(*args, **kwargs)
>>       self.original_tagname_ = self.__class__.__name__
>>    type(name, (base_class,), {'__init__': custom_init})
>>
>> I need this rather than just changing it on export since some of the
>> more complex structures were nesting the classes I want to rename and
>> I thus lost control of being able to call my custom export_mapped
>> function all the way down (I originally had a problem with recursive
>> inheritance when trying to do that and am somewhat too time
>> constrained for my first instance implementation to work around that
>> issue).
>>
>> I quite like this new approach and figured it might be helpful.
>>
>> Regards,
>> Philip
>>
>> On 17 January 2017 at 11:11, Dave Kuhlman <dkuhl...@davekuhlman.org> wrote:
>> > Philip,
>> >
>> > Sounds like an interesting problem and challenge.  Give me a little
>> > time to think about it.
>> >
>> > Dave
>> >
>> > On Mon, Jan 16, 2017 at 12:41:27AM +1100, Philip Haynes wrote:
>> >> Hello,
>> >>
>> >> I am investigating using generateDS to write a FIXML (the XML version
>> >> of the FIX protocol). So far, very good results in parsing sample XML
>> >> and generating a comprehensive python binding to the API. However I
>> >> have a slight wrinkle. Perhaps I am using things incorrectly, but...
>> >>
>> >> The FIXML xsd is quite extensive (>26000 lines spread over 43 xsd
>> >> files) however inside the meat of the XML, there is a schema;
>> >>
>> >> <xs:schema targetNamespace="http://www.fixprotocol.org/FIXML-5-0";
>> >>    xmlns:xs="http://www.w3.org/2001/XMLSchema";
>> >>    xmlns="http://www.fixprotocol.org/FIXML-5-0";
>> >>    xmlns:fm="http://www.fixprotocol.org/FIXML-5-0/METADATA";
>> >>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> >>    xsi:schemaLocation="http://www.fixprotocol.org/FIXML-5-0/METADATA
>> >> fixml-metadata-5-0.xsd"
>> >>    elementFormDefault="qualified" attributeFormDefault="unqualified">
>> >>
>> >> <xs:include schemaLocation="fixml-fields-impl-5-0.xsd"/>
>> >> ...
>> >>
>> >> and then various SimpleType, ComplexTypes and elements. It is the
>> >> elements I care about, for example;
>> >>
>> >> <xs:element name="UserReq" type="UserRequest_message_t"
>> >> substitutionGroup="Message" final="#all"/>
>> >> ....
>> >> </xs:schema>
>> >>
>> >> Now gDS generates classes called UserRequest_message_t which I can
>> >> happily instantiate and fill and then export to produce
>> >>
>> >> <UserRequest_message_t UserReqID="12324" UserReqTyp="1" Username="me"
>> >> Password="pwd">
>> >>     <Hdr SID="CCC" TID="CBB" SSub="CCCUSER" TSub="CBCB"/>
>> >> </UserRequest_message_t>
>> >>
>> >> However I "want" the tag for this document to read "UserReq" from the
>> >> name in the element, not the type. I cannot see a way to create my
>> >> "UserReq" element programatically.
>> >>
>> >> I know that one way to get my desired XML document, would be to set
>> >> the original_tagname_ attribute on the instance of the object, but I
>> >> don't really want to have to do that for every instance I create.
>> >> Another way would be to set the name_ parameter on calling export
>> >> (likewise inconvenient). The frustrating thing is that the
>> >> GDSClassMapping dictionary already does this correctly when parsing
>> >> incoming XML files (albeit in reverse). So I am suspicious that I am
>> >> missing something here.
>> >>
>> >> My current approach is to monkey patch the gDS generated module after
>> >> loading to add a "export_mapped" method to the Abstract_message_t
>> >> class that is the base class for the relevant elements in the XSD and
>> >> with that function just call "export(..., name_ = <a magical reverse
>> >> lookup on the GDSClassMapping dictionary from the exporting class to
>> >> the required tag>)" thus calling export with the name_ parameter set
>> >> correctly and all is good.
>> >>
>> >> I feel that this approach is an inelegant solution to something that
>> >> could well already be solved in gDS but I just can't work it out.
>> >>
>> >> I have scanned the archive of this mailing list and cannot find
>> >> anything that seems to be related to my "issue" and so I post on a new
>> >> thread.
>> >>
>> >> Thanks,
>> >> Philip
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Developer Access Program for Intel Xeon Phi Processors
>> >> Access to Intel Xeon Phi processor-based developer platforms.
>> >> With one year of Intel Parallel Studio XE.
>> >> Training and support from Colfax.
>> >> Order your platform today. http://sdm.link/xeonphi
>> >> _______________________________________________
>> >> generateds-users mailing list
>> >> generateds-users@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/generateds-users
>> >
>> > --
>> >
>> > Dave Kuhlman
>> > http://www.davekuhlman.org
>>
>>
>>
>
> --
>
> Dave Kuhlman
> http://www.davekuhlman.org



-- 
Philip Haynes
Director, Dayneson Pty Ltd ATF the Davidson Haynes Family Trust
Address: 33 Arthur Street. Dee Why. NSW. 2026. Australia
Email: phi...@dayneson.mine.nu
Mobile: +61411050016

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to