XML
Extensible Markup Language

von Pan Yi


 



 
 
 
 
 
Was ist XML?
Warum wurde XML entwickelt?
Wo kann man XML sinnvoll einsetzen?
Designziele der XML-Spezifikation
Einführende Beispiele
Wohlgeformtheit und Gültigkeit
Logische Dokumentstruktur
Literatur



 
 
 

Was ist XML(Extensible Markup Language)?

XML ist eine neue Markup-Sprache, die vom W3-Konsortium entwickelt wurde, um strukturierte Dokumente oder Daten im Web zu benutzen. XML ist eine Metasprache, d.h. mit XML lassen sich neue Markup-Sprachen definieren, mit denen dann Dokumente erzeugt werden. Das große Plus von XML ist, daß es keinen festgelegten Satz von Markup-Befehlen gibt. Man kann die Befehle selbst beliebig definieren. Aussagekräftige Namen können für die Markups verwendet werden, anhand derer man die Bedeutung des Inhaltes schon erkennt.
 

Warum wurde XML entwickelt?

XML wurde aus der langjärigen Erfahrung in der Praxis mit SGML und HTML entwickelt.  Ziel der Entwicklung von XML war es, eine Sprache zu entwickeln, die die Möglichkeit und Leistungsfähigkeit von SGML als allgemeine Auszeichnungssprache(General  Markuplanguage) im Web zu bietet, dabei aber so einfach erlernbar und einsetzbar ist wie HTML.

HTML kann mit der rasanten Entwicklung des Internets nicht Schritt halten, zumal die Sprache ursprünglich gar nicht für eine derartige Verbreitung und so vielfältige Einsatzmöglichkeiten konzipiert war. Es wurde zwar immer wieder versucht, zum Beispiel durch neue Versionen mit immer mehr Befehlen oder durch diverse Scriptsprachen, HTML mehr Möglichkeiten zu geben. Die Grenzen der Sprache konnten aber nicht überwunden werden. Die Sprache kennt nämlich je nach Version nur einen festen Satz von mehr oder weniger definierten Befehlen, die lediglich durch neue Versionen erweitert werden können. Diese definierte Menge an Befehlen kann aber kaum die Fantasien der Webentwickler auf allen Gebieten befriedigen. Viele ihrer Ideen können mit HTML nur umständlich oder gar nicht realisiert werden.

Über eine Alternative wurde schon lange nachgedacht. Man dachte zunächst an SGML. Anders als HTML ist SGML eine Metasprache, mit der man Regeln zum Schreiben von Dokumenten mit komplizierten Strukturen festlegen kann. Ein Dokumenttyp, der mit SGML definiert wurde, läßt sich beliebig erweitern. So kann man mit SGML fast alle erdenklichen Datenstrukturen definieren. Gerade für  Industrien wie Chemie oder Elektronik  ist SGML unverzichtbar. Entwickelt wurde SGML in den 60er Jahren, in denen auch das Prinzip der allgemeinen Markupsprachen erfunden wurde. Die Tatsache, daß die letzte Spezifikation von SGML aus dem Jahr 1986 fast ohne jegliche Änderung ein Jahrzehnt überlebt hat, zeigt ihre Robustheit und Reife. Allerdings darf man gewisse Nachteile von SGML auch nicht übersehen. Da die Entwickler von Anfang an versuchten, die Sprache so allgemein wie möglich zu halten, gibt es in der Sprache eine Unmenge von optionalen Features. Deshalb ist die Entwicklung von SGML-Anwendungen nicht nur sehr zeit- und kostenintensiv, sondern auch sehr fehleranfällig.  Weder kleine noch  mittelständigen Unternehmen können von ihr Gebrauch machen. Der Grund, warum die Browserhersteller SGML nicht in die Browser  integrieren wollten, war ebenfalls die Komplexität der Sprache.

So hat das W3-Konsortium 1996 damit begonnen, eine neue Sprache für das Web zu entwickeln. Die neue Sprache soll die Vorzüge von HTML und SGML verbinden und deren Schwächen überwinden. Seit Februar 1998 liegt die erste XML-Version als offiziell empfohlener Standard vor.

Wo kann man XML sinnvoll einsetzen?

