XML Schema验证和解码器
项目描述
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'}]}
许可证
本软件根据MIT许可条款进行分发。请参阅当前分发根目录中的‘LICENSE’文件或https://open-source.org.cn/licenses/MIT。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。