У меня есть еще одна проблема, которой я отчаянно нуждаюсь. Я думаю, что есть много решений этой проблемы, но я хотел бы знать, может ли мой подход быть реализован каким-либо образом.
У меня есть файл XML, использующий одно внешнее DTD и определяемый с помощью XML DOCTYP .
Файл xml анализируется с Python (l xml). Таким образом, можно автоматически проверять различные файлы с помощью DTD, определенных в XML DOCTYP. Я использую внешний DTD, к которому можно получить доступ по адресу inte rnet. Но этот inte rnet сайт перенаправляет каждый запрос на порт HTTPS. По этой причине Python не может получить доступ к внешнему DTD.
Благодаря моему другу я смог использовать старый, неиспользованный веб-сайт, который все еще работает по HTTP. DTD на этом сохраненном веб-сайте может быть найден и использован синтаксическим анализатором.
Теперь на мой вопрос. Можно ли использовать внешний DTD с Python -l xml, который доступен только через HTTPS-сервер? К сожалению, у меня нет возможности создать область на сервере, которая использует порт HTTP.
Я уже пытался получить внешний DTD через HTTP-запрос, но он перенаправляется на порт HTTPS.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE book PUBLIC "-//AA//Test//EN" "***">
<!-- <!DOCTYPE book PUBLIC "-//AA//Test//EN" "***"> -->
<book>
<book-meta>
<book-id pub-id-type="other">handbook</book-id>
<book-title-group Id="1">
<book-title name="Hallo">The NCBI Handbook</book-title>
</book-title-group>
</book-meta>
</book>
Для полноты вот пример DTD.
<!ELEMENT book ANY>
<!ATTLIST book
Release CDATA "v0.0.1"
>
<!ELEMENT book-meta ANY> <!-- # related objects: 0 -->
<!ATTLIST book-meta
Value CDATA "Das ist eine Information"
>
<!ELEMENT book-id ANY> <!-- # related objects: 0 -->
<!ATTLIST book-id
pub-id-type CDATA #REQUIRED
>
<!ELEMENT book-title-group ANY> <!-- # related objects: 0 -->
<!ATTLIST book-title-group
Id CDATA #IMPLIED
>
<!ELEMENT book-title ANY> <!-- # related objects: 0 -->
<!ATTLIST book-title
name CDATA #REQUIRED
>
Для анализа файлов XML я использую скрипт python с библиотекой l xml. Ниже приведена тестовая программа.
import xml.etree.ElementTree as ET
import lxml
from lxml import etree
myParser = lxml.etree.XMLParser(attribute_defaults = True, dtd_validation = True, load_dtd =True, no_network = False)
xmlFile = lxml.etree.parse("XML_DTDValidation.xml", parser=myParser)
xmlFile.xinclude()
xmlFile.write("XML_DTDValidation_out.xml",method="xml",xml_declaration=True, encoding='utf-8',pretty_print=True)
Я надеюсь, что смогу хорошо изложить мою проблему, и кто-то может мне помочь.