Ein Ziel der Entwicklungsgruppe ist es, XML die Ausdrucksmöglichkeiten von SGML zu verleihen und sie auch SGML komform zu machen. Komplizierte Dokumentstrukturen lassen sich mit XML realisieren. Regeln zum Schreiben von Mathematischen Formeln können mit XML geschrieben werden. Datenbanken können mit XML als Zwischenformat Daten miteinander austauschen....  XML hat den Teil (ca.20 Prozent) von SGML übernommen, der am häufigsten zum Einsatz kam. So kann man sagen, überall da, wo SGML eingesetzt wurde,  kann jetzt auch XML benutzt werden. Das größte Einsatzgebiet von XML ist sehr wahrscheinlich das Internet. Die Webentwickler können eigene Dokumenttypen entwickeln und damit Dokumente erstellen. Mit der selbstbeschreibenden Struktur kann effizienter auf Elemente zugegriffen werden. Parallel zu der Entwicklung von der XML-Spezifikation werden noch weitere Standards entwickelt, die das World Wide Web revolutionieren sollen. All diese neuen Standards basieren auf XML. Sie können mit XML komplett beschrieben werden. So wird die Zusammenarbeit und Kompabilität untereinander garantiert. So soll XLINK flexiblere Linkmechanismen ermöglichen, als man sie bei HTML kennt. DOM(Dokument Object Modell) soll ein einheitliches Objectmodell für HTML- und XML-Dokumente schaffen. SMIL soll das Erstellen von aufwendigen Multimediapräsentationen im Web ermöglichen. XSL soll dabei helfen, XML Datenstrukturen in HTML-Form darzustellen.
 

Designziele von XML

Einführende Beispiele

Das erste Beispiel:

    <Email>
        <Empfänger> WWeigel@fh-wedel.de </Empfänger>
        <Absender name="pan yi"> wi6658@fh-wedel.de </Absender>
        <Betreff> Einladung </Betreff>
        <Inhalt mime="html"> ...</Inhalt>
    </Email>
    <!--Ende der ersten Emailadresse-->
    <Email>
        <Empfänger> AWolf@fh-wedel.de </Empfänger>
        <Absender name="pan yi"> wi6658@fh-wedel.de </Absender>
        <Betreff> Einladung </Betreff>
        <Inhalt mime="html"> ...</Inhalt>
    </Email>
    <!--Ende-->

<leertag/> oder <leertag></leertag>

Das zweite Beispiel:

    <?XML version="1.0"?>
    <!DOCTYPE simpleDoc SYSTEM "ExternDTD.dtd"[
        <!ELEMENT simpleDoc #PCDATA>
    ]>
        <!--Bisher ist der Prologteil(Dokumentvorspann)-->
    <simpleDoc>Hello, world!<simpleDoc>

Ein XML-Dokument kann einen Prologteil besitzen. Das obige XML-Dokument besitzt hier im Prologteil eine XML-Deklaration. Sie hat immer die Form <?XML ... ?>. Sie befindet sich stets in der ersten Zeile des Dokuments. Man kann in der XML-Deklaration  z.B. die verwendete XML-Version, die verwendete Sprachkodierung,  angeben. Wenn man die XML-Deklaration benutzt, darf  im Dokument keine andere Version von XML benutzt werden als die in der XML-Deklaration angegebene Version. Jedes XML-Dokument sollte eine XML-Deklaration besitzen, damit der XML-Prozessor weiß, welche Version im Einsatz ist. Im Prologteil kann außer der XML-Deklaration noch eine Dokumenttypdefinition(DTD) vorkommen. DTD legt die Struktur der verwendeten Elemente und ihre Beziehung untereinander fest. DTD kann von einer externen Datei bezogen oder  im Dokument definiert werden oder beides kann kombiniert benuzt werden, wie das Beispiel zeigt. Kommentare sind im Prolog auch erlaubt. Die Syntax entspricht der von HTML. Nach dem Prolog beginnt der Inhalt des Dokuments. Das erste Element, nämlich das Wurzelelement(root), ist unsichbar und trägt auch keinen Namen. Das Wurzelelement repräsentiert das ganze Dokument. Das erste sichtbare Element muß den Namen von dem DTD tragen.

Wohlgeformtes und gültiges Dokument

Wohlgeformtheit(well-formed):
Wohlgeformtheit heißt, daß ein XML-Dokument die Anforderungen für ein korrektes XML-Dokument erfüllt. Mit "korrekt" ist syntaktisch korrekt gemeint. Nur wenn ein Dokument wohlgeformt ist, kann es von einem XML-Prozessor geparst werden.

