XML
Extensible Markup Language


 



 
 
 
 
Was ist XML(Extensible Markup Language)?
Warum wurde XML entwickelt?
Wo kann XML eingesetzt werden?
Einführende Beispiele
Wohlgeformtheit und Gültigkeit
Dokumentstruktur



 
 

Was ist XML(Extensible Markup Language)?

Warum wurde XML entwickelt?

Das Web braucht eine Sprache, die leicht zu lernen und einzusetzen ist wie HTML, aber die Leistungsfähigkeit von SGML besitzt. XML wurde aus der Erfahrung mit HTML und SGML entwickelt.
 

Besonderheiten von HTML

Besonderheiten von SGML

Wo kann XML eingesetzt werden?

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-->



Das zweite Beispiel

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

Wohlgeformtheit und Gültigkeit

Wohlgeformtes Dokument(well-formed documentt) Gültiges Dokument(valid document)

Dokumentstruktur

Markuptypen

Ein XML-Dokumenet aus logischer Sicht besteht 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 Marups interpretiert werden
  • ']]' in CDATA verboten
<![CDATA[
  <gruss> Hallo, Welt!
  </gruss>
]]>
Entity
  • Textentities: wird 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 bestimmter Anwendung eine Anweisung

  • <? Identifikator Anweisung ?>
  • Nur die jenige Anwendung, die den Identifikator kennt, kann die Anweisung benutzen
 <? sun-jdk version=1.1.6 ?>
Notation
  • definirt einen Dateityp
  • Wenn eine Nicht-XML-Datei referentiert 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 Definition(DTD)

DTD definiert Regeln für einen Dokumenttyp. Ein Dokument, das einen Dokuementtypeangabe besitzt, dürfen nur die Regeln in der Typeangabe benutzen.
Eine DokumentTypDefinition erlaubt Definitonen für Ein Beispiel, wie eine DTD aussieht

Elementtype-Declaration

definiert ein Element- wie das Element heißt, welche Kinder-Elemente er hat, welche Attribute er hat und welche Werte die Attribute annehmen dürfen.
 
Element-Typ  Erklärung Beispiele
EMPTY ein leeres Element
kann Attribute besitzen, aber kein 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
  • wird nur selten benutzt, meist bei der Konvertierung von 

  • wohlgeformten Dokumenten ohne DTD zu Dokumenten mit DTD
<!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)
  • * kein mal oder mehrmals
  • ? kein mal 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 und Kinderelemente.  <!ELEMENT elem (#PCDATA|child1)*>

Attribut-Deklaration
Attribut-Deklaration definiert benutzbare Attribute eines Elementes.

    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
  • 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
<!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 Der Wert des Attributes muß unparsed Entity sein <!ATTLIST psdatei filename ENTITY #REQUIRED>
CDATA String   <!ATTLIST Student tel CDATA>
NMTOKEN  nur Kombination aus Buchstaben, Ziffer, '.', ':', '-', '_' erlaubt  

Defaultdeklaratio:
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 wird nur im Dokumentinhalt benutzt <!ENTITY fh-wedel "Fachhochschule Wedel">

&fh-wedel;

parameter entity  hat den selben Zweck wie Generalentity, 
ist aber nur in DTD(DokumenTypeDefinition) benutzbar.
<!ENTITY % fh-wedel "Fachhochschule Wedel">
%fh-wedel;
Generalentity hat einen anderen Namensraum als Parameter entity. Deshalb kann ein Gerneral-Entity den selben Namen haben wie ein Parameterentity.
 
parsed entity die Entityreferenz im Dokument wird beim Parsen durch den referentierten Text ersetzt.  
unparsed entity 
  • referenziert meist binäre Dateien wie Bild- oder Tondateien. 
  • Deshalb kann die Entityreferenz nicht durch den referenzierten Inhalt ersetzt werden.
  • Der einzige sinnvolle Platz ist als Attributwert, 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 Entityreferenz in der Entitydeklaration vorkommen. Hier 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 abstraktenn Spezifikationen viel Hintergrundinformation und gute Einführung zum Thema XML findet.

Bücher zu XML
   XML Companiion 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 Speicherstruktur bequem definieren und die Daten in die Speicherstruktur ausfüllen.

    XML-Notepad(beta 1) kennt bisjetzt leider noch keine DTD.