2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2,...

23
2002 XML 10.1 XML I (Parsing) 17.1 XML II (XLST,XPATH) (keinPraktikum) 24.1 XML III FOP 31.1 Cocoon2, XSP 7.2 Struts, Turbine, Velocity 14.2 Testat / Evaluation / Prüfung

Transcript of 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2,...

Page 1: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

2002 XML

10.1 XML I (Parsing)17.1 XML II (XLST,XPATH)

(keinPraktikum)

24.1 XML III FOP

31.1 Cocoon2, XSP

7.2 Struts, Turbine, Velocity

14.2 Testat / Evaluation / Prüfung

Page 2: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Wie weiter?

Bis jetzt:

- einfache dynamische Anwendungen mit Servlet und JSP Technologie

Wunsch:

QuellDok verschiedene Ausgabeformate

kein out.println(….)

Trennung Inhalt, Präsentation

Technologie XML

Page 3: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

XMLDaten aus verschiedenen heterogenen

Systemen, z.B. Datenbanken oder Directory Services, müssen ohne Verlust einer einzelnen Dezimalstelle transformiert werden.

XML -> DatenaustauschB2B -> DTD

Verschieden Ausgabeformate müssen unterstützt werden. (HTML,WAP,PDF,…)

Smart Agents -> Strukturierte Dokumente

Page 4: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Was ist XML?

• XML ist die Extensible Markup Language• Eine Metasprache zur Definition anderer

Sprachen.

Plattform und Sprach unabhängig• „Java + XML = Portable Code + Portable Data“

Page 5: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Was ist XML?

XML besitzt keine Grammatik und keine Tag Sets. vollständig Erweiterbar.

Bsp: In HTML <table> ist definiert, <chair>hat keine Bedeutung.

weitere Akronyme:PI Processing Instruction <?xml version="1.0"?>DTD Document Type Definition (def. Gramatik)XSL Extensible Stylesheet Language XPATH XML Path LanguageFO Formating objects

Namespaces Abbildung eines prefix auf eine URI

Page 6: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Grundkonzept I

XML Dokumente müssen wohlgeformt (well-formed) sein.<someTag> bla bla <someTag2>bla bla </someTag2> </someTag>

<singleTag />

Errror !!<td><img src=“wrong.gif“><br></td>

Page 7: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Grundkonzept II

XML Dokumente können gültig (valid) sein.Ein gültiges Dokument erfüllt eine document type

definition (DTD).Oder ein Shema

XML basiert auf dem universellen Unicode. http://www.unicode.org/!! Unicode Editor!! ä &x00e4;

Page 8: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Interpretieren und Parsen

Document Object Model (DOM) Dokument Baum im Speicherhttp://www.w3.org/DOM/

Simple API for XML (SAX)serielles parsen des Dokuments und

abfeuern von Eventshttp://www.saxproject.org/

SAX oder DOM?DOM -> Modifizieren SAX -> einmaliges Parsen

Page 9: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Xerces XML-Parser Implementation

http://xml.apache.org

Page 10: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

BegriffeTags und Attribute

Element Typ Deklaration

Page 11: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Los gehts

1 XML-Dokument für Schach2 DTD erstellen3 Parsen mit SAX4 Parsen mit DOM

Referenzenhttp://www.w3.org/XML/http://www.xml.com/http://www.xml.org/http://xml.apache.org/

Page 12: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

