schematron сообщает о проблеме с python lxml

Я проверяю XML-документы с помощью модуля схемы lxml. Он работает хорошо, но я не могу отобразить отчет о проверке, который задан как свойство. Я не могу найти, как обработать его как XML-дерево.

Вот фрагмент кода, который я использую:

xdoc = etree.parse("mydoc.xml")
# schematron code removed for clarity
f = StringIO.StringIO('''<schema>...</schema>''')
sdoc = etree.parse(f)
schematron = isoschematron.Schematron(sdoc, store_schematron=True, store_xslt=True, store_report=True)
if schematron.validate(xdoc):
    print "ok"
else:
     tprint "ko"

report = isoschematron.Schematron.validation_report

>>> type(report)
<type 'property'>
>>> dir(report)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__',
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'deleter', 'fdel', 'fget', 'fset', 'getter', 'setter']
>>> report.__doc__
'ISO-schematron validation result report (None if result-storing has\n        been turned off).\n  

Документация lxml не ясна в этом вопросе. Может ли кто-нибудь помочь мне получить дерево отчетов xml?


person Laurent Le Meur    schedule 09.06.2012    source источник


Ответы (2)


Вам необходимо установить для параметра store_report __init__(...) класса Schematron значение True (по умолчанию: False).

ИМХО документация довольно ясна в этом вопросе, см., например. http://lxml.de/api/lxml.isoschematron.Schematron-class.html или

>>> help(Schematron):
class Schematron(lxml.etree._Validator)
 |  An ISO Schematron validator.
 |  
 |  ...
 |  With ``store_report`` set to True (default: False), the resulting validation
 |  report document gets stored and can be accessed as the ``validation_report``
 |  property.
person Holger    schedule 10.10.2012
comment
ну... так было и в моем образце. - person Laurent Le Meur; 29.11.2014

Люди, которые оказались здесь, могут также захотеть взглянуть на вопрос ниже; первый ответ дает довольно четкий пример того, как заставить работать отчеты Schematron (опубликовал это, потому что я не смог найти какие-либо рабочие примеры, и я нашел документацию lxml тоже несколько запутанно). Вот оно:

Проверка Schematron с помощью lxml в Python: как получить ошибки проверки?

person johan    schedule 26.11.2014
comment
здорово. это решает проблему. Заменил init отчета на report=schematron.validation_report и готово. - person Laurent Le Meur; 29.11.2014