Einführung in Perl. WWW, Teil 2: XML



Ähnliche Dokumente
X-Technologien. XML and Friends. Jörn Clausen 9. Juli 2001

Ruhr.pm XML-Daten verarbeiten mit XML::LibXML Autor: Datum:

XML Extensible Markup Language

XML Extensible Markup Language

Verarbeitung von XML-Dateien. Jörn Clausen

Java: Kapitel 9. Java und XML. Programmentwicklung WS 2008/2009. Holger Röder

, Rainer Schmidberger, ISTE. XML und Java. Rainer Schmidberger

XML-Frameworks in verschiedenen Programmiersprachen Proseminar Textkodierung und Auszeichnung

XML Extensible Markup Language

Vortrag im Rahmen des IFC-Seminars am Performance Messungen mit XML bei der empolis GmbH

XML Extensible Markup Language

XML und SOAP Einführung und Grundlagen

1 Software Engineering 1

XML Extensible Markup Language

XML Extensible Markup Language

XML Extensible Markup Language

Datenbanksysteme. XML und Datenbanken. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen

Java und XML 2. Java und XML

2.4 Analyse von XML-Dokumenten

... MathML XHTML RDF

XML Grundlagen. Andreas Rottmann,Sebastian Riedl. 27. August Quit Full Screen Previous Page Next Page GoTo Page Go Forward Go Back

XML Extensible Markup Language

CARL HANSER VERLAG. Dirk Ammelburger XML. Grundlagen der Sprache und Anwendungen in der Praxis

Datenaustauschformate. Datenaustauschformate - FLV

XML-Programmierschnittstellen: SAX, DOM

X-Technologien. Ein Überblick. Ulrike Henny. IDE Summer School 2013, Chemnitz

Verarbeitung von XML mit SAX und DOM

XML-Verarbeitung. XPath XSL die extensible Stylesheet Language. Torsten Schaßan SCRIPTO Modul 4: EDV Wolfenbüttel

Ferhat Ayaz. XML mit C++

Web (Site) Engineering (WebSE)

XML-Praxis. XML-Anwendungen. Jörn Clausen

XML Schema vs. Relax NG

XML 1. Einführung, oxygen. Ulrike Henny. IDE Summer School 2013, Chemnitz

Python-Praxis XML & XML-Prozessierung

Predictive Modeling Markup Language. Thomas Morandell

Dirk Ammelburger XML. Grundlagen der Sprache und Anwendungen in der Praxis HANSER

Seminar: XML und Datenbanken

Grundzüge und Vorteile von XML-Datenbanken am Beispiel der Oracle XML DB

XINDICE. The Apache XML Project Name: J acqueline Langhorst blackyuriko@hotmail.de

XML-Praxis. XPath. Jörn Clausen

Programmierkurs Python I

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

5 XML und Analyse von XML-Dokumenten

Übersicht. Web (Site) Engineering (WebSE) XML-Beispieldokument. Simple API for XML (SAX) [Pro] XML-Beispiel. Vorlesung 6: Tools und Programmierung

Datenbanksysteme. XML und Datenbanken. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen

XML. Einführung, XML-Grundlagen und -Konzepte. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

XML. Einführung, XML-Grundlagen und -Konzepte. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

XSLT XSL Transformations

XML-Praxis. XPath. Jörn Clausen.

XML Verarbeitung mit einer in Haskell eingebetteten DSL. Manuel Ohlendorf (xi2079)

Buchstabensuppe. Standards für die Präsentation von XML-Instanzen

Softwareentwicklung mit Komponenten

Aufgaben zu XPath und XQuery

XML. Arthur Zaczek. Nov /25

JavaScript in Drupal

XML-basierte Standards für den Datenaustausch in der Logistikkette

XML - Extensible Markup Language. Agenda - Oracle XML DB

XSL und XSLT. Inhalt. Mathias Heilig XSL Übersicht. Formatierungsprozess. Sprachbeschreibung. Vorführung Resümee

XML-Praxis. XML-Grammatiken. Jörn Clausen

XML-Praxis. XPath. Jörn Clausen

Seminar: XML und intelligente Systeme

2. Einführung in Datenbanken und XML

XML Informationsmodelle

Algorithmen und Datenstrukturen II

Web-Programmierung (WPR)

Dokumenten- und Content Management

Klaus Schild, XML Clearinghouse Transformation von XML-Dokumenten

Programmieren II SAX. Beispiel-Schema kontakt.xsd SAX DOM. Dr. Klaus Höppner JAXB. Hochschule Darmstadt SS 2008

XML Grundlagen Teil I

XML. Arthur Zaczek. Nov 2015

Programmieren II. Annotationen (1/3) Vorlesung 6. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Annotationen XML JAXB

Programmieren II. Annotationen (1/3) Vorlesung 6. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Annotationen XML JAXB

XSLT XSL Transformations

Institut für Dokumentologie und Editorik. XML-Datenbanken und XQuery

Übungsaufgaben zu XML:

