[xsd-users] Problem with abstract objects

Romain Garrigues romain.garrigues at c-s.cnes.fr
Fri Mar 16 04:29:03 EDT 2007


Hello all,

I'm a beginner in using this xsd library (parse version)
I have a problem with abstract objects.

This is my xsd file :

<xs:complexType name="AbstractTransformationModelType" abstract="true">
    <xs:sequence>
      <xs:element name="m_name" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="AffineTransformationModelType">
    <xs:complexContent>
 <xs:extension base="AbstractTransformationModelType">
     <xs:sequence>
  <xs:element name="m_a" type="xs:double"/>
     </xs:sequence>
 </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="ProjectiveTransformationModelType">
    <xs:complexContent>
 <xs:extension base="AbstractTransformationModelType">
     <xs:sequence>
  <xs:element name="m_b" type="xs:double"/>
     </xs:sequence>
 </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="CoordinatesTransformationModelType">
    <xs:sequence>
       <xs:element name="m_transformation" type="AbstractTransformationModelType" />
    </xs:sequence>
</xs:complexType>

I have defined an abstract concept (AbstractTransformationModelType), and two classes which are subclasses 
of this concept (AffineTransformationModelType and ProjectiveTransformationModelType).
Then, CoordinatesTransformationModelType has an element which is that abstract concept.

Then, i have defined parsers for each complexType.
I don't understand how to define CoordinatesTransformationModel_parser in driver.cxx so i can parse different 
xml files.
If i define it with AbstractTransformationModel_parser, i only have m_name of m_transformation.
If i define it with AffineTransformationModel_parser, it will be ok if there is an affine transformation
in xml file, but won't be ok if there is a projective transformation...

I just want a polymorphic comportment in fact...
The objective is to have the same code to parse different xml files, and i don't know how to do when 
there are abstract type.

Best Regards.

Romain Garrigues.



More information about the xsd-users mailing list