Abstract

Nach einer einführenden Übersicht über die einzelnen Mitglieder der XML-Sprachfamilie werden in diesem Abschnitt die grundlegenden Strukturelemente der XML und des XML Information Set eingeführt.
Sie erfahren, welche Strukturelemente es in der XML gibt und was die Wohlgeformtheit eines XML-Dokuments bedeutet.

Inhalt (Die XML Sprachfamilie)

  1. Die XML Sprachfamilie [2]
  2. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (1) [31]
  3. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (2) [30]

Definition XML-Sprache

Eine Anwendung der XML wird XML-Sprache genannt. Sie besteht aus einem Vokabular, das aus Symbolen und der ihnen zugewiesenen Bedeutung (Semantik) gebildet wird. Das Vokabular wird durch Regeln ergänzt, die die Kombination der Elemente aus dem Vokabular steuern: die grammatikalische Struktur sowie die Gültigkeitsregeln für den Inhalt (z.B. Datentypen).
Eine Anwendung einer neu geschaffenen XML-Sprache L werden als XML-Dokumente, auch L -Dokumente bezeichnet.

Beispiele: XHTML-Dokument, SVG-Dokument, XSL-Dokument

Die XML-Sprachfamilie

Die Abbildung markiert farblich alle Standards, zu denen eine XML Darstellung existiert.

Inhalt (Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (1))

  1. Die XML Sprachfamilie [2]
  2. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (1) [31]
  3. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (2) [30]

Einführende Definitionen (1/3)

XML-Dokument
Ein XML-Dokument ist ein Datenstrom (der nicht zwingend als Datei vorliegen muß), der den Strukturierungsprinzipien (=Wohlgeformtheit) der Extensible Markup Language genügt.

Einführende Definitionen (2/3)

XML Information Set
Die Spezifikation des XML Information Sets definiert die zentralen Begriffe der XML. Es setzt diese Begriffe miteinander in Beziehung und definiert so unabhängig von der Syntax die Struktur eines XML-Dokumentes.

Einführende Definitionen (3/3)

XML-Prozessor
Ein XML-Prozessor ist eine maschinelle Komponente (typischerweise: Software), die zum Lesen, Speichern und Verarbeiten eines XML-Dokuments eingesetzt wird. Er erlaubt Zugriff auf den Inhalt und die Struktur des XML-Dokuments.

Ein XML-Prozessor ist zumeist in Software implementiert, kann aber auch in Hardware realisiert sein.

Ein erstes XML-Dokument

Das folgende Listing zeigt ein einfaches XML-Dokument mit den am meisten verwendeten Sprachelementen der XML: Element, Attribut, Text.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Vorlesung>
  <Pflichtfach/>
  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel>
  <Semester>WS 2008/2009</Semester>
  Montag, 08:00h - 09:30h
  <Praktikum>Seminar</Praktikum>
</Vorlesung>

Das Information Set des ersten XML-Dokuments

Für jedes XML-Dokument gibt es ein abstraktes Information Set (auch kurz als "Infoset" bezeichnet). In ihm sind alle Informationselemente in Form einer Baumstruktur enthalten.
Die untenstehende Abbildung gibt einen Auszug der Knoten aus dem Information Set unseres ersten XML-Dokuments in einem UML-Diagramm wieder. Die Knoten sind als Objekte, ihre Eigenschaften als Attribute dargestellt.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Vorlesung>
  <Pflichtfach/>
  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel>
  <Semester>WS 2008/2009</Semester>
  Montag, 08:00h - 09:30h
  <Praktikum>Seminar</Praktikum>
</Vorlesung>

Ein erstes XHTML-Dokument