Tobias Hauser. XML-Standards. schnell+kompakt

Klaus Schild, XML Clearinghouse Namensräume

Multimedia Technologie II

inews: XML in der Praxis Konvertierung von Objekten nach XML und zurück Dr. St. Seefeld / INGTES AG

XML-Namensräume. Marc Monecke

6. XML-Verarbeitung. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. XML Design Goals

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Programmieren II. Einführung in XML. Vorlesung 13. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2010 XML JAXP SAX DOM


XML-Technologien. XML-Parser. Florian Raith Hochschule München Fakultät für Informatik und Mathematik am 04. November 2010

AK Medientechnologien 05 Delegation

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Kurzanleitung zu XML2DB

Das Objektmodell von InDesign

RDF und RDF Schema. Einführung in die Problematik Von HTML über XML zu RDF

Enterprise Applikation Integration und Service-orientierte Architekturen. 09 Simple Object Access Protocol (SOAP)

P A X P A X. Power API for XML. DOM und SAX. PAX : Ideen und Konzepte. Wie PAX funktioniert. Wie PAX angewandt wird. WWW-Links. von Manfred Duchrow

Online-Publishing mit HTML und CSS für Einsteigerinnen

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Containerformat Spezifikation

Transkript:

Einführung in Perl WWW, Teil 2: XML Jörn Clausen Georg Fuellen

Übersicht XML: extensible Markup Language XML parsen: XML::Parser SAX: Simple API for XML DOM: Document Object Model XPath XML erzeugen

die Ursprünge von XML HTML Markupsprache für das WWW Mischung aus Struktur- und Layout-Information proprietäre Erweiterungen, Mißbrauch von tags Informationen in HTML-Seiten verschüttet Lösung: Markup den Anforderungen anpassen Standard Generalized Markup Language (SGML) zu kompliziert XML: 1996/97 entwickelt, 1998 erste Recommendation des W3C inzwischen: zahlreiche Standards im XML-Umfeld

XML extensible Markup Language ist... keine Markupsprache nicht HTML++, sondern SGML kein Allheilmittel, trotz des Hypes ist aber auch... einfach zu erlernen weithin akzeptiert durch viele Implementierungen etabliert

ein Beispiel <?xml version="1.0"?> <library> <book edition="3rd" year="2000"> <title>programming Perl</title> <author>larry Wall</author> <author>tom Christiansen</author> <author>jon Orwant</author> </book> <book year="1998"> <title>advanced Perl Programming</title> <author>sriram Srinivasan</author> </book> </library>

Aufbau von XML: Elemente öffnendes und schließendes tag: <item>xml is not a...</item> keine Minimierungsregeln leeres Inhaltsmodell: <hr/> statt <hr></hr> statt <hr> Schachtelung muß passen : well-formed

Aufbau von XML: Attribute Zusatzinformationen zu Elementen <book year="2000">... </book> Attribute im öffnenden tag Design-Frage: Wann Element, wann Attribut? <date y="2001" m="7" d="9"/> vs. <date><y>2001</y><m>7</m><d>9</d></date>

Aufbau von XML: Entitäten Makros und Sonderzeichen in XML vordefiniert: & < > &apos; " weitere müssen definiert werden XML verwendet Unicode

Verwendung von XML Texte/Daten können ad-hoc kodiert werden stand-alone Dokument formale Grammatik: Document Type Definition (DTD) weitere Grammatik-Sprachen: XML-Schema, RELAX NG,... Dokument validiert

Verarbeitung von XML zwei Verfahren: event-basiert Baumstruktur Speicherplatz vs. freier Zugriff Geschwindigkeit vs. startup-zeit stream-fähigkeit

XML::Parser verwendet expat ist Grundlage für fast alle weiteren XML-Module handler für events, u.a.: Init, Final Start, End Char,... handler ist Subroutine, erhält geeignete Parameter

XML::Parser, cont. use XML::Parser; my $parser = XML::Parser->new( Handlers => { Start => \&start_h, End => \&end_h, Char => \&char_h }); $parser->parsefile( library.xml ); sub start_h { my ($parser, $elem, @attr) = @_; print "found $elem\n"; for (; $key=shift(@attr), $val=shift(@attr); ) { print " $key --> $val\n"; } }

SAX The Simple API for XML Java-API events: start_document, end_document, start_element, end_element, characters,... Trennung in Parser-Modul und Handler-Modul verschiedene SAX-Parser: XML::Parser::PerlSAX XML::SAX::Expat, XML::LibXML::SAX::Parser,... Parser-Factory Basis-Klasse für Handler: XML::SAX::Base

SAX, cont. handler-klasse kann von XML::SAX::Base erben package MyHandler; use XML::SAX::Base; @ISA = ( XML::SAX::Base ); sub start_element { my ($self, $data) = @_; my $element = $data->{name}; my $attref = $data->{attributes};... } vorgefertigte Module, z.b. XML::Handler::XMLWriter

SAX, cont. Verwaltung von SAX-Parsern durch XML::SAX XML::SAX::parsers liefert Liste von installierten Modulen Auswahl eines Parsers: my $handler = MyHandler->new; my $factory = XML::SAX::ParserFactory->new; my $sax = $factory->parser(handler => $handler); $sax->parse_uri($file); Anforderungen an Parser: $factory->require_feature(...) fallback: XML::SAX::PurePerl

DOM Document Object Model Repräsentation des XML-Dokuments als Baum Knoten des Baums: Elemente, Attribute, Text,... Funktionen zur Navigation im Baum: getnodetype, getnodename getparentnode, getchildnodes, getfirstchild, getnextsibling, getattributes, getelementsbytagname appendchild, removechild gettagname, {get,set}attributenode höherer Speicherverbrauch

das Beispiel als Baum book library ATTRIBUTE title author author book ATTRIBUTE... TEXT TEXT TEXT

XML::DOM verwendet XML::Parser Knoten: XML::DOM::Node Unterklassen: XML::DOM::Element, XML::DOM::Text weitere Klassen: XML::DOM::Comment, XML::DOM::Entity, XML::DOM::NodeList,...

XML::DOM, cont. use XML::DOM; my $parser = XML::DOM::Parser->new; my $root = $parser->parsefile( intro.xml ); walktree($root); print $root->tostring; sub walktree { my ($node) = @_; $node->settagname( strong ) if $node->getnodename eq blink ; walktree($_) foreach $node->getchildnodes; }

XML::DOM, cont. Zugriff auf einzelne Elemente kompliziert: foreach $book ($root->getelementsbytagname( book )) { my $title = $book->getelementsbytagname( title ) ->item(0)->getfirstchild->getdata; my $attrs = $book->getattributes; my $year = $attrs->getnameditem( year )->getvalue; my $ed = $attrs->getnameditem( edition )->getvalue if $attrs->getnameditem( edition );... } mixed content schwierig

XPath Anfrage-Sprache beschreibt Pfade im XML-Dokument andere Baumstruktur als DOM Syntax an (Unix-)Dateisystem angelehnt einfacher Zugriff auf Inhalte von Elementen und Attribute Achsen: child, parent, sibling, attribute,... Bedingungen

XPath, cont. Beispiele: author alle author-kinder des aktuellen Knotens book/title title-element unterhalb von book /library library-element unterhalb der Wurzel //title alle title-elemente im Dokument book/@year year-attribut //book[@year= 2000 ] alle Bücher aus dem Jahr 2000 //author[position()=1] erste author-elemente //book[@year= 2000 ]/title Titel aller Bücher aus 2000

XML::XPath use XML::XPath; my $root = XML::XPath->new(filename => library.xml ); my $books = $root->find( /library/book[@year=2000] ); foreach $book ($books->get_nodelist) { my $title = $book->findvalue( title ); my $authors = $book->find( author ); my $author = join(", ", map {$_->findvalue(. )} $authors->get_nodelist); my $year = $book->findvalue( @year ); my $edition = $book->findvalue( @edition );... }

XML mit Perl erzeugen erneut: print, here-documents Schwierigkeit: keine vorgegebenen Tags, Attribute, Entitäten zwei Module: XML::Writer, XML::Generator bisher kein Äquivalent zu HTML::Element->new_from_lol Serialisierung von Datenstrukturen

XML::Writer use XML::Writer; my $writer = XML::Writer->new( DATA_MODE => 1, DATA_INDENT => 2); $writer->xmldecl; $writer->starttag( library ); $writer->starttag( book, year => 2000, edition => "3"); $writer->dataelement( title, "Programming Perl"); $writer->dataelement( author, "Larry Wall"); $writer->dataelement( author, "Tom Christiansen"); $writer->dataelement( author, "Jon Orwant"); $writer->endtag( book ); $writer->endtag( library ); $writer->end;

XML::Generator use XML::Generator; my $xml = XML::Generator->new( pretty => 2, conformance => strict ); print $xml->library( $xml->book({edition => 3, year => 2000}, $xml->title( Programming Perl ), $xml->author( Larry Wall ), $xml->author( Tom Christiansen ), $xml->author( Jon Orwant )), $xml->book({year => 1998}, $xml->title( Advanced Perl Programming ), $xml->author( Sriram Srinivasan )));

XML::Dumper use XML::Dumper; %bands = (beatles => { members => [ John, Paul, George, Ringo ], albums => [ Help, Revolver ]}, thewho => { members => [ Roger, Pete, John, Keith ], albums => [ Quadrophenia ] }); my $dumper = XML::Dumper->new; print $dumper->pl2xml(\%bands);

XML::Dumper, cont. <perldata> <hash> <item key="beatles"> <hash> <item key="albums"> <array> <item key="0">help</item> <item key="1">revolver</item> </array> </item> <item key="members"> <array> <item key="0">john</item> <item key="1">paul</item> <item key="2">george</item> <item key="3">ringo</item> </array> </item> </hash> </item>... </perldata>