Skip to main content

An XML Schema validator and decoder

Project description

The xmlschema library is an implementation of XML Schema for Python (supports Python 2.7 and Python 3.4+).

This library arises from the needs of a solid Python layer for processing XML Schema based files for MaX (Materials design at the Exascale) European project. A significant problem is the encoding and the decoding of the XML data files produced by different simulation software. Another important requirement is the XML data validation, in order to put the produced data under control. The lack of a suitable alternative for Python in the schema-based decoding of XML data has led to build this library. Obviously this library can be useful for other cases related to XML Schema based processing, not only for the original scope.

The full xmlschema documentation is available on “Read the Docs”.

Features

This library includes the following features:

  • Full XSD 1.0 support

  • Building of XML schema objects from XSD files

  • Validation of XML instances against XSD schemas

  • Decoding of XML data into Python data and to JSON

  • Encoding of Python data and JSON to XML

  • Data decoding and encoding ruled by converter classes

  • An XPath based API for finding schema’s elements and attributes

  • Support of XSD validation modes

  • XML-based attacks prevention using the external package defusedxml

Installation

You can install the library with pip in a Python 2.7 or Python 3.4+ environment:

pip install xmlschema

The library uses the Python’s ElementTree XML library and requires elementpath and defusedxml additional packages. The base schemas of the XSD standards are included in the package for working offline and to speed-up the building of schema instances.

Usage

Import the library and then create a schema instance using the path of the file containing the schema as argument:

>>> import xmlschema
>>> my_schema = xmlschema.XMLSchema('xmlschema/tests/cases/examples/vehicles/vehicles.xsd')

The schema can be used to validate XML documents:

>>> my_schema.is_valid('xmlschema/tests/cases/examples/vehicles/vehicles.xml')
True
>>> my_schema.is_valid('xmlschema/tests/cases/examples/vehicles/vehicles-1_error.xml')
False
>>> my_schema.validate('xmlschema/tests/cases/examples/vehicles/vehicles-1_error.xml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/brunato/Development/projects/xmlschema/xmlschema/validators/xsdbase.py", line 393, in validate
    raise error
xmlschema.validators.exceptions.XMLSchemaValidationError: failed validating <Element '{http://example.com/vehicles}cars' at 0x7f8032768458> with XsdGroup(model='sequence').

Reason: character data between child elements not allowed!

Schema:

  <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element maxOccurs="unbounded" minOccurs="0" name="car" type="vh:vehicleType" />
  </xs:sequence>

Instance:

  <vh:cars xmlns:vh="http://example.com/vehicles">
    NOT ALLOWED CHARACTER DATA
    <vh:car make="Porsche" model="911" />
    <vh:car make="Porsche" model="911" />
  </vh:cars>

Using a schema you can also decode the XML documents to nested dictionaries, with values that match to the data types declared by the schema:

>>> import xmlschema
>>> from pprint import pprint
>>> xs = xmlschema.XMLSchema('xmlschema/tests/cases/examples/collection/collection.xsd')
>>> pprint(xs.to_dict('xmlschema/tests/cases/examples/collection/collection.xml'))
{'@xsi:schemaLocation': 'http://example.com/ns/collection collection.xsd',
 'object': [{'@available': True,
             '@id': 'b0836217462',
             'author': {'@id': 'PAR',
                        'born': '1841-02-25',
                        'dead': '1919-12-03',
                        'name': 'Pierre-Auguste Renoir',
                        'qualification': 'painter'},
             'estimation': Decimal('10000.00'),
             'position': 1,
             'title': 'The Umbrellas',
             'year': '1886'},
            {'@available': True,
             '@id': 'b0836217463',
             'author': {'@id': 'JM',
                        'born': '1893-04-20',
                        'dead': '1983-12-25',
                        'name': 'Joan Miró',
                        'qualification': 'painter, sculptor and ceramicist'},
             'position': 2,
             'title': None,
             'year': '1925'}]}

License

This software is distributed under the terms of the MIT License. See the file ‘LICENSE’ in the root directory of the present distribution, or http://opensource.org/licenses/MIT.

Roadmap

  • XSD 1.1

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xmlschema-1.0.4.tar.gz (180.7 kB view details)

Uploaded Source

Built Distribution

xmlschema-1.0.4-py2.py3-none-any.whl (245.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file xmlschema-1.0.4.tar.gz.

File metadata

  • Download URL: xmlschema-1.0.4.tar.gz
  • Upload date:
  • Size: 180.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.9.1 pkginfo/1.3.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.19.6 CPython/3.6.6

File hashes

Hashes for xmlschema-1.0.4.tar.gz
Algorithm Hash digest
SHA256 462235f6be3ed5f7ac4bb4391152d893c04da8bf1d029ae87e3010a564e8e33b
MD5 0aeaf697bac837b2c86eb8a3b402590a
BLAKE2b-256 f7fdef58e8b8dbe963b052024aadca3e16a1ac377883296fc6e10320a8537305

See more details on using hashes here.

File details

Details for the file xmlschema-1.0.4-py2.py3-none-any.whl.

File metadata

  • Download URL: xmlschema-1.0.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 245.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.9.1 pkginfo/1.3.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.19.6 CPython/3.6.6

File hashes

Hashes for xmlschema-1.0.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 d60ce963f955a47cab31a0f47f1683bc3efa6db3001d28cd0b17081eb8d14a27
MD5 afa852fd1fb8a6cf846ca5e785c26d6c
BLAKE2b-256 e131a48f4d82ce55353bb8dd76e445113df994a2449e26f82d785465f643d763

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page