Python: избегайте проверки DTD с помощью LXML - PullRequest
3 голосов
/ 04 июля 2011

Я разбираю патенты USPTO с 2001 года в формате SGML.Вверху каждого файла указывается внешний DTD .К сожалению, этот DTD кажется недействительным.Проверка достоверности подтверждает, что:

Line 361
Error: A '(' character or an element type is required within declaration of element type "ADR".
<!ELEMENT ADR  - - (OMC?,STR*,CITY?,CNTY?,STATE?,CTRY?,PCODE?,EAD*,TEL*,FAX* ...

Однако мне не нужно проверять файлы SGML, подлежащие обработке.Мне просто нужен анализатор SGML, чтобы быть в курсе сущностей.В настоящее время я использую Python с библиотекой LXML.Я вызываю XMLParser следующим образом:

parser = etree.XMLParser(target=SimpleXMLHandler(), resolve_entities=False, load_dtd=dtd, dtd_validation=False, recover=True)  

Но, тем не менее, я сразу получаю сообщение об ошибке, что внешнее DTD недопустимо в строке 361. Как я могу избежать этой проблемы?Я не являюсь разработчиком DTD, поэтому я не хочу его ремонтировать.

С уважением!

1 Ответ

5 голосов
/ 04 июля 2011

Как уже заметил Chrono Kitsune: проблема заключается в xml по сравнению с sgml: DTD не является правильным dtd xml, потому что это dg sgml.

Я бы предложил сначала преобразовать документы sgml в xml, например, используя sx .

...