Einleitung
XML Sprachkonstrukte
XML Helfer
Ausblick
HTML
SGML
XML
eXtensible
Markup
Language
W3C Recommendation,
10. Feb. 1998
von SGML, TEI, HTML Leuten
Basis für viele Dinge
nicht erweiterbar
nur einfache Struktur
keine Validierung
HTML Beispiel (1)
<HTML> <HEAD> <TITLE>Beispiel </TITLE> </HEAD> <BODY> <H1>Überschrift</H1> <P>Ein Paragraph mit Text ...</P> </BODY> </HTML>
HTML Beispiel (2)
<UL> <LI>Eine ungeordnete <LI>Liste <LI>it verschiedenen <LI>Punkten </UL>
total Erweiterbar
komplexe Struktur
strenge Validierung
Spezifikation: 200+ Seiten
XML Spezifikation: 40 Seiten
SGML Beispiel (1)
<!ELEMENT COMPANY - - (NAME?,PRODUCT?) > <!ELEMENT NAME - O (#PCDATA)> <!ELEMENT PRODUCT - - (ITEM*)> <!ELEMENT ITEM - O (#PCDATA)> <!ENTITY ... > <!ATTLIST COMPANY type (non-profit | limited | corp) >
SGML Beispiel (2)
<COMPANY type=corp > <NAME>All you want <PRODUCT> <ITEM>Apartments <ITEM>Automobiles <ITEM>... </PRODUCT> </COMPANY>
Teilmenge von SGML
einfache Spezifikation
offener Standard
HTML ähnlich
International, Unicode
Syntax Prüfbar
Validierbar
erweiterbar
effizient
schon Verfügbar
MS IE, Netscape
verbesserte Links, XLL
Style Sheets, XSL
kein Ersatz für SGML
kein Ersatz für HTML
Beispiel: .xml .dtd
<p secret="false">This sentence is in the content of an element whose type is "p"; the content is found between the start-tag and the end-tag. The paragraph has an attribute named "secret" whose value is "false". <IMG SRC='icon.jpg'/> is an empty element, distinguished by the fact that it ends with "/>".</p>
<!doctype book SYSTEM "book.dtd" [<!entity toc SYSTEM "toc.xml"> <!entity chap1 SYSTEM "d/c1.xml"> ]> <book> <head>&toc;</head> <body> &chap1; &chap2; </body></book>
<!doctype eg [<!entity xml "Extensible Markup Language"> ]>
<eg>The new &xml; standard is fully internationalized; the following are all examples of the digit "1": 1 (in ASCII), ١ (in Devanagari), १ (in Arabic), and ൧ (in Malayalam).</eg>
XML-Namespace,
Namensräume
XLink, XML Linking Language,
Verweise aus XML Dokumenten heraus
XPointer, XML Pointer Language,
Zeiger in XML Dokumente hinein
XSL, Extensible Stylesheet Language
Stildefinitionen
Document Type Definition
"wellformed" XML Dokumente
geht ohne DTD
"valid" XML Dokumente
nur bezüglich einer DTD
Referenz per URI oder Inline
XML verlangt korrekte Schachtelung der Elemente
leere Elemente sind speziell gekennzeichnet
nur ein einziges "root" Element
Attributwerte in Quotes
Entities brauchen eine DTD
Elementnamen sind Case-sensitiv
White-Space im Inhalt ist relevant
mehrere Zeichensätze sind verwendbar
es gibt nur wenige reservierte Zeichen
XML Deklaration
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
Deklaration des Dokumenttyps
<!doctype book SYSTEM fileurl > <!doctype memo [ ... ] > <!doctype html PUBLIC bezeichner url >
Dokument-Instanz
<book> <head> ... </head> <body> ... </body> </book>
Elemente
<!ELEMENT name Inhalt >
Attribute
<!ATTLIST element AttName AttTyp Default >
Entities
<!ENTITY name wert > &name;
Character Data, CDATA
<![CDATA[ dies ist kein <tag/> ]]>
Parsed Character Data, PCDATA
Mischung aus CDATA und Elementen
Anweisungen, Processing Instructions
<?PHP ... ?>
Kommentare
<!-- ... -->
Leerraum, White-Space
ist im Inhalt signifikant
Folgen
(from, to, subject, message, signature)
Auswahl
(para|list|image)
Wiederholungsoperatoren
+
einmal oder mehr
*
nullmal oder mehr
?
nullmal oder einmal
beliebiger Inhalt
(#PCDATA)
beliebige Zusammensetzungen
(head, (p|list|image)*, div+, (#PCDATA|em|strong)
leeres Element
EMPTY
beliebiges Element
ANY
Attribut Typ
CDATA
Zeichenketten
ID
Bezeichner
IDREF
Verweis auf Bezeichner
IDREFS
Folge von IDREF
ENTITY
ENTITIES
Folge von ENTITYs
NMTOKEN
NMTOKENS
Folge von NMTOKENs
ENUMERATION
Aufzählung von Werten
NOTATION
Festlegung von Wertformaten
(EN|FR|GR)
Enumeration, Aufzählung
Attribut Default
#IMPLIED
wird von der Anwendung erkannt
#REQUIRED
muss angegeben werden
#FIXED wert
fester Wert
wert
Defaultwert
Beispiel
jahr #FIXED "1999" lang (EN|FR|GR) "EN" bez #ID #IMPLIED href #CDATA #REQUIRED
Beschreibung des Dokumententyps
<?xml encoding="US-ASCII"?> <!ELEMENT personals (person)+> <!ELEMENT person (name,email*,url*,link?)> <!ATTLIST person id ID #REQUIRED> <!ELEMENT family (#PCDATA)> <!ELEMENT given (#PCDATA)> <!ELEMENT name (#PCDATA|family|given)*> <!ELEMENT email (#PCDATA)> <!ELEMENT url EMPTY> <!ATTLIST url href CDATA #REQUIRED> <!ELEMENT link EMPTY> <!ATTLIST link manager IDREF #IMPLIED subordinates IDREFS #IMPLIED>
XML Dokument entsprechend dieser DTD
<?xml version="1.0"?> <!DOCTYPE personals SYSTEM "personal.dtd"> <personals> ... <person id="K.TAMURA"> <name> <family>TAMURA</family> <given>Kent</given> </name> <!-- This URL is mail address.--> <url href="mailto:kent@trl.ibm.co.jp"/> <url href="mailto:tkent@jp.ibm.com"/> <link manager="H.MARUYAMA"/> </person> </personals>
Erleichtert die Verwendung verschiedener DTDs im gleichen Dokument.
Vordefinierte Namensräume
xml
immer auf w3c/XML/namespace
und xmlns
immer leer
Default Namespace xmlns="..."
Definierte Namespaces xmlns:spec="..."
Definition
<X xmlns:spec="http://www.w3.org/specpath/" > <spec:tag ...> ... </spec:tag> </X>
<xml:stylesheet xmlns="http://www.w3.org/TR/WD-xsl" xmlns:latex="http://www.inria.fr/koala/XML/xslProcessor/Latex" result-ns="latex" >
Verwendung
<em> ... </em> <latex:em> ... </latex:em> <HTML:A HREF="...">Beschreibung</HTML:A> <person HTML:href="..."> ... </person>
Am Anfang XLL, jetzt aufgeteilt in XLink und XPointer.
Definition durch Attribut
xml:link="type"
mögliche Typen
simple
wie A in HTML
extended
erweitert, volles XLink
locator
nur Verweis
group
Zusammenfassung von mehreren Links
document
Elemente der Zusammenfassung
Locator, Verweis
href="connector"
Verbinder, Connectors
URI#XPointer
Client kümmert sich um Auflösung
URI|Xpointer
Auflösung unspezifiziert
URI?XML-XPTR=Xpointer
Server kümmert sich um Auflösung
Anwendung
<L xml:link="simple" href="http://host/path/doc.html#xyz"> text </L>
Verhaltensattribute von Links
show="..."
Anzeigeverhalten
new
Anzeige in neuem Fenster
replace
Anzeige im aktuellen Fenster
embed
Einfügen in das aktuelle Fenster
actuate="..."
Aktivierungsverhalten
auto
automatische Anzeige
user
Anzeige nur nach Benutzerwunsch
inline="..."
Beschreibungsanzeige
true
Elementinhalt gehört zum Text
false
Anzeige des Inhalts nur nach Wunsch
behavior="CDATA"
freie Zusatzinformationen
Beispiel von oben
<X xml:link="group" {oder "extended"} > <L xml:link="document" {oder nichts} ROLE="TR" TITLE="Übersetzung" SHOW="NEW" HREF="/cgi-bin/xlate?term=Verweis" /> <L xml:link="document" ROLE="Kontext" TITLE="Links im Kontext" SHOW="REPLACE" HREF="link-spec.html#verweis" /> <L xml:link="document" ROLE="Bild" TITLE="Links in Bildern" SHOW="EMBED" HREF="bild.gif" /> <L xml:link="document" ROLE="Tutorium" TITLE="Link Tutorium" SHOW="NEW" HREF="xml-tut.html#ID(def-link)..DITTO,NEXT(3,P)" /> Verweise </X>
mit der DTD
<!ELEMENT X (#PCDATA|L)* > <!ELEMENT L EMPTY > <!ATTLIST X xml:link CDATA #FIXED "group" > <!ATTLIST L xml:link CDATA #FIXED "document" >
Verweise auf Teile/Fragmente von Dokumenten.
Steht in enger Beziehung zu DOM.
Absolute Verweise
root()
der Anfang eines Dokuments
origin()
id(name)
Element mit einem bestimmten Namen
html(Name)
HTML-Element mit einem bestimmten Namen
Relative Verweise
child(select)
select-tes Kindelement
descendent(select)
ancestor(select)
preceding(select)
Vorgänger Knoten
following(select)
Nachfolger Knoten
psibling(select)
Vorgänger Sibling
fsibling(select)
Nachfolger Sibling
Selektoren für relative Verweise
n | -n | all
Instanz-Nummer
element
Names eines Elements
#element | #pi | #comment | #text | # cdata | #all
Knotentyp
attributname | *
Knoten mit bestimmtem Attribut
#IMPLIED | Value | "Value" | *
Werte des Attributs
Verweise auf Bereiche
span(vonXpointer, bisXpointer)
Verweise auf Werte von Attributen
attr(name)
Verweise auf (Teile von) Zeichenketten
string(select, "String", position)
Beispiele
root().child(1) child(2) child(3,DIV1).child(2,DIV2).child(-9,P) id(xyz).span(child(3),child(5)) http://host/path/file#child(2,CHAP).child(3,SEC)
DSSSL in XML Syntax
wesentlich mächtiger als CSS, z.B. Numerierung
Formating Objects (FO) bezeichnen die
elementaren formatierbaren Objekte
bei DSSSL flow objects
XSL Spezifikation definiert FO Vokabular
XSL Bearbeitung erzeugt Baum von FO
DOCTYPE ist xsl:stylesheet
xsl:template
wählt Element aus und beschreibt seine Formatierung
xsl:process
stößt Bearbeitung des Inhalts an
EM { font-family: roman }XSL to CSS:
<xsl:template match='em'> <css:chunk font-family="roman"> <xsl:process-children/> </css:chunk> </xsl:template>XSL to LaTeX:
<xsl:template match='em'> <xsl:text>{\em </xsl:text> <xsl:process-children/> <xsl:text>}</xsl:text> </xsl:template>
Beispiel eines XML Dokuments
Konversion nach HTML und LaTeX mit Koala
xsl:import
Einfügen von externen Definitionen (überschreibend)
xsl:include
Einfügen von externen Definitionen (kombinierend)
xsl:id
Definition von eindeutigen Bezeichnern
xsl:strip-space
, xsl:preserve-space
Entfernen oder Einfügen von Leerraum im Inhalt
xsl:macro
Definition eines "Unterprogramms"
xsl:attribute-set
definiert Liste von Attributen
xsl:constant
Definition von Konstanten
xsl:template
Definition von Ersetzungsmustern
<xsl:template match="pattern">
Definition eines Erkennungsmusters
alles in beliebiger Reihenfolge
Aus Knoten (nodes) eines Dokuments werden Ergebnisknoten gebildet.
Knoten sind: Elemente, Attribute, etc.
match
Erkennung erfolgt relativ zum aktuellen (current) Knoten
p1 | p2
mehrere Patterns als Alternativen
n1/n2
Kontextangabe, n2 als Subknoten von n1, eine Ebene
/
Root Knoten
n1//n2
Kontextangabe, n2 als Subknoten von n1, beliebig tiefere Ebene
*/p
Wildcard, p als Subknoten irgendwas
.
aktueller (current) Knoten
..
Elternknoten
@attname
selektiert ein bestimmtes Attribut
[ test ]
selektiert Knoten, für die "test" zu trifft
list[@type="ordered"]
selektiert Listen vom Typ "geordnet"
weitere Tests:
first-of-any()
,
last-of-any()
first-of-type()
,
last-of-type()
id(n)
, ancestor()
Beispiel
section/list[@type="ordered" and last-of-type()]
Templates erzeugen Stil-Ausgabe und stossen die Verarbeitung von (Sub-) Knoten an.
Literale, die XSL nicht kennt, werden in den (Ausgabe-) Knoten kopiert
xsl:text
oder unbekannte Literale
erzeugen einen Text-Knoten
xsl:element name=".."
erzeugt einen extra Element-Knoten mit angegebenem Namen
xsl:attribute name=".."
erzeugt einen extra Attribut-Knoten mit angegebenem Namen
xsl:pi
erzeugt einen Processing-Instruktion-Knoten
<xsl:pi name="php">echo "Hallo" </xsl:pi>erzeugt
<?php echo "Hallo" ?>
xsl:comment
erzeugt einen Kommentar-Knoten
xsl:apply-templates select="pattern"
allgemeiner Aufruf der Template-Verarbeitung
select="pattern"
ist (bei allen Verarbeitungstemplates)
optional, falls vorhanden werden nur Knoten des pattern-Typs
ausgewählt, sonst alle
xsl:for-each
Verarbeitung für alle (angegebenen) Subknoten
mode="bezeichnung"
wählt nur Templates mit dem gleichen mode-Attribut
xsl:sort order=(ascending|descending)
data-type=(text|number)
lang=language
case-order=(upper-first|lower-first)
Sortiert entsprechend den Kriterien in
xsl:apply-templates
und
xsl:for-each
xsl:number level=(single|multi|any)
count="bezeichner"
from="start-wert"
format="beispiel"
erzeugt Nummern-Knoten entsprechend den Vorgaben bezüglich
der Eingabeknoten
xsl:counter name="bezeichner"
format="beispiel"
erzeugt Nummern-Knoten entsprechend den Vorgaben bezüglich
der Ausgabeknoten
xsl:counter-increment="bezeichner"
xsl:counter-reset="bezeichner"
format="beispiel"
erzeugt Knoten entsprechend dem Format-Beispiel
beispiel=(1|A|a|i|I|001)
digit-group-sep=","
n-digits-per-group="3"
xsl:if test="bedingung"
Verarbeitung nur falls die Bedingung wahr ist
xsl:choose
mit
xsl:when test="bedingung"
Verarbeitung wie in "switch" nur falls die Bedingung wahr ist
xsl:copy
Kopiert den aktuellen Knoten
xsl:value-of select="pattern"
berechnet den Wert des angegebenen Musters,
z.B. eines Attributs
xsl:constant name=".." value=".."
definiert (Literal-) Konstanten
Zunächst für Online und Druck-Dokumente.
Spezifikation der grundlegenden Elemente, ohne die Details einer Implementierung festzulegen.
Formatierung durch areas (wie box in CSS) und spaces (Zwischenräume).
fo:block
Formatierung eines Blocks mit diversen Attributen
fo:character
Formatierung eines Zeichens mit diversen Attributen
fo:display-graphic
Formatierung einer Grafik (z.B. GIF-Image) mit diversen Attributen
fo:list-block
Formatierung einer Liste von Blocks mit diversen Attributen
fo:list-item
Formatierung eines Listenelements mit diversen Attributen
background-color
Attribut für Hintergrundfarbe
font-style
Attribut für Schriftstil
SAX
Simple API for XML
XML4J
XML-Parser in Java von IBM, mit DTD und DOM1
msxml
XML-Parser in Java von Microsoft, mit DOM1 ohne DTD
Koala
XSL Processor
Lotus
XSL Processor
RDF
Resource Description Framework
PICS, CDF, CRP
OFX Open Financial Exchange
OSD Open Software Distribution
CML Chemical Markup Language
MML Mathematical Markup Language
2. Februar 1999
XML 1.0,
W3C Recommendation, 10. Feb. 1998
XSL 1.0,
W3C Working Draft, 16. Dec. 1998
XLink,
W3C Working Draft, 3. Mar. 1998
XPointer,
W3C Working Draft, 3. Mar. 1998
Namespaces in XML
W3C Recommendation, 17. Jan. 1999
XML-CSS
W3C Note, 11. Sept. 1998
© Universität Mannheim, Rechenzentrum, 1998/1999.