Seite 1 von 1
QXmlSchema kann kein Schema laden warum?
Verfasst: 10. Juli 2012 14:28
von BamDenied
Hallo zusammen,
ich möchte mit Hilfe von QXmlSchema eine XML-Datei validieren.
Dazu habe ich folgenden Code geschrieben:
Code: Alles auswählen
QUrl xsd("file:///C:/Users/mbrings/Documents/Visual Studio 2008/Projects/WMS/Debug/wmtsGetCapabilities_response.xsd");
QXmlSchema schema;
if (schema.load(xsd)==true)
{
QXmlSchemaValidator validator(schema);
if (validator.validate(&file, QUrl::fromLocalFile(file.fileName())))
{
valid = true;
}
else
{
valid = false;
}
}
else
{
valid = false;
}
Beim Debuggen fällt auf, dass
nie eintrifft.
Wisst ihr warum er scheinbar mein .xds File nicht laden kann?
Die xds-Datei ist auf jeden Fall in korrekter Syntax.
Vielen Dank für eure Hilfe.
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 10. Juli 2012 15:43
von brax
Ich könnte mir vorstellen, dass das Problem daran liegt, dass Du eine lokale Datei laden möchtest. Versuch mal load mit dem IODevice zu benutzen:
Code: Alles auswählen
QFile file("C:/Users/mbrings/Documents/Visual Studio 2008/Projects/WMS/Debug/wmtsGetCapabilities_response.xsd");
file.open(QIODevice::ReadOnly);
QXmlSchema schema;
if (schema.load(&file, QUrl::fromLocalFile(file.fileName()))==true)
{
QXmlSchemaValidator validator(schema);
if (validator.validate(&file, QUrl::fromLocalFile(file.fileName())))
{
valid = true;
}
else
{
valid = false;
}
}
else
{
valid = false;
}
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 10. Juli 2012 15:59
von BamDenied
Vielen Dank für die schnelle Antwort.
Leider war es das nicht.
Code: Alles auswählen
if (schema.load(&file, QUrl::fromLocalFile(file.fileName()))==true)
Das Ergebnis ist immer noch false obwohl ein gültiges Schema in der Datei steht.
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 10:25
von brax
Nun ja, ohne das Schema zu sehen, dass Du laden willst ist es schwer, hier weiter zu machen. Ja, ich weiß, Du hast geschrieben, dass Du Dir sicher bist, dass das Schema OK ist. Wie wäre es, wenn Du es mal gegen
http://w3.org/2001/XMLSchema.xsd validierst, bzw. erstmal versuchst das zu laden?
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 11:27
von BamDenied
Ich habe es mit deinem Schema mal versucht
http://w3.org/2001/XMLSchema.xsd.
Ich habe auch andere Schemas aus dem Netzt versucht aber bei keinem ist das Ergebnis von Schema.load() true.
Mir ist der gedanke gekommen, dass das der Pfad des QFiles nicht richtig gefunden wird.
Code: Alles auswählen
QFile xsd("C:/Users/mbrings/Desktop/wmtsGetCapabilities_response.xsd");
Doch die Abfrage
zeigt, dass er das File auch findet.
Habt ihr vielleicht noch Ideen woran es liegen könnte?
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 12:06
von brax
Eine echte Idee, woran es liegen könnte habe ich leider nicht. Ich hab jetzt mal einen Minimaltest gemacht (ich benutze für XML Sachen Xerces und Xalan) und das Laden von direkt aus dem Netz hat nicht funktioniert (allerdings gab es da auch eine Fehlermeldung auf der Konsole. Kommt da bei Dir irgendwas?).
Darum habe ich die
http://w3.org/2001/XMLSchema.xsd runtergeladen und lokal nochmal versucht (was ja eigentlich eh das ist, was Du machen möchtest) und siehe da - es klappt!
Hier mein Code:
Code: Alles auswählen
#include <QFile>
#include <QXmlSchema>
#include <QApplication>
int main(int argc, char** argv) {
QApplication app(argc,argv);
QXmlSchema schema;
QFile file("P:/playground/foo/XMLSchema.xsd");
file.open(QIODevice::ReadOnly);
bool success = schema.load(&file, QUrl::fromLocalFile(file.fileName()));
return 0;
}
"success" ist am Ende true. Mir ist aber aufgefallen (und jetzt weiß ich auch wieder, warum wir für die Validierung nicht Qt benutzt haben), dass es unglaublich lange dauert, bis das Schema geladen ist. Xerces ist da deutlich schneller.
Hast Du es mit der w3.org Datei schonmal lokal versucht?
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 13:48
von BamDenied
Vielen Dank für deine Hilfe.
Ich habe das Problem lokalisieren können.
Und zwar liegt es wirklich an den xsd files.
Der Validator scheint mir recht pingelig zu sein.
Wenn ich dieses
http://w3.org/2001/XMLSchema.xsd .xsd file laden möchte ist das bei mir nicht möglich,
da beispielsweise in Zeile 61 in dem Text ein <schema> tag verwendet wir und er dies als "Opening and ending tag mismatch" Fehler erkennt.
Bei dir hat die Datei doch problemlos funktioniert oder musstest du die Datei auch erst anpassen?
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 13:56
von brax
Nein, ich musste die Datei nicht anpassen. Da es das offizielle w3-Schema für XML-Schema ist (quasi die "Mutter aller Schemas"

) würde es mich auch eigentlich sehr wundern, wenn dort Fehler drin wären. Wie gesagt, ich habe die Datei heruntergeladen, und QXmlSchema hat sie direkt erfolgreich laden können.
In Zeile 61 steht auch in der Datei, die ich runtergeladen habe:
Es ist also noch innerhalb der dtd-Definition.
Und alle Tags im Element-Content sind korrekt codiert (über die XML Entities < bzw. >)
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 15:08
von BamDenied
Okay ich hab auch diese Problem Herausgefunden.
Bei mir ist es so, dass die xds Datei imports auf andere Dateien via URL macht.
Da sich mein System hinter einem Proxy befindet scheinen diese imports nicht zu funktionieren und das Schema nicht geladen zu werden.
Jetzt muss ich entweder gucken das ich durch den Proxy komme oder die Dateien Lokal bereitstelle.
Problem bei Variante eins ist, dass es anscheinend sehr lange dauert(so lange das ich die Geduld verloren habe und es abgebrochen habe).
Problem bei Variante zwei ist, dass die imports und includes sich bestimmt durch 30 Dateien hindurch hangeln.
Tja ist doch alles mumpitz!
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 15:25
von BamDenied
Könntest du den gefallen tun und die folgende xds Datei laden und mir zu sagen ob es funktioniert hat und wie lange es ungefähr gedauert hat?
http://schemas.opengis.net/wmts/1.0/wmt ... sponse.xsd
Würde mir echt weiter helfen

Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 11. Juli 2012 16:39
von brax
Nichts einfacher als das...
Ich hab meinen Code etwas abgeändert:
Code: Alles auswählen
#include <QFile>
#include <QXmlSchema>
#include <QApplication>
#include <QDateTime>
#include <iostream>
int main(int argc, char** argv) {
QApplication app(argc,argv);
QXmlSchema schema;
QFile file("P:/playground/foo/wmtsGetCapabilities_response.xsd");
file.open(QIODevice::ReadOnly);
QDateTime d = QDateTime::currentDateTime();
bool success = schema.load(&file, QUrl::fromLocalFile(file.fileName()));
QDateTime d2 = QDateTime::currentDateTime();
std::cout << (d2.toTime_t() - d.toTime_t()) << std::endl;
std::cout << success << std::endl;
return 0;
}
Die Ausgabe dazu:
33
1
Press any key to continue . . .
Die Zeitmessung über QDateTime ist natürlich nicht 100%-ig, aber ein ganz guter Anhaltspunkt. Das ganze ist im Visual Studio 2008 mit Release-Konfiguration (Optimization /O2) und Qt 4.8.2 kompiliert. 30 Sekunden finde ich schon haarig.
Re: QXmlSchema kann kein Schema laden warum?
Verfasst: 12. Juli 2012 10:02
von BamDenied
Hmm das ist natürlich wirklich etwas haarig, da gebe ich dir recht.
Dann muss ich mir wohl was anderes überlegen.
Nun gut ich danke dir für die super Unterstützung hat mir wirklich viel geholfen.
