<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="vortrag.xslt"?>
<präsentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vortrag.xsd">
	<präsentationsdaten>
		<autor>Stefan Linde</autor>
		<datum>2005-11-16</datum>
		<thema>Service Oriented Architecture - XML Technologies</thema>
	</präsentationsdaten>
	<gliederung>
		<überschrift>Gliederung</überschrift>
		<kapitel nummer="1">
			Extensible Markup Language (XML)
		</kapitel>
		<kapitel nummer="2">
			DocumentType Definitions (DTD)
		</kapitel>
		<kapitel nummer="3">
			XML-Schema Definition Language (XSD)
		</kapitel>
		<kapitel nummer="4">
			Extensible-Stylesheet Language Transformation
		</kapitel>
		<kapitel nummer="5">
			XMLQuery Language (XQuery)
		</kapitel>
		<kapitel nummer="6">
			XML-Path Language (XPath)
		</kapitel>
	</gliederung>
	<inhalt>
		<kapitel titel="Extensible Markup Language (XML)" nummer="1">
			<absatz>
				<überschrift>Wofür steht XML?</überschrift>
				<punkte>
					<punkt>XML = eXtensible Markup Language (erweiterbare Auszeichnungssprache)</punkt>
					<punkt>plattformunabhängiger Austausch von Daten</punkt>
					<punkt>selbsterklärende Daten</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Wie sieht XML aus?</überschrift>
				<text class="markup">
				<![CDATA[
<?xml version="1.0"?>
<!--Kommentar und Verarbeitungsanweisungen sind hier erlaubt-->
<!DOCTYPE books SYSTEM "http://myserver.com/books.dtd">
<!-- weitere Kommentare und Verarbeitungsanweisungen erlaubt -->

<books>
	<book category="reference">
		<author>Nigel Rees</author>
		<title>Sayings of the Century</title>
		<price>8.95</price>
	</book>
	<book category="fiction">
		<author>Evelyn Waugh</author>
		<title>Sword of Honour</title>
		<price>12.99</price>
	</book>
</books>

<!--Kommentare und Verarbeitungsanweisungen sind hier erlaubt -->]]>
				</text>
			</absatz>
			<absatz>
				<überschrift>Dokumentgliederung</überschrift>
				<punkte>
					<punkt>Prolog</punkt>
					<punkt>Rumpf</punkt>
					<punkt>Epilog</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Elemente</überschrift>
				<punkte>
					<punkt>Markup-Zeichen (&amp;, &lt;) im Text verboten</punkt>
					<punkt>Namen müssen mit Buchstaben, Unterstrich oder Doppelpunkt anfangen.</punkt>
					<punkt>Zeichenfolge &quot;xml&quot; (in beliebiger Reihenfolge oder Groß-/Kleinschreibung) verboten</punkt>
					<punkt>Nutzung des Doppelpunktes vom W3C nicht empfohlen (Trennung zwischen Namensraum und lokalem Namen)</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Attribute</überschrift>
				<punkte>
					<punkt>Name-Wert-Paare</punkt>
					<punkt>pro Element ein Attribut nur einmal erlaubt</punkt>
					<punkt>Spezialattribute
						<punkte>
							<punkt>xml:lang</punkt>
							<punkt>xml:space</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Entity-Referenzen</überschrift>
				<punkte>
					<punkt>Einbinden von Textbausteinen an beliebigen Stellen</punkt>
					<punkt>Syntax: &quot;&amp;&quot; + Entity-Name + &quot;;&quot;</punkt>
					<punkt>Definition von Entities im Abschnitt über DTDs</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Vordefinierte Entities</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Entity</wert>
						</feld>
						<feld>
							<wert>Zeichen</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>&amp;amp;</wert>
						</feld>
						<feld>
							<wert>&amp;</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>&amp;apos;</wert>
						</feld>
						<feld>
							<wert>&apos;</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>&amp;gt;</wert>
						</feld>
						<feld>
							<wert>&gt;</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>&amp;lt;</wert>
						</feld>
						<feld>
							<wert>&lt;</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>&amp;quot;</wert>
						</feld>
						<feld>
							<wert>&quot;</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>Verarbeitungsanweisungen (processing instructions)</überschrift>
				<punkte>
					<punkt>einzige Festlegung des W3C: syntaktischer Aufbau</punkt>
					<punkt>&quot;&lt;?&quot; Anweisung &quot;?&gt;&quot;</punkt>
					<punkt>Verhalten von Parsern nicht vorgeschrieben</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Kommentare</überschrift>
				<punkte>
					<punkt>syntaktischer Aufbau: &quot;&lt;!--&quot; viel wichtiger Kommentar &quot;--&gt;&quot;</punkt>
					<punkt>Kommentartext nicht geparst -&gt; kein Escaping nötig</punkt>
					<punkt>nicht erlaubt:
						<punkte>
							<punkt>Kommentare innerhalb eines Tags</punkt>
							<punkt>zwei Bindestriche innerhalb eines Kommentars</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
		</kapitel>
		<kapitel nummer="2" titel="DocumentType Definition (DTD)">
			<absatz>
				<überschrift>Konzept</überschrift>
				<punkte>
					<punkt>Vereinheitlichung und Verdeutlichung von Dokumentstrukturen</punkt>
					<punkt>Überprüfung der syntaktischen Gültigkeit</punkt>
					<punkt>Reduzierung des Validierungsaufwands in der Zielanwendung</punkt>
					<punkt>implizite Dokumentation</punkt>
					<punkt>Problemstellung für spez. Dokument festgelegt</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Syntax</überschrift>
				<punkte>
					<punkt>eigene Syntax (nicht in XML-Notation)</punkt>
					<punkt>Schwächen bei komplexen Zusammenhängen</punkt>
					<punkt>gut geeignet, um einfache Dokumentstrukturen festzulegen</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Operatoren</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Operator</wert>
						</feld>
						<feld>
							<wert>Bedeutung</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>,</wert>
						</feld>
						<feld>
							<wert>Sequenz</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>|</wert>
						</feld>
						<feld>
							<wert>Auswahl</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>?</wert>
						</feld>
						<feld>
							<wert>Optionalität eines Elements</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>*</wert>
						</feld>
						<feld>
							<wert>Beliebig häufiges Auftreten</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>+</wert>
						</feld>
						<feld>
							<wert>Mindestens ein Vorkommen</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>einfache Elemente</überschrift>
				<punkte>
					<punkt>&lt;!ELEMENT foo EMPTY&gt;</punkt>
					<punkt>&lt;!ELEMENT foo ANY&gt;</punkt>
					<punkt>&lt;!ELEMENT foo #PCDATA&gt;</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>komplexe Elemente</überschrift>
				<punkte>
					<punkt>&lt;!ELEMENT foo (bar)*&gt;</punkt>
					<punkt>&lt;!ELEMENT foo (A, (B | C)+, D?)&gt;</punkt>
					<punkt>&lt;!ELEMENT foo (A*, B?, (C+ | (D, E)) | F)&gt;</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Attribute</überschrift>
				<punkte>
					<punkt>&lt;!ATTLIST foo bar CDATA &quot;value&quot; ent ENTITY #IMPLIED&gt;</punkt>
					<punkt>&lt;!ATTLIST foo (value1| value2| value3) #REQUIRED&gt;</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Vorgabewerte</überschrift>
				<punkte>
					<punkt>#IMPLIED</punkt>
					<punkt>#REQUIRED</punkt>
					<punkt>#FIXED</punkt>
					<punkt>#FIXED + Vorgabewert</punkt>
					<punkt>Vorgabewert</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Attributypen</überschrift>
				<punkte>
					<punkt>ID</punkt>
					<punkt>IDREF</punkt>
					<punkt>IDREFS</punkt>
					<punkt>CDATA</punkt>
					<punkt>ENTITY</punkt>
					<punkt>ENTITIES</punkt>
					<punkt>NMTOKEN</punkt>
					<punkt>NMTOKENS</punkt>
					<punkt>NOTATION</punkt>
					<punkt>Wert aus einer Aufzählung</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>ENTITY</überschrift>
				<punkte>
					<punkt>Platzhalter für sich wiederholende Inhalte</punkt>
					<punkt>General-Entities und Parameter-Entities</punkt>
					<punkt class="deny">keine Leerzeichen (Whitespace) innerhalb einer Entityreferenz</punkt>
					<punkt class="deny">keine Zirkelbezüge zwischen Entities erlaubt</punkt>
				</punkte>
			</absatz>
		</kapitel>
		<kapitel nummer="3" titel="XML-Schema Definition Language (XSD)">
			<absatz>
				<überschrift>Kennzeichen von Schema</überschrift>
				<punkte>
					<punkt>erweiterte Funktionalität im Vergleich mit DTD</punkt>
					<punkt>vollständig getypt</punkt>
					<punkt>eigene Datentypen durch Vererbung</punkt>
					<punkt>(Daten-)Integrität von Dokument wird sichergestellt</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Schema-Deklaration</überschrift>
				<punkte>
					<punkt class="markup">&lt;xsd:schema xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Elementdeklaration</überschrift>
				<punkte>
					<punkt>&lt;xsd:element name=&quot;foo&quot; type=&quot;xsd:string&quot;&gt;</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>vordefinierte Elemente (Auswahl)</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Elementname</wert>
						</feld>
						<feld>
							<wert>Beschreibung</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>all</wert>
						</feld>
						<feld>
							<wert>alle Kindelemente genau einmal oder keinmal in beliebiger Reihenfolge</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>any</wert>
						</feld>
						<feld>
							<wert>beliebiger wohlgeformter Inhalt</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>attribute</wert>
						</feld>
						<feld>
							<wert>Deklaration eines Attributs</wert>
						</feld>						
					</zeile>
					<zeile>
						<feld>
							<wert>choice</wert>
						</feld>
						<feld>
							<wert>Auswahl unter den Kindelementen. Es darf genau eins davon pro Knoten auftreten</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>complexContent</wert>
						</feld>
						<feld>
							<wert>kein reiner Text als Kind erlaubt</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>complexType*</wert>
						</feld>
						<feld>
							<wert>leitet einen complexType-Deklaration ein</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>element</wert>
						</feld>
						<feld>
							<wert>leitet eine Element-Deklaration ein</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>enumeration</wert>
						</feld>
						<feld>
							<wert>Aufzählungselement für Vorgabewerte</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>extension</wert>
						</feld>
						<feld>
							<wert>Erweiterung eines Basistyps (Kind: restriction)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>list</wert>
						</feld>
						<feld>
							<wert>Kind von simpleType: Liste von Elementen</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>maxInclusive</wert>
						</feld>
						<feld>
							<wert>Kind von restriction: maximal zulässiger Wert am Element / Attribut</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>maxLength</wert>
						</feld>
						<feld>
							<wert>Kind von restriction: maximale Länge einer Liste</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>minInclusive</wert>
						</feld>
						<feld>
							<wert>Kind von restriction: minmal zulässiger Wert am Element / Attribut</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>minLength</wert>
						</feld>
						<feld>
							<wert>Kind von restriction: minimale Länge einer Liste</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>pattern</wert>
						</feld>
						<feld>
							<wert>Kind von restriction: regulärer Ausdruck für erlaubte Element-/Attributwerte</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>restriction</wert>
						</feld>
						<feld>
							<wert>Kind von simpleType: Beschränkung eines Basistyps auf zulässige Werte</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>schema</wert>
						</feld>
						<feld>
							<wert>Einleitung des Schemas; Festlegung von Namensräumen</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>simpleContent*</wert>
						</feld>
						<feld>
							<wert>nur simpleContent erlaubt (keine Attribute oder Elemente)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>simpleType</wert>
						</feld>
						<feld>
							<wert>Einleitung einer simpleType-Deklaration</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>simpleType</überschrift>
				<punkte>
					<punkt>beinhalten alle eingebauten Datentypen</punkt>
					<punkt>Grundlage für abgeleitete einfache Datentypen</punkt>
				</punkte>
			</absatz>
			<absatz>
				<text class="markup">
				<![CDATA[
<xsd:simpleType name="myInteger">
	<xsd:restriction base="xsd:integer">
		<xsd:minInclusive value="10000"/>
		<xsd:maxInclusive value="99999"/>
	</xsd:restriction>
</xsd:simpleType>]]>
				</text>
			</absatz>
			<absatz>
				<text class="markup">
				<![CDATA[
<xsd:simpleType name="xsd:SKU">
	<xsd:restriction base="xsd:string">
		<xsd:pattern value="\d{3}-[A-Z]{2}"/>
	</xsd:restriction>
</xsd:simpleType>]]>
				</text>
			</absatz>
			<absatz>
				<text class="markup">
				<![CDATA[
<xsd:simpleType name="listOfMyIntType">
  <xsd:list itemType="myInteger"/>
</xsd:simpleType>]]>
				</text>
			</absatz>
			<absatz>
				<überschrift>Datentypen (Auswahl)</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Datentyp</wert>
						</feld>
						<feld>
							<wert>Wertebereich / Beispiel</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>string, normalizedString, token</wert>
						</feld>
						<feld>
							<wert>Confirm this is electric</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>integer</wert>
						</feld>
						<feld>
							<wert>..., -1, 0, 1, ...</wert>						
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>positiveInteger</wert>
						</feld>
						<feld>
							<wert>1, 2, ...</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>nonNegativeInteger</wert>
						</feld>
						<feld>
							<wert>0, 1, 2, ...</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>unsignedLong</wert>
						</feld>		
						<feld>
							<wert>0, 1, ..., 18446744073709551615</wert>
						</feld>			
					</zeile>
					<zeile>
						<feld>
							<wert>byte</wert>
						</feld>
						<feld>
							<wert>-128, ..., 0, ..., 127</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>boolean</wert>
						</feld>
						<feld>
							<wert>true, false, 1, 0</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>dateTime</wert>
						</feld>
						<feld>
							<wert>2005-11-16T19:30:00.000+2:00</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>complexType</überschrift>
				<punkte>
					<punkt>zusammengesetzter Datentyp aus:
						<punkte>
							<punkt>Elementen</punkt>
							<punkt>Attributen</punkt>
							<punkt>Referenzen</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
			<absatz>
				<text class="markup">
					<![CDATA[
<xsd:complexType name="USAddress">
	<xsd:sequence>
		<xsd:element name="name" type="xsd:string"/>
		<xsd:element name="street" type="xsd:string"/>
		<xsd:element name="city" type="xsd:string"/>
		<xsd:element name="state" type="xsd:string"/>
		<xsd:element name="zip" type="xsd:string"/>
	</xsd:sequence>
	<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>]]>
				</text>
			</absatz>
		</kapitel>
		<kapitel nummer="4" titel="Extensible Stylesheet Language: Transformation (XSLT)">
			<absatz>
				<überschrift>Konzept</überschrift>
				<punkte>
					<punkt>Umwandlung eines Ausgangsdokuments in ein Zieldokument unter Verwendung eines XML-Stylesheets</punkt>
					<punkt>Struktur des Eingangsdokuments wird bearbeitet (nicht die Daten)</punkt>
					<punkt>Arbeit wird durch XSL-Prozessor erbracht</punkt>
					<punkt>Daten werden Prozessor mittels API bereitgestellt</punkt>
					<punkt>bekannte APIs:
						<punkte>
							<punkt>Document Object Model (DOM)</punkt>
							<punkt>Simple API for XML (SAX)</punkt>
						</punkte>
					</punkt>
					<punkt>Selektion der Knoten mittels XPath</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Syntax</überschrift>
				<punkte>
					<punkt>identisch zu XML</punkt>
					<punkt>spezieller Namensraum für XSL-Elemente: xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;</punkt>
					<punkt>Anweisungen (Templates) zwischen &lt;stylesheet&gt;-Tags</punkt>
					<punkt>Auftrittsformen:
						<punkte>
							<punkt>in XML-Dokument eingebettet</punkt>
							<punkt>als separate Datei</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>XSL-Elemente (Auswahl)</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Element</wert>
						</feld>
						<feld>
							<wert>Beschreibung</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>apply-templates</wert>
						</feld>
						<feld>
							<wert>Prozessor sucht nach passenden Templates</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>attribute</wert>
						</feld>
						<feld>
							<wert>Attribut zu Element</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>call-template</wert>
						</feld>
						<feld>
							<wert>spezielles Template nach seinem Namen aufrufen</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>choose</wert>
						</feld>
						<feld>
							<wert>Einleitung einer Verarbeitungsauswahl (Kinder: when, otherwise)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>copy</wert>
						</feld>
						<feld>
							<wert>aktuellen Knoten in die Ausgabe kopieren</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>copy-of</wert>
						</feld>
						<feld>
							<wert>einen Knoten (mit Kindern) in die Ausgabe kopieren</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>element</wert>
						</feld>
						<feld>
							<wert>beliebiges Element in der Ausgabe erzeugen</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>for-each</wert>
						</feld>
						<feld>
							<wert>Iteration über best. Elemente</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>if</wert>
						</feld>
						<feld>
							<wert>bedingte Verarbeitung (kein else)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>import</wert>
						</feld>
						<feld>
							<wert>Einbinden eines externen Stylesheets (veränderter Baum)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>include</wert>
						</feld>
						<feld>
							<wert>Einbinden eines externen Stylesheets (reine Ersetzung)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>otherwise</wert>
						</feld>
						<feld>
							<wert>default-fall bei choose</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>output</wert>
						</feld>
						<feld>
							<wert>Festlegen des Ausgabeformats (XML, HTML, Text)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>param</wert>
						</feld>
						<feld>
							<wert>Parameter bei Templates oder Stylesheet</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>sort</wert>
						</feld>
						<feld>
							<wert>Sortierung einer Iteration (for-each) oder apply-templates</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>stylesheet</wert>
						</feld>
						<feld>
							<wert>Einleitung des Stylesheets und Festlegung der Namensräume</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>template</wert>
						</feld>
						<feld>
							<wert>Quasi Funktion in XSL. Sammlung von Verarbeitungsanweisungen für best. Elemente</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>value-of</wert>
						</feld>
						<feld>
							<wert>Ausgabe eines Attribut- oder Elementtextes</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>variable</wert>
						</feld>
						<feld>
							<wert>eine Variable</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>when</wert>
						</feld>
						<feld>
							<wert>Option im choose (entspricht if, mehrere &quot;when&quot; möglich)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>with-param</wert>
						</feld>
						<feld>
							<wert>Parameterübergabe</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
		</kapitel>
		<kapitel nummer="5" titel="XML-Query Language (XQuery)">
			<absatz>
				<punkte>
					<punkt>XQuery noch keine W3C-Empfehlung</punkt>
					<punkt>XQuery ist keine XML-Sprache. XQueryX eine in XML-Syntax verfasste XQuery-Sprache</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Konzept</überschrift>
				<punkte>
					<punkt>Verarbeitungsmöglichkeit für verschiedenste Dokumentarten:
						<punkte>
							<punkt>Dokumente für menschliche Leser (Indizierung, Suche)</punkt>
							<punkt>datenorientierte Dokumente</punkt>
							<punkt>Dokumente mit gemischtem Inhalt (Text + eingebette Daten)</punkt>
						</punkte>
					</punkt>
					<punkt>basiert auf XPath und XML-Schema-Datentypen</punkt>
					<punkt>liest / liefert ein Dokument-Fragment oder atomaren Wert</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Anforderungen an W3C XML-Query Group</überschrift>
				<punkte>
					<punkt>Syntaxanforderungen:
						<punkte>
							<punkt>MUSS leicht von Menschen lesbar sein</punkt>
							<punkt>KANN mehr als eine Syntax haben</punkt>
							<punkt>eine Abfragesprache MUSS in XML-Syntax verfasst werden</punkt>
						</punkte>
					</punkt>
					<punkt>Protokollunabhängigkeit MUSS gewahrt bleiben</punkt>
					<punkt>definierte Fehlerzustände MÜSSEN erzeugt werden können</punkt>
					<punkt>Aktualisierbarkeit MUSS gewahrt bleiben</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Ausdrucksformen in XQuery</überschrift>
				<punkte>
					<punkt>Pfad-Ausdrücke</punkt>
					<punkt>FLWOR (&quot;flower&quot;) Ausdrücke (For - Let - Where - Order - Return)</punkt>
					<punkt>Listenausdrücke</punkt>
					<punkt>bedingte Ausdrücke</punkt>
					<punkt>quantifizierte Ausdrücke</punkt>
					<punkt>Datentyp-Asudrücke</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>FLWOR-Beispiel</überschrift>
				<text class="markup">
				<![CDATA[
<beispiel>
	<bsp1> 
	{
	for $d in doc("vortrag.xml")/präsentation/inhalt//kapitel
	where count($d/absatz) >= 5
	order by $d/@nummer descending
	return 
	  <kapitel überschrift="{$d/@titel}">
		 {
		 for $absatz in $d//absatz
		 where $absatz/überschrift != ''
		 return 
			<thema>{$absatz/überschrift/text()}</thema>
		 }
		</kapitel>
	}	
	</bsp1>
	<bsp2>
		{
			for $i in (1 to 5)
			return <wert i="{$i}"/>
		}
	</bsp2>
</beispiel>]]>
				</text>
			</absatz>
		</kapitel>
		<kapitel nummer="6" titel="XML-Path Language (XPath)">
			<absatz>
				<überschrift>Konzept</überschrift>
				<punkte>
					<punkt>gezielte Navigation durch XML-Dokument</punkt>
					<punkt>Selektion von Knoten</punkt>
					<punkt>Verwendung von location steps ausgehend von Kontext-Knoten</punkt>
					<punkt>Zusammensetzung eines Knotens aus:
						<punkte>
							<punkt>Achse</punkt>
							<punkt>Knotentest</punkt>
							<punkt>Prädikat(e)</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Achse</überschrift>
				<punkte>
					<punkt>unterteilt Dokument bezüglich Kontext-Knoten</punkt>
					<punkt>Start-Umgebung für Knotentest</punkt>
				</punkte>
			</absatz>
			<absatz>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Achse</wert>
						</feld>
						<feld>
							<wert>Beschreibung</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>Child</wert>
						</feld>
						<feld>
							<wert>alle Kindelemente</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Descendant</wert>
						</feld>
						<feld>
							<wert>alle Nachfahren</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Parent</wert>
						</feld>
						<feld>
							<wert>Elternelement</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Ancestor</wert>
						</feld>
						<feld>
							<wert>alle Vorfahren</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Following-sibling</wert>
						</feld>
						<feld>
							<wert>alle folgenden Geschwister</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Preceding-sibling</wert>
						</feld>
						<feld>
							<wert>alle vorangegangenen Geschwister</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Following</wert>
						</feld>
						<feld>
							<wert>alle nachfolgenden Knoten (keine Nachfahren, Attribute, Namensräume)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Preceding</wert>
						</feld>
						<feld>
							<wert>alle vorangegangenen Knoten (keine Nachfahren, Attribute, Namensräume)</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Attribute</wert>
						</feld>
						<feld>
							<wert>alle Attribute</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Namespace</wert>
						</feld>
						<feld>
							<wert>alle Namesräume</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Self</wert>
						</feld>
						<feld>
							<wert>der Knoten selbst</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Descendant-or-self</wert>
						</feld>
						<feld>
							<wert>Vereinigungsmenge: Knoten plus alle Nachfahren</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Preceding-or-self</wert>
						</feld>
						<feld>
							<wert>Vereinigungsmenge: Knoten plus alle Vorfahren</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>Abkürzende Schreibweisen:</überschrift>
				<tabelle>
					<kopfzeile>
						<feld>
							<wert>Achse</wert>
						</feld>
						<feld>
							<wert>Abkürzung</wert>
						</feld>
						<feld>
							<wert>Beispiel (lang)</wert>
						</feld>
						<feld>
							<wert>Beispiel (kurz)</wert>
						</feld>
					</kopfzeile>
					<zeile>
						<feld>
							<wert>Child</wert>
						</feld>
						<feld>
							<wert>(keine Angabe)</wert>
						</feld>
						<feld>
							<wert>/child::Book</wert>
						</feld>
						<feld>
							<wert>Book</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Attribute</wert>
						</feld>
						<feld>
							<wert>@</wert>
						</feld>
						<feld>
							<wert>Book/attribute::title</wert>
						</feld>
						<feld>
							<wert>Book/@title</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Descendant-or-self</wert>
						</feld>
						<feld>
							<wert>//</wert>
						</feld>
						<feld>
							<wert>Book/descendant-or-self::author</wert>
						</feld>
						<feld>
							<wert>Book//author</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>self</wert>
						</feld>
						<feld>
							<wert>.</wert>
						</feld>
						<feld>
							<wert>self::node()//author</wert>
						</feld>
						<feld>
							<wert>.//author</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>Parent</wert>
						</feld>
						<feld>
							<wert>..</wert>
						</feld>
						<feld>
							<wert>parent::node()/Book</wert>
						</feld>
						<feld>
							<wert>../Book</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
			<absatz>
				<überschrift>Knoten-Tests</überschrift>
				<punkte>
					<punkt>erlaubt spezifische Auswahl der Elementtypen innerhalb der Achsen</punkt>
					<punkt>verschiedene Arten von Knoten-Test:
						<punkte>
							<punkt>Angabe des Elementnamens</punkt>
							<punkt>Angabe eines &quot;*&quot;: findet alle Elemente</punkt>
							<punkt>node(): findet alle Knoten (auch z.B. Text)</punkt>
							<punkt>text(): findet nur Textknoten</punkt>
							<punkt>comments(): findet nur Kommentare</punkt>
							<punkt>processing-instruction(): findet alle Verarbeitungsanweisungen</punkt>
						</punkte>
					</punkt>
				</punkte>
			</absatz>
			<absatz>
				<überschrift>Prädikate</überschrift>
				<punkte>
					<punkt>Verfeinerung der Knoten-Tests</punkt>
					<punkt>boolescher Ausdruck; für jeden Knoten der Ergebnismenge ausgewertet</punkt>
				</punkte>
			</absatz>
			<absatz>
			<überschrift>Beispiele</überschrift>
				<tabelle>
					<zeile>
						<feld>
							<wert>/Book//author</wert>
						</feld>
						<feld>
							<wert>alle Autoren des (ersten) Buchs unterhalb der Wurzel</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>/Book[3]//author (/Book[position() = 3]//author)</wert>
						</feld>
						<feld>
							<wert>alle Autoren des dritten Buchs unterhalb der Wurzel</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>/</wert>
						</feld>
						<feld>
							<wert>die Dokument-Wurzel</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>//Book[./author = 'John Smith']</wert>
						</feld>
						<feld>
							<wert>alle Bücher mit dem Autor &apos;John Smith&apos;</wert>
						</feld>
					</zeile>
					<zeile>
						<feld>
							<wert>//Book[@price &lt; 50][@curr = 'euro']</wert>
						</feld>
						<feld>
							<wert>alle Bücher, deren Preis weniger als 50 Euro ist</wert>
						</feld>
					</zeile>
				</tabelle>
			</absatz>
		</kapitel>
	</inhalt>
</präsentation>

