I've created Python bindings using PYXB(pyxbgen) on the following xsd files using the commands:
pyxbgen -u Event.xsd -m Event
pyxbgen -u Shape.xsd -m Shape
pyxbgen -u flow-tags.xsd -m flow-tags
Using the generated bindings, I can access all the "event" data but I can't see how to access the "detail" elements and data. Specifically, the ellipse and polygon (with vertex data) from the shape element. The detail element is an anonymous type. Here is the code I have thus far:
import Shape, Event, flow-tags
xml = '''
<event how="h-p" opex="e-TEST" qos="7-r-g" stale="2014-04-21T20:50:01.85Z" start="2014-04-21T20:48:01.85Z" time="2014-04-21T20:48:01.85Z" type="a-n-A-M-F-R-Z" uid="6716" version="2.0"><detail><_flow-tags_ debug="2014-04-21T20:48:01.00Z" /><shape><ellipse angle="33" major="44" minor="22" /><polyline closed="1"><vertex hae="1" lat="44" lon="-77" /></polyline></shape></detail><point ce="122.8" hae="817.2" lat="42.5612194" le="431.3" lon="-71.302077" /></event>
'''
event = Event.CreateFromDocument(xml)
print event.uid
print event.point.lon
detail = event.detail
#not sure what goes after this to get content of detail data?????
Here are the Event.xsd and Shape.xsd files I am using. They are not mine so I don't have the option to modify them if there is a problem with them.
Event.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="event">
<xs:annotation>
<xs:documentation>Event Definition</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element ref="point" />
<xs:element ref="detail" minOccurs="0" />
</xs:all>
<xs:attribute name="version" use="required">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="2" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="type" use="required">
<xs:annotation>
<xs:documentation>
The "type" attribute
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\w+(-\w+)*(;[^;]*)?" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="access" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>
The access field
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="qos" use="optional">
<xs:annotation>
<xs:documentation>
format - digit-character-character
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d-\w-\w" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="opex" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>
The opex field
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="uid" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The "uid" attribute
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="time" type="xs:dateTime" use="required">
<xs:annotation>
<xs:documentation>
The XML schema includes three time values:
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="start" type="xs:dateTime" use="required">
<xs:annotation>
<xs:documentation>
format - DTG
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="stale" type="xs:dateTime" use="required">
<xs:annotation>
<xs:documentation>
The "stale" attribute
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="how" use="required">
<xs:annotation>
<xs:documentation>
format = character-character
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\w(-\w+)*" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="detail">
<xs:annotation>
<xs:documentation>
format
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute processContents="skip" />
</xs:complexType>
</xs:element>
<xs:element name="point">
<xs:complexType>
<xs:attribute name="lat" use="required">
<xs:annotation>
<xs:documentation>Latitude based on WGS-84 ellipsoid in signed
degree-decimal format (e.g. -33.350000). Range -90 -> +90.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="-90" />
<xs:maxInclusive value="90" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="lon" use="required">
<xs:annotation>
<xs:documentation>Longitude based on WGS-84 ellipsoid in signed
degree-decimal format (e.g. 44.383333). Range -180 -> +180.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="-180" />
<xs:maxInclusive value="180" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="hae" type="xs:decimal" use="required">
<xs:annotation>
<xs:documentation>HAE acronym for Height above Ellipsoid based on
WGS-84 ellipsoid (measured in meters).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ce" type="xs:decimal" use="required">
<xs:annotation>
<xs:documentation>
Circular Error
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="le" type="xs:decimal" use="required">
<xs:annotation>
<xs:documentation>
Linear Error
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
Shape.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="nonNegativeDecimal">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0" />
</xs:restriction>
<!-- Defined as global type for XML Gallery manifest reference than
any other reason -->
</xs:simpleType>
<xs:element name="shape">
<xs:annotation>
<xs:documentation></xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="ellipse" minOccurs="0">
<xs:annotation>
<xs:documentation>The "ellipse" is a common shape abstraction used
by many geomanipulation applications; it is supported natively.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="major" type="nonNegativeDecimal"
use="required">
<xs:annotation>
<xs:documentation>Ellipse major axis (meters)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="minor" type="nonNegativeDecimal"
use="required">
<xs:annotation>
<xs:documentation>Ellipse minor axis (meters)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="angle" type="xs:decimal" use="required">
<xs:annotation>
<xs:documentation>Orientation of major axis with respect to true
north.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="level" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>"level"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="extrude" type="xs:nonNegativeInteger"
use="optional">
<xs:annotation>
<xs:documentation>A "Height" of the ellipse used to make the
flat object encompas a volume.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="polyline" minOccurs="0">
<xs:annotation>
<xs:documentation>The poly line provides a mechanism to express
arbitrarily complex two-dimenstional shapes.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="vertex" minOccurs="2" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="lat" use="required">
<xs:annotation>
<xs:documentation>Latitude based on WGS-84 ellipsoid in
signed degree-decimal format (e.g. -33.350000). Range -90 ->
+90. Positive values denote north.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="-90" />
<xs:maxInclusive value="90" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="lon" use="required">
<xs:annotation>
<xs:documentation>Longitude based on WGS-84 ellipsoid in
signed degree-decimal format (e.g. 44.383333). Range -180 ->
+180. Positive values denote east.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="-180" />
<xs:maxInclusive value="180" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="hae" type="xs:decimal" use="optional">
<xs:annotation>
<xs:documentation>Height Above Ellipsoid (HAE) in Meters.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="level" type="xs:integer">
<xs:annotation>
<xs:documentation>"level"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="closed" type="xs:boolean"
default="true">
<xs:annotation>
<xs:documentation>True if the list of verticies should be
considered a closed polygon (an implicit line will be added
from vertex N to vertex 0).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="dxf" minOccurs="0">
<xs:annotation>
<xs:documentation>This is a hook for an arbitrary 3D DXF
description of a volume of space.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="level" type="xs:integer">
<xs:annotation>
<xs:documentation>"level" </xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:decimal" use="optional">
<xs:annotation>
<xs:documentation>Version tag for this sub schema. Can be used to
ensure upward compatibility with future revisions.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
flow-tags.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="_flow-tags_">
<xs:annotation>
<xs:documentation>This is a detail sub-schema</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="version" type="xs:decimal" use="optional" />
<xs:anyAttribute processContents="lax">
<xs:annotation>
<xs:documentation>A system-specific flowtag identifier.
</xs:documentation>
</xs:annotation>
</xs:anyAttribute>
</xs:complexType>
</xs:element>
Thanks in advance for any help!