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 |
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.
<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>
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.
Ein Dokument ist wohlgeformt, wenn es die folgenden Bedingungen erfüllt:
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.
Ein XML-Dokument besteht aus logischer Sicht nur aus Markups.
Es gibt folgende Markuptypen:
Markuptypen | Beschreibung | Beispiele |
Element |
|
<A image="pfeil.gif"/>
<Buch> <Autor>Neil Bradley</Autor> </Buch> |
Kommentar |
|
<!--Das ist ein Kommentar--> |
CDATA |
|
<![CDATA[
<gruss> Hallo, Welt! </gruss> ]]> |
Entity |
|
ein Beispiel für Textentity:
<!ENTITY fh-wedel "Fachhochschule Wedel">
ein Beispiel für Zeichenenttity:
|
ProcessInstruction(PI) |
<? Identifikator Anweisung ?> |
<? sun-jdk version=1.1.6 ?> |
Notation |
|
<!NOTATION GIF87A SYSTEM "GIF">
<!NOTATION PS SYSTEM
|
<!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 |
|
DTD: <!ELEMENT elem EMPTY>
Content: <A/> oder <A></A> |
PCDATA(Pasered Character Data) |
|
<!ELEMENT Absender #PCDATA> |
ANY |
|
<!ELEMENT elem ANY> |
children |
|
<!ELEMENT elem (child1, child2)> <!ELEMENT child1 #PCDATA> <!ELEMENT child2 #PCDATA> Im Dokumentinhalt sieht es so aus:
<!ELEMENT buch (titel,untertitel*,autor+)> |
mixed |
|
<!ELEMENT elem (#PCDATA|child1)*> |
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 |
|
<!ELEMENT Buch (Autor, Titel)>
<!ATTLIST Buch ISBN ID #REQUIRED Zustand (ausgeliehen|verfügbar) #REQUIRED 'verfügbar' > <!ELEMENT Autor #PCDATA> <!ELEMENT Titel #PCDATA> |
IDREF |
|
|
ENTITY |
|
<!ATTLIST psdatei filename ENTITY #REQUIRED> |
CDATA |
|
<!ATTLIST Student tel CDATA> |
NMTOKEN |
|
Defaultdeklaration:
Defaultdeklaration | Beschreibung | Beispiel |
#REQUIRED |
|
<!ATTLIST Student
MatrikelNr ID #REQUIRED |
#IMPLIED |
|
tel CDATA #IMPLED |
#FIXED |
|
Hochschule CDATA #FIXED
'FH-Wedel' > |
general entity
(allgemeine Entity) |
|
<!ENTITY fh-wedel "Fachhochschule Wedel">
&fh-wedel; |
parameter entity |
|
<!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.
internal entity |
|
<!ENTITY lt <>
<!ENTITY wi "Wirtschaftinformatik"> &wi; |
externel entity |
|
<!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.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.