.. _examples: ******** Examples ******** A detailed, albeit contrived, example of how to use PyXB is in :ref:`pyxbgen`. Multiple real-world XML and web service examples of varying complexity are provided in the :file:`examples` subdirectories of the PyXB distribution and of the various bundles. Some are WSDL services, and others are simply XMLSchema documents. Often there are a couple trivial programs that show how the bindings are used. The script :file:`test.sh` in each directory can be used to generate the bindings and run the programs in a single step. See the :file:`README.txt` file in each example subdirectory for more information. For ... - REST-style interactions, see :ref:`ex_dictionary`, :ref:`ex_ndfd`, and :ref:`thirty_sec_example` - SOAP interactions, see :ref:`ex_weather`, :ref:`ex_ndfd`, and :ref:`ex_geocoder` - Customizing a generated binding, see :ref:`ex_tmsxtvd` - Using a SAX parser, see :ref:`ex_tmsxtvd` You may also want to look at some of the unit tests for other ideas. .. _ex_dictionary: Dictionary (Aonaware) ===================== The `Dictionary web service at Aonaware `_. The example :file:`define.py` looks up a word in all available dictionaries: .. literalinclude:: ../examples/dictionary/define.py The example :file:`showdict.py` lists the available dictionaries: .. literalinclude:: ../examples/dictionary/showdict.py Sorry, no automatic generation of classes corresponding to the WSDL operations. Next release, maybe. .. _ex_weather: Simple Weather (CDyne) ====================== A `free weather service `_. The REST interface was demonstrated as the :ref:`thirty_sec_example`. A SOAP interface example is in ``client.py``: .. literalinclude:: ../examples/weather/client.py Note the various misspellings in the schema (e.g., "Desciption"). Also, be aware that the weather information in this service does not get updated often, and sometimes fails to provide valid dates. Try various zip codes; usually you can find one that works. .. _ex_ndfd: Professional Weather (National Digital Forecast Data) ===================================================== Interact with the `National Digital Forecast Database `_. Use the :file:`genbindings.sh` script to retrieve the schema for Digital Weather Markup Language and generate the bindings. Note that the schema has two levels of ``include`` directives, which PyXB follows. The examples for this service are too long to include into the web documentation. :file:`forecast.py` uses the REST interface to get the forecast temperature data for two locations, and print it in several ways. :file:`latlon.py` does something similar but for a latitude/longitude pair, using SOAP, and requesting more data. .. _ex_tmsxtvd: Television Schedules (Tribune Media Services) ============================================= A commercial service for `television listings `_. Only one sample document is available for testing; it is retrieved using :file:`genbindings.sh`. The :file:`dumpsample.py` demonstrates extending a binding to add a custom method, and parsing content with both DOM and SAX. It also provides timing information; the document is about 200KB, and takes several seconds to parse. .. literalinclude:: ../examples/tmsxtvd/dumpsample.py .. _ex_geocoder: Address-To-Latitude/Longitude (http://geocoder.us) ===================================================== This service provides the latitude and longitude for free-form US addresses. It also demonstrates several of the pitfalls of using WSDL, which has a very lax concept of schemas, with a system that expects to operate on validatable documents. The following changes were made to make the service easier to work with: - Change the element form default to ``qualified``. This is necessary because there is a non-absent target namespace in the schema, and the documents returned from the service set it as the default namespace. This causes the XML engine to associate that namespace with locally-scoped elements like "number", while the original ``unqualified`` form default caused the schema to record them with no namespace. - Set ``minOccurs`` on all the elements, since some are missing from some responses - Set ``nillable`` on all elements that are observed to use ``xsi:nil="true"`` in response documents - Provide types and elements corresponding to the request and response messages, since PyXB's WSDL support does not currently generate them from the operation messages. :file:`genbindings.sh` applies changes to the WSDL after retrieving it and prior to generating the bindings. A second complication is the need to burrow down through wildcard elements in the binding instance generated from the SOAP response. This is the consequence of an `error in the WSDL specification `_, which was discovered after too many tools had already worked around it. Currently, PyXB also requires that you work around it manually, although a customization of the relevant SOAP encoding class could make it unnecessary. .. literalinclude:: ../examples/geocoder/client.py .. _ex_opengis: OpenGIS (http://www.opengeospatial.org) ======================================= See the directory ``examples/OpenGIS`` in the distribution.