Im folgenden Beispiel ist der Inhalt des ersten XML-Dokuments als einfache XHTML Seite dargestellt.
Sprachelemente der XHTML: Titel, Überschriften 1. und 2. Grades, Absatz.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Vorlesung i3.DATA (XML)</title>
 </head>
 <body>
  <h>Fachhochschule Augsburg</h>
  <section>
   <h>Studiengang IAM</h>
   <h>3. Semester</h>
   <h>Wintersemester 2008/2009</h>
   <p>Montag, 08:00h-09:30h, Raum I102</p>
  </section>
 </body>
</html>

Die Elemente des Information Set

Document Information Item (Dokument)

Der XML-Prolog

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Document Information Item - Beispiel XHTML Dokument

Das Document Information Item des ersten XHTML Beispiels beinhaltet folgende Informationen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Vorlesung i3.DATA (XML)</title>
 </head>
 <body>
  <h>Fachhochschule Augsburg</h>
  <section>
   <h>Studiengang IAM</h>
   <h>3. Semester</h>
   <h>Wintersemester 2008/2009</h>
   <p>Montag, 08:00h-09:30h, Raum I102</p>
  </section>
 </body>
</html>

Automatische Zeichensatzerkennung (1/2)

[23]    XMLDecl         ::=   '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

Automatische Zeichensatzerkennung (2/2)

