[Python-de] lxml: GML-Schema Problem

Stefan Behnel python-de at behnel.de
Do Feb 10 05:57:44 UTC 2011


Christian Baier, 09.02.2011 22:15:
> ich wollte eine XML-Datei validieren und fand ein Codeschnipsel, das erstaunlich (ich bin noch Python-Neuling und immer mehr begeistert) einfach ist:
>
> """
> import sys
> from lxml import etree
>
> xsdDatei = "gb-erh.xsd"
>
> schema_root = etree.parse( xsdDatei )
> schema = etree.XMLSchema(schema_root)    # hier bricht er ab
> parser = etree.XMLParser(schema=schema)
>
> xmlDatei = "E.Erh.Az6512.xml"
> etree.parse( xmlDatei, parser=parser)
> """
>
> Aber leider kommt er gar nicht dazu die Datei zu validieren, weil er beim parsen des Schemas schon abbricht:
>
> Traceback (most recent call last):
>    File ".\eigene_Scripte\Python\xmlvalidator.py", line 9, in<module>
>      schema = etree.XMLSchema(schema_root)
>    File "xmlschema.pxi", line 103, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:116069)
> XMLSchemaParseError: local list type: A type, derived by list or union, must have the simple ur-type definition as base type, not '{http://www.opengis.net/gml/3.2}doubleList'., line 118
>
>
> Das ist offensichtlich nicht nur mein Problem, wie man mit
> google finden kann, z.B.:
> http://www.devcomments.com/error-restricting-complexType-list-parsing-official-GML-schema-at108628.htm
>
> Wohl ein Problem mit libxml2 und gml.

Eine ähnliche Frage gab es schonmal auf der lxml Liste, bezüglich des CML 
Schemas:

http://comments.gmane.org/gmane.comp.python.lxml.devel/5799?set_lines=100000


> Leider habe ich nur "veraltete" Software zur Verfügung:
> lxml-2.2.4.win32-py2.5.exe

Ok, das ist wirklich schon ziemlich alt. Aber auch mit der neuesten Version 
von libxml2 bekomme ich die Exception oben.

Meine persönliche Meinung zu W3C XML-Schema ist, dass es ein totaler Murks 
ist. Sowohl die unglaublich komplizierte Spezifikation selbst als auch die 
Verwendung und die fehlerhafte Nutzerdokumentation dazu. Es kann niemandem 
zugemutet werden, ein W3C Schema von Hand zu schreiben, und weil sich die 
meisten Leute eben darum drücken, sind fast alle Schemata so lange 
generiert worden, bis irgendein Validator der gerade zur Hand war 
(gängigerweise ein Java-Tool) keine fatalen Fehler mehr ausgespuckt hat 
beim Parsen. Ob die anderen Validatoren dann auch der selben Meinung sind, 
wird geflissentlichst ignoriert. Dass die das anders sehen, ist nämlich 
dank der Unverständlichkeit der Spezifikation gar nicht so 
unwahrscheinlich. Es kann nämlich auch niemandem zugemutet werden, so etwas 
zu implementieren. So.

Und das traurigste ist, dass ich mit dieser Meinung nicht alleine stehe, 
wie z.B. dieser Thread hier zeigt:

http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002JanMar/1103.html

Das hilft dir aber mit deinem Problem nicht weiter. Meine Standardantwort 
an dieser Stelle: Die Schema-Entwickler anschreiben und darauf hinweisen, 
dass libxml2 das Schema nicht verarbeiten kann. Dann freundlich fragen, ob 
es sich nicht überarbeiten lässt. Meistens wird das aber wenig zielführend 
sein, weil XML-Schema einfach zu kompliziert zum "eben mal überarbeiten" 
ist. Aber vielleicht führt es ja dazu, dass hin und wieder auch mal jemand 
einen zweiten oder dritten Validator zum Testen benutzt um ein Schema zu 
entwickeln.

Ansonsten auch nochmal auf der libxml2 Mailingliste fragen.

Oder nachschauen, ob es nicht ein RelaxNG Schema für GML gibt. Das ist 
nämlich lesbar spezifiziert.

Stefan



Mehr Informationen über die Mailingliste python-de