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'}]}
许可证
这个软件是根据麻省理工学院的许可条款发行的。 请参阅当前根目录中的“license”文件 分布,或http://opensource.org/licenses/MIT。