Daten in XML umwandeln



Ähnliche Dokumente
Schreiben von Microsoft Office Datein mit Java

Professionelle Seminare im Bereich MS-Office

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

OP-LOG

Wir basteln einen Jahreskalender mit MS Excel.

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Kurzeinführung Excel2App. Version 1.0.0

SEMINAR Modifikation für die Nutzung des Community Builders

Thema Stichwort Programm Letzte Anpassung Serienbrief erstellen Ablauf

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

ODBC-Treiber Programmübersicht

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Kurzanleitung. Toolbox. T_xls_Import

Anleitung über den Umgang mit Schildern

Berechnungen in Access Teil I

Programm GArtenlisten. Computerhinweise

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Bedienungsanleitung Einsatzplanung. Bedienungsanleitung Einsatzplanung. Inhalt. Bedienung einer Plan-Tabelle

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

! " # $ " % & Nicki Wruck worldwidewruck

Dossier: Rechnungen und Lieferscheine in Word

Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender FHNW, Services, ICT

5.2 Neue Projekte erstellen

Änderung der Sicherheitseinstellungen von konten

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

EINFACHES HAUSHALT- KASSABUCH

Lokale Installation von DotNetNuke 4 ohne IIS

Menü auf zwei Module verteilt (Joomla 3.4.0)

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Kurzer Leitfaden für den Einstieg in PayComm

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Artikel Schnittstelle über CSV

Microsoft PowerPoint 2013 Folien gemeinsam nutzen

Übung: Verwendung von Java-Threads

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Geld Verdienen im Internet leicht gemacht

Allgemeiner Leitfaden zum Einfügen suchmaschinenoptimierter Texte

LEITFADEN -ZUSTELLUNG

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Bedienungsanleitung für den SecureCourier

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote

SharePoint Demonstration

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Leichte-Sprache-Bilder

Qt-Projekte mit Visual Studio 2005

KURZANLEITUNG CLOUD OBJECT STORAGE

ICS-Addin. Benutzerhandbuch. Version: 1.0

Informatik 12 Datenbanken SQL-Einführung

Verbinden von IBM Informix mit Openoffice mittels JDBC

Computeria Rorschach Mit Excel Diagramme erstellen

Bauteilattribute als Sachdaten anzeigen

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Clientkonfiguration für Hosted Exchange 2010

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Anhand des bereits hergeleiteten Models erstellen wir nun mit der Formel

Leitfaden zum Umgang mit Mautaufstellung und Einzelfahrtennachweis

Hilfedatei der Oden$-Börse Stand Juni 2014

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Kurzbeschreibung s&s Arbeitszeiterfassung

Handbuch ECDL 2003 Basic Modul 3: Textverarbeitung Serienbrief erstellen - Datenquelle

INSTALLATION VON INSTANTRAILS 1.7

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

:: Anleitung Hosting Server 1cloud.ch ::

Text-Zahlen-Formatieren

Zwischenablage (Bilder, Texte,...)

Dokumentation von Ük Modul 302

Windows 7: Neue Funktionen im praktischen Einsatz - Die neue Taskleiste nutzen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Zugriff auf Daten der Wago über eine Webseite

Fotos in Tobii Communicator verwenden

Microsoft Access 2013 Navigationsformular (Musterlösung)

So gehts Schritt-für-Schritt-Anleitung

Einkaufslisten verwalten. Tipps & Tricks

Erstellen einer PostScript-Datei unter Windows XP

pro4controlling - Whitepaper [DEU] Whitepaper zur CfMD-Lösung pro4controlling Seite 1 von 9

Online bezahlen mit e-rechnung

HOW TO CREATE A FACEBOOK PAGE.

teischl.com Software Design & Services e.u. office@teischl.com

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Anleitung zur Webservice Entwicklung unter Eclipse

teamsync Kurzanleitung

Magento MultiStore einrichten unter ispcp

So funktioniert die NetWorker 7.5 Eigenschaft zum Sichern umbenannter Verzeichnisse ( Backup renamed Directories )

TREND SEARCH VISUALISIERUNG. von Ricardo Gantschew btk Berlin Dozent / Till Nagel

Kleines Handbuch zur Fotogalerie der Pixel AG

Datenaustausch mit dem BVK Data Room

Transkript:

