prime pour la haute Q suivante:Comment valider un fichier xml par rapport à un schéma XSD en utilisant la bibliothèque Amara en Python?
Bonjour, Voici ce que j'ai essayé sur Ubuntu 9.10 en utilisant Python 2.6, Amara2 (en passant, test.xsd créé à l'aide xml2xsd outil):
[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=====
Alors, pourquoi est-ce que je vois cette erreur? Cette fonctionnalité n'est-elle pas prise en charge? Comment puis-je valider un fichier XML par rapport à un fichier XSD tout en ayant la flexibilité pour pointer vers un fichier XSD? Merci, et laissez-moi savoir si vous avez des questions.
êtes-vous prêt à utiliser la bibliothèque Amara? –
@movieyoda, non, je peux passer à une autre bonne bibliothèque xml Python. Cependant, j'aurais besoin de porter mon code 'amara' existant, et j'espère trouver une solution indolore pour cela. –