Ein Dokument ist wohlgeformt, wenn es die folgenden Bedingungen erfüllt:

  1. Ein Dokument hat mindestens ein Element, nämlich das Wurzelelement.
  2. Wenn ein Element in einem anderen Element startet, muß es auch in diesem Element enden.
    <tag1><tag2></tag1></tag2> ist falsch

Einfach gesagt, wenn ein XML-Dokument nach dem Parsen korrekt in einer Baumstruktur dargestellt werden kann, ist es wohlgeformt.

Gültigkeit(Valid)
Wenn ein Dokument eine Dokumenttyp-Deklaration(DTD) besitzt und die darin formulierten Bedingungen erfüllt, heißt das Dokument gültig(valid). Da SGML immer eine Dokumenttypdefinition verlangt, bleibt ein XML-Dokument SGML- kompatibel, wenn es DTD besitzt. So kann ein Dokument mit DTD auch von einem SGML-Prozessor verstanden und bearbeitet werden.

Die Gültigkeitsbeschränkung wurde von SGML übernommen. Damit aber auch Datenstrukturen ohne DTD verwendet werden können, hat XML zusätzlich die Wohlgeformtheitseinschränkung eingeführt. Wenn ein Dokument ohne Änderung immer wieder über das Netz transportiert wird, erübrigt sich eine Gültigkeitsüberprüfung, damit würde man nur Rechenresourcen verschwenden.

Dokumentstruktur

Markuptypen

Ein XML-Dokument besteht aus logischer Sicht nur aus Markups.
Es gibt folgende Markuptypen:

Markuptypen Beschreibung Beispiele
Element
  • eine logische Speichereinheit
  • kann leer sein, Kinderelemente oder Text enthalten
<A image="pfeil.gif"/>
<Buch>
  <Autor>Neil   Bradley</Autor>
</Buch>
Kommentar
  • darf überall im Dokument stehen, auch in DTD
  • '--'  verboten im Kommentar
<!--Das ist ein Kommentar-->
CDATA
  • schützt Textblöcke, die sonst als Markups interpretiert werden
  • ']]' sind in CDATA verboten
<![CDATA[
  <gruss> Hallo, Welt!
  </gruss>
]]>
Entity
  • Textentities: werden als Abkkürzung benutzt, ähnlich wie bei C Macros
  • Characterentities: definiert einen Namen für die per Tastatur schwerzugänglichen Zeichen
ein Beispiel für Textentity:

<!ENTITY fh-wedel "Fachhochschule Wedel">
Im Dokumentinhalt wird das Entity so benutzt: 
&fh-wedel;



 

ein Beispiel für Zeichenenttity:
<!ENTITY greater &#62> oder
<!ENTITY greater &#x3E>

ProcessInstruction(PI)
  • gibt einer bestimmten Anwendung eine Anweisung

  • <? Identifikator Anweisung ?>
  • Nur diejenige Anwendung, die den Identifikator kennt, kann die Anweisung benutzen
 <? sun-jdk version=1.1.6 ?>
Notation
  • definiert einen Dateityp
  • Wenn eine Nicht-XML-Datei referenziert wird, muß immer ein Typ angegeben werden
<!NOTATION GIF87A SYSTEM "GIF">


 

<!NOTATION PS SYSTEM
   "file:/usr/bin/gv">
<!ENTITY handbuch SYSTEM
   "handbuch.ps" NDATA PS>

Document Type Deklaration(DTD)

Anders als bei HTML muß man bei XML die verwendeten Tags selbst definieren. Anhand DTD kann ein XML-Parser die Gültigkeit des Dokuments überprüfen, z.B. ob auch tatsächlich ein definiertes Element benutzt wird, ob ein Attriubtwert gültig ist.  Ein XML-Dokument kann entweder externe DTD als Datei referenzieren oder intern die DTD definieren oder auch beides gleichzeitig tun.
Es gibt vier Arten von Deklarationen. Wenn zwei Deklarationen mit dem selben Namen vorkommen, gilt immer die zuletzt definierte Deklaration. Eine in der internen DTD definierte Deklaration überschreibt die Deklaration in der externen DTD mit dem selben Name.
Elementtype-Deklaration
Definiert den Elementnamen und seinen möglichen Inhalt
<!ELEMENT name (kind1, kind2?, kind3+)>
"name" ist der Name des Elements. "kind1" ist das erste Kinderelement in dem Element "name". Das Fragezeichen heißt, daß das Kinderelement fehlen oder nur einmal vorkommen darf. Das Pluszeichen bedeutet, daß das Kinderelement mindestens einmal vorkommen muß. Kein Zeichen hinter einem Kinderelement heißt, daß das Kinderelement genau einmal vorkommen muß. Alle Namen der Kinderelemente sind von dem runden Klammern umschlossen. Die einzelnen Kinderelemente sind noch extra als Elemente zu deklarieren. Die Kommas definieren die Reihenfolge des Auftretens von den Kinderelementen.