In diesem Kapitel Einleitung Syntax einer Datei XML aus Strukturierten Daten Eingabe, Bearbeitung aus Ausgabe als XML Dokument Datenbank CSV und Tab Dateien Excel XML Hierarchien aus einfachen Daten Apache POI Zugriff auf MS Formate und Verbindung mit XML Excel Daten mit POI HSSF lesen Word Dokumente mit POI HDF lesen Google Interface Zusammenfassung 4. Daten in XML umwandeln 4.1. Einleitung Die meisten Informationen stehen ziemlich roh zur Verfügung und können analysiert werden: - Im Web (Web Mining), eventuell in Suchmaschinen - in Word Dokumenten - in normalen Text Dateien (Text Mining) - aus strukturierten Dateien (beispielsweise mit einer DTD) - als CSV Dateien - in Excel Spreadsheets - vielleicht sogar in einer Datenbank (Data Mining). Wenn wir diese "Daten" (strukturierte und unstrukturierte, wie beispielsweise Text) in XML umformen möchten, stehen wir vor einem kaum allgemein lösbaren Problem, den unstrukturierten Daten. Viele Datenbanken sind in der Lage, XML Ausgaben zu generieren, was ja auch nicht gerade schwierig ist (einfach den Tabellennamen, dann die Spaltennamen mit den Daten dann schon brav wieder alles schliessen). Kapitel4XMLausDatenGenerieren.doc 1 / 12

4.2. Beschreibung der Syntax einer Datei Wir können den Inhalt einer Datei mithilfe einer Syntax beschreiben: - gemäss BNF kann eine Syntax als Syntaxgraph / Baum beschrieben werden. - Wir können dies genau so gut mit DTD machen. - Die üblichen Operatoren sind + (mindestens 1-mal), * (0...),?(0 oder 1) Beispiel: Kalender Datum Header Jahr Header Monat Header Tag Header WochentagNr Header Wochentag Header Datum Jahr Monat Tag WochentagNr Wochentag In unserem Beispiel ist der Aufbau der Datei sehr einfach: Datum Jahr Monat Tag WochentagNrWochentag 01.01.2003 2003 1 1 2 Mittwoch 02.01.2003 2003 1 2 3 Donnerstag 03.01.2003 2003 1 3 4 Freitag 04.01.2003 2003 1 4 5 Samstag 05.01.2003 2003 1 5 6 Sonntag 06.01.2003 2003 1 6 0 Montag Wir haben eine Headerzeile und beliebig viele Datenzeilen. Ein Parser für diese Syntax hat folgende Struktur: //Header Read DatumHeader Read JahrHeader Read MonatHeader Read TagHeader Read WochentagNrHeader Read WochentagHeader while (not EOF) { Read Datum Read Jahr Read Monat Read Tag Read WochentagNr Read Wochentag // * Operator entspricht while (+:until) Wie würde eine Beschreibung dieser Syntax mit Hilfe einer DTD aussehen? Schematisch: <!ELEMENT Kalender (Header, Daten+)> <!ELEMENT Header...> <!ELEMENT Daten...> Kapitel4XMLausDatenGenerieren.doc 2 / 12

