De acuerdo con la documentación lxml "La DTD se recupera automáticamente en función del DOCTYPE del documento analizado. Todo lo que tiene que hacer es usar un analizador que tenga habilitada la validación DTD".Validación XSD automática
http://lxml.de/validation.html#validation-at-parse-time
Sin embargo, si desea validar con un esquema XML, es necesario hacer referencia explícita a uno.
Me pregunto por qué es esto y me gustaría saber si hay una biblioteca o una función que pueda hacer esto. O incluso una explicación de cómo hacer que esto suceda yo mismo. El problema es que parece haber muchas formas de hacer referencia a un XSD y necesito darles soporte a todos.
La validación no es el problema. El problema es cómo determinar los esquemas para validar en contra. Idealmente, esto también manejaría los esquemas en línea.
Actualización:
Este es un ejemplo.
simpletest.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="name" type="xs:string"/>
</xs:schema>
simpletest.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<name xmlns="http://www.example.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org simpletest.xsd">foo</name>
me gustaría hacer algo como lo siguiente:
>>> parser = etree.XMLParser(xsd_validation=True)
>>> tree = etree.parse("simpletest.xml", parser)
No podemos decirle cómo lidiar con sus propios formatos. – Marcin
Marcin, no entiendo tu comentario. Tal vez no entiendo cómo funciona la validación de esquemas. – Jono
¿Estás haciendo esto en Windows? AFAIK Microsoft es el único que admite esquemas en línea. –