Eine besondere Art von Kinderelement ist #PCDATA(parsed character data). Sie steht für Zeichendaten. Wenn der Inhalt eines Elements keine Zeichendaten hat, heißt er element content, sonst heißt er mixed content. Bei mixed content ist darauf zu achten, daß #PCDATA immer als erste deklariert werden muß und alle Kinderelemente mit dem Oderzeichen zu trennen und mit dem Sternchen zu versehen sind.

<!ELEMENT name (#PCDATA|kind1|kind2)*>
Zusammenfassung der Symbole, die in der DTD verwendet werden
 
 
Kommt nicht vor oder kommt genau einmal vor 
Kommt einmal oder mehrmals vor 
Kommt gar nicht oder mehrmals vor 
Oder 
definiert die Reihnfolge des Auftretens von den Kinderelementen 
#PCDATA  Character data 
EMPTY  Definiert ein leeres Element 
ANY  Definiert ein Element, das alles mögliche enthalten kann 

 
 
 
Element-Typ  Erklärung Beispiele
EMPTY
  • deklariert ein leeres Element 
  • kann Attribute besitzen, aber keinen Text oder Kinderelemente.
DTD: <!ELEMENT elem EMPTY>
Content: <A/> oder <A></A>
PCDATA(Pasered Character Data)
  • Text
<!ELEMENT Absender #PCDATA>
ANY
  • kann beliebig  Elemente enthalten, die in der DTD definiert sind.
  • Gültigkeitsüberprüfung wird für das Element ausgeschaltet.
<!ELEMENT elem ANY>
children
  • Das Element besteht aus Kinderelementen.
  • "," dient als Trennzeichen für eine Kinderliste. Die Reihnfolge muß eingehalten werden.
  • "|" dient als Trennzeichen für eine Wahl von Elementen(ODER).
  • "*" keinmal oder mehrmals
  • "?" keinmal oder einmal(optional)
  • "+" mindestens einmal
  • "-" ausgeschlossen

<!ELEMENT elem (child1, child2)>
<!ELEMENT child1 #PCDATA>
<!ELEMENT child2 #PCDATA>

Im Dokumentinhalt sieht es so aus:
<elem>
  <child1>...</child1>
  <child2>...</child2>
</elem>



 

<!ELEMENT buch (titel,untertitel*,autor+)>

mixed
  • Der Inhalt des Elements besteht aus #PCDATA oder Kinderelementen. 
  • #PCDATA muß immer vor den Kinderelementen deklariert werden.
  • Zwichen #PCDATA und den Kinderelementen besteht immer eine Oder-Beziehung.
  • Die ganze Deklaration ist immer optional(*)
<!ELEMENT elem (#PCDATA|child1)*>
Attribut-Deklaration
Allein anhand des Namens kann ein Element noch nicht sinnvoll beschrieben werden Für weitere Eigenschaften stehen Attribute zur Verfügung. Man kann für ein Element beliebig viele Attribute definieren. Die Definition besteht aus Namen, Typ und Defaultwert.

    Syntax für Attributdeklaration:
  <!ATTLIST Elementname
            1.Attribut Typ Default
            2.Attrribut Typ Default
            ...
  >

  ein Beispiel:
  <!ATTLIST buch
            ISBN ID #REQUIRED
            zustand (verfügbar|ausgeliehen) 'verfügbar'
  >

Attributtypen:
 
Attribut-Typen Beschreibung Beispiele
ID
  • dient als eine eindeutige Kennung für das Element.
  • bildet mit IDREF zusammen einen Linkmechanismus innerhalb des Dokuments.
  • Jedes Element sollte ein Attribut vom Typ ID besitzen, damit später problemlos darauf verwiesen werden kann.
<!ELEMENT Buch (Autor, Titel)>
<!ATTLIST Buch 
   ISBN ID #REQUIRED
   Zustand (ausgeliehen|verfügbar) #REQUIRED 'verfügbar'
>
<!ELEMENT Autor #PCDATA>
<!ELEMENT Titel #PCDATA>
IDREF
  • verweist auf ein Element  im Dokument. 
  • Der Wert muß immer eine ID von einem Element sein
 
ENTITY <!ATTLIST psdatei filename ENTITY #REQUIRED>
CDATA
  • String 
  • darf nicht mit dem Markuptyp CDATA zum Schutz von Textblöcken, die sonst als Markups interpretiert werden, verwechselt werden.
 <!ATTLIST Student tel CDATA>
NMTOKEN 
  • erlaubt nur Kombinationen aus Buchstaben, Ziffern, '.', ':', '-', '_' , also Zeichen, die in einem gültigen Namen vorkommen dürfen.
 

Defaultdeklaration:
 
Defaultdeklaration  Beschreibung Beispiel
#REQUIRED 
  • Das Attribut muß immer vorhanden sein. 
<!ATTLIST Student 
       MatrikelNr ID #REQUIRED
#IMPLIED
  • Das Attribut ist optional.
          tel CDATA   #IMPLED
#FIXED
  • Das Attribut hat immer den selben Wert.
            Hochschule CDATA #FIXED
          'FH-Wedel' 
>

Entity

Weitere Entitytypen:
 
 
general entity
(allgemeine Entity)
  • wird nur im Dokumentinhalt benutzt.
<!ENTITY fh-wedel "Fachhochschule Wedel">

&fh-wedel;

parameter entity 
  • hat den selben Zweck wie die allgemeine Entity,  ist aber nur in DTD(DokumenTypeDefinition) benutzbar.
<!ENTITY % fh-wedel "Fachhochschule Wedel">
%fh-wedel;

Die allgemeinen Entities haben einen anderen Namensraum als die Parameterentities. Deshalb kann ein allgemeine Entitiy den selben Namen haben wie eine Parameterentity.
 
 
parsed entity
(analysierte Entity)
  • die Entityreferenz im Dokument wird beim Parsen durch den referenzierten Text ersetzt.
 
unparsed entity 
(nicht analysierte Entity)
  • referenziert meist binäre Dateien wie Bild- oder Tondateien. 
  • Deshalb kann die Entityreferenz nicht durch den referenzierten Inhalt ersetzt werden.
  • kann nur als Attributwert benutzt werden, vorausgesetzt, daß das Attribut vom Typ ENTITY ist.
<!NOTATION PS SYSTEM "file:/usr/bin/gv">
<!ATTLIST psdatei filename ENTITY #REQUIRED>

<!ENTITY handbuch SYSTEM "handbuch.ps" NDATA PS>

Im Dokument wird das Entity so benutzt:
<psdatei filename="handbuch"></psdatei>


 
 
 
internal entity
  • referenziert  Zeichen oder Zeichenkette.
<!ENTITY lt &#x3C>
<!ENTITY wi "Wirtschaftinformatik">
&wi;
externel entity
  • referenziert eine externe Datei.
  • benutzt immer das Schlüsselwort 'SYSTEM'.
<!ENTITY myAdress SYSTEM "/home/adress.xml">
<!ENTITY myAdressIcon SYSTEM "/home/icons/home.gif" NDATA GIF87A>

Zu beachten ist, wenn Entityreferenzen in der Entitydeklaration(in der DTD) vorkommen, dann wird die Entityreferenz nocht nicht durch den Ersetztungstext ersetzt. Erst im Dokumentinhalt wird die Entityreferenz durch den Ersetztungstext ersetzt. z.B

in Doc1:
    <!ENTITY jdkVersion "version:  &version;">
in Doc2:
    <!DOCTYPE SYSTEM "Doc1" [
        <!ENTITY version "1.1.4">
    ]>
in Doc3:
    <!DOCTYPE SYSTEM "Doc1" [
        <!ENTITY version "1.2">
  ]>
 

Literatur zum Thema XML im Web:

    www.w3.org

    www.xml.com  ist sehr zu empfehlen, da man außer den sehr abstrakten Spezifikationen auch viel Hintergrundinformation und gute Einführungen zum Thema XML findet.

Bücher zu XML

   XML Companion von Neil Bradley, addison-Wesley
   ISBN:0-201-34285-5

XML-Parser

    Alle Parser sind frei und mit Java geschrieben.

    ibm_xml_parser
    microsoft_xml_parser
    sun_xml_parser

XML-Editoren

    Mit einem XML-Editor kann man DTD bequem definieren und Dokumente oder Elemente nach der Definiton erzeugen.

    XML-Notepad(beta 1) kennt bis jetzt noch keine DTD.