4.3. XML aus strukturierten Daten Für den Kalender ergeben sich verschiedene Ausgabeformate, die eventuell sinnvoll sein könnten: <Kalender> <Kalendertag> <Datum>01.01.2003</Datum> <Jahr>2003</Jahr> <Monat>1</Monat> <Tag>1</Tag> <WochentagNr>2</WochentagNr> <Wochentag>Mittwoch</Wochentag> </Kalendertag> <Kalendertag> <Datum>02.01.2003</Datum> <Jahr>2003</Jahr> <Monat>1</Monat> <Tag>2</Tag> <WochentagNr>3</WochentagNr> <Wochentag>Donnerstag</Wochentag> </Kalendertag> <Kalendertag> <Datum>03.01.2003</Datum> <Jahr>2003</Jahr> <Monat>1</Monat> <Tag>3</Tag> <WochentagNr>4</WochentagNr> <Wochentag>Freitag</Wochentag> </Kalendertag>... mit folgendem DTD: <?xml version="1.0" encoding="utf-8"?> <!ELEMENT Datum (#PCDATA)> <!ELEMENT Jahr (#PCDATA)> <!ELEMENT Kalender (Kalendertag+)> <!ELEMENT Kalendertag (Datum, Jahr, Monat, Tag, WochentagNr, Wochentag)> <!ELEMENT Monat (#PCDATA)> <!ELEMENT Tag (#PCDATA)> <!ELEMENT Wochentag (#PCDATA)> <!ELEMENT WochentagNr (#PCDATA)> und dem XML Schema: <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="qualified"> <xs:element name="kalender"> <xs:complextype> <xs:sequence> <xs:element ref="kalendertag" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="kalendertag"> <xs:complextype> <xs:sequence> <xs:element ref="datum"/> <xs:element ref="jahr"/> <xs:element ref="monat"/> <xs:element ref="tag"/> <xs:element ref="wochentagnr"/> <xs:element ref="wochentag"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="datum" type="xs:string"/> <xs:element name="jahr" type="xs:string"/> <xs:element name="monat" type="xs:string"/> Kapitel4XMLausDatenGenerieren.doc 3 / 12

<xs:element name="tag" type="xs:string"/> <xs:element name="wochentagnr" type="xs:string"/> <xs:element name="wochentag" type="xs:string"/> </xs:schema> Wenn wir die Daten "vereinfachen" und die Jahreszahl und den Monat nicht in jeder Zeile wiederholen, erhalten wir eine äquivalente Darstellung, die aber von keiner Datenbank mehr verstanden würde. Wir verlassen die Datenebene und bewegen uns auf der Informationsebene. Die Syntaxbeschreibung wird deutlich komplexer, der Speicherbedarf sinkt! <?xml version="1.0" encoding="utf-8"?> <!ELEMENT Kalender (JahrHeader, MonatHeader, WochentagHeader, Jahr+)> <!ELEMENT MonatHeader (#PCDATA)> <!ELEMENT JahrHeader (#PCDATA)> <!ELEMENT WochentagHeader (#PCDATA)> <!ELEMENT Jahr (#PCDATA Monat)*> <!ELEMENT Monat (#PCDATA Wochentag)*> <!ELEMENT Wochentag (#PCDATA WochentagNr Wochentag Datum)*> <!ELEMENT WochentagNr (#PCDATA)> <!ELEMENT Datum (#PCDATA)> <?xml version="1.0"?> <Kalender> <JahrHeader>Jahr</JahrHeader> <MonatHeader>Monat</MonatHeader> <WochentagHeader>Wochentag</WochentagHeader> <Jahr>2003 <Monat>1 <Wochentag> <WochentagNr>0</WochentagNr> <Wochentag>Montag</Wochentag> <Datum>1-1-2003</Datum> </Wochentag> </Monat> <Monat>1 </Jahr> <Jahr>2004 Kapitel4XMLausDatenGenerieren.doc 4 / 12

4.4. Datenstrukturen Die Datenstruktur, die unseren Daten angepasst ist, hängt von der Beschreibungsebene ab: - auf der Datenebene haben wir lauter identisch aufgebaute Datensätze. Die Anzahl ist variabel. Eine mögliche Datenstruktur ist eine Liste für den Kalender und eine eigene Klasse für den Datensatz. Eingabe: wir können die Daten zeilenweise einlesen, ein Datenrecord-Objekt kreieren und der Liste hinzufügen. - Auf der Informationsebene ist die Struktur ähnlich, das Datenrecord-Objekt aber anders. Eingabe: hier muss die Position der Daten abgefragt werden, um "Gruppenbrüche" feststellen zu können (Gruppenbruch: ein neuer Monat, ein neues Jahr). Die Ausgabe als XML ist in beiden Fällen nicht besonders schwierig. 4.5. Eingabe, Bearbeitung und Ausgabe als XML Dokument 4.5.1. Datenbank Falls die Daten in einer DB stehen, wenden wir JDBC (evtl. mit JDBC-ODBC) an. Der Einfachheit halber verwende ich Cloudscape, weil diese DB mit der J2EE Referenz- Implementierung von Sun mitgeliefert wird. Sie finden zwei Beispiele im ZIP: 1) lesen der Daten aus einer Datei im CSV Format, eintragen der Datenelemente als String Arrays in eine LinkedList kreieren der DB Tabelle und einfügen der Daten. 2) Lesen der Daten aus der DB Tabelle und Ausgabe in eine XML Datei. Teil 1: private LinkedList readdata() { LinkedList liste = new LinkedList(); String[] record = new String[6]; String header, data; /* Header Datum;Jahr;Monat;Tag;WochentagNr;Wochentag * 1 2 3 4 5 6 * 01.01.2003;2003;1;1;2;Mittwoch */ try { BufferedReader br = new BufferedReader(new FileReader("Kalender.csv")); // Header header=br.readline(); // Daten while ((data=br.readline())!=null) { record = splitrecord(data); liste.add(record); catch (FileNotFoundException fnfe) { fnfe.printstacktrace(); catch (IOException ioe) { ioe.printstacktrace(); return liste; Kapitel4XMLausDatenGenerieren.doc 5 / 12

private String[] splitrecord(string pdata) { String data[] = new String[6]; String temp; temp=pdata.trim(); int iend; // 01.01.2003;2003;1;1;2;Mittwoch for (int i=0; i<5; i++) { iend = temp.indexof(';'); data[i] = temp.substring(0,iend); temp = temp.substring(iend+1); // am Schluss steht kein ';' data[5]=temp; return data;... Eintragen in die Datenbank Tabelle "Kalender": String[] zeile = new String[6]; // "(01.01.2003, 2003,, 1, 1, 4, 'Mittwoch')", Iterator it = rohdaten.iterator(); //LinkedList while(it.hasnext()) { zeile = (String[])it.next(); irowcount += stmt.executeupdate( "INSERT INTO Kalender VALUES " + "('"+zeile[0]+"',"+zeile[1]+","+zeile[2]+","+ zeile[3]+","+zeile[4]+","+"'"+zeile[5]+"')"); Teil 2: Generieren des XML-Dokuments try { System.out.println("[KalenderAbfragen]executeQuery(\"SELECT...\" "); ResultSet result = stmt.executequery( "SELECT Jahr, Monat, Tag, Datum, WochentagNr, Wochentag " + "FROM Kalender"); // Order by : bei String-Datum problematisch! /* XML Ausgabe * <Kalender> * <Kalendertag> * <Jahr>2003</Jahr> <Monat>1</Monat><Tag>1</Tag> * <WochentagNr>2</WochentagNr> * <Wochentag>Mittwoch</Wochentag> * <Datum>01.01.2003</Datum> * </Kalendertag> */ BufferedWriter bw = new BufferedWriter(new FileWriter("KalenderAusgabe.xml")); bw.write("<?xml version=\"1.0\"?>\n\r"); bw.write("<kalender>"); while(result.next()) { // Daten zeilenweise lesen bw.write("<kalendertag>\n\r"); bw.write("<jahr>\n\r"); ijahr = result.getint("jahr"); bw.write(ijahr+"</jahr>\n\r"); bw.write("</kalendertag>\n\r"); bw.write("</kalender>\n\r"); bw.flush(); bw.close(); // end try Kapitel4XMLausDatenGenerieren.doc 6 / 12

4.5.1.1. Attribute Als alternatives Ausgabeformat könnten die Jahreszahl und eventuell weitere Daten jeweils als Attribut definiert werden. Die Generierung der Ausgabe unterscheidet sich jedoch kaum: lediglich die Definition der Ausgabezeichenkette muss etwas modifiziert werden. Schematisch: <?xml version="1.0" encoding="utf-8"?> <Kalendertag Jahr="2003" Monat="1" Tag="1" Wochentag="2"> <Wochentag>Mittwoch</Wochentag> <Datum>01.01.2003</Datum> </Kalendertag> <Kalendertag Jahr="2003" Monat="1" Tag="2" Wochentag="3"> <Wochentag>Donnerstag</Wochentag> <Datum>02.01.2003</Datum> </Kalendertag> </Kalender> 4.5.2. CSV und Tab Dateien Aus der Lösung für die Datenbank können Sie leicht eine Lösung für CSV Dateien und mit einigen kleineren Änderungen eine Lösung für Tab Dateien erstellen. 4.5.3. Excel Auf Excel kann man auf der einen Seite über ODBC zugreifen, also genau so wie auf eine Datenbank. Dabei muss man den Datenbereich markieren und diesem einen eindeutigen Namen geben. Über diesen Namen kann dann der ODBC Treiber auf Excel (mit SQL) zugreifen. Beispiele dazu finden Sie in den JDBC Unterlagen. Alternativ kann man mit Apache POI auf MS Office Dokumente zugreifen. Das schauen wir uns genauer an. 4.6. XML Hierarchien aus einfachen Daten Wie wir oben gesehen haben, kann man an Stelle der Tabellenstruktur auch ein hierarchisch strukturiertes Dokument ausgeben, mit einer komplexeren DTD. Auf diese Ausgabe verzichte ich. Interessanter wäre ein allgemeines Ausgabeprogramm, welches eine DTD oder ein XML Schema liest und daraus eine gewünschte Ausgabe konstruiert. Schauen wir uns die Daten genauer an, dann stellen wir fest, dass wir immer dann eine Hierarchiestufe bilden können, falls ein Wert an der selben Stelle in aufeinanderfolgenden Zeilen steht, wobei die Spalten ebenfalls "hierarchisch" geordnet sein müssen: <jahr>2003</jahr><monat>jan</monat><woche>1</woche><datum>1.1.2003</datum> <jahr>2003</jahr><monat>jan</monat><woche>1</woche><datum>2.1.2003</datum> kann zusammengefasst werden: <jahr>2003<monat>jan<woche>1 <datum>1.1.2003</datum> </woche> </monat> </jahr> Kapitel4XMLausDatenGenerieren.doc 7 / 12

4.7. Apache POI Zugriff auf MS Formate und Verbindung mit XML Die Ausgabe von Daten in ein MS Format aus Java ist nicht einfach. Apache startete das POI Projekt, welches verschiedene Teilprojekte (für Excel, Word) umfasst. Teile des POI Projekts sind in Apache Cocoon eingeflossen. Hier beschränken wir uns auf POI. 4.7.1. Excel Daten mit POI HSSF lesen Die Extraktion der Daten geschieht mit dem Programm POIKalender.java try { fs = new POIFSFileSystem(new FileInputStream("Test.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getsheetat(0); //Kalender HSSFRow row; HSSFCell cell; int first = sheet.getfirstrownum(); int last = sheet.getlastrownum(); String jahr, datum, wochentag; Date date; int monat, tag, wochentagnr; short firstcell, lastcell; short s[] = new short[6]; for (int i=0;i<6;i++) s[i]=(short)i; // Header row = sheet.getrow(0); firstcell = row.getfirstcellnum(); lastcell = row.getlastcellnum(); for (short sx=(short)(firstcell); sx<lastcell; sx++) { cell =row.getcell(sx); inhalt=cell.getstringcellvalue(); System.out.print(inhalt+ " "); System.out.println(); // Daten for (short sx=(short)(first+1); sx<=last; sx++) { row = sheet.getrow(sx); firstcell = row.getfirstcellnum(); lastcell = row.getlastcellnum(); cell = row.getcell((short)0); java.util.date datum_1 = (Date)cell.getDateCellValue(); cell = row.getcell((short)1); int jahr_1 = (int)cell.getnumericcellvalue(); cell = row.getcell((short)2); int monat_1 = (int)cell.getnumericcellvalue(); cell = row.getcell((short)3); int tag_1 = (int)cell.getnumericcellvalue(); cell = row.getcell((short)4); int wo_1 = (int)cell.getnumericcellvalue(); cell = row.getcell((short)5); String wtag = cell.getstringcellvalue(); Kapitel4XMLausDatenGenerieren.doc 8 / 12

4.7.2. Word Dokumente mit POI HDF lesen Dieses Projekt ist noch nicht so weit. Teile der entwickelten Software sind in Cocoon eingeflossen. Bei Beiden POI Formaten muss man beachten, dass 1) Microsoft Formate laufend ändert 2) POI sich auf die 97-er Formate eingestellt hat 3) MS angekündigt hat, vermutlich in Zukunft XML als Standard Speicherformat zu verwenden... Was man aber jederzeit kann, ist ein C++/C# Programm schreiben und in Java einbinden. Die Formatierung eines Word Dokuments als XML / XHTML können Sie auch am Beispiel TestWord.xml (generiert mit XML Spy) erkennen. 4.8. Google Interface Wenn Sie einen Schritt weiter gehen wollen, und Web Dokumente analysieren und klassifizieren wollen, bietet das Google Java Interface ein guter Startpunkt. Sie können Abfragen starten und die Antwort recht einfach parsen. Google bietet in absehbarer Zeit (in den USA heute) ein XML Interface und einen News Dienst an, analog zum jetzigen "News Neu " Dienst. Startpunkt: http://www.google.com/apis/ Von dort können Sie das Java Archiv herunterladen. Zudem benötigen Sie einen Google Key. Dieser wird Ihnen per email zugestellt. Der erste Test ist im Readme. Ein passendes Build.xml finden Sie im ZIP. Sie können beispielsweise aus Java heraus Google Abfragen starten: String clientkey = args[0]; String directive = args[1]; String directivearg = args[2]; // Report the arguments received System.out.println("Parameters:"); System.out.println("Client key = " + clientkey); System.out.println("Directive = " + directive); System.out.println("Args = " + directivearg); // Create a Google Search object, set our authorization key GoogleSearch s = new GoogleSearch(); s.setkey(clientkey);...... System.err.println("Usage: java " + GoogleAPIDemo.class.getName() + " <client-key>" + " (search <query> cached <url> spell <phrase>)"); Kapitel4XMLausDatenGenerieren.doc 9 / 12

Das Ergebnis können Sie leicht als XML Ausgeben, da das Ergebnis klar strukturiert ist: compile: [javac] Compiling 1 source file to C:\googleapi\build run: Parameters: Client key = zeig ich nicht Directive = search Args = Google API Google Search Results: ====================== { TM = 0.167939 Q = "Google API" CT = "" TT = "" CATs = { <EMPTY> Start Index = 1 End Index = 10 Estimated Total Results Number = 168000 Document Filtering = true Estimate Correct = false Rs = { [ URL = "http://www.google.com/apis/" Title = "<b>google</b> Web APIs - Home" Snippet = "<b>google</b> Web APIs (beta). Home All About <b>google</b> <b>google</b> Web APIs Overview Download<br> Create Account Getting Help <b>api</b> Terms FAQs Reference Find on this site: <b>...</b> " Directory Category = {SE="", FVN="Top/Computers/Internet/Searching/ Search_Engines/Google/Web_APIs" Directory Title = "<b>google</b> Web APIs" Summary = "Official site. Includes developer's kit, terms and conditions, and FAQ." Cached Size = "12k" Related information present = true Host Name = "" ], [ URL = "http://api.google.com/" Title = "" Snippet = "" Directory Category = {SE="", FVN="" Directory Title = "" Summary = "" Cached Size = "" Related information present = true Host Name = "" ], Soweit das Demo Programm. Da Google seine Dienste auch als Web Services anbietet, werden wir später noch mal darauf zurück kommen. Das Extrahieren der einzelnen Felder ist besonders einfach, weil das Google API entsprechende Methoden zur Verfügung stellt (siehe Beispiel im ZIP). Eine Anwendung wäre der Aufbau einer Verknüpfungstabelle, wie Sie beispielsweise von TouchGraph erstellt wird : Kapitel4XMLausDatenGenerieren.doc 10 / 12

(http://www.touchgraph.com/tggooglebrowser.html). Ein Schritt weiter geht der OIModeller (http://kaon.semanticweb.org/members/motik/oimodeller), bei dem Ontologien verarbeitet und bearbeitet werden. 4.9. Zusammenfassung Die Umwandlung von Daten (und Informationen) in XML Dokumente ist nicht besonders schwierig. Schwierig sind allgemeinere Aufgaben, wie etwa die Formatierung der Ausgabe aufgrund einer DTD oder eines Schemas. Aber dafür gibt es Apache Projekte und Java XML. Kapitel4XMLausDatenGenerieren.doc 11 / 12

4. DATEN IN XML UMWANDELN... 1 4.1. EINLEITUNG... 1 4.2. BESCHREIBUNG DER SYNTAX EINER DATEI... 2 4.3. XML AUS STRUKTURIERTEN DATEN... 3 4.4. DATENSTRUKTUREN... 5 4.5. EINGABE, BEARBEITUNG UND AUSGABE ALS XML DOKUMENT... 5 4.5.1. Datenbank... 5 4.5.2. CSV und Tab Dateien... 7 4.5.3. Excel... 7 4.6. XML HIERARCHIEN AUS EINFACHEN DATEN... 7 4.7. APACHE POI ZUGRIFF AUF MS FORMATE UND VERBINDUNG MIT XML... 8 4.7.1. Excel Daten mit POI HSSF lesen... 8 4.7.2. Word Dokumente mit POI HDF lesen... 9 4.8. GOOGLE INTERFACE... 9 4.9. ZUSAMMENFASSUNG... 11 Kapitel4XMLausDatenGenerieren.doc 12 / 12