1. Index
  2. HTML
  3. LaTeX
  4. Hardware
  5. Legende

Extensible Markup Language

XML definiert ein Datenformat für hierarchisch gegliederte Informationen. Ein wohlgeformtes Dokument beginnt mit einer Deklaration, die Version und Zeichensatz benennt, gefolgt von optionalen Stylesheets und einer DTD, die das Wurzelelement festlegt. Dieses enthält schließlich alle Knoten, aus denen der Baum aufgebaut wird.

Beispiel

hello.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <!DOCTYPE article [ … ]> <article> <title>Hello, World!</title> <section> <title>A Heading</title> <para>The quick brown fox jumps over a lazy dog.</para> </section> </article>

Syntax

Die formale Syntax in augmentierter Backus-Naur-Form lautet:

Nicht-Terminal Terminale Kommentar
document = declaration *misc
[doctype]
element *misc
declaration = <?xml version Magic
[encoding]
[standalone]?>
version = version="1.1)" Version
encoding = encoding="UTF-8" Zeichenkodierung
standalone = standalone="yes"
misc = comment | pi | stylesheet
stylesheet = <?xml-stylesheet type href
[title]
[media]
[charset]
[alternate]?> Darstellung
type = type="text/xsl"
href = href="uri"
title = title="qstring"
media = media="screen"
charset = charset="UTF-8"
alternate = alternate="yes"
doctype = <!DOCTYPE name Wurzelelementname
( PUBLIC identifier uri Registrierte DTD
| SYSTEM uri Lokale DTD
| [dtd] Eingebettete DTD
) >
identifier = "-//W3C//DTD XHTML 1.1//EN" Katalogschluessel
uri = "qstring" Dokumenttyp-Definition
element = emptytag
| starttag content endtag
emptytag = <name *attribute/>
starttag = <name *attribute>
endtag = </name>
attribute = name="qstring"
content = *( *CHAR
| cdata
| entityref
| comment
| pi
| element)
cdata = <![CDATA[*CHAR]]>
entityref = &name; Konstante
comment = <!-- *CHAR --> Kommentar
pi = <? *CHAR ?> Verarbeitungsanweisung
qstring = *CHAR Attribut
name = ALPHA *(ALPHA|IGIT|_|-|:) Bezeichner

Dokument-Typ-Definition

Eine DTD legt die Struktur eines XML-Dokuments fest. Sie kann zwar in das Dokument eingebettet werden, meistens ist es jedoch sinnvoller, einer separate Datei für eine Familie von Dokumente zu erstellen.

