BNC/XML 7 BNC/XML XML BNC XSLT
extensible Markup Language I XML erlaubt es, strukturierte Daten in Textdateien zu speichern. Zum Schreiben und Lesen von XML-Dateien genügen einfache Text-Editoren wie Emacs und vi. Generische XML-Parser erkennen die Struktur von allen in XML formatierten Daten. http://w3schools.com/xml
extensible Markup Language II Beispiel <? xml version =" 1.0 " encoding ="UTF -8"?> < people > <person > <name >Luke Skywalker </ name > < homeworld > Tatooine </ homeworld > </ person > <person > <name >Han Solo </ name > < homeworld > Corellia </ homeworld > </ person > </ people >
extensible Markup Language III Beispiele (Attribute, Leere Elemente) <person > <name >Han Solo </ name > < homeworld > Corellia </ homeworld > <height unit =" meters ">1.8 </ height > </ person > <person > <name >Luke Skywalker </ name > <jedi /> </ person >
Zeichenvorrat I An sich können sowohl in den Attributen als auch zwischen Tags beliebige Zeichen aus UTF-8 verwendet werden. Aber: Entities & & < < (less than) > > (greater than) ' (apostrophe, single-quote) " (quotation mark, double-quote) Beispiel <text >7 > 5</ text >
Zeichenvorrat II CDATA-Deklaration Innerhalb von XML-Tags kann die CDATA-Deklaration verwendet werden, um anzuzeigen, dass Character-Daten verwendet werden. Dann müssen keine XML-Entities benutzt werden Beispiel <text ><![ CDATA [7 > 5]] ></ text >
Leere Tags Beispiele (Verschiedene Arten, leere Elemente zu notieren) <jedi ></ jedi > <jedi /> <jedi /> Beispiel (Auch leere Tags können Attribute enthalten) <jedi dark ="no" />
Kommentare Beispiel <person > <name >Han Solo </ name > < homeworld > Corellia </ homeworld > <! -- dies ist ein kommentar -- > </ person >
XML-Parser SAX SAX-Parser sind relativ effizient. Dabei definiert man vorher, welche Funktion aufgerufen werden soll, wenn ein bestimmtes Element gefunden wird. Die Funktion sieht dann nur genau dieses Element und nicht den Kontext. Es ist sehr aufwändig, mit SAX-Parsern auf die Baumstruktur zuzugreifen oder sich darin zu bewegen. http://www.saxproject.org DOM DOM dagegen liest erstmal das gesamte XML-Dokument ein und baut eine Baumstruktur im Speicher auf. Die einzelnen Knoten des Baumes sind dann Objekte in einer objektorientierten Programmiersprache. Mit Methoden kann dann z.b. auf die Kind-Knoten eines Knotens zugegriffen werden. http://www.w3.org/dom/
XML und HTML Historisch gesehen kommt XML nach HTML, ist aber allgemeiner und einfacher. HTML wird benutzt, um Webseiten darzustellen. Dafür gibt es XML-tags, die die Texteigenschaften beschreiben, z.b. kursiv oder fett. Beispiel <b> Fetter Text. </b> Das ist ein <a href =" http: // www. google.de"> Link </a> http://de.selfhtml.org
British National Corpus Der British National Corpus ist eine Sammlung geschriebener und gesprochener Sprache. Insgesamt enthält er rund 100 Millionen Wörter. http://www.cl.uni-heidelberg.de/resources/bnc/
Verzeichnisstruktur Doc Dokumentation als HTML-Seiten Frequency Frequenzen aus dem BNC Texts Die Texte XML Einige XSLT-Scripte um Informationen aus dem BNC zu extrahieren
BNC XML Grundstruktur < bncdoc xml:id =" A00 "> <! -- Meta - Informationen gemäß der Text Encoding Initiative ( TEI ) -- > < teiheader >... </ teiheader > <! -- Written Texts --> <wtext >... </ wtext > </ bncdoc >
demo
XPath I Wie bereits festgestellt, sind XML-Strukturen baumartige Strukturen. XPath wird benutzt, um Pfade durch den Baum zu beschreiben. Die Notation ist den Pfaden auf der Unix-Kommandozeile nicht unähnlich. So wie ein Pfad in Unix eine bestimmte Datei oder ein Verzeichnis beschreibt, beschreibt ein XPath einen Knoten in der XML-Datei. XPath-theoretisch ist praktisch jede Enität in XML ein Knoten: Elemente, Attribute, Text, Kommentare,... http://www.w3schools.com/xpath/
XPath II Beispiel < people > < person > <name >Luke Skywalker </ name > </ person > < person > <name >Han Solo </ name > </ person > </ people > /people /people/person /people/person[1] people person (Wählt mehr als ein Element aus!) person (wählt das erste person unter people)
XPath III Syntax knotenname Wählt alle Kinder des Knotens / Pfad beginnt am Root-Knoten // Wählt Knoten im Dokument unabhängig davon wie tief sie eingebettet sind.. Wählt des aktuellen Knoten.. Wählt den Eltern-Knoten des aktuellen Knotens @ Wählt Attribute
XPath IV Beispiele people Wählt alle Kind-Knoten des people- Elements /people Wählt das root-element people people/person Wählt alle person-elemente, die Kind von einem people-element sind //person Wählt alle person-elemente, egal wo sie im Dokument stehen //@unit Wählt alle Attribute, die unit heißen /people/person[last()] Wählt das letzte person-element unter people //height[@unit= meters ] Wählt alle height-elemente, die ein Attribut unit haben, das auf meters gesetzt ist
XSLT I Extensible Stylesheet Language Transformations ist eine XML-basierte Sprache, die benutzt wird, um XML-Daten in andere XML-Daten oder reinen Text zu konvertieren. Mittels XPath definiert man, was wie einzelne Knoten ausgegeben werden sollen. http://www.w3schools.com/xsl/
XSLT II Beispiel ($ homeworld.xslt) <? xml version =" 1.0 " encoding ="UTF -8"?> < xsl:stylesheet version =" 1.0 " xmlns:xsl =" http: // www.w3.org /1999/ XSL / Transform "> < xsl:output method =" text " /> < xsl:template match ="/"> <xsl:for - each select =" people / person "> <xsl:value -of select =" homeworld " /> </ xsl:for - each > </ xsl:template > </ xsl: stylesheet >
xsltproc Das Programm, das die XSLT-Skripte ausführt und auf eine XML-Datei anwendet, heißt xsltproc. Beispiel ($ xsltproc homeworld.xslt starwars.xml) TatooineCorellia
demo
Übung 7