Justin,

Good to hear from you.  Glad to hear that generateDS.py has been
useful to you.

Yes, I still work on it, when I have time.

I'll take a look at your issue.  I'll have to study this a bit,
because I thought that exporting that element *should* produce
'<Dog>' rather than '<Animal type="Dog" ...'.

I've attached a schema (`test01.xsd`), which is (almost) a copy of
your example schema, and an XML instance document (`test01.xml`),
which is an instance of the schema's document type.  When I use
xmllint, it validates:

        $ xmllint --schema test02.xsd test02.xml
        <?xml version="1.0"?>
        <dogcollection>
                <dog>
                        <name>jasmine</name>
                        <fur>curly</fur>
                </dog>
                <dog>
                        <name>peaches</name>
                        <fur>straight</fur>
                </dog>
        </dogcollection>
        test02.xml validates

So, there must be something about your issue and example that I do
not understand.

Note that there is similar capability of XML schema that provides
this kind of flexibility (and confusion for me).  This strategy uses
the `xsi:type` attribute to specify the derived type of an instance
element.  You can read about it here:

- https://www.w3.org/TR/2004/REC-xmlschema-0-20041028/#DerivExt
- https://www.w3.org/TR/2004/REC-xmlschema-0-20041028/#UseDerivInInstDocs

I'll be back when I've learned more.  Or, if you find a way to solve
your problem, please let me know.

Dave

On Tue, Oct 02, 2018 at 09:25:32AM -0400, Justin McManus wrote:
> Hi,
> 
> Your generateDS library has been really useful to me, thanks. However, I
> just found a blocking bug for my use case, and I checked sourceforge and
> bitbucket and didn't find any public issue trackers that I could report it
> on. I'll take a look at fixing it anyway, but I wanted to check if there's
> a place to report this officially, and whether you're accepting pull
> requests.
> 
> The issue was found in generateDS 2.29.24 from PyPi. The gist of it is that
> complex subtypes are always assumed to be defined as substitution groups,
> e.g. type "Dog" that extends an abstract type "Animal" will be rendered as
> <Dog> instead of <Animal type="Dog">, which fails xsd validation. Here's a
> minimal example:
> 
> *example.xsd:*
> <?xml version="1.0"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; version="1.0">
> <xs:element name="SubType" type="SubType"></xs:element>
> <xs:complexType name="AbstractBaseType" abstract="true"></xs:complexType>
> <xs:complexType name="SubType">
>   <xs:complexContent>
>     <xs:extension base="AbstractBaseType"></xs:extension>
>   </xs:complexContent>
> </xs:complexType>
> </xs:schema>
> 
> $>  generateDS -o example.py ./example.xsd
> *$> python*
> >>> import sys, example
> >>> example.SubType().export(sys.stdout, 0)
> <SubType/>

-- 

Dave Kuhlman
http://www.davekuhlman.org
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; version="1.0">

    <xs:element name="dog" type="dog"></xs:element>

    <xs:complexType name="animal" abstract="true"></xs:complexType>

    <xs:complexType name="dog">
        <xs:complexContent>
            <xs:extension base="animal">
                <xs:sequence>
                    <xs:element name="name" type="xs:string"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>
<?xml version="1.0"?>
<dog>
    <name>jasmine</name>
</dog>
_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to