Hallo Leute,
ich habe derzeit die Aufgabe, die Daten die auf folgender Seite zu Verfügung gestellt werden, aus zu lesen und in eine Datenbank zu schreiben.
Die Daten liegen im RDF/XML-Format vor (zumindest soweit ich das beurteilen kann. RDF war mir bis dato unbekannt)
Nun habe ich natürlich schon ein wenig gegooglet und bin dabei auf die “Jena”-Bibliothek gestoßen, mit der man solche Dateien leicht auslesen können soll.
Nachdem ich mich durch diverse Seiten und Beispiele gelesen habe (und noch nicht wirklich was verstand) hab ich einfach mal angefangen selbst ein kleines Programm zum auslesen zu schreiben um evtl so der Sache näher zu kommen.
Folgende Klasse habe ich mir zusammengetippt:
public class Rdftest {
public static void main(String args[]) {
String path = "C:\\rdf\\RapidAlertNonFood\\product";
String file = "rapex.rdf.product.2012.xml";
path = path+File.separatorChar+file;
path = path.replace('\\', File.separatorChar);
Model model = ModelFactory.createDefaultModel();
try {
InputStream in = FileManager.get().open(path);
model.read(in,"");
model.write(System.out, "RDF/XML");
System.out.println();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Hierbei wird dann dieser Fehler geworfen: “Invalid byte 3 of 3-byte UTF-8 sequence”
Was, wenn ich es richtig verstehe, bedeutet das die Datei nicht UTF-8 konform ist (oder?)
Versuche ich die Datei im Firefox zu öffnen, zeigt dieser mir ebenfalls an, dass es nicht korrekt UTF-8 konform ist.
Schaue ich mir dann die Datei bspw. in Notepad++ an, fallen mir auch diverse Stellen auf, bei denen xE2x80 o.ä. anstelle von Zeichen stehen.
Nun meine Frage, weiß jemand wie ich diese Dateien korrekt lese sodass ich sie in eine DB schreiben kann?
Oder liegt der Fehler evtl garnicht bei mir und die Dateien sind Fehlerhaft?
Ich hoffe mir kann jemand helfen und Danke schon mal im voraus.
Die Dateien von der Originalquelle sehen valide aus. Möglicherweise hast du sie falsch abgespeichert? In Notepad++ gibt es den Menüpunkt “Encoding”. Öffne die Datei damit und schaue, was dort steht. Ggf. kannst du die Datei damit auch konvertieren, falls nötig.
Das falsch abspeichern schließe ich eigentlich aus. Da ich lediglich die *.zip heruntergeladen und danach die Dateien nicht verändert habe.
Auf den ersten Blick sehen die Dateien auch Valide aus, aber hast du mal versucht die Datei im Firefox zu öffnen?
Bei der Datei “rapex.rdf.product.2012.xml” ist bspw. in der Zeile 535 Spalte 416 ein kodierungsfehler/problem. Hier wird nur “xE2x80” in Notepad++ angezeigt.
Das Kodieren in andere Formate über Notepad++ hat leider auch keine Änderung bewirkt.
Sonst noch eine Idee was es sein könnte?
Ich lade mir die Dateien mal erneut runter, vielleicht ist bei dem Download ja tatsächlich etwas schief gelaufen, auch wenn ich es für eher unwahrscheinlich halte.
08:34 - EDIT:
Ich habe gerade noch nach geschaut. Das Problem taucht nur bei den rdf/xml-Dateien auf die im Ordner “product” sind. Bei “pictures” und “report” funktioniert es ohne Probleme.
Da ich aber die Inhalte aus “product” brauche, hilft mir das leider wenig
wenn es bei einem klappt und bei anderen nicht, dann ist wohl eher bei den falschen etwas nicht in ordnung. Sicher dass die Quelle richtig ist ?
Ich habe mal vor Jahren mit Jena gearbeitet, aber keine wirkliche Ahnung mehr - sicher dass die nicht mit einer Codierung Probleme haben - hast du dort schonmal nachgefragt. Die Chance ist dort hoeher einen RDF/Jena Fachmann zu finden als hier denke ich
Die Quelle ist die korrekte.
Und “nillehammer” hat nicht erwähnt ob er die Datei geprüft hat oder ob nur eine kurze Sichtung der Datei “valide aussieht”. (Die ersten 534 Zeilen der Datei sind lt. Firefox ja auch valide)
Da Firefox mir die XML-Datei auch nicht anzeigen möchte und sagt, dass dort ein Fehler vorliegt, denke ich das innerhalb der Datei ein kodierungsfehler ist.
Andere Dateien von der Quelle funktionieren auch. Nur gerade die 2, die ich brauche weisen anscheinden Fehler auf.
Entferne ich die Stellen, die Firefox mir anmeckert, kann ich die Datei dann auch in Jena einlesen.
Ich habe dem Betreiber der Seite, der die RDF/XML-Dateien zu Verfügung stellt schon geschrieben und nachgefragt, ob hier ein Fehler vorliegt bzw. ob er mir ein Beispiel senden könnte, wie ich die Datei korrekt auslesen könnte. Habe hier aber noch keine Antwort.
EDIT:
Ich möchte mit meiner Ausführung natürlich in KEINEM Fall sagen, dass bei mir kein Fehler liegt und suche natürlich weiterhin ob ich die Datei für Jena anders kodieren muss/kann.
Ich habe mir das zip heruntergeladen und die erst beste xml-Datei aufgemacht, die ich finden konnte. Es war allerdings ein report. Sorry, hätte genauer auf den Code schauen sollen. Die Dateien im Ordner product sind tatsächlich korrupt. Sie werden nach dem Öffnen in Notepad++ als Encoding “UTF-8 without BOM” angezeigt und enthalten die von Dir genannten “komischen Zeichen”. Auch bei mir war Anzeige im Browser nicht möglich. Eine Konvertierung nach UTF-8 hat auch bei mir nichts gebracht. Convert to ANSI (und im zweiten Schritt dann nach UTF-8) hat zumindest die störenden Bytes enfernt, sodass die Datei danach im Browser darstellbar war. Ob das allerdings den Inhalt der Daten unzulässig verfälscht, habe ich nicht geprüft.
Ich habe mir mal angeschaut, an welchen Stellen das Problem auftritt. Und so wie es aussieht, tritt das Problem bei dem Zeichen ” auf.
Hier müsste (lt. UTF-8 kodierung) der Hexcode “0xE2 0x80 0x9D” und nicht wie in Notepad angezeigt “xE2x80” sein (Wobei ich jetzt davon ausgehe, dass durch die formatierung von Notepad die 0 verschwindet)
Nun meine Frage,
habe ich irgendeine Möglichkeit, die unvollständigen Hex-Codes zu erweitern oder muss ich damit leben, dass die Datei zurzeit korrupt ist und ich ohne diese Zeichen leben muss.
Da kann fast schon direkt vom Namespace auf eine Spalte in einer DB gemappt werden.
XML ist immer so ein Krampf. Es muß Valide sein. Dann kommt noch dies und das hinzu. Dann paßt etwas am Schema nicht. Und sobald die kleinste Ungereimtheit auftaucht hängt sich das Ding auf und nichts geht mehr.
Abhängig von den Anforderungen (die Querys die darauf laufen sollen), würde ich das ganze sogar in eine CouchDB werfen.
Jedes Item ergibt ein neues Dokument. Da muß nichtmal groß was dran geändert werden.
Dazu in JavaScript ein paar Mapping und Reducefunktionnen und schon hast du alles was du brauchst.
Hallo allerseits,
es ist nun schon ein wenig her, dass ich hier geantwortet habe (war zwischenzeitlich aber mit anderen Problemen beschäftigt und nun ist wieder RAPEX an der Reihe)
Zuerst einmal, die RDF/XML’s sind nun valide. (Hatte den Betreibern nach der Diskussion hier eine Mail geschrieben und vor 2 Wochen eine Antwort bekommen)
Was mir nun aber zuerst ein mal aufgefallen ist…ich möchte nicht immer die aktuellsten Daten herunterladen, dass Programm manuell aufrufen und warten bis die Daten importiert sind.
Stattdessen soll bspw. 1 mal im Monat ein Programm nachschauen ob änderungen vorliegen.
Nun kann man die RDF/XML-Daten (sofern ich das richtig verstehe) via SPARQL auslesen/auswerten. - Richtig?
Auf der Seite, von der ich auch die Daten heruntergeladen habe, gibt es einen SPARQL-Editor: http://open-data.europa.eu/de/linked-data
Hierüber versuche ich nun schon seit einer Weile die Rapex-Daten ab zu fragen…allerdings ohne Erfolg.
Hat hier jemand Erfahrung mit und kann mir ein Beispiel geben bzw. erklären wie ich an in zyklischen Abständen, ohne manuelles Eingreifen, an die Daten dieser Seite komme?
Die RAPEX-Seite bzw. der RAPEX-Bereich ist nochmal hier zu finden: http://open-data.europa.eu/de/data/dataset/Zk5Wq37ZXQ8ug27jbMgJaQ