In base alla documentazione lxml "La DTD viene recuperata automaticamente in base al DOCTYPE del documento analizzato. Tutto ciò che devi fare è utilizzare un parser con la convalida DTD abilitata."Convalida XSD automatica
http://lxml.de/validation.html#validation-at-parse-time
Tuttavia, se si desidera convalidare contro uno schema XML, è necessario fare riferimento in modo esplicito uno.
Mi chiedo perché questo sia e vorrei sapere se esiste una libreria o una funzione in grado di farlo. O anche una spiegazione su come farlo accadere da solo. Il problema è che ci sono molti modi per fare riferimento a un XSD e devo supportarli tutti.
La convalida non è il problema. Il problema è come determinare gli schemi da validare. Idealmente questo gestirà anche schemi in linea.
Aggiornamento:
Ecco un esempio.
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>
Vorrei fare qualcosa di simile al seguente:
>>> parser = etree.XMLParser(xsd_validation=True)
>>> tree = etree.parse("simpletest.xml", parser)
Non possiamo dirvi come gestire i vostri formati. – Marcin
Marcin, non capisco il tuo commento. Forse non capisco come funziona la convalida dello schema. – Jono
Stai facendo questo su Windows? AFAIK Microsoft è l'unico a supportare schemi in linea. –