XML Schach<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE SCHACH SYSTEM "dtd/schach.dtd"><SCHACH> <SCHACHBRETT> <WEISS> <KOENIG><POSITION SPALTE="G" REIHE="1" /></KOENIG> <LAUEFER><POSITION SPALTE="D" REIHE="6" /></LAUEFER> <TURM><POSITION SPALTE="E" REIHE="1" /></TURM> <BAUER><POSITION SPALTE="A" REIHE="4" /></BAUER> <BAUER><POSITION SPALTE="B" REIHE="3" /></BAUER> <BAUER><POSITION SPALTE="C" REIHE="2" /></BAUER> <BAUER><POSITION SPALTE="F" REIHE="2" /></BAUER> <BAUER><POSITION SPALTE="G" REIHE="2" /></BAUER> <BAUER><POSITION SPALTE="H" REIHE="5" /></BAUER> </WEISS> <SCHWARZ> <KOENIG><POSITION SPALTE="B" REIHE="6" /></KOENIG> <DAME><POSITION SPALTE="A" REIHE="7" /></DAME> <BAUER><POSITION SPALTE="D" REIHE="4" /></BAUER> </SCHWARZ> </SCHACHBRETT></SCHACH>

Page 13: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Schach DTD<!ELEMENT SCHACH (SCHACHBRETT*)><!ELEMENT SCHACHBRETT (WEISS, SCHWARZ)><!ENTITY % figur "KOENIG, DAME?, LAUEFER?, LAUEFER?, TURM?, TURM?, PFERD?, PFERD?, BAUER?, BAUER?, BAUER?, BAUER?, BAUER?, BAUER?, BAUER?, BAUER?"><!ELEMENT WEISS (%figur;)><!ELEMENT SCHWARZ (%figur;)><!ELEMENT POSITION EMPTY><!ATTLIST POSITION SPALTE (A|B|C|D|E|F|G|H) #REQUIRED REIHE (1|2|3|4|5|6|7|8) #REQUIRED>

<!ELEMENT KOENIG (POSITION)><!ELEMENT DAME (POSITION)><!ELEMENT LAUEFER (POSITION)><!ELEMENT TURM (POSITION)><!ELEMENT PFERD (POSITION)><!ELEMENT BAUER (POSITION)>

Page 14: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

SAX Parser I

import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;import java.io.*;

public class SchachSAXPrinter {

static private SAXParser parser;private PrintStream out;

//Konstruktorpublic SchachSAXPrinter(boolean validating) throws Exception{ }

public void print(String fileName) throws SAXException, IOException {

SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true);

Page 15: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

SAX Parser II

try { DefaultHandler handler = new MyHandler(); parser = factory.newSAXParser(); parser.parse(fileName, handler); } catch (SAXException se) {System.out.println(se); // handle error } catch (IOException ioe) {System.out.println(ioe);// handle error } catch (ParserConfigurationException pce) {System.out.println(pce);// handle error } return; } public static void main(String[] args) throws Exception{

boolean validating = true; SchachSAXPrinter saxPrinter = new SchachSAXPrinter(true); long time = System.currentTimeMillis(); saxPrinter.print("file:spiel1.xml"); System.err.print((((double) (System.currentTimeMillis() - time)) / 1000 ) + "\t"); }}

Page 16: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Handler Iimport org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class MyHandler extends DefaultHandler { private boolean whitePiece = false; protected int fIndent;

public void startElement(String namespaceURI, String localName, String name, Attributes attrs)throws SAXException { if (name.equals("WEISS")) { whitePiece = true; } else if (name.equals("SCHWARZ")) { whitePiece = false; } else if (name.equals("KOENIG") || name.equals("DAME") || name.equals("LAUEFER") || name.equals("TURM") || name.equals("PFERD") || name.equals("BAUER")) { System.out.print((whitePiece ? "weiss" : "schwarz") + " "+ name.toLowerCase() + ": ");

Page 17: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Handler II} else if (name.equals("POSITION")) { if (attrs != null) { System.out.print(attrs.getValue("SPALTE")); System.out.println(attrs.getValue("REIHE")); } } return; }

public void error(SAXParseException exception) throws SAXException { System.out.println("**Parsing Error**\n" + " Line: " + exception.getLineNumber() + "\n" + " URI: " + exception.getSystemId() + "\n" + " Message: " + exception.getMessage()); //throw new SAXException("Error encountered"); }}

Page 18: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Weitere Eventspackage schach;import org.xml.sax.*;import org.xml.sax.helpers.*;class MyContentHandler implements ContentHandler {

private Locator locator; private boolean whitePiece = false;

public void setDocumentLocator(Locator locator) { System.out.println(" * setDocumentLocator() called"); // We save this for later use if desired. this.locator = locator; }

public void startDocument() throws SAXException { System.out.println("Parsing begins..."); }

public void endDocument() throws SAXException { System.out.println("...Parsing ends."); }

public void processingInstruction(String target, String data) throws SAXException {

System.out.println("PI: Target:" + target + " and Data:" + data); }

public void startPrefixMapping(String prefix, String uri) { System.out.println("Mapping starts for prefix " + prefix + " mapped to URI " + uri); }

Page 19: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Page 20: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

DOM Parser I

import org.w3c.dom.*;import org.xml.sax.*;import javax.xml.parsers.*;import java.io.*;public class SchachDOMPrinter {static private DocumentBuilder builder;

public SchachDOMPrinter() throws Exception{ }

public void print(String fileName) throws SAXException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); try { builder = factory.newDocumentBuilder(); builder.setErrorHandler(new MyErrorHandler()); Document document = builder.parse(fileName);

Page 21: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

DOM Parser IINodeList nodes_i = document.getDocumentElement().getChildNodes(); for (int i = 0; i < nodes_i.getLength(); i++) { Node node_i = nodes_i.item(i); if (node_i.getNodeType() == Node.ELEMENT_NODE && ((Element) node_i).getTagName().equals("SCHACHBRETT")) { Element chessboard = (Element) node_i; NodeList nodes_j = chessboard.getChildNodes(); for (int j = 0; j < nodes_j.getLength(); j++) { Node node_j = nodes_j.item(j); if (node_j.getNodeType() == Node.ELEMENT_NODE) { Element pieces = (Element) node_j; NodeList nodes_k = pieces.getChildNodes(); for (int k = 0; k < nodes_k.getLength(); k++) { Node node_k = nodes_k.item(k); if (node_k.getNodeType() == Node.ELEMENT_NODE) { Element piece = (Element) node_k; Element position = (Element) piece.getChildNodes().item(0); System.out.println((pieces.getTagName().equals("WEISS")? "weiss " : "schwarz ") + piece.getTagName().toLowerCase() + ": " + position.getAttribute("SPALTE") + position.getAttribute("REIHE")); } } } } } }

<SCHACH> <SCHACHBRETT> <WEISS> … <BAUER> <POSITION SPALTE="C" REIHE="2" /> </BAUER> … </WEISS> <SCHWARZ> … <KOENIG> <POSITION SPALTE="B" REIHE="6" /> </KOENIG> … </SCHWARZ> </SCHACHBRETT></SCHACH>

Page 22: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

DOM Parser III

} catch (SAXException se) {System.out.println(se); // handle error } catch (IOException ioe) {System.out.println(ioe);// handle error } catch (ParserConfigurationException pce) {System.out.println(pce);// handle

error } return; } public static void main(String[] args) throws Exception{

boolean validating = true; SchachDOMPrinter DOMPrinter = new SchachDOMPrinter(); long time = System.currentTimeMillis(); DOMPrinter.print("file:spiel1.xml"); System.err.print((((double) (System.currentTimeMillis() - time)) / 1000 ) + "\t");

}}

Page 23: 2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.

Legi XML

Praktikum

1. XML Dokument

2. DTD

3. SAX Parser

4. DOM Parser

<?xml version="1.0"?>

<Legi>

<Nachname>Beising</Nachname>

<Vorname>Edith </Vorname>

<Geburtstag>28.11.70</Geburtstag>

<Wohnort>Weil</Wohnort>

<von>Deutschland</von>

<Fakultaet>Phil. II</Fakultaet>

<Matr.Nr.>97-061-634</Matr.Nr.>

<gueltig>W.S. 2001/02</gueltig>

<Photo image="edith.jpg" />

</Legi>