alta recompensa por la siguiente Q:¿Cómo validar un archivo xml contra un esquema XSD utilizando la biblioteca de Amara en Python?
Hola, Aquí es lo que he intentado en Ubuntu 9.10 usando Python 2.6, Amara2 (por cierto, se ha creado usando Test.xsd xml2xsd herramienta):
[email protected]:~$ cat test.xml; echo =====o=====; cat test.xsd; echo ====
o=====; cat test.py; echo =====o=====; ./test.py; echo =====o=====
<?xml version="1.0" encoding="utf-8"?>==; ./test.py` >
test.txttest.xsd; echo ===
<test>abcde</test>
=====o=====
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="test" type="xs:NCName"/>
</xs:schema>
=====o=====
#!/usr/bin/python2.6
# I wish to validate an xml file against an external XSD schema.
from amara import bindery, parse
source = 'test.xml'
schema = 'test.xsd'
#help(bindery.parse)
#doc = bindery.parse(source, uri=schema, validate=True) # These 2 seem
to fail in the same way.
doc = parse(source, uri=schema, validate=True) # So, what is the
difference anyway?
#
=====o=====
Traceback (most recent call last):
File "./test.py", line 14, in <module>
doc = parse(source, uri=schema, validate=True)
File "/usr/local/lib/python2.6/dist-packages/Amara-2.0a4-py2.6-linux-
x86_64.egg/amara/tree.py", line 50, in parse
return _parse(inputsource(obj, uri), flags,
entity_factory=entity_factory)
amara.ReaderError: In file:///home/g/test.xml, line 2, column 0:
Missing document type declaration
[email protected]:~$
=====o=====
Entonces, ¿por qué veo este error? ¿Esta funcionalidad no es compatible? ¿Cómo puedo validar un archivo XML contra un XSD teniendo la flexibilidad de para apuntar a cualquier archivo XSD? Gracias, y avíseme si tiene alguna pregunta.
¿Está usted empeñado en usar la Biblioteca Amara? –
@movieyoda, no, puedo saltar a otra buena biblioteca de Python xml. Sin embargo, necesitaría portar mi código 'amara' existente entonces, y espero encontrar una solución indolora para eso. –