Prolog
[22]    prolog          ::=   XMLDecl Misc* (doctypedecl Misc*)?
[23]    XMLDecl         ::=   '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24]    VersionInfo     ::=   S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')
[25]    Eq              ::=   S? '=' S?
[26]    VersionNum      ::=   '1.1'
[27]    Misc            ::=   Comment | PI | S
[80]    EncodingDecl    ::=   S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" )
[81]    EncName         ::=   [A-Za-z] ([A-Za-z0-9._] | '-')* /* Encoding name contains only Latin characters */
[32]    SDDecl          ::=   S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
[3]     S               ::=   (#x20 | #x9 | #xD | #xA)+

Unicode

Platzbedarf der verschiedenen Codierungsformate

Nachstehende Tabelle zeigt einen Überblick über den Platzbedarf des Zeichens A in den verschiedenen Codierungsformaten, sowie die Größe der Beispieldate in Byte

Codierung Bitbreite Binärdarstellung Größe der Beispieldatei in Byte Bemerkung
erweitertes ASCII (Latin-1), ISO-8859-1 8 0100 0001 266 ( encoding="ISO-8859-1" )
UTF-8 >=8 0100 0001 266 ( encoding="UTF-8" ) keine Byte Order Mark
UTF-16 >=16 0100 0001 0000 0000 532 ( encoding="UTF-16" ) keine Byte Order Mark
UTF-32 32 0100 0001 0000 0000 0000 0000 0000 0000 1.064 ( encoding="UTF-32" ) keine Byte Order Mark

Mimik der UTF-8 Codierung

Die Nachfolgende Tabelle zeigt die Anwendung der UTF-8 Kodierung

Unicode-Bereich Bitbelegung
U-00000000 - U-0000007F : 0xxxxxxx
U-00000080 - U-000007FF : 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF : 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF : 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF : 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Wahl des Codierungsformats in der Praxis

Beispiel arabisches Dokument

Auf dieser Seite sehen Sie ein arabisches Dokument, das die unterschiedlichen Dateigrößen je nach gewähltem Codierungsformat noch einmal veranschaulichen soll.

Element Information Item

Aufbau eines Elementnamens

Die Listings zeigen Elemente aus unseren Beispieldokumenten.

  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <h>Fachhochschule Augsburg</h>
  <section>
   <h>Studiengang IAM</h>
   <h>3. Semester</h>
   <h>Wintersemester 2008/2009</h>
   <p>Montag, 08:00h-09:30h, Raum I102</p>
  </section>
  <Pflichtfach/>

Information eines Element Information Items am Beispiel

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Vorlesung>
  <Pflichtfach/>
  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel>
  <Semester>WS 2008/2009</Semester>
  Montag, 08:00h - 09:30h
  <Praktikum>Seminar</Praktikum>
</Vorlesung>

Aufbau eines Elementnamens

Grammatik des Start-Tags:

[40]    STag            ::=   '<' Name (S Attribute)* S? '>'
[41]    Attribute       ::=   Name Eq AttValue

Grammatik des Ende-Tags:

[42]    ETag            ::=   '</' Name  S? '>'

Aufbau eines Elementnamens

Grammatik der Elementnamen:

[4]    NameStartChar   ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]   NameChar        ::=   NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5]    Name            ::=   NameStartChar (NameChar)*
[6]    Names           ::=   Name (#x20 Name)*
[7]    Nmtoken         ::=   (NameChar)+
[8]    Nmtokens        ::=   Nmtoken (#x20 Nmtoken)*

Kleiner Vorgeschmack: Element mit Namensraum

Zur Verdeutlichung der Sonderstellung des Doppelpunkts ist hier ein Beispiel für ein Element mit deklarierten Namensraum aufgeführt:

<?xml version="1.1" encoding="UTF-8"?>
<Beispiel>
  <myNS:aParent xmlns:myNS="example.com">
    <myNS:anElement/>
  </myNS:aParent>
</Beispiel>

Tag vs. Element

Oftmals werden die Begriffe Tag und Element synonym verwendet. Dies ist jedoch nicht korrekt!

Ein Tag drückt lediglich den Namen eines Elements aus und liefert damit Information, die die Natur des Elements beschreibt. Dies kann durch beliebige erlaubte Zeichenketten geschehen, meistens trifft man jedoch sogenannte sprechende Tags an.
Ein Tag hat im Gegensatz zu einem Element keine Eltern- oder Kindknoten, etc. Es ist nur ein Bezeichner.

Semistrukturierte Information

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Vorlesung>
  <Pflichtfach/>
  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel>
  <Semester>WS 2008/2009</Semester>
  Montag, 08:00h - 09:30h
  <Praktikum>Seminar</Praktikum>
</Vorlesung>

Attribute

Attribute Information Item

Element oder Attribut?

Character Information Item

Character Information Item

Im Folgenden ist zum besseren Verständnis nochmals unser Beispieldokument in der Zusammenschau mit seinem Information Set aufgeführt.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Vorlesung>
  <Pflichtfach/>
  <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel>
  <Semester>WS 2008/2009</Semester>
  Montag, 08:00h - 09:30h
  <Praktikum>Seminar</Praktikum>
</Vorlesung>

Zeichenersetzungsmuster

Eine Reihe von Zeichen dürfen nicht als Text in einem XML-Dokument vorkommen, weil sie als Metasymbole der XML selbst dienen. Für diese Zeichen gibt es vordefinierte sogenannte Fluchtsymbole (escape characters), die stattdessen verwendet werden können ( Nachlesen in XML-Spezifikation ). XML-Prozessoren berücksichtigen diese Symbole und geben sie in der korrekten Darstellung an die Applikation weiter.

Entitätsreferenz Ausgedrücktes Zeichen
&amp; &
&lt; <
&gt; >
&apos; '
&quot; "

Inhalt (Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (2))

  1. Die XML Sprachfamilie [2]
  2. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (1) [31]
  3. Strukturelle Grundkonzepte: Die Extensible Markup Language (XML) und das XML Information Set (2) [30]

Comment Information Item

Comment Information Item

Grammatik für XML-Kommentare

[15]    Comment         ::=   '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Beispiel

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Vorlesung>
  <Pflichtfach/>
  <!-- Dies ist ein gültiger Kommentar -->
  <!-- Dieser Kommentar - und auch der Folgende - sind auch gültig!-->
  <!-- <Hochschule>Fachhochschule Augsburg</Hochschule>
  <Studiengang semester="3">IAM</Studiengang>
  <Titel>XML</Titel> -->
  <!-- Aber jetzt wird es kritisch. Dies -- ist KEIN gültiger Kommentar! -->
  <!-- Dies ist ebenfalls ungültig --->
  <!-- Und dies hier <!-- erst recht --> -->
</Vorlesung>

Comment Information Item

Eigenschaften des Comment Information Item

Document Type Declaration

Document Type Declaration - Grammatik

Grammatik für DTDs

[1]     document        ::=   ( prolog element Misc* ) - ( Char* RestrictedChar Char* )
[22]    prolog          ::=   XMLDecl Misc* (doctypedecl Misc*)?
[28]    doctypedecl     ::=   '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'
[28a]   DeclSep         ::=   PEReference | S
[28b]   intSubset       ::=   (markupdecl | DeclSep)*
[29]    markupdecl      ::=   elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment

Document Type Declaration - Beispiel

Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE someContent SYSTEM "abc.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<einErlaubtesElement/>

Document Type Declaration Information Item

Das DTD Information Item enthält all die Information, die in einem XML-Dokument über die DTD verfügbar ist:

Namespace Declaration Information Item

Für jeden Namensraum, der in einem XML-Dokument definiert wird, existiert ein Namespace Declaration Information Item mit folgenden Eigenschaften:

Namespace Declaration - Beispiel

Im folgenden XML-Dokument sehen Sie ein Beispieldokument mit Namensräumen.

<?xml version="1.0" encoding="UTF-8"?>
<wurzelelement>
  <elementA>...</elementA>
  <elementB xmlns="http://www.fh-augsburg.de">...</elementB>
  <elementC xmlns:abc="http://www.example.com">
     ...
    <abc:elementD/>
  </elementC>
</wurzelelement>

Namespace Declaration - Beispiel

Nachfolgend sehen Sie erneut unser Beispiel mit einer Auflistung der Namensräume für jedes Element.

<?xml version="1.0" encoding="UTF-8"?>
<wurzelelement>
  <elementA>...</elementA>
  <elementB xmlns="http://www.fh-augsburg.de">...</elementB>
  <elementC xmlns:abc="http://www.example.com">
     ...
    <abc:elementD/>
  </elementC>
</wurzelelement>
Elementname Namensraum
wurzelelement (leerer Namensraum)
elementA (leerer Namensraum)
elementB http://www.fh-augsburg.de
elementC (leerer Namensraum)
elementD http://www.example.com

Processing Instruction

Processing Instruction

Processing Instruction - Grammatik und Beispiel

Grammatik für Processing Instructions

[16]    PI              ::=   '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]    PITarget        ::=   Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

Beispiel

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Vorlesung>
  <Pflichtfach/>
  <?System1 a="3"?>
  ...
  <Praktikum>Seminar</Praktikum>
</Vorlesung>
Strenggenommen könnte man die Zeichenfolge XML als Präfix für einen Bezeichner verwenden, da dies nicht verboten wird. Dies ist jedoch nicht zu empfehlen.

Processing Instruction Information Item

Infoset-Eigenschaften eines Processing Instruction Information Item

Notation Information Item

Notation

Notation - Grammatik

Grammatik für Notations

[82]    NotationDecl    ::=   '<!NOTATION' S  Name  S (ExternalID | PublicID) S? '>'
[83]    PublicID        ::=   'PUBLIC' S PubidLiteral
[75]    ExternalID      ::=   'SYSTEM' S  SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
[11]    SystemLiteral   ::=   ('"' [^"]* '"') | ("'" [^']* "'")
[12]    PubidLiteral    ::=   '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
[13]    PubidChar       ::=   #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

Notation - Beispiel

Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE someContent [
<!NOTATION isoDate SYSTEM "http://www.iso.ch/markete/8601.pdf">
<!NOTATION gif PUBLIC            
    "-//Compuserve Information Services//NOTATION Graphics Interchange     
        Format//EN">
<!NOTATION hex SYSTEM "hexEditor.exe">
<!ELEMENT someContent (#PCDATA)>
<!ATTLIST someContent format NOTATION (hex) #IMPLIED> ]>

<someContent format="hex">4C 65 74 20 61 6C 6C 20 68 6F 70 65 20 61 
62 61 6E 64 6F 6E 2C 20 79 65 20 77 68 6F 20 6D 61 79 20 65 6E 74 
65 72 20 68 65 72 65 21</someContent>

Notation Information Item

Infoset-Eigenschaften eines Notation Information Item

Unexpanded Entity Reference

Unexpanded Entity Reference - Grammatik

Grammatik für Unexpanded Entity References

[71]    GEDecl          ::=   '<!ENTITY' S Name S EntityDef S? '>'
[4]     NameChar        ::=   Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar |    Extender
[73]    EntityDef       ::=   EntityValue | (ExternalID     NDataDecl?)
[9]     EntityValue     ::=   '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'"
[76]    NDataDecl       ::=   S 'NDATA' S Name

Unexpanded Entity Reference - Beispiel

Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE someContent [
 <!ELEMENT someContent ANY>
 <!ENTITY entA "xyz">
 <!ENTITY entB SYSTEM "http://www.barbara-zengler.de/vorlesung/toc.html">
 <!ENTITY entC PUBLIC "-//FHA//Symbol//DE" "file://symbols">
]>
<someContent>
&entA;
&entB;
&entC;
</someContent>

Unexpanded Entity Reference Information Item

Solange die Entitätsreferenzen noch nicht durch den Prozessor ersetzt (=expandiert) sind, liegen sie im Information Set als Unexpanded Entity Reference Information Item vor. Es hat folgende Eigenschaften:

Unparsed Entity Reference

Unparsed Entity Reference - Grammatik

Die Grammatik für ungeprüfte Entitätsreferenzen ist Teil der Grammatik für Unexpanded Entity References (hier erneut aufgeführt).

[71]    GEDecl          ::=   '<!ENTITY' S Name S EntityDef S? '>'
[4]     NameChar        ::=   Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar |    Extender
[73]    EntityDef       ::=   EntityValue | (ExternalID     NDataDecl?)
[9]     EntityValue     ::=   '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'"
[76]    NDataDecl       ::=   S 'NDATA' S Name

Unparsed Entity Reference - Beispiel

Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE someContent [
 <!ELEMENT someContent ANY>
 <!NOTATION gif PUBLIC "-//Compuserve Information Services//NOTATION Graphics Interchange Format//EN">
 <!ENTITY entA SYSTEM "xyz.gif" NDATA gif>
]>
<someContent>
&entA;
</someContent>

Unparsed Entity Reference Information Item

Für jede nicht geprüfte Entität eines XML-Dokuments gibt es ein Unparsed Entity Reference Information Item . Es hat folgende Eigenschaften:

Infoset - Übersicht

Informationseinheiten als Knoten, Beziehungen als (gerichtete) Kanten dargestellt.
Ausgangspunkt ist das in der Mitte dargestellte Document .
Lediglich Elemente verfügen über weitere Kindknoten und spannen so den Baum einen XML-Dokuments auf.
Alle übrigen Primitive sind überwiegend Blattknoten.

Wohlgeformtheit

Ein XML-Dokument, das den Prinzipien zur Strukturierung aus dem Information Set genügt, ist ein wohlgeformtes Dokument. Insbesondere genügt es folgenden 10 Regeln:

Wohlgeformtheit - Beispiel

Das folgende Beispiel zeigt ein nicht wohlgeformtes XML-Dokument, das mehreren Anforderungen nicht genügt.

<?xml version="1.0"?>
<root>
 <elementA att=a oder b>
  <elementB> if a<b ==> c
 </elementA>
 <elementC att1="42" att1="3.14">
  <elementD <?do-something?> >
 </elementC>
  </elementD>

 <!---- dies ist nicht erlaubt ---->
</root>

Weiterführende Links