Closed kglaus closed 11 months ago
Gab es nicht vor kurzem einen ähnlichen Fall: https://github.com/claeis/ili2db/issues/499 Scheint auch korrektes XML gewesen zu sein.
Bei dir kommt der Fehler ja bereits bei Zeile 33. Und im Prinzip ist es - soweit ich verstehe - eine Streaming API. Die liest und liest und liest und liest und liest ohne Ressourcen-Probleme zu haben (das Parsen alleine betrachtet).
Kannst du das betroffene Objekt löschen und probieren? Oder die Koordinate löschen und probieren. Vielleicht ist irgendwo ein Sonderzeichen (auch nicht sichtbar) drin.
Oder mal mit "xmllint" das Teil prüfen und/oder neu formatieren.
Danke für den Tipp.
Ich hatte ein xtf mit der betroffenen Klasse und circa 20 Zeilen (inklusive der "fehlerhaften" Zeile) importiert --> ohne Probleme geklappt. Weiter habe ich testweise das xtf ohne die synoptic_intensity (die Klasse mit der "fehlerhaften" Zeile) importiert --> ähnliche Fehlermeldung andere Zeile und Spalte:
Info: /var/file_data/ili_agg_imports/uploads/gefahrenkarten_v1_3/zh/upload_LV95_1681992743/166_gefahrenkarte_lv95_without_synoptic_intensity.xtf: Hazard_Mapping_LV95_V1_3.hazard_mapping BID=bc93cb29-a4b0-4e81-93cd-f6b8db672f47
Info: 2 objects in CLASS Hazard_Mapping_LV95_V1_3.hazard_mapping.intensity_by_source
Error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,3762]
Message: XML document structures must start and end within the same entity.
Error: ParseError at [row,col]:[7,3762]
Message: XML document structures must start and end within the same entity.
Info: ...validation failed
Ich hab noch ein, zwei weitere Tests gemacht indem ich einfach alle Klassen in ein eigenes xtf transferiert und anschliessend hintereinander importiert haben. Das Problem tauchte nicht auf.
Noch eine Frage: Liest der xml Reader das gesamte File ein und muss es somit im Memory halten oder liest es Zeile für Zeile und verarbeitet diese? Ich nehme an ersteres (Referenzprüfungen, etc)? Falls ja tendiere ich dazu, dass der Fehler mit fehlendem Memory zusammenhängt.
Der XML Reader liest XML-Element um XML-Element und baut daraus Interlis-Objekte. Der Validator validiert/liest Interlis-Objekt um Interlis-Objekt (und baut im Hintergrund je nach Modell Hilfsstrukturen auf).
Danke für die Erklärung.
Die oben beschriebene Fehlermeldung bedeutet ja, dass das Einlesen des XML-Elements ein Problem verursacht. Daraus würde ich nun Schlussfolgern, dass die bis zum Zeitpunkt des Fehlers erstellten Interlisobjekte sowie die Hilfsstrukturen soviel Memory verbrauchen, dass das xtf nicht mehr weiter eingelesen werden kann. (An der Stelle, an der der Fehler geworfen wird ist alles in Ordnung und auch ein xtf mit nur der betroffenen Zeile wird korrekt validiert).
Gibt es noch andere Schlussfolgerungen?
@kglaus Kann man die Datei zur Verfügung stellen?
Evtl. mal mit --singlePass
probieren (dann werden fast keine Hilfsstrukturen aufgebaut (aber auch nicht alle Validierungen durchgeführt); dann sollte also kein Memory-Problem auftreten).
Ich glaube ich habe das Problem gefunden. Sehr wahrscheinlich wird das zip (als welches das xtf auf geodienste.ch nach dem Upload vorhanden ist und weiter verarbeitet wird, nicht richtig entpackt. --> Kein Problem des Memory
Das würde auch erklären, warum eine lokale Prüfung mit dem Ilivalidator keine solchen Probleme aufgeworfen hat.
Ich danke euch für eure Hilfe
Beim Validieren des MGDM Gefahrenkarten auf geodienste.ch kommt folgende Fehlermeldung:
Bei genauerer Betrachtung des Files stimmt diese Fehlermeldung nicht. Der C1 Tag ist an dieser Stelle ist geschlossen. Auch sonst sind alle Tags geschlossen und nicht offen.
Wenn ich das File mit einer lokalen Version von Ilivalidator validiere, erhalte ich keine Fehlermeldung.
Sind fehlende Ressourcen eine mögliche Ursache?