XML und seine Kinder

XML und seine Kinder

@(#) 17.Jan 23:28 Reinhard Wobst (r dot wobst at gmx at de)


XML (extensible markup language) =

--> Format für Dokumentenaustausch


Beispiel

<doc lang="chin">
  <adresse>
    <name>Schlötel</name>
    <vorname>Dietmal</vorname>
    <betrieb form="abkuerzung">DLEWACK</betrieb>
    <telefon>(0190) 666 666</telefon>
  </adresse>
</doc>

sehr softwarefreundlich!

weidaweida


Unterschied XML-HTML:

weidaweida


XHTML: HTML mit XML-Syntax, aber noch browserkompatibel (Migration)

Beispiele für XML-Anwendungen:

"small is beautiful" - Teilung der Aufgaben zwischen verschiedenen Applikationen, lesbares Zwischenformat

weidaweida


Darstellung im Web (oft auch für Druck):

Leistungsfähiges Triple, reicht schon für viele Zwecke (wie z.B. Publishing); Besprechung im Folgenden.

weidaweida


*** XML:

Prinzipieller Aufbau:

<?xml version="1.0" ...?>		Header
<rootelement> ... text ... element ... </rootelement>

1. Element:

<elementname att1="..." att2="...">

elementname = [namespace:]identifier

Identifier=[a-z_A-Z\-0-9]+

Namespace wichtig, bereitet aber ständig Probleme

Beispiel:

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		version="1.0">
<xsl:output method='html'/>
  <xsl:template match="doc">
    <HTML><BODY><TABLE>

erstes Element = Dokumentname (HTML: <html>)

leeres Element: <name .../>

--> in XML also <br/>, nicht <br> !

ACHTUNG!

<name att="value">content;</name> = ELEMENT
<name att="value">                = START-TAG
</name>                           = END-TAG

weidaweida



Verwendung: Wo Attribut einsetzen, wo Text?

Element:

Attribut:

weidaweida


2. Kommentar

<!-- comment -->

nicht verschachtelbar, darf nicht "--" enthalten

3. PI (Processing instruction):

<? anything ?>
"Persönliche Anweisung" für den Parser; <?xml version="1.0" ...?> ist damit gleichzeitig Anweisung für SGML-Parser: Achtung, hier kommt XML!

Bedeutung außer für spezielle Namen wie xml, xsl, xsi nicht festgelegt.

Verwendung: Verweis auf Stylesheet, Informationen für das Setzprogramm, Index ...

weidaweida


4. Entities

Bessere Bezeichnung eigentlich "Makros". Form:

Namens-Entities: &identifier;
Zeichen-Entieties: &#dezimalzahl; und &#xhexadezimalzahl;

Beispiel: &#246; = ö
UNICODE!

Fünf Namens-Entities sind voreingestellt:

&lt; = <
&gt; = >
&amp; = &
&quot; = "
&apos; = '

Alle anderen Namens-Entities müssen in einer DTD vordefiniert werden!

Komplexe Ersetzungen möglich, z.B. ganze Dokumente (wie #include), aber auch Bilder (über NDATA-Deklarationen, s.u.)

weidaweida


5. CDATA:

Entspricht beinahe "<pre>" bei HTML:

<![CDATA[ if(x < y) p = &nn; ]]>
nicht erwähnte Feinheiten: Attributnamen immer in '...' oder "..."; Quoting; whitespace; Entity-Regeln, standalone ...

Derzeit schon XML-Standard 1.1, verschmäht

weidaweida


*** DTD:

Document type definition, Syntaxbeschreibung für XML; Aussehen ungefähr so:


<!DOCTYPE _1st_element_ [
<!ELEMENT name
	(ALL|#PCDATA|EMPTY|(elem1*|elem2+)|elem3?|(#PCDATA)*,elem4,elem5)>
<!ATTLIST _element_name_
	att1 CDATA    #REQUIRED
	att2 NMTOKENS #IMPLIED
	att3 (grün|rot|blau) "grün"
	...>
<!ENTITY st "UNIX-Stammtisch">		<!-- &st; -->
				     <!-- Parameter-Enities gibt es auch -->
<!NOTATION jpg SYSTEM "image/jpeg">	<!-- nicht standardisiert -->
]>					<!-- end doctype -->
<doc> ... (Dokument) ... </doc>

weidaweida


*** CSS:

Cascading stylesheet

Beispiel: Weihnachtskarte für O'Reilly -

OR.xml =

<?xml version="1.0" standalone="no" ?>
<?xml-stylesheet type="txt/css" href="OR.css" ?>
<greetings>
  Zum Neuen Jahr w&#252;nscht der gesamten Redaktion alles
  Gute, weiterhin einen best&#228;ndigen Platz auf dem
  Buchmarkt sowie m&#246;glichst wenig XML-Fehler :-)

<sign>..........................</sign> </greetings> <!-- Hurra, es klappt, es klappt!! -->

OR.css =

greetings {
  display: block;
  border-style: solid;
  border-color: red;
  margin: 1em;
  padding: 2em;
  /* text-align: justify; */		/* sah doch nicht so gut aus */
  font-family: helvetica;
  background-color: yellow;
  font-size: 14pt;
}

greetings > sign { display: block; margin-top: 3em; text-align: right; }

Problem mit Opera (old) bei "border-style: groove;": Immer noch einfacher Rand, wurde aber blau :-(
Opera 6.0 Beta: geht :-)

weidaweida


50 (CSS1) bzw. 120 (CSS2) Features;

weidaweida


Weiterentwicklungen (ab hier wird's interessant)

DTD ist starr:

XSchema, kann Reihenfolgen bestimmen, Wertetypen (auch Text) u.v.a.; ist XML, unterstützt auch Namespaces, soll aber kein glücklicher Wurf sein

CSS ist starr:

XSL = X stylesheet language, eigentlich XSL-FO

--> Formatierung ist zu eng gefaßt, reicht nicht für notwendige Transformationen

weidaweida


XSLT = X stylesheet language for transformations

Anwendungen universell: Ausgabe als PDF/HTML, Inhalts-/Stichwortverzeichnisse generieren, Sortieren, Durchnummerieren, in Datenbankformat konvertieren, File in Teile aufspalten (einzelne Kapitel, Slideshow generieren) ...

weidaweida


Beispiel:

XML source

<source>
<bold>Hello, world.</bold>
<red> I am </red>
<italic> fine.</italic>
</source>
Output
<p>
  <b>Hello, world.</b>
</p>
<p font color="red"> I am </p>
<p>
  <i> fine.</i>
</p>

HTML view

Hello, world.

I am

fine.

weidaweida


XSLT stylesheet
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="bold"> <p> <b> <xsl:value-of select="."/> </b> </p> </xsl:template>
<xsl:template match="red"> <p font "color=red"> <xsl:value-of select="."/> </p> </xsl:template>
<xsl:template match="italic"> <p> <i> <xsl:value-of select="."/> </i> </p> </xsl:template>
</xsl:stylesheet>

weidaweida


Probleme

Hoffnung:
XPath2.0 mit Schleifen u.a.;
Javaskript-Erweiterung (Einbeziehung des DOM-Prozessors)
- vieles wird einfacher.

weidaweida


Weitere Begriffe

XPath: Lokalisierung, ist z.B. für XSLT sehr wichtig. Beispiel:

select="question[3]/answer[1]"
select="id('start')//question[@answer='y']"

XLink: multiple Links, variablere Ziele, indirekte Verweise (XLink-database!). Beispiel:

<environment xmlns:xlink="http://www.w3.org/1999/xlink"
  xlink:type="extended">
  <!-- an artist is bound to his influences and history -->
  <artist    xlink:type="locator" xlink:role="artist"
	xlink:href="modigliani.xml"/>
  <influence xlink:type="locator" xlink:label="inspiration"
	xlink:href="cezanne.xml"/>
  <influence xlink:type="locator" xlink:label="inspiration"
	xlink:href="lautrec.xml"/>
  <influence xlink:type="locator" xlink:label="inspiration"
	xlink:href="rouault.xml"/>
  <history   xlink:type="locator" xlink:label="period"
	xlink:href="paris.xml"/>
  <history   xlink:type="locator" xlink:label="period"
	xlink:href="kisling.xml"/>
  <bind xlink:type="arc" xlink:from="artist"
	xlink:to="inspiration"/>
  <bind xlink:type="arc" xlink:from="artist"
	xlink:to="period"/>
</environment>

RDF (ressource description framework): Metadaten für Suchmaschine; derzeit Patent-Streitigkeiten

XQL, Xinfo, XBase, MathML, CML, SVG, SOAP, encryption, signature ...

SAX (simple API for XML): sequentieller Parser, schnell und beschränkt (Schnittstelle)

DOM (document object model): Baumkonstruktion, leistungsfähig, hohe Kosten

weidaweida


Verarbeitung im Web:

(XSLT,XML) serverseitig oder bei Applikation

Möglichkeit: gleiches Webdokument je nach Anforderung verschieden darstellen (z.B. auch verschiedene CSS mitliefern ...)

Bsp.: Flugreservierung DD-NY (lange Liste, genauer spezifizieren)

weidaweida


Software:

Browser, Formatieren:
Mozilla
Opera
IE 5.5
Amaya (W3C)
FOP (Apache, XML-FO)

Validierung:
xmlwf (Wohlgeformtheit)
nsgmls, expat

Editoren:
emacs, xemacs, psgml
vim mit Macros

SAX, Parser:
SAX von Apache
SAXON (Java)
expat (James Clark)
libxml?
Xerces (Apache, mit XSchema)

DOM:
alle "Transformatoren"

Transformation:
xt (Java) - langsam, aber validierend
Xalan->Xerces (Apache, Java)
xsltc (C++)
xsltproc (C)
Sablotron (C++)! - sehr schnell, einiges fehlt noch
SAXON (Java)
libxslt?

Kompression:
Xmill
XMLZip

Alles noch sehr im Fluss!

weidaweida


Offene Fragen:

weidaweida


Lit.:

Erik T. Ray, Einführung in XML, O'Reilly 2001 (eines von vielen)
http://renderx.com	(Software-Überblick)
http://Zvon.org		(exzellente Tutorials und Referenzen)
http://www.xml.org	(Hauptseite, O'Reilly)
http://www.w3.org/TR	(Standards)
http://www.xmlsoft.org	(Software)
http://www.oasis-open.org (Standards)
http://www.xml.com/pub/a/2000/09/xlink/index.html (XLink-Einführung)
... und unzählige andere!

weidaweida


Thank you!

http://www.ifw-dresden.de/~wobst/xml.html