@(#) 17.Jan 23:28 Reinhard Wobst (r dot wobst at gmx at de)
--> Format für Dokumentenaustausch
<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!
XHTML: HTML mit XML-Syntax, aber noch browserkompatibel (Migration)
"small is beautiful" - Teilung der Aufgaben zwischen verschiedenen Applikationen, lesbares Zwischenformat
Leistungsfähiges Triple, reicht schon für viele Zwecke (wie z.B. Publishing); Besprechung im Folgenden.
Prinzipieller Aufbau:
<?xml version="1.0" ...?> Header <rootelement> ... text ... element ... </rootelement>
1. Element:
<elementname att1="..." att2="...">Namespace wichtig, bereitet aber ständig Problemeelementname = [namespace:]identifier
Identifier=[a-z_A-Z\-0-9]+
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
Element:
Attribut:
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 ...
4. Entities
Bessere Bezeichnung eigentlich "Makros". Form:
Namens-Entities: &identifier;
Zeichen-Entieties: &#dezimalzahl; und
&#xhexadezimalzahl;
Beispiel: ö = ö
UNICODE!
Fünf Namens-Entities sind voreingestellt:
< = < > = > & = & " = " ' = '
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.)
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
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>
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ünscht der gesamten Redaktion alles Gute, weiterhin einen beständigen Platz auf dem Buchmarkt sowie mö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; }Problem mit Opera (old) bei "border-style: groove;": Immer noch einfacher Rand, wurde aber blau :-(greetings > sign { display: block; margin-top: 3em; text-align: right; }
50 (CSS1) bzw. 120 (CSS2) Features;
greetings > sign { display: block; }überschreibt
sign { display: inline; }
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
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) ...
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.
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>
Probleme
Hoffnung:
XPath2.0 mit Schleifen u.a.;
Javaskript-Erweiterung (Einbeziehung des DOM-Prozessors)
- vieles wird einfacher.
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
(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)
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!
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!
http://www.ifw-dresden.de/~wobst/xml.html