hello.dtd
<?xml version="1.0"?> <!ELEMENT article (title, section*)> <!ELEMENT section (title, para*)> <!ELEMENT title (#PCDATA)> <!ELEMENT para (#PCDATA)> <!ATTLIST para label ID #IMPLIED class CDATA; #IMPLIED >

Auch hierzu die formale Syntax:

Nicht-Terminal Terminale Kommentar
dtd = *( entity / element / attlist / comment)
entity = <!ENTITY name [ SYSTEM / PUBLIC ] qstring >
element = <!ELEMENT name content >
attlist = <!ATTLIST name *attribute >
comment = <!-- *CHAR -->
content = name Genau dieses Element
/ EMPTY Keine Kindelemente
/ ANY Beliebige Kindelemente
/ #PCDATA Beliebige Textknoten
/ content ? Kein oder ein Kindelement
/ content * Kein oder mehr Kindelemente
/ content + Ein oder mehr Kindelemente
/ content , content Liste
/ content | content Alternative
/ ( content ) Gruppierung
attribute = name type value
type = CDATA
/ ID
/ IDREF
/ IDREFS
/ NMTOKEN
/ NMTOKENS
/ ENTITY
/ ENTITIES
/ NOTATION
/ NOTATIONS
value = #REQUIRED verpflichtend
/ #IMPLIED optional
/ #FIXED qstring genau dieser Wert
/ qstring optional mit default

XML Path Language

Ein XPath selektiert Teilmengen innerhalb eines XML-Dokuments.

Folgende Achsen teilen das Dokument in disjunkte Teilmengen:

Achsen des Bösen
Nicht-Terminal Terminale Beschreibung
xpath /relative Absoluter Pfad von der Wurzel aus
relative/…/step Relativer Pfad vom aktuellen Kontextknoten aus
step axis::test[predicate]… Auswahlkriterien
axis @ entspricht attribute::
. entspricht self::node()
.. entspricht parent::node()
// entspricht /descendant-or-self::node()/
attribute Alle Attribute (Attribute sind KEINE Kinder)
namespace Namensraum
self Nur der Kontextknoten
parent Der Elternknoten
child Direkte Kindknoten ohne Enkel
ancestor Alle direkten Vorfahren
ancestor-or-self Alle direkten Vorfahren inklusive Kontextknoten
descendant Alle Nachfahren
descendant-or-self Alle Nachfahren inklusive Kontextknoten
following Alle Element ab dem Kontextknoten
following-sibling Jüngere Geschwister
preceding Alle Element bis zum Kontextknoten außer den direkten Vorfahren
preceding-sibling Ältere Geschwister
test *CHAR Nur Knoten mit diesem Namen
node() Alle 7 Knotentypen außer Attribute
text() Nur Textknoten
comment() Nur Kommentare
processing-instruction(…) Nur Verarbeitungsanweisungen
predicate number Index in der ausgewählten Knotenmenge
function
step rel-op qstring Vergleich
function nodeset-function Knotenmengen
string-function Textverarbeitung
boolean-function Wahrheitslogik
numeric-function Arithmetik
rel-op < | > | <= | >= | = | != Relationale Operatoren
and | or Boolesche Operatoren
arith-op + | - | * | div | mod Arithmetische Operatoren
number *DIGIT Numeral
qstring DQUOTE *CHAR DQUOTE Zeichenkette

XPath-Funktionen

Knotenmenge
number last () Anzahl der Knoten im Auswertungskontext
number position () Index des aktuellen Knotens
number count (node-set) Anzahl der Elemente
string local-name (node-set) Element- oder Attributname ohne Namensraum-Präfix
string namespace-uri (node-set) Namensraum als URL
string name (node-set) Präfix und Elementname
node-set id (object) Alle Knoten mit der ID des Objekts
Zeichenkette
string string (object) Interpretiert Inhalt als Zeichenkette
string concat (string, …) Hängt Inhalte aneinander
boolean starts-with (string, prefix) Prüft ein Präfix
boolean contains (string, substr) Prüft auf Teilmenge
string substring-before (string, sep) Liefert Bereich vor einem Trennzeichen
string substring-after (string, sep) Liefert Bereich nach einem Trennzeichen
string substring (string, number, number) Schneidet Teilmenge heraus
number string-length (string) Zählt die Anzahl der Zeichen
string normalize-space (string) Fasst Leerzeichen zusammen
string translate (string, from, to) Ersetzt einzelne Zeichen
Wahrheitslogik
boolean boolean (object) Interpretiert Inhalt als Wahrheitswert
boolean not (boolean) Invertiert einen Wahrheitswert
boolean true () Liefert immer Wahr
boolean false () Liefert immer Falsch
boolean lang (string) Prüft die Landessprache des Kontextknotens
Algebra
number number (object) Interpretiert Inhalt als Zahl
number sum (node-set) Addiert numerisch interpretierte Inhalte
number ceiling (number) Liefert nächstgrößere Ganzzahl
number floor (number) Liefert nächstkleinere Ganzzahl
number round (number) Rundet zur nächstliegenden Ganzzahl

XPointer

XPointer bieten einen standartisierte Syntax, um in URLs auf Teile innerhalb eines XML-Dokuments zu verweisen. Die Funktion range erweitert XPath um die Möglichkeit, Substrings in Textknoten zu identifizieren.

Nicht-Terminal Terminale Kommentar
xpointer = xpointer (Xpath *range) Element mit allen Kinden
range = range (Xpath) Element mit umgebenden Elementen
= range-inside (Xpath) Element ohne umgebende Elemente
= range-to (Xpath)
= string-range (Xpath, string, first, last)

XLink erweitert die Syntax um Attribute, um Dokumente zueinander in Beziehung zu setzen.

Nicht-Terminal Terminale Kommentar
xlink = href
| role
| title
| type
| show
| actuate
href = xlink:href=uri
role = xlink:role=uri
title = xlink:title=qstring
type = xlink:type=
( "simple"
| "extended"
| "locator"
| "arc"
| "title"
| "resource")
show = xlink:show=
( "new" Zieldokument in Neuem Fenster öffnen
| "replace" Zieldokument ins aktuellen Fesnter laden
| "embed" Zieldokumenet einbetten
| "other" Verhalten wird durch andere Elemente gesteuert
| "none") Anwendung entscheidet
actuate = xlink:actuate=
( "onLoad" Link beim Laden folgen
| "onRequest" Link auf Anfrage folgen
| "other" Verhalten wird durch andere Elemente gesteuert
| "none") Anwendung entscheidet

Extensible Stylesheet Language

XSL beschreibt die Transformation von XML-Dokumenten in andere XML-Dialekte wie zum Beispiel XHTML oder beliebige andere Datenformate.

Ein XSLT-Prozessor wie xsltproc(1) führt die Transformation aus. Dieser sucht, beginnend beim Wurzelknoten, das am besten passendes Template und führt es aus. Zum Beispiel:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="yes"/>
	<!-- root -->
	<xsl:template match="/">
		<html>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

Die Funktion xsl:apply-templates iteriert über alle Kinder des aktuellen Knotens, sucht wiederum das am besten passende Template und ruft dieses auf. Folgendes Template ist implizit fest eingebaut. Es traversiert alle Kinder des aktuellen Knotens und gibt den Inhalt aller Textknoten aus.

<xsl:template match="*|/">
	<xsl:apply-templates/>
</xsl:template>
Element Inhalt Beschreibung
Wurzelelement
xsl:transform Alternativer Name
xsl:stylesheet xsl:include* xsl:import*Wurzelelement
top-level-elements
version 1.0 | 2.0 XSL-Version
id ID Eindeutiger Bezeichner
extension-element-prefixes Prefix Elemente aus den aufgelisteten Namensräumen sind Erweiterungen
exclude-result-prefixes Prefix Elemente aus den aufgelisteten Namensräumen nicht ausgeben
xsl:include Stylesheet mit gleicher Priorität einbinden
href Url
xsl:import Stylesheet mit geringerer Priorität einbinden
href Url
Oberste Ebene
xsl:output Steuert das Verhalten des XSLT Prozessors
method xml | html | xhtml | text Ausgabeformat
version 1.0
encoding UTF-8 | ISO-8859-1 | … Zeichenkodierung der Ausgabe
omit-xml-declaration yes | no Unterdrückt die XML-Deklaration
standalone yes | no standalone-Attribute in der XML-Deklaration
doctype-public Qstring PUBLIC-Identifier in der DTD
doctype-system Qstring SYSTEM-Identifier in der DTD
cdata-section-elements Qname Textknoten als CDATA-Sektion ausgeben
indent yes | no Einrückung des Ausgabedokuments
media-type text/xml | text/html | … MIME-Typ des Ausgabedokuments
name Qname
byte-order-mark yes | no
escape-uri-attributes yes | no
include-content-type yes | no
media-type String
normalization-form none | NFC | NFD | NFKC | NFKD
fully-normalized | NMtoken
undeclare-prefixes yes | no
use-character-maps Qnames
xsl:namespace-alias Ersetzt Namensraum-Präfixe in Elementen
stylesheet-prefix Prefix | #default Alter Name
result-prefix Prefix | #default Neuer Name
xsl:strip-space Leerzeichen normalisieren.
elements Token Standardmäßig bei allen Elementen
xsl:preserve-space Leerzeichen unverändert ins Ausgabedokument übernehmen.
elements Token
xsl:attribute-set (xsl:attribute)* Definiert Attribute zur Verwendung in <xsl:element>
name Qname Identifikation
use-attribute-sets Qname Bindet weitere Attributmengen ein
xsl:variable Element Definiert eine Variable
name Qname Name der Variable, wird mit $… referenziert
select Xpath Wert der Variable
xsl:decimal-format Element Muster für die Umwandlung von Gleitpunktzahlen in format-number()
name Qname Identifikation; Das Muster wird zur Vorgabe, wenn dieses Attribut fehlt
decimal-separator Char Trennzeichen für Dezimalstellen, Vorgabe ist .
grouping-separator Char Trennzeichen für Gruppen, Vorgabe ist ,
infinity String Symbol für Unendlich, Vorgabe ist infinity
minus-sign Char Präfix für negative Zahlen, Vorgabe ist -
NaN String Symbol für Nicht-Zahl, Vorgabe ist NaN
percent Char Symbol für Prozent, Vorgabe ist %
per-mille Char Symbol für Promille
zero-digit Char Symbol für die Null und Basis für andere Ziffern, Vorgabe ist 0
digit Char Zeichen für Muster, Vorgabe ist #
pattern-separator Char Trennzeichen für positive und negative Submuster, Vorgabe ist ;
xsl:key Element mit einem Schlüssel aus.
name Qname Ankername für key()
match Pattern
use Xpath
xsl:template (xsl:param)* ElementFunktion
match Pattern Muster für die Auswahl des Templates bei <xsl:apply-templates>
name Qname Marke für Referenzierung, zum Beispiel durch <xsl:call-template>
mode Token Unterscheidet Funktionen für dasselbe Muster
priority Number Gewichtung für <xsl:include> und <xsl:import>
as Sequence
xsl:param Element Parameterliste der Funktion, Vorgabewert, wenn selectAttribut leer ist
name Qname Variablenname, Wert wird mit {$name} ausgegeben.
select Xpath Vorgabewert
Kontrollfluss
xsl:apply-imports Ruft Funktionen aus mit <xsl:import> importierten Stylesheets auf
xsl:apply-templates (xsl:sort | xsl:with-param)* Ruft Funktionen für alle selektierten Knoten auf
select node-set Default: Alle Kinder des Kontextknotens
mode Qname Wählt die Funktion anhand des mode-Attributs aus
xsl:call-template xsl:with-param Ruft Funktion für den Kontextknoten auf
name Qname Name der Funktion
xsl:with-param Element Parameter für den Aufruf einer Funktion
name Qname Name des Parameters
select Xpath Wert des Parameter, Inhalt muss leer sein
xsl:if Element Bedingter Einschluss
test boolean Kriterium
xsl:choose (xsl:when+) (xsl:otherwise?) Fallunterscheidung
xsl:when Element Spezifischer Fall
test boolean Kriterium
xsl:otherwise Element Allgemeiner Fall
xsl:for-each Element Iteriert über Knotenliste
select node-set XPath zur Auswahl der Knotenmenge
separator String Trennzeichen für Listenausgabe
disable-output-escaping yes | no @todo
xsl:sort Sortiert eine Knotenliste
select string Sortierkriterium
lang en | de | … Kultureller Kontext
data-type text | number | … Alphabetisch oder numerisch sortieren
order ascending | descinding Reihenfolge aufsteigend oder absteigend
case-order upper-first | lower-first Groß- vor Kleinbuchstaben oder umgekehrt
collation uri
stable yes | no
xsl:fallback Element Alternative für nicht unterstützte Erweiterungen
xsl:message Element Sendet Nachricht an den XSLT-Prozessor
terminate yes | no XSL-Verarbeitung abbrechen
Ausgabe
xsl:value-of Fügt den Textinhalt eines Knotens ein, abhängig vom Knotentyp
select string XPath-Ausdruck
disable-output-escaping yes | no Zeichen wie < und & nicht automatisch ersetzen.
xsl:text Element Gibt Text aus, ohne den Leerraum zu normalisieren
disable-output-escaping yes | no Zeichen wie < und & nicht automatisch ersetzen.
xsl:element Element Gibt ein Element aus
name Qname Elementname
namespace Url Namensraum
use-attribute-sets Qname Sammlung von Attributen
xsl:attribute Element Fügt dem übergeordneten Element ein Attribut hinzu
name Qname Attributname
namespace Url Namensraum
xsl:comment
xsl:processing-instruction
name Qname
xsl:copy Kopiert den aktuellen Knoten ins Ausgabedokument
use-attribute-sets Qname Sammlung von Attributen
xsl:copy-of Kopiert den selektierten Teilbaum ins Ausgabedokument
select Xpath
xsl:number Gibt eine Zahl aus
value number Numerischer XPath-Ausdruck
level single | multiple | any Modus für die Summenbildung
count Pattern Abzahl passender Knoten auf dem entsprechenden level
from Pattern Legt den Startknoten für die Zählung fest
format 1 | 01 | A | a | i | I Startzeichen für die Zählung
lang en | de | … Sprachcode für den kulturellen Kontext.
letter-value alphabetic | traditional Alphabtisch, um z.B. I, J, K zählen zu können
grouping-separator Char Trennzeichen für Tausender-Gruppen
grouping-size Number Im Dezimalsystem sind Dreiergruppen üblich
Neu
xsl:sequence
select Xpath
xsl:for-each-group
select Xpath
group-by Xpath
group-adjacent Xpath
group-starting-with Pattern
group-ending-with Pattern
collation Url
xsl:analyze-string
select Xpath
regex String
flags String
xsl:matching-substring Element
xsl:non-matching-substring Element
xsl:import-schema
namespace Url
schema-location Url
xsl:next-match Element
xsl:character-map
name Qname
use-character-maps Qname
xsl:namespace Element
name NCname
select Xpath
xsl:perform-sort Element
select Xpath
Universal
Template Text Element erzeugen, Leerraum im Text normalisieren.
Attribute …{Xpath}… Geschweiften Klammern durch Ergebnis des Ausdrucks ersetzten.

XML-Dokumente verarbeiten

Prüfe Validität gegen die im Dokument angegebene Dokumettyp-Definition

xmllint --noout File.xml

Prüfe Validität gegen RelaxNG-Schema

xmllint --noout --relaxng File.rng File.xml

Formatiere neu und rücke ein

XMLLINT_INDENT="  " xmllint --format File.xml

Konvertiere HTML nach XML

xmllint --html --xmlout File.html > File.xhtml

Transformiere mit dem im Dokument angegebenen Stylesheet

xsltproc File.xml

Transformiere mit externem Stylesheet

xsltproc File.xsl File.xml

Extrahiere einen Knotensatz mit XPath

xpath -e Expression File.xml

Flache Hierarchie aller Knoten in XPath-Ausdrücke ab

xml2 < data.xml

Literatur