Node - TU Dresden

Werbung
;0/-DYD3DUVHUV
Thomas Förster
Hauptseminar Softwaretechnologie
„Neue Java Technologien 2“
11.01.2000
hEHUVLFKW
•
Was ist XML?
1.1
1.2
1.3
1.4
•
Parser
2.1
2.2
2.3
•
•
XML Dokumente
Document Type Definition
Beispiel
Warum Java und XML ?
Document Object Model Parser (DOM)
Simple API for XML Parser (SAX)
Vergleich
Implementierungen
Zusammenfassung
Quellen
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
2
:DVLVW;0/"
• XML - eXtensible Markup Language
• Am 10. 2. 1998 durch die W3C standardisiert
• Untermenge der Standard Generalized Markup
Language (SGML; genormt: ISO 8879:1986)
• 10 Punkte zu Design – Zielen
• Keine statischen Tags wie in HTML; frei
konfigurierbar
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
3
;0/'RNXPHQWH
• XML ist sehr leicht zu lernen
• XML läßt keine Unsitten wie HTML zu
• Attributwerte müssen in Anführungsstrichen stehen
• Ein nichtleeres Element muß ein Start-Tag und Ende-Tag besitzen
• Tags müssen richtig geschachtelt sein
» Well - Formed
• Kopfzeile:
•
•
•
•
<?xml version=‘1.0‘ ?>
Wenn keine DTD benutzt wird: standalone=‘yes‘
Encodingstil festlegen: encoding=‘ Zeichensatzcodierung‘
<DOCTYPE erstesTag SYSTEM ‘dtdname.dtd‘>
• Dann baumartiger Aufbau des Dokumentes
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
4
'RFXPHQW7\SH'HILQLWLRQ
• Vereinbart eine Grammatik für ein XML-Dokument nach
einer EBNF
» Valid
• Kopfzeile:
• <?xml ... ?>
• Elementdeklaration:
• <!ELEMENT Elementname Regel >
• Attributdeklaration:
• <!ATTLIST Ziel-Element Attribut Datentyp Default-Wert>
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
5
1DPHVSDFHV
• XML–Elemente oftmals nicht eindeutig in verschiedenen
Dokumenten; z.B <address>
• Bei Zusammenführung solcher Dokumente Å Kollision
• Ausweg: Namensräume (Namespaces)
• Erweitern den Bereich eines XML – Elementes
• Definition: <xmlns:namespaceID>
• Beispiel:
<Inf:address xmlns:Inf = ‘http://www.inf.tu-dresden.de/~tf12/‘>
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
6
%HLVSLHO$GUHVVEXFK
<?xml encoding="iso-8859-1" ?>
<!ELEMENT addressbook (entry)+ >
<!ELEMENT entry (person, address) >
<!ELEMENT person (title?, firstname, surname, email*, homepage*, link? ) >
<!ATTLIST person id ID #REQUIRED >
<!ATTLIST person gender (male | female) #IMPLIED >
<!ATTLIST person maritalStatus (single | married | widwowed | divorced | unknown) "unknown“ >
<!ELEMENT title (#PCDATA) >
<!ELEMENT firstname (#PCDATA) >
...
<!-- Andeutung leeres Element -->
<!ELEMENT link EMPTY >
<!ATTLIST link
manager IDREF #IMPLIED
subordinates IDREFS #IMPLIED >
<!ELEMENT address (street, housenumber, place, zip) >
...
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
7
:DUXP-DYDXQG;0/"
• Java: läuft auf einer virtuellen Machine;
plattformunabhängig, Sicherheit, viele Services (Datei I/O,
Netzwerk, GUI ... )
• XML: erlaubt es, eigene Markup Languages zu definieren;
einfaches, exakt definiertes, offenes, neutrales Datenformat
Zusammen:
½ Einfaches entwickeln von dynamischen Anwendungen
½ XML erlaubt es, Daten auch in anderen Programmier –
umgebungen nutzbar zu machen
½ „XML shall be straightforwardly usable over the Internet“
Java wird über das Internet benutzt
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
8
3DUVHU
Ein Parser prüft, ob ein Eingabewort bezüglich einer
zugrunde liegenden Grammatik korrekt ist.
Å Syntaxanalyse
• Hier also:
• XML – Dokument ist Eingabewort
• DTD definiert die Grammatik
• Zwei Typen von XML Java Parsers basierend auf:
• Document Object Model (DOM)
• Simple API for XML (SAX)
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
9
'20±3DUVHU
• W3C Document Object Model (Level 1 / Level 2)
• Drei Kernfunktionen:
• Repräsentation des Dokumentes im Speicher
• Stellt neue XML–Elemente zur Verfügung
• Stellt notwendige Funktionen zur Verfügung, um einen aufgebauten
Parse–Baum zu manipulieren
Beispiel:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( new File(argv[0]) );
}
catch (Exception e)
{}
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
10
'20±3DUVHU
Node
addressbook
Node
Node
Node
entry
Node
person
Node
address
Node
Node
Node
firstname
Node
Node
Heinz
11.01.2001
Node
Node
Node
surname
Node
Node
street
• „flaches“ Modell
• Baum von Java
Objekten entsteht
• Jeder Knoten
repräsentiert ein
XML-Element
...
Java XML Parsers - Hauptseminar Softwaretechnologie
11
'20,QWHUIDFHV
• Befinden sich im Package org.w3c.dom
• Basisklasse: Node
• Definiert alle anderen DOM Objekte
» Element, Document, Attr, Comment,
CharacterData ...
• Jeder Node hat eigenen Typ
» z.B: DOCUMENT_NODE, TEXT_NODE, COMMENT_NODE
• Einige Methoden:
•
•
•
•
11.01.2001
public
public
public
public
Node getParentNode();
NodeList getChildNodes();
Node getFirst/getLastChild();
Node getPrevious/getNextSibling();
Java XML Parsers - Hauptseminar Softwaretechnologie
12
'20,QWHUIDFHV
• Document:
• Container und Root–Element der Objekt–Hierarchie
• Methoden zur Instanzierung anderer DOM Objekte
• Einige Methoden:
• public Element getDocumentElement();
• public NodeList getElementsByTagName(String n);
• public Xxx createXxx();
• Element:
• Beinhaltet alle Objekte zwischen einem Start- und Endtag
• Attr:
• Repräsentiert ein einzelnes Attribut eines Elements
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
13
'20/HYHO
• Seit 13. November 2000
• Erweiterungen:
• Einige neue Methoden
• Neues Package org.w3c.dom.traversal
• 3 Klassen zur besseren Navigation im Parse-Tree
» NodeIterator
» TreeWalker
» NodeFilter
» Klasse DocumentTraversal als Erbauer der Klassen
•
z.B: createNodeIterator(Node root, int whatToShow,
NodeFilter filter, boolean entityReferenceExpansion)
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
14
%HLVSLHO
• Import des Adressbuches in eine Anwendung:
• Klassendiagramm und GUI ähnlich zum Telefonbuchbeispiel
Auszug:
private Person getPerson(Element personNode)
{
Person person = new Person();
...
String name = personNode.getElementsByTagName("firstname").item(0).
getFirstChild().getNodeValue();
person.setFirstname(name);
...
}
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
15
6$;3DUVHU
•
•
•
•
•
•
Simple API for XML Parser
Entwicklung durch Mailinglist [email protected]
Aktuelle Version 2.0 (seit 5. Mai 2000)
Andere Herangehensweise: Ereignisbasiertes Parsen
Es wird nicht immer ein Document Model aufgebaut
Während des Parsens, werden verschiedene Ereignisse
gesendet (parse events)
• Vor Ende des Parsens keine Aussage, ob ein XMLDokument valid oder well-formed ist
• SAX Interfaces befinden sich im Package org.xml.sax
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
16
6$;,QWHUIDFHV
• ContentHandler
• Vom Parser genutzt, um grundlegende, dokumentbezogene Events zu
melden (Start, Ende von Elementen, ...)
• EntityResolver
• Wird benutzt, um die default-Methoden für Entities zu überschreiben
• Nützlich bei Nutzung von Datenbanken oder URIs (nicht URLs)
• DTDHandler
• Implementiert, um Informationen über Notationen oder ungeparsten
Entities zu erhalten
• ErrorHandler
• SAXParseException wird in der parse-Methode geworfen
• Informationen über den Fehler (welches Dokument, wo)
• Nützlich, um eigene Warnungen und Fehler zu berichten
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
17
6$;,QWHUIDFHV
XMLReaderFactory
Content
Handler
XML
Reader
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
18
6$;,QWHUIDFHV
• XMLReader:
• Einige Methoden:
• setXxxHandler(XxxHandler handler)
• setEntityResolver(EntityResolver resolver)
• parse(String id)
Beispiel:
try {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(new MyContentHandler());
reader.parse(argv [0]);
}
catch (Exception e) {}
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
19
&RQWHQW+DQGOHU
• Methoden:
• public void startDocument()
• public void endDocument()
• public void startElement (String namespaceURI,
String localName, String qName, Attributes atts)
• public void endElement (String namespaceURI,
String localName, String qName)
• public void characters(char[], int start, int
length)
• außerdem existiert eine Klasse DefaultHandler, die alle
vier Interfaces implementiert
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
20
%HLVSLHO
• Durchsuchen einer XML – Datei nach Eintrag:
• Vorstellbar bei Konfigurationsdateien, Hilfedateien ...
• Hier jedoch nicht besonders sinnvoll
Auszug (ContentHandler):
public void characters(char[] ch, int start, int length) throws
SAXException
{
String s = new String(ch, start, length);
if (searchString.equals(s))
{
found = true;
}
}
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
21
9HUJOHLFK
Document Object Model Simple API for XML
Aufbau eines Objektbaumes des
gesamten XML Dokumentes
Das Parsen läuft neben der
Applikation (ereignisbasiert)
Bei größeren XML Dokumenten zu
schwergewichtig
Im Durchschnitt schneller in
größeren XML Dokumenten
Ein Dokument kann direkt als
Objekt zu manipuliert werden
Werte sind immer nur beim Parsen
verfügbar
Empfehlungen / Unterstützung
durch W3C
Entwicklung im Mailingliste, keine
Verbindung mit W3C
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
22
,PSOHPHQWLHUXQJHQ
• Parserinterfaces im Package javax.xml.parsers
bzw. org.xml.sax
• Einige Erweiterungen, je nach Implementierung
• Xerces
• http://xml.apache.org
• Frei verfügbar, aktuelle Version: 1.2.2
• Auch für C++ und Perl
• Oracle
• Kostenlos nach Registrierung
• Erweiterungen: DTD parsen, print – Methoden, ...
• SUN, IBM, Microsoft, ...
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
23
=XVDPPHQIDVVXQJ
• Zwei Möglichkeiten, um XML Dokumente zu parsen
• Einfache, jedoch evtl. sehr komplexe Handhabung von
XML-Dokumenten mit Java
• Einsatzmöglichkeiten in Gegenwart und Zukunft:
•
•
•
•
Implementation von Programmhilfen
Verteilte Systeme, Dynamische Anwendungen
In Verbindung mit relationalen Datenbanken
Zur Serialisierung von Objekten
• In Zusammenhang mit XSL (eXtensible Stylesheet
Language) kann man XML – Dokumente formatieren
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
24
4XHOOHQ
• St. Laurant, Simon; Cerami Ethan, Building XML
Applications. McGraw Hill, 1999
• Morgenthal, J.P., with La Forge, Bill, Enterprise
Application Integration with XML and Java. Prentice
Hall PTR, 2000
• Eckstein, Robert, XML kurz & gut. O‘Reilly, 2000
• http://java.sun.com/xml
• http://www.mintert.com/xml/trans/REC-xml-19980210de.html (deutsche Übersetzung XML 1.0 Empfehlung)
• http://www.megginson.com/SAX/index.html
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
25
Vielen Dank für Ihre
Aufmerksamkeit !
Fragen ???
11.01.2001
Java XML Parsers - Hauptseminar Softwaretechnologie
26
Herunterladen