跳转到主要内容

XML Schema验证和解码器

项目描述

https://img.shields.io/pypi/v/xmlschema.svg https://img.shields.io/pypi/pyversions/xmlschema.svg https://img.shields.io/pypi/implementation/xmlschema.svg MIT License https://img.shields.io/pypi/dm/xmlschema.svg

xmlschema 库是Python (支持Python 3.8+) 中XML Schema的实现。

这个库源于欧洲项目MaX(MaX (Materials design at the Exascale))对基于Python的XML Schema文件处理层的需要。一个重大问题是不同模拟软件产生的XML数据文件的编码和解码。另一个重要的要求是XML数据验证,以便对产生的数据进行控制。Python中缺乏适合的XML数据基于模式解码替代方案,导致了这个库的构建。显然,这个库可以用于与基于XML Schema处理相关的其他情况,而不仅限于原始范围。

完整的xmlschema文档可在“Read the Docs”上找到。

特性

此库包含以下特性

  • 完全支持XSD 1.0和XSD 1.1

  • 从XSD文件构建XML模式对象

  • 对XML实例进行XSD模式的验证

  • 将XML数据解码为Python数据和JSON

  • 将Python数据和JSON编码为XML

  • 数据解码和编码由转换类规则控制

  • 基于XPath的API用于查找架构的元素和属性

  • 支持XSD验证模式 严格/宽松/跳过

  • 使用禁止实体的XMLParser来保护XML攻击

  • 对URL或文件系统路径指定的资源进行访问控制

  • 从远程URL下载XSD文件并存储以供离线使用

  • 基于DataElement类的XML数据绑定

  • 使用Jinja2模板进行静态代码生成

安装

您可以在Python 3.7+环境中使用pip安装此库

pip install xmlschema

该库使用Python的ElementTree XML库,并需要elementpath附加包。XSD标准的基架构包含在包中,用于离线和加速架构实例的构建。

使用方法

导入库,然后使用包含架构的文件的路径作为参数创建架构实例

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

该架构可用于验证XML文档

>>> my_schema.is_valid('tests/test_cases/examples/vehicles/vehicles.xml')
True
>>> my_schema.is_valid('tests/test_cases/examples/vehicles/vehicles-1_error.xml')
False
>>> my_schema.validate('tests/test_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>

使用架构,您还可以将XML文档解码为嵌套字典,其值与架构中声明的数据类型相匹配

>>> import xmlschema
>>> from pprint import pprint
>>> xs = xmlschema.XMLSchema('tests/test_cases/examples/collection/collection.xsd')
>>> pprint(xs.to_dict('tests/test_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'}]}

作者

Davide Brunato和其他贡献代码或示例用例的人。

许可证

本软件根据MIT许可条款进行分发。请参阅当前分发根目录中的‘LICENSE’文件或https://open-source.org.cn/licenses/MIT

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

xmlschema-3.4.2.tar.gz (584.2 kB 查看哈希值)

上传时间

构建分布

xmlschema-3.4.2-py3-none-any.whl (417.8 kB 查看哈希值)

上传时间 Python 3

由以下提供支持