Klaus
Birkenbihl W3C.DE/AT
| Jahrzehnt | Dokumente und Medien | Datenverarbeitung und Informatik | Computernetze |
| (1960er) 1970er | Ed Mosher, Ray Lorie, Charles F. Goldfarb entwickeln GML. | Nachdem Algol 68 als ultimative Programmiersprache mehr Probleme als Lösungen liefert, besinnt man sich auf einfachere Sprachen. PASCAL und C kennen strukturierte Daten. Simula 67 legt die Grundlagen zu OOP. | Kahn und Cerf basteln am Internet und entwickeln TCP-IP. |
| Lochkarten(80 Spalten), Assemblerprogrammierung, Bildschirme mit 80x12 Zeichen | |||
| Jahrzehnt | Dokumente und Medien | Datenverarbeitung und Informatik | Computernetze |
| 1980er | SGML wird ISO-Standard, Don Knuth entwickelt TeX. Aber es WYSIWYGt auch. | Objektorientierte Programmierung ermöglicht grafische Benutzeroberflächen. C wird C++. | Die Wissenschaft entdeckt Computernetze für sich: BITNET, EARN, CSNET, NSF-NET ... gegen Ende der 80er setzt sich TCP/IP als Standard durch. |
| PCs und Workstations lösen Großrechner ab. | |||
| Jahrzehnt | Dokumente und Medien | Datenverarbeitung und Informatik | Computernetze |
| 1990er | MS-Office etabliert Word als de facto Standard, SGML nur Insidern ein Begriff | JAVA, komponentenbasierte Programmierung, CORBA | Die Industrie entdeckt Internet, WWW wird Killerapplikation und ersetzt "ressource discovery" Systeme, generiert die "new Economy" |
| Tim Berner-Lee's HTML ermöglicht einfache Handhabung von Dokumenten im Netz | |||
| 2000er | XML (1998) wird die technische Basis einer Integration von Dokumenten, Medien, Datenverarbeitung und Kommunikationsnetzen | ||
|
Präsentation und Interaktion |
Datenschutz und -sicherheit |
Protokolle und Services |
Datenbanken und Wissen im Web |
|
|
||
| XML, Namensräume, XSLT, XPath, XLink, XPOINTER, XML BASE, XML Schema, DOM | |||
| Architektur | |||
<?xml version="1.0" encoding="ISO-8859-1"?>
<my_band>
<Bandname>Nero's Delight</Bandname>
<musicians>
<musician>
<name>Michael</name>
<instrument>Trumpet</instrument>
<lives_in>
<Town>Bonn</Town>
</lives_in>
</musician>
<musician>
<name>Heidrun</name>
<instrument>Trombone</instrument>
<lives_in>
<Town>Köln</Town>
</lives_in>
</musician>
<!-- and so on -->
</musicians>
</my_band>
<?xml version="1.0" encoding="ISO-8859-1"?>
<musician>
<name>Michael</name>
<instrument>Trumpet</instrument>
<lives_in>
<Town>Bonn</Town>
</lives_in>
</musician>
Das äußerste Element eines XML-Dokuments
heißt Wurzelelement.
Dokumente, die diesen Kriterien genügen, heißen wohlgeformt.
Bandname {display: block; font-size: 18pt; font-weight: bold;}
musician {display: block; color: red; margin-top: 1em;
font-size: 14pt;}
name {display: block; margin-left: 1em;
font-weight: bold;}
instrument {display: block; margin-left: 2em; color: green;}
lives_in {display: block; margin-left: 2em; font-style: italic;
color: blue;}
lives_in:before {content: "Kommt aus ";
color: black; display: inline;}
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/css" href="neros-1.css"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE my_band [
<!ELEMENT my_band (Bandname, musicians)>
<!ELEMENT musicians (musician+)>
<!ELEMENT musician (name, instrument*, lives_in?)>
<!ELEMENT lives_in (Town, Street?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT instrument (#PCDATA)>
<!ELEMENT Town (#PCDATA)>
<!ELEMENT Street (#PCDATA)>
<!ELEMENT Bandname (#PCDATA)>
]>
<my_band>
<Bandname>Nero's Delight</Bandname>
<musicians>
<musician>
...
<?xml version="1.0" encoding="ISO-8859-1"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Bandname" type="string"/>
<element name="Town" type="string"/>
<element name="instrument" type="string"/>
<complexType name="lives_inType">
<sequence>
<element ref="Town"/>
<element ref="Street"
minOccurs="0" maxOccurs="1"/>
</sequence>
</complexType>
<complexType name="musiciansType">
<sequence>
<element name="musician"
type="musicianType" minOccurs="1"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="musicianType">
<sequence>
<element ref="name"/>
<element ref="instrument"/>
<element name="lives_in" type="lives_inType"
minOccurs="0" maxOccurs="1"/>
</sequence>
</complexType>
<element name="my_band">
<complexType>
<sequence>
<element ref="Bandname"/>
<element name="musicians" type="musiciansType"/>
</sequence>
</complexType>
</element>
<element name="name" type="string"/>
</schema>
Anmerkung: da DTDs aus SGML stammen, lassen sich auch nicht-XML-Sprachen, wie z. B. HTML damit validieren. Deshalb gibt es auch "gültiges HTML".
<?xml version="1.0" encoding="ISO-8859-1"?> <my_band> <Bandname>Nero's Delight</Bandname> <Bandpage xmlns:XLink="http://www.w3.org/1999/XLink" XLink:href="http://www.neros-delight.de"/>Für das Element Bandpage und alle Tochterelemente definieren wir, dass der Prefix XLink mit der Zeichenkette
<?xml version="1.0" encoding="ISO-8859-1"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="BandpageType">
<sequence/>
<anyAttribute namespace="http://www.w3.org/1999/XLink"/>
</complexType>
<!-- und so weiter -->
Wir definieren einen Typ BandpageType, der
aus einer leeren Sequenz besteht und alle Attribute
von XLink enthalten darf.
<element name="my_band">
<complexType>
<sequence>
<element ref="Bandname"/>
<element name="Bandpage" type="BandpageType"/>
<!-- ... --/>
<?xml version="1.0" encoding="ISO-8859-1"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetnamespace="http://www.klaus-birkenbihl.de/bandbeispiel">
<?xml version="1.0" encoding="ISO-8859-1"?>
<my_band
xmlns="http://www.klaus-birkenbihl.de/bandbeispiel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.klaus-birkenbihl.de/bandbeispiel
http://www.klaus-birkenbihl.de/bandbeispiel/bandschema.xsd">
<?xml version="1.0" encoding="ISO-8859-1"?>
<my_band xmlns:XLink="http://www.w3.org/1999/XLink">
<Bandname>Nero's Delight</Bandname>
<Bandpage XLink:href="http://www.neros-delight.de/"/>
<musicians>
<musician>
<name>Michael</name>
<instrument>Trumpet</instrument>
<lives_in>
<Town>Bonn</Town>
</lives_in>
<picture
src="http://www.neros-delight.de/Michael%20und%20Petra%20in%20BKH.jpg"
alt="Michael und Petra in BKH"/>
</musician>
<!-- -->
</musicians>
</my_band>
Wir wollen dieses Dokument als HTML darstellen
XML-Instruktion, XSLT-Wurzelknoten, Output-Element
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:XLink="http://www.w3.org/1999/XLink">
<xsl:output method="xml"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
indent="yes" encoding="ISO-8859-1"/>
Verarbeitung des Wurzelelements
<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="/my_band/Bandname"/>
</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="musicians">
<h2>Musiker</h2>
<p>
<table border="3"
summary="Liste der Musiker" width="90%"
align="center">
<!-- der Tabellenkopf -->
<thead align="center"
style="font-weight: bold;
background-color: yellow">
<tr>
<td>Name</td>
<!-- ... -->
</tr>
</thead>
der Tabellenkörper
steht auf der nächsten Seite
</table>
</p>
</xsl:template>
<tbody>
<xsl:for-each select="musician">
<tr>
<td width="25%">
<xsl:value-of select="name"/>
</td>
<!-- ... -->
<td bgcolor="red" align="center"
width="20%">
<img width="30%">
<xsl:attribute name="src">
<xsl:value-of select="picture/@src"/>
</xsl:attribute>
<!-- ... -->
</img>
</td>
</tr>
</xsl:for-each>
</tbody>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns:XLink="http://www.w3.org/1999/XLink">
<head>
<title>Nero's Delight</title>
</head>
<body>
<!-- ... -->
<table ...>
<thead ...>
<tr>
<td>Name</td>
<!-- ... -->
</tr>
</thead>
<tbody>
<tr>
<td width="20%">Michael</td>
<!-- ... -->
</tr>
</tbody>
</table>
<!-- ... -->
</body>
</html>
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Style, Script -->
</head>
<body>
<!-- Feste Seitenteile, Folien -->
<div class="page">
<h1>
"Eat your own dogfood!"
</h1>
<!-- Inhalt -->
</div>
<!-- weitere Folien -->
</body>
</html>
<!-- ... -->
<html>
<head>
<!-- ... -->
</head>
<body>
<!-- ... -->
<span class="letterhead">
<a href="#contentdir">
Inhalt
</a>
</span>
<!-- ... -->
<div class="page">
<a name="page4">
<h1>
4. "Eat your own dogfood!"
</h1>
</div>
<!-- ... -->
<div class="page">
<a name="contentdir"/>
<h1>
Inhalt
</h1>
<div class="content">
<a href="#page1">1. Übersicht ...</a><br>
<a href="#page2">2. Ziel</a>
<!-- ... -->
</div>
</div>
</body>
</html>
<xsl:template match="x:div[@class='page']>
<a>
<xsl:attribute name="name">
<xsl:text>page</xsl:text>
<xsl:number count="/*/*/*"
from="/*/*/x:div[@class='page'][position()=2]"/>
</xsl:attribute>
</a>
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="x:div[@class='page']/x:h1">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:number count="/*/*/*"
from="/*/*/x:div[@class='page'][position()=2]/x:h1"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
<xsl:template match="x:body">
<body>
<span class="letterhead">
<a href="#contentdir" >
Inhalt
</a>
</span>
<xsl:apply-templates/>
Inhaltsverzeichnis auf der nächsten Seite
</body>
</xsl:template>
<h1>Contents</h1>
<div class="content">
<xsl:for-each
select="x:div[@class='page'][position()>1]/x:h1">
<a>
<xsl:attribute name="href">
<xsl:text>#page</xsl:text>
<xsl:number count="/*/*/*"
from="/*/*/x:div[@class='page'][position()=2]/x:h1"/>
</xsl:attribute>
<xsl:number count="/*/*/*"
from="/*/*/x:div[@class='page'][position()=2]/x:h1"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
</a><br/>
</xsl:for-each>
</div>
</div>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<courseload xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="extended">
<tooltip xlink:type=>
Course Load for Pat Jones
</tooltip>
<person xlink:type="locator"
xlink:href="students/patjones62.xml"
xlink:label="student62"
xlink:role="http://www.example.com/linkprops/student"
xlink:title="Pat Jones" />
<person xlink:type="locator"
xlink:href="profs/jaysmith7.xml"
xlink:label="prof7"
xlink:role="http://www.example.com/linkprops/professor"
xlink:title="Dr. Jay Smith" />
<!-- more remote resources for professors, teaching assistants, etc. -->
<course xlink:type="locator"
xlink:href="courses/cs101.xml"
xlink:label="CS-101"
xlink:title="Computer Science 101" />
<!-- more remote resources for courses, seminars, etc. -->
<gpa xlink:type="resource"
xlink:label="PatJonesGPA">3.5</gpa>
<go xlink:type="arc"
xlink:from="student62"
xlink:to="PatJonesGPA"
xlink:show="new"
xlink:actuate="onRequest"
xlink:title="Pat Jones's GPA" />
<go xlink:type="arc"
xlink:from="CS-101"
xlink:arcrole="http://www.example.com/linkprops/auditor"
xlink:to="student62"
xlink:show="replace"
xlink:actuate="onRequest"
xlink:title="Pat Jones, auditing the course" />
<go xlink:type="arc"
xlink:from="student62"
xlink:arcrole="http://www.example.com/linkprops/advisor"
xlink:to="prof7"
xlink:show="replace"
xlink:actuate="onRequest"
xlink:title="Dr. Jay Smith, advisor" />
