xml模式验证和解码器

xmlschema的Python项目详细描述


xmlschema库是XML Schema 对于python(支持python 2.7和python 3.5+)。

这个库源于处理xml的坚实python层的需要 基于架构的文件 MaX (Materials design at the Exascale)欧洲项目。 一个重要的问题是xml数据文件的编码和解码 由不同的仿真软件生成。 另一个重要的需求是XML数据验证,以便 生成的数据处于控制之下。在 基于模式的xml数据解码导致了这个库的建立。明显地 这个库可以用于其他与基于xml模式的处理相关的情况, 不仅适用于原始范围。

完整的xmlschema documentation is available on “Read the Docs”

功能

此库包括以下功能:

  • 完全支持XSD 1.0和XSD 1.1
  • 从xsd文件构建xml模式对象
  • 根据xsd模式验证xml实例
  • 将xml数据解码为python数据和json
  • 将python数据和json编码为xml
  • 由转换器类控制的数据解码和编码
  • 一个基于xpath的api,用于查找模式的元素和属性
  • 支持xsd验证模式strict/lax/skip
  • 默认情况下,使用禁止实体的xmlparser进行远程攻击保护

注意

目前,xsd 1.1验证器是由类xmlschema11和 默认的xmlschema类仍然是xsd 1.0验证器的别名, 类xmlschema10。从包的版本1.1开始 验证器将链接到xsd 1.1验证器,该版本还将 删除对Python2.7的支持。

安装

您可以在python 2.7或python 3.5+环境中使用pip安装库:

pip install xmlschema

该库使用python的elementtree xml库并要求 elementpath附加包装。 xsd标准的基本模式包含在工作包中 脱机并加速架构实例的生成。

用法

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

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

注意

对于xsd 1.1模式,使用类xmlschema11,因为默认类 xmlschema仍然是xsd 1.0验证器类xmlschema10的别名。 从下一个小版本(v1.1)开始,默认类将变为xmlschema11

架构可用于验证XML文档:

>>> 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 validateraiseerrorxmlschema.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文档解码为嵌套字典,使用 与架构声明的数据类型匹配的值:

>>> importxmlschema>>> frompprintimportpprint>>> 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'}]}

作者

davide brunato和其他为代码或示例案例做出贡献的人。

许可证

这个软件是根据麻省理工学院的许可条款发行的。 请参阅当前根目录中的“license”文件 分布,或http://opensource.org/licenses/MIT

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用jackson序列化/反序列化具有不同属性的子属性   javascript驱动程序。getTitle()从错误页面获取数据   java web应用程序的增量部署   java字符引用“&#x10”是无效的XML字符   java MyEclipse+Hibernate不按ID排序属性集?   找不到IBM Filenet P8更改预处理器Java实现   java比较器,用于按浮点参数对对象arraylist排序   java如何调试。来自eclipse或其他版本的bsh文件   不允许使用java rest api post方法   java如何在Servlet中打开弹出窗口,然后重定向页面   java的replaceAll方法对我不起作用我做错了什么?   我收到了javax。网ssl。SSLHandshakeException:握手期间远程主机关闭连接