[Python-de] lxml: GML-Schema Problem

Stefan Behnel python-de at behnel.de
Fr Feb 11 06:21:56 UTC 2011


Stefan Behnel, 10.02.2011 06:57:
> 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
>
> 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.

Ah, und es gibt vielleicht noch eine Möglichkeit: XML-Schema nach RelaxNG 
*konvertieren*. Kann leider "trang" nicht (was sonst eigentlich für alles 
gut ist), aber es gibt Tools, wenn mensch nur lange genug danach sucht:

http://www.postneo.com/2007/01/16/all-i-want-to-do-is-convert-my-schema

Das hier ist *möglicherweise* noch einen Blick wert, auch wenn dein GML 
Schema vielleicht schon zu komplizert dafür ist.

http://debeissat.nicolas.free.fr/XSDtoRNG.php

Stefan



Mehr Informationen über die Mailingliste python-de