Проверка Python lxml в автономном режиме дает отказ в подключении к http://www.opengis.net/kml/2.2

Я пытаюсь проверить XML через lxml и xsd (ogckml22.xsd). Это происходит в автономном режиме. Я читаю файл через прямое открытие / чтение

Для справки: http://www.opengis.net/kml/2.2 недействителен.

из другой статьи: (уточнено по запросу на комментарий ..)

from lxml import etree
import os
import sys
import StringIO
file=open('ogckml22.xsd')
data=file.read()
str=StringIO.StringIO(data)
try:
     xmlschema_doc=etree.parse(data)
except IOError as ex:
    print "oops {0}".format(ex.strerror)
except:
    print "Unexpected error:", sys.exc_info()[0]

xmlschema=etree.XMLSchema(xmlschema_doc)  

Все, что я получаю, это «в соединении отказано». С помощью try / except я получаю, что xmlschema_doc не определен.

File "<stdin>", line 1, in <module>  
File "<xmlschema.pxi",line 105, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:132748  
   self.error_log)  
lxml.etree.XMLSchemaParseError: connection refused  

Я знаю, что он может читать приведенный выше файл xsd и еще один файл xsd, который будет включен.

ОК, может быть, xsd читается? Я загрузил исходный код для lxml и в src / lxml / xmlschema.pxi,

if self._c_schema is NULL:
    raise XMLSchemaParseError(
        self.error_log._buildExceptionMessage(
            u"Document is not valid XML Schema"),
        self._error_log)

Я никогда не вижу сообщения «Документ не является допустимой схемой XML». Я могу только предположить, что «Connection Refused» используется вместо «Document message» (по умолчанию?), Но более тщательное чтение _error_log (вне перекомпиляции) меня ускользает ...

Искренне,

СтрелкаДерево


person ArrowInTree    schedule 07.11.2012    source источник
comment
Не могли бы вы привести минимальный полный пример, воспроизводящий проблему? Какой у вас lxml.etree.__version__?   -  person jfs    schedule 07.11.2012
comment
Умм, print lxml.etree .__ version__ утверждает, что 'lxml' не определен, но print etree .__ version__ дает 2.3.3   -  person ArrowInTree    schedule 07.11.2012


Ответы (1)


ogckml22.xsd импортирует два других документа схемы (atom-author-link. xsd и xAL.xsd):

<!-- import atom:author and atom:link -->
<import namespace="http://www.w3.org/2005/Atom" 
        schemaLocation="atom-author-link.xsd"/>

<!-- import xAL:Address -->
<import namespace="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" 
        schemaLocation="http://docs.oasis-open.org/election/external/xAL.xsd"/>

Если вы хотите проанализировать схему в автономном режиме, вам необходимо, чтобы оба этих документа были доступны локально, и пути, указанные в schemaLocation, должны быть правильными.

Разбор и загрузку схемы можно упростить (StringIO не требуется):

from lxml import etree

xmlschema_doc = etree.parse("ogckml22.xsd") 
xmlschema = etree.XMLSchema(xmlschema_doc)

print xmlschema

Вывод:

<lxml.etree.XMLSchema object at 0x00D25120>

Я не понимаю, что вы имеете в виду, говоря "Для записи, http://www.opengis.net/kml/2.2 недействителен ".

Если у вас есть доступ в Интернет, вы можете использовать URL-адрес в качестве аргумента для etree.parse():

xmlschema_doc = etree.parse("http://www.opengis.net/kml/2.2")

По крайней мере, у меня это работает.

person mzjn    schedule 08.11.2012
comment
Умм, спасибо за вашу помощь, но файлы * .xsd, на которые вы ссылались, находятся в том же каталоге, что и сценарий, и, несмотря на все виды возни с xmlcatalog в этом поле fc17, я получаю то же сообщение. - person ArrowInTree; 10.11.2012
comment
Итак, вы используете каталог XML? Вы ничего не сказали об этом в вопросе. Трудно помочь, если вы не предоставите все детали, необходимые для воспроизведения проблемы. - person mzjn; 10.11.2012
comment
xmlcatalog появился на сцене только ПОСЛЕ того, как вы опубликовали свой ответ, но не раньше. Как я уже сказал, все файлы xsd находятся в том же каталоге, что и сценарий, поэтому это не должно иметь значения. - person ArrowInTree; 10.11.2012
comment
Вы изменили schemaLocation="http://docs.oasis-open.org/election/external/xAL.xsd" на schemaLocation="xAL.xsd"? - person mzjn; 10.11.2012
comment
Да, это сработало. Спасибо. Но дело в файлах заголовков и xsd - это общая система отсчета. Вздох .... Знаешь какие-нибудь хорошие учебники по xmlcatalog ...? ‹Br› У меня есть xml.web.cern.ch/XML/www.sagehill.net/xml/docbookxsl/ (хотя он входит в system vs uri) - person ArrowInTree; 10.11.2012
comment
lxml основан на libxml2, поэтому я надеюсь, что этот документ должен немного помочь: xmlsoft.org/catalog.html. Еще одна хорошая статья (более ориентированная на Java, но с некоторой полезной общей информацией): xerces.apache.org/xml-commons/components/resolver/. Если у вас возникнут проблемы с его работой, я смогу помочь. Но я думаю, в таком случае вам следует задать новый вопрос. - person mzjn; 10.11.2012
comment
Один небольшой вопрос: у меня есть xmlcatalog, чтобы принимать все 3 xsd как записи SYSTEM. Но решить все равно не получается ... каков процесс разрешения ...? - person ArrowInTree; 12.11.2012
comment
Я смог заставить его работать, используя конструкцию <uri name="uri" uri="alternateuri"/>. См. oasis-open.org/committees /download.php/14809/. - person mzjn; 12.11.2012
comment
Я перешел по ссылке и попытался продублировать Раздел 4.3, но команда отладки xmlcatalog и сообщения об ошибках хуже, чем бесполезны. Я пробовал как записи rewriteUri, так и uri. Ни то, ни другое не сработало. - person ArrowInTree; 13.11.2012
comment
Извините, что заостряю внимание на этом, но вам следует задать новый вопрос, если вам нужна помощь в настройке / отладке каталогов XML. - person mzjn; 13.11.2012