Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML

Ähnliche Präsentationen


Präsentation zum Thema: "Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML"—  Präsentation transkript:

1 Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML
Character Data DTD vs. Schemata XSL vs. CSS Prof. Dr. Manfred Sommer Fachbereich Mathematik und Informatik Universität Marburg

2 XML Struktur / Structure Format / Layout Ein Dokument Inhalt / Content

3 W3C: XML Aussagen des W3C zu XML: XML in 10 points.htm
Die aktuelle XML-Definition des W3C: XML-Dokus\Extensible Markup Language (XML) 1_0 (Second Edition) Review Version.htm

4 Ist XML einfach ? HTML ist eine Anwendung von SGML.
XML ist (war mal ?) eine Teilmenge von SGML (ISO 8879). Die Definition von SGML umfasst angeblich ca. 500 Seiten. "Die Definition von XML passt auf ca. 33 Seiten." Diese Aussage war vielleicht mal richtig, insgesamt gibt es mittlerweile sehr viel mehr Seiten über XML und angrenzende Themen. An XML und den angrenzenden Themen arbeiten seit Jahren Komitees mit Mitgliedern von SUN, Microsoft, IBM und anderen Firmen. Folge: XML wird immer umfangreicher und unübersichtlicher.

5 XML ist eine Baum-Sprache
<?xml version="1.0"?> <ausdruecke> <Plus> <Operand class="var" name="b" type="int"/> <Mult> <Operand class="const" val="7" type="int"/> <Operand class="var" name="c" type="int"/> <Operand class="var" name="d" type="int"/> <Operand class="var" name="e" type="int"/> </Mult> </Plus> <Operand class="const" val="8" type="int"/> </ausdruecke> B + 7 * (C + D * E + 8 ) + * 8 B C 7 D E

6 [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
Text Text besteht aus Zeichen und eingestreuten Markierungen („Mark-Ups“). Diese bestehen aus: <Start-Tag> ... <End-Tag/> oder </Leeres-Element Tag> „Entity references“ „character references“ Kommentaren CDATA Abschnitten DTDs (Document Type Declarations) PIs (Processing Instructions) Text, der kein Markup ist, sind „die Zeichen des Dokumentes“ = Character Data = CharData (im Gegensatz zu CDATA) Außerdem gibt es noch PCDATA %pub; & { [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

7 <![CDATA[<greeting>Hello, world!</greeting>]]>
CDATA / PCDATA Die Zeichen & < und müssen bis auf wenige Ausnahmen immer zitiert werden: "&" und "<“. Natürlich sollten auch >, ], ‘ und “ zitiert werden. Man kann auch Datenabschnitte definieren, in denen die üblichen Ersetzungsregeln nicht gelten: <![CDATA[<greeting>Hello, world!</greeting>]]> In dem Beispiel wird <greeting> nicht als Tag behandelt. Der einzige Text, der in einem CDATA-Abschnitt ausgewertet wird, ist ]]>. Im Gegensatz zu dem Text in einem CDATA-Abschnitt wird ausgewerteter Text als PCDATA „Parsed“ CDATA bezeichnet.

8 Entitäten (1) Entity steht für diverse Ersetzungsmechanismen.
Gemeinsam ist allen Entities, daß es für sie einen Namen gibt und daß sie einen Inhalt haben. Die meisten Entities müssen in einer Deklaration einen Namen zugewiesen bekommen, bevor auf sie in einem Dokument verwiesen werden kann. Wenn ein Entity deklariert wurde, kann der Entity-Name als ein Kürzel verwendet werden, und der Parser wird dafür sorgen, daß an die Stelle des Entity der Ersetzungstext gesetzt wird. Vordefinierte Entities: Warum doppelt? < steht für < > steht für > & steht für & &apos; steht für ' " steht für " <!ENTITY lt "&#60;"> <!ENTITY gt ">"> <!ENTITY amp "&#38;"> <!ENTITY apos "'"> <!ENTITY quot """>

9 Entitäten (2) Im einfachsten Fall kann man mit einer Entitiy-Deklaration selbst eine Abkürzung definieren: <!ENTITY pu "Philipps Universitaet Marburg"> <!ENTITY fb "Fachbereich Mathematik und Informatik" > <!ENTITY dk "Der Dekan des &fb; der &pu;" > .... <zzz> &pu; </zzz> <zzz> &fb; </zzz> <zzz> &dk; </zzz> <zzz>Philipps Universitaet Marburg</zzz> <zzz>Fachbereich Mathematik und Informatik</zzz> <zzz>Der Dekan des Fachbereich Mathematik und Informatik der Philipps Universitaet Marburg</zzz>

10 Entitäten (3) Soll sich der Substitutionsmechanismus nur auf den DTD-Teil und auf den Erstellungszeitpunkt der DTD beziehen, verwendet man „Parameter Entities“. <!ENTITY % pub "Éditions Gallimard" > <!ENTITY rights "All rights reserved" > <!ENTITY book "La Peste: Albert Camus, © 1947 %pub;. &rights;" > = <!ENTITY book2 "La Peste: Albert Camus, © 1947 Éditions Gallimard. &right;" > Für Entities gibt es drei Einteilungskriterien: Interne und externe Entities. Parsed und unparsed Entities. Normale und Parameter-Entities Alles ganz einfach ???

11 DTD: allgemein Der Typ eines Dokumentes wird in einer DTD beschrieben.
Diese definiert die Struktur eines Dokumentes und sollte alle verwendeten Markups beschreiben. Dies ist jedoch keine Pflicht! (Warum eigentlich nicht?) Eine DTD kann intern sein oder extern. Beides ist auch möglich. Man spricht dann von einer internen und einer externen Teilmenge der DTD. Beispiel für eine externe DTD: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gruss SYSTEM "hello.dtd"> <gruss> Hallo XML! </gruss> Auf SYSTEM folgt eine URI. Alternativ kann das Schlüsselwort PUBLIC verwendet werden. Das verweist auf eine „öffentliche“ URI. Als Beispiel sind Standards anzusehen.

12 DTD: Inhalt In einer DTD werden definiert: Elemente Attribute
Entitäten Notationen ...

13 DTD: Beispiel <?xml version="1.0" standalone="no"?>
<!DOCTYPE AdrListe [ <!ELEMENT AdrListe (Adr)*> <!ELEMENT Adr (Vorname?, Nachname, (Strasse|Postfach), PLZ, Ort)> <!ELEMENT Vorname (#PCDATA)> <!ELEMENT Nachname (#PCDATA)> <!ELEMENT Strasse (#PCDATA)> <!ELEMENT Postfach (#PCDATA)> <!ELEMENT PLZ (#PCDATA)> <!ELEMENT Ort (#PCDATA)> ]> .... ... <AdrListe> <Adr> <Nachname> Sommer </Nachname> <Postfach> </Postfach> <PLZ> </PLZ> <Ort> Marburg </Ort> </Adr> <Vorname> Manfred </Vorname> <Nachname> Winter </Nachname> </AdrListe>

14 DTD: Diskussion (1) In einer DTD können die Elemente und Attribute beschrieben werden. Die zur Verfügung stehenden Datentypen sind sehr beschränkt: Der Inhalt von Elementen kann sein: Der Inhalt kann leer (EMPTY) oder beliebig (ANY) sein. Der Inhalt kann ausschließlich aus noch zu parsenden Character Daten (#PCDATA) bestehen. Der Inhalt kann ausschließlich aus Elementen bestehen. Der Inhalt kann sowohl aus Daten als auch aus Elementen bestehen. Attribute können folgenden Typs sein: #CDATA ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, NOTATION, NOTATIONS

15 DTD: Diskussion (2) DTDs sind ein Relikt aus der SGML-Zeit und können den Inhalt von XML-Dokumenten nur sehr ungenau beschreiben, wenn darin z.B. spezifische Datenstrukturen verwendet werden. Das Problem lässt sich auch nicht kompatibel beheben. Daher wurden XML-Schemata definiert. In DTDs können keine Namespace-Konstrukte verwendet werden.

16 XML-Schema XML-Schema erweitern die Möglichkeit zur Definition von XML-Datenstrukturen erheblich! In der Definition von XML-Schemata wird das Thema Datenstrukturen vollständig erschlagen (overkill?) XML-Schemata sind nicht kompatibel zur SGML-Vergangenheit. Die Verwendung und auch die genaue Definition von XML-Schemata ist umstritten!

17 XML-Schema Beispiel (1)
Für das folgende XML-Element wird auf den nächsten Folien ein passendes Schema definiert. Das Beispiel ist aus der Diplomarbeit von Frank Bingel. <auftrag bestellDatum=" "> <lieferadresse> <name>Mustermann</name> <vorname>Herbert</vorname> <strasse>Musterstrasse 1</strasse> <postleitzahl>60000</postleitzahl> <wohnort>Frankfurt</wohnort> </lieferadresse> <posten> <produktnummer> </produktnummer> <anzahl>5</anzahl> <preis>19.99</preis> </posten> <produktnummer> </produktnummer> <anzahl>2</anzahl> <preis>37.49</preis> </auftrag>

18 XML-Schema Beispiel (2)
<element name="auftrag" type="auftragTyp"/> <complexType name="auftragTyp"> <element name="lieferAdresse" type="adressTyp"/> <element name="posten" type="postenTyp" maxOccurs="10"/> <attribute name="bestellDatum" type="date"/> </complexType> <complexType name="adressTyp"> <element name="name" type="string"/> <element name="vorname" type="string"/> <element name="strasse" type="string"/> <element name="postleitzahl" type="posteitzahlTyp"/> <element name="wohnort" type="string"/> ...

19 XML-Schema Beispiel (3)
... <simpleType name="postleitzahlTyp" base="string"> <pattern value="[0-9][1-9][0-9]{3}"/> </simpleType> <complexType name="postenTyp"> <element name="produktNummer" type="produktNummerTyp"/> <element name="anzahl"> <simpleType base="positive-integer"> <maxExclusive value="10"/> </element> <element name="preis" type="decimal"/> </complexType> <simpleType name="produktNummerTyp" base="string"> <pattern value="[1-9]{3}-[1-9]{3}"/> </schema>

20 Vorteile unabhängiger Stilvorlagen
Wiederverwendbarkeit Mehrere Varianten für unterschiedliche Ausgabemedien. Standardisierte Textvorlagen können eingeführt werden. Individuelle Textgestaltung ist immer noch möglich. Trennung von „Inhalts-Autoren“ und „Stil-Autoren“. Stilvorlagen können deklarativ oder prozedural sein. Deklarative Stilvorlagen sagen wie ein Textelement aussieht. Prozedurale Stilvorlagen sagen wie ein Textelement transformiert werden soll.

21 Stilvorlagen für XML Die Diskussion über Stilvorlagen für XML ist anhaltend und noch keineswegs abgeschlossen. Die Puristen halten CSS, wie bereits für HTML definiert, für völlig ausreichend. Daneben gibt es einen andauernden Versuch zusätzlich einen XML spezifischen Stilvorlagen Mechanismus zu definieren. Eine erste Version von XSL wurde vor 1998 definiert. Eine neue Version wurde seit 1999 eingeführt. Diese ist völlig anders – dies wurde aber nirgends an die grosse Glocke gehängt. Gegenwärtig gibt es eine zweistufige XSL-Definition: XSLT definiert Baumtransformationen. XSL definiert XML-Formate.

22 XSL und XSLT (1) Baumtransformationen könnte man übrigens genau so gut mit DOM machen!

23 XSL und XSLT (2) Die Baum-Transformationen sind durch XSLT definiert.
Das Ergebnis kann sein: ein Text mit Format-Auszeichnungen ein anderer XML-Baum ein HTML-Baum ... Input: Ein XML-Baum Ergebnis: Ein anderer Baum

24 Baumstruktur Ein XML Dokument definiert einen Baum.
XSLT definiert eine Baumtransformation für einen solchen Baum. Die Struktur eines XML ist: Er besteht aus einem Wurzelknoten und Kind-Knoten. Es gibt folgende Arten von Knoten: Wurzel-Knoten Element-Knoten Text-Knoten Attribut-Knoten (Namespace)-Knoten (Processing Instruction)-Knoten Kommentar-Knoten

25 Knotenarten: Beispiel
<section> <title>The First Day</title> <p>It was the <emph>best</emph> of days, it was the <emph>worst</emph> of days.</p> </section> Wurzel Elementknoten: section Elementknoten: title Elementknoten: p Textknoten: The First Day Textknoten: It was the El.knoten: emph Textknoten: of days, it was the El.knoten: emph Textknoten: of days Textknoten: best Textknoten: worst

26 Aktueller Knoten Bei der Verarbeitung eines Baumes gibt es ausgezeichnete Positionen: Der aktuelle Knoten: Auf diesen bezieht sich die momentane Verabeitung. Wenn ein Template angewandt wird, wird der Knoten auf den es angewandt wird, der aktuelle Knoten. Weitere Arten von Knoten: Wurzel-Knoten Vorgänger-Knoten (Eltern-Knoten) Kind-Knoten (1. Kind, 2. Kind, .... Letztes Kind)

27 Abhängige Knoten (1) Ausgehend von der aktuellen Position kann man folgende Mengen von Knoten definieren. Dafür gibt es eine ausführliche und eine abgekürzte Schreibweise. Einige Beispiele in ausführlicher Schreibweise: from-children(para) Die Kinder-Elementknoten namens para. from-children(*) Alle Kinder-Elementknoten. from-children(text()) Alle Kinder-Textknoten. from-children(node()) Alle Kinder-Knoten. from-attributes(name) Die Kinder-Attributknoten namens name. from-attributes(*) Alle Kinder-Attributknoten. from-descendants(para) Aus der Menge der Abkömmlinge: Elementknoten namens para from-self(para) ist der aktuelle Knoten, wenn er ein Elementknoten namens para ist, die leere Menge andernfalls.

28 Abhängige Knoten (2) Zusammengesetzte Selektoren:
from-ancestors-or-self(...) from-descendants-or-self(...) Abgekürzte Schreibweise: para bezeichnet die Kind-Elemente names para. * alle Kind-Elemente. text() Alle Kinder-Textknoten. @name Die Kinder-Attributknoten namens name. @* Alle Kinder-Attributknoten. para[1] das 1. Element der Kind-Elemente names para. para[last()] das letzte Element der Kind-Elemente names para.

29 Muster Eine wesentliche Komponente von XSL ist der Vergleich von Mustern. Beispiele: <xsl:template match="preparation"> <xsl:value-of <xsl:when <xsl:template match="/"> / wählt das Wurzelelement eines XML Baumes aus. * wählt alle Elemente eines XML Baumes aus. m1|m2 wählt Elemente aus, auf die m1 oder m2 zutrifft. m1 and m2 wählt Elemente aus, auf die m1 und m2 zutrifft. m1/m2 wählt Elemente aus, auf die m2 zutrifft, wenn der Elternknoten m1 ist. m1//m2 wählt Elemente aus, auf die m2 zutrifft, wenn sie einen Vorgängerknoten m1 haben. @a wählt ein Attribut mit Namen a aus. wählt alle Attribute aus.

30 Filter [] definiert einen Filter für ein Muster. Beispiele:
wählt jedes Element namens p aus (auf das p zutrifft), das ein Vorgängerelement namens div hat, der ein Attribut class mit dem Wert appendix hat. para[1] trifft auf alle para Elemente zu, die 1. Kind ihres Elternknotens sind. *[position()=1] wählt jedes Element aus das 1. Kind seines Elternknotens ist. *[last()=1] wählt jedes Element aus das das einzige Kind seines Elternknotens ist. item[position() mod 2 = 1] trifft auf ein Element namens item zu, wenn es eine ungerade Positionsnummer hat. item[position() > 1] trifft auf ein Element namens item zu, wenn es nicht das 1. Kind seines Elternknotens ist.

31 XSL/XSLT Beispiel (1) Für das folgende XML-Element wird auf den nächsten Folien eine passende Formatierung definiert. Das Beispiel ist aus der W3C XSL Spezifikation. <doc> <chapter><title>Chapter</title> <p>Text</p> <section><title>Section</title> </section> </chapter> </doc>

32 XSL/XSLT Beispiel (2) XSLT – Definition: <?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl=" xmlns:fo=" version='1.0'> <xsl:template match="chapter"> <fo:block break-before="page"> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="chapter/title"> <fo:block text-align="center" space-after="8pt" space-before="16pt" space-after.precedence="3"> ...

33 XSL/XSLT Beispiel (3) ... <xsl:template match="section/title">
<fo:block text-align="center" space-after="6pt" space-before="12pt" space-before.precedence="0" space-after.precedence="3"> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="p[1]" priority="1"> <fo:block text-indent="0pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt">

34 XSL/XSLT Beispiel (4) ... <xsl:template match="p">
<fo:block text-indent="2pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt"> <xsl:apply-templates/> </fo:block> </xsl:template> </xsl:stylesheet>

35 XSL/XSLT Beispiel (5) Ergebnis-Format:
<fo:block break-before="page"> <fo:block text-align="center" space-after="8pt" space-before="16pt" space-after.precedence="3">Chapter </fo:block> <fo:block text-indent="0pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt">Text <fo:block text-align="center" space-after="6pt" space-before="12pt" space-before.precedence="0" space-after.precedence="3">Section ...

36 XSL/XSLT Beispiel (6) ... <fo:block text-align="center" space-after="6pt" space-before="12pt" space-before.precedence="0" space-after.precedence="3">Section </fo:block> <fo:block text-indent="0pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt">Text

37 XSL/XSLT Beispiel (7) ... <fo:block break-before="page">
<fo:block text-align="center" space-after="8pt" space-before="16pt" space-after.precedence="3">Chapter </fo:block> <fo:block text-indent="0pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt">Text <fo:block text-align="center" space-after="6pt" space-before="12pt" space-before.precedence="0" space-after.precedence="3">Section

38 XSL/XSLT Beispiel (8) ... <fo:block text-indent="0pc" space-after="7pt" space-before.minimum="6pt" space-before.optimum="8pt" space-before.maximum="10pt">Text </fo:block> <fo:block text-align="center" space-after="6pt" space-before="12pt" space-before.precedence="0" space-after.precedence="3">Section

39 Diskussion (und Ende) XML war einmal eine bestechende Idee ...
Heute verderben zu viele Köche den XML-Brei ... HTML war gut für Textdokumente. XML versucht die Struktur ganz allgemeiner Dokumente zu beschreiben – geht das mit denselben Hilfsmitteln. XML sollte ganz einfach sein – Baumtransormationen etc. sind nicht ganz einfach... Viele Details habe ich noch gar nicht diskutiert.


Herunterladen ppt "Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML"

Ähnliche Präsentationen


Google-Anzeigen