XML (Extendable Markup Language) Beschreibungssprache von

Werbung
XML (Extendable Markup Language)
- Beschreibungssprache von Daten
- Werden durch Document Type Definition DTD
oder Schema definiert  selbstbeschreibend
- Müssen immer geöffnet und geschlossen
werden (<element />)
- XML Dokument hat genau ein Root-Element
- Kommentar: <!--Mein Kommentar-->
Namen: Buchstaben, Nummern, und andere Charakter,
-
Element vs. Attribute:
o
o
o
o
-
Attribute für Metadaten
Essenzielles in Elementen
Hilfswerte in Attribute
Wenn Wert an Element gebunden ist (Währung
an Betrag)
Element Content
o
o
o
keine Spaces, Case Sensitiv
o
Element Content: hat unter Elemente
Mixed Content: hat Text und Element Inhalt
Simple Content: hat Text Inhalt
Empty Content: leer <element />
Prolog
Stylesheet
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/css" href="recipe.css"?>
Miscellaneous
Escaping:
<
>
&
‘
“
Charakter Escaping:
<
>
&
&apros;
"
<![CDATA[…….]]>
Document Typ Definition
- Definiert Regeln für XML Struktur
- Vorteil: Parser kann Gültigkeit prüfen
Inline-Deklaration
Prinzip
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
…
]>
XML:
<!DOCTYPE note SYSTEM "note.dtd">
DTD:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT element-name (element-content)>
<!ELEMENT element-name category> (cat. = EMPTY/ANY)
External-Deklaration
Regeln Element
Eins oder mehrere Kinder
0 oder mehrere Kinder
0 oder 1 Kind
Kind oder Kind2
Kinder in Sequenz
Leeres Element
Irgendeinen Inhalt im Element erlaubt
Mixed Content Element
Attribute
<!ELEMENT element-name (child-name+)>
<!ELEMENT element-name (child-name*)>
<!ELEMENT element-name (child-name?)>
<!ELEMENT element-name (child-name | child-name | ...)>
<!ELEMENT note (to, from, (message+ | body)>
<!ELEMENT element-name EMPTY>
<!ELEMENT element-name ANY>
<!ELEMENT note (#PCDATA | to | from | header | message)*>
Prinzip
<!ATTLIST element-name attribute-name attribute-type default-value
attribute-name attribute-type defaultvalue
... >
Regeln Attribute
Attribut mit Standardwert
Obligatorisches Attribut
Optionales Attribut
Fixiertes Attribut, kann nicht geändert werden
Attributtypen
Enumeration
Gültiger XML Name (ohne Leerzeichen etc.)
Eindeutiger Bezeichner und Referenz darauf
Entities
<!ATTLIST file
type (text | binary) "text">
<!ATTLIST file
size CDATA #REQUIRED>
<!ATTLIST file
size CDATA #IMPLIED>
<!ATTLIST part title-level NMTOKEN #FIXED "First">
<!ATTLIST shirt size (small | medium | large) "medium">
NMTOKEN
ID, IDREF
<!ATTLIST chapter my-id ID #IMPLIED>
<!ATTLIST chapter-ref target IDREF REQUIRED>
Variablen (funktionieren auch Rekursiv)
- Internal / External: intern oder in anderem File
definiert
-
General / Parameter : Generell referenziert in XML,
Parameter in DTD
- Parsed / Unparsed: vom XML Parser
Generell Entities
Internal
DTD:
<!ENTITY title "Hacker life">
External
DTD
XML: …&title…
<!ENTITY title SYSTEM "Hacker.txt">
Parameter Entities
<!ENTITY % description "address, footage, rooms">
<!ELEMENT apartment (%description;, rent)>
Namespaces
- Namens Konflikte: Um Missverständnisse
zwischen gleichnamigen Tags zu verhindern
- Stehen in Starttag
- Prefix zur Abkürzung des URI verwendet
- Egal ob es den URI gibt oder nicht (er muss
einem nur gehören)
- Default Namespace: Elemente ohne prefix
- Nicht Teil der XML 1.0 Spezifikation
Prinzip
Schemas
- Validieren XML
- Spezifiziert Struktur und die Datentypen des
Dokuments
- Im Gegensatz zu DTD kann mit Namespaces
umgehen
Namespace
Im Schema:
Schema: xmlns:namespace-prefix="namespace"
Beispiel: xmlns:f=http://www.w3schools.com/furniture
Default Namespace
<element xmlns="namespace">
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.books.org"  unsere Elemente,
optional
xmlns="http://www.books.org"  DefaulNamespace
elementFormDefault="qualified">  Elemente müssen von einem
NS erkannt sein qualified /unqualified  nur globale Deklarationen
NS spezifiziert
Im Dokument:
<BookStore xmlns ="http://www.books.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.books.org BookStore.xsd">
Ohne Schema:
-
Element Deklaration
Globale Deklarationen: Elemente direkt unter Schema
Kein targetNamespace angeben
Anstatt schemaLocation  noNamespaceSchemaLocation
xsi:noNamespaceSchemaLocation= "BookStore.xsd"
Named Type
Element
Lokale Deklarationen: Alle anderen Element
Deklarationen
Definition vs Deklaration: Deklaration von Elementen
und Attributen die direkt im XML vorkommen, Definiere
Typen
Design Pattern
Russian Doll: alles Inneinander verpackt
- Inhalt nicht wiederverwendbar
- Kompaktes Schema
Salami Slice: Alle Elemente global und referenziert
- Transparenter Inhalt
- Wortreich
- vernetzt
Venetian blind: Typen definiert und Element nur noch
von diesem Typ
Daten Typen
Wann einsetzen:
SimpleType: bei neuen Typen die eine veränderung von
-
einem Standardtyp sind
ComplexType: wenn man Kindelemente oder Attribute
hat
Simple DataType
Facetten generell and verknüpft, ausser pattern und enum (or)
String Faceten:
-
Length
minLength
maxLength
pattern
enumeration
whitspace (preserve, replace, collapse)
Integer Faceten
-
-
totalDigits
pattern
whitespace
enumeration
maxInclusive
maxExclusive
minInclusive
minExclusive
Abgeleitete Typen
Zwei möglichkeiten abzuleiten:
- restriction: Einschränkung
<xsd:element name="BookStore">
<xsd:complexType> // anonymous Type (no Name)
<xsd:sequence>
Mit Namen:
<xsd:schema>
<xsd:complexType name="BookPublication">
<xsd:sequence>
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Title"/>
<xsd:element ref="Author"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Publication">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Book" type="Publication"/>
Typen:
normalizedString
token
NMTOKEN
Name
ID, IDREF
ENTITY
<xsd:simpleType name="ISBNType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/>
<xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/>
<xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TelephoneNumber">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-\d{4}-\d*"/>
<xsd:maxLength value="15"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="shape">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="circle"/>
<xsd:enumeration value="triangle"/>
<xsd:enumeration value="square"/>
</xsd:restriction>
</xsd:simpleType>
//Basis
<xsd:complexType name="Publication">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"
- extension: Erweiterung
Restrictions
- müssen immer alles Wiederholen
Erweiterungen
- müssen nicht alles Wiederholen
Man kann einen Typ sagen, man darf davon nicht mehr
ableiten:
-
-
<xsd:complexType name="…" final="#all" …>
<xsd:complexType name="…" final="restriction" …>
<xsd:complexType name="…" final="extension" …>
Attribute
- Benötigt: use=“required“ oder „optional“
- Standardwert mit Default
- Immer nach der Sequenz im ComplexTyp
- Attribute haben immer nur SimpleTypes
complexContent: zeigt das ComplexTyp eine Ableitung
eines anderen Typs ist
simpleContent: zeigt das der ComplexTyp eine Ableitung
eines einfachen SimpleTyps ist.
Choice und all
Choice entspricht oder Verknüpfung:
<!ELEMENT transportation (train | plane | automobile)*>
ALL: Elemente in beliebiger Reihenfolge
Man kann darin auch wieder mit Sequenzen arbeiten.
maxOccurs="unbounded"/>
<xsd:element name="Date" type="xsd:gYear"/>
</xsd:sequence>
</xsd:complexType >
//Erweiterung
<xsd:complexType name="BookPublication">
<xsd:complexContent>
<xsd:extension base="Publication">
<xsd:sequence>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType >
// Einschränkung
<xsd:complexType name= "SingleAuthorPublication">
<xsd:complexContent>
<xsd:restriction base="Publication">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"
maxOccurs="1"/>
<xsd:element name="Date" type="xsd:gYear"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Book" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element … />
</xsd:sequence>
<xsd:attribute name="Category" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="autobiography"/>
<xsd:enumeration value="non-fiction"/>
<xsd:enumeration value="fiction"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="InStock" type="xsd:boolean"
default="false"/>
<xsd:attribute name="Reviewer" type="xsd:string"
use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="transportation">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded" >
<xsd:element name="train" type="xsd:string"/>
<xsd:element name="plane" type="xsd:string"/>
<xsd:element name="automobile" type="xsd:string"/>
</xsd:choice>
<xsd:all>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Date" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
List
<Numbers>12 49 37 99 20 67</Numbers>
-
Mehrere Werte in einem Elemente
Union
-
Verbindet mehrere Typen als Möglichkeit
-
z.B. Mesh-Geometrien um Platz zu sparen
keine Listen von Listen
Listen nur von SimpleTypes
Seperierung mit Whitespace
<xsd:simpleType name="LotteryNumbers">
<xsd:list itemType="xsd:positiveInteger"/>
</xsd:simpleType>
AnyType
- Element mit Typ anyType kann alles sein auch
Mixedtype
Any-Element
Autor kann irgendwelche Elemente anfügen!
<xsd:element name="FloatOrInt">
<xsd:simpleType>
<xsd:union memberTypes="xsd:float xsd:integer"/>
</xsd:simpleType>
</xsd:element>
Mixed
-
Erlaubt inhalt von Text und Elementen
<xsd:complexType mixed="true">
-
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
XSLT eXtensible Stylesheet Language
- XSL sind auch XML Dokumente
- Geteilt in:
o XSLT:Strukturelle Umformung  Quelle
und Ziel sind XML Dokumente
o XSL-FO: Layout und Darstellung 
Zielformat PDF/Ausgabeformat
- Rendering: Aufbearbeitung für Ausgabegerät
o Auf Client: Nachteil Quelletext
sichtbar
o Server: Browser muss nicht verarbeiten,
nur Bedingte Anpassungen der
Darstellung
Verweis
Verarbeitungsmodell
<?xml-stylesheet type="text/xsl" href="foo.xsl"?>
Wurzelknoten: /
Wurzelelement: /rootelement
Befehle
Text einfügen
Wert ausgeben
Wert ausgeben in Literal
Kopieren von EIngabe zu Ausgabe (ohne Nachfolger/mit Nachfolger)
Template
Rekursiver Template aufruf
Schleifen
Direkter Aufruf (Prozedurale Verarbeitung)
If-Else
Sortierung in apply-templates und for-eauch


order="ascending/descending"
lang="..." // nach RFC 1766
-
Besteht aus einer Menge von Template Regeln
(Suchmuster + Schablone)
Einzelner Knoten
1. Es wird die Template Rule die am besten passt gesucht
2. Template wird instanziert, Ausgabefragment erzeugt,
Verarbeitung Rekursiv weitergeführt
Liste von Knoten
1. Jeder Knoten Reihe nach verarbeitet
2. Resultat wird zusammengefügt.
Bestandteile
- Anweisung zur Rekursiven verarbeitung, XPath
Ausdrücke, Literale, Kontrollstrukturen
Wurzelknoten vs Wurzel Element
<xsl:text></xsl:text>
<xsl:value-of select="text()"/>
<adresse public_neu = "{ @public }" />
<xsl:copy>
<xsl:copy-of select="nachname"/> //mit Nachfolger
<xsl:template match="vorname">
<xsl:apply-templates />
<xsl:apply-templates select="competitor"/>
<xsl:apply-templates select="competitor" mode="Rank"/>
<xsl:template match="competitor" mode="Rank">
<xsl:for-each select = "competitor">
<xsl:call-template name="RankFamilyNames">
<xsl:with-param name="myComp" select="."/>
</xsl:call-template>
 <xsl:template name="RankFamilyNames">
<xsl:param name="myComp" />
<xsl:if test="expression"> ... </...>
<xsl:apply-templates select = "competitor">
<xsl:sort select="time" data-type="number"/>
</xsl:apply-templates>

data-type="text/number"
 case-order="upper-first/lower-first"
Nummerierung
■
■
■
■
■
■
■
<xsl:number level="single" format="l"/>
value="expression" converted to number
format="..." default: 1.
level="..." any/single/multiple
lang="..."
letter-value="..."
grouping-separator="..."
grouping-size="..."/
Vaiablen
Import (niedrigere Preferenz) und Include
Choose  Switch
Namspaces
XPath
Wurzelknoten
Wurzelelement
absoluter Lokalisierungspfad
relativer Lokalisierungspfad
irgend ein Nachkomme
beliebiges Element
aktueller Knoten
Eltern
benanntes Attribut
beliebiges Attribut
Textknoten
beliebiger Knoten (E, T, K, PI,~A)
Kommentar lesen
Oder Verknüpfung
<xsl:variable name="..." select="expression"/>
<xsl:value-of select="$N"/>
<xsl:include href="… "/>
<xsl:import href="… "/>
<xsl:choose>
<xsl:when test="expression"> ... </xsl:when>
...
<xsl:otherwise> ... </xsl:otherwise>
</xsl:choose>
<xsl:template match="/ad:adresse">
/
/adresse
/adresse, /adress/vorname
//
oder descendant-or-self::node()
nachname
*
.
..
@private
oder attribute::private
@*
text()
node()
comment()
|  (vorname | nachname) oder alles selektieren mit (node()|@*)
XPath – Xpointer - XLink
XPath:
-
deklarative Abfragesprache um Knoten
lokalisiert Fragmente
verwendet in XSLT, XPointer, XLink, XQuery
XPointer:
-
Erweiterungvon XPath um bereiche von externen
Dokumenten zu lokalisieren
XLink:
-
-
Verallgemeinerung des HTML Link Konzepts
Ausdrucksstärker als HTML Links (Mehrfachauswahl,
Verhalten)
Verwendet XPointer um in XML Doks zu verweisen
XPath
-
Auswertung des Lokalisierungspfades von Links
nach rechts
- Starke analogie zu Verzeichnispfad von
Unix/Windows
- Kontext:Jeder LokalisierungsSchritt in eigenem
Kontext (nicht absolute Ausdrücke deshalb immer
au Kontext)
3 Lokalisierungsstritte: Vorteil schritt drei nur selten ausführen
- axis::node-test [predicate]]
-
axis: child(standard), parent
node-test: erste Filterung nach Namen
Prädikat: komplexere filterung (teuer)
Axis – Achsen:
-
self: eigener Knoten self::comment() oder ./comment()
ancestor: alle Vorgänger
parent: direkter Vorgänger
ancestor-or-self: Vorgänger + selbst
descendant: alle Nachfolger
child: direkte Nachfolger (default)
descentant-or-self: Nachfolger oder selbst
preceding-sibling: vorherige Elemente mit gleichen Eltern
following-sibling: nachfolgende Elemente mit gleichen Eltern
preceding/following: Elemente die vorher/nachher kommen
in umgekehrter Reihenfolge
attribute: attribute des Knotens
namespace: des Knotens
XPath
Prädikate: in [ ] zu bool ausgewertet
Beispiele:
-
-
competitor[country/text() ='SWE']
competitor[position()= 100] entspricht competitor[100]
rankingList[count(competitor) > 10]
competitor[middleName] existenz prüfung
Funktionen:
-
. oder current(): aktueller Knoten
text(): Inhalt (Text) des Knotens
position(): Index des Kontext-Knotens
last(): Index des letzten Elements in Kontext-Knoten
count(node-set): Zählt # Knotendocument(String): lade zusätzliches XSLT
name(node): Qualifizierter Name des Knotens
local-name(node): Name eines Knotens ohne Namespace
namespase-uri(node): URI des Namespaces des Knotens
generate-id(node): Generiere künstlichen Schlüssel
- id (String IDs ): Knoten ID (Leerzeichen getrennte Liste)
Nummer-Funktionen
-
count(node-set): zählt # Knoten
number(node): wandelt in Zahl um
ceiling(x): rundet zur nächsten ganzen Zahl auf
floor(x): rundet zur nächste ganze Zahl ab
round(x): mathematisches Runden
- sum(node-set): zähle die Werte der Knoten zusammen
String-Funktionen
-
concat(s1,s2,...) füge String zusammen
contains(s1,s2) wahr wenn s2 ein Teilstring von s1 ist
normalize-space(s) entferne führende und
abschliessende Leerz.
starts-with(s1,s2) wahr wenn s1 mit s2 beginnt
string() wandle in String um
string-length() Länge des Strings
substring(s, start, [length]) Teilstring der bei der Stelle
index beginnt (1..l)
substring-after(s1,s2) Teilstring nach dem ersten
Vorkommen von s2
substring-before(s1,s2) Teilstring vor dem ersten
Vorkommen von s2
translate(s1,s2,s3) ersetze in s1 alle Vorkommen von s2
durch s3
Boolean-Funktionen : Leere Strings false aber „false“ oder
„0“true
boolean() wandelt in Boolean um
false() Konstante FALSCH
true() Konstante WAHR
not() Negation des Ausdrucks
Mehre Dokumente ansprechen:
<xsl:template match="/">
<xsl:apply-templates select="document('NY2001.xml')"/>
<xsl:apply-templates select="document('NY2002.xml')"/>
</xsl:template>
XPointer
Vorteil:
Referenz zu Dokument ohne Anker setzen zu müssen
Bleiben oft gültig, auch wenn Dokument ändert
Können nur auf wohlgeformte XML verweisen.
Mehrere xpointer Verweise nacheinander
XLink : Verallgemeinerung des HTML-Links
Problem HTML:
-
Einschränkungen normale Links:
-
Zeichen Escaping
Leerzeichen : %20, " : %22, < : %3C, ...
Namespaces:
Syntax: xmlns (prefix = uri)
Beispiel: xmlns(svg=http://www.w3.org/2000/sgv) xpointer(//svg:rect)
ID Referenzieren
http://www.books.com/booklist.xml#xpointer(id(020179147))
http://www.books.com/booklist.xml#020179147
Position:
xpointer(/child::*[position()=1]/child::*[position()=2]/child::*
/[position() = 1])
xpointer(/*[1]/*[2]/*[1])
xpointer(here()/../../following-sibling::buch/text())
Punkte:
- Jeweils vor und nach Knoten, bzw. zwischen jedem
Character bei Text
- Start-point() end-point()
- End-point(buch) setzt vor Beginn des Buch Endtags
-
//title/text()/point()[position()=0]
Bereiche:
-
Spanne zwischen 2 Punkten
Range(//title)
Range-inside(//title) von elementstart- bis vor ende schlusstag
Verweisen immer auf Spezifische Elemente a,img
Bedeutung des Links vordefiniert
Anker definieren
Definition von link in Quelle
Nur einzelne Elemente referenzierbar
Nur 1 zu 1 verknüpfungen
Einfache Links:
<autorlist>
<name>Rusty Harrold</name>
<book xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type ="simple"
xlink:href
="http://../booklist.xml#xpointer(id(020179147)) />
</autorlist
Link Verhalten:
xlink:show
New: Zielresource in neuem Fenster
Replace: ersetze Dokument im aktuellen Fenster
Embed: Einbetten an aktueller Stelle
…
xlink:actuate
onLoad: Link sofort verfolgen
onRequest: auf Benutzeranforderung hin verfolgen
Bedeutung:
xlink:title
Beschreibt Bedeutung
xlink:role
- URI mit ausführlicher Beschreibung der Semantik
Erweiterte Links: ?
XSL-FO (Formatting Objects)
Nachteile CSS:
-
Nur Darstellung, Struktur unverändert
Kein Professionel Layout möglich
Nicht von allen Browsern unterstützt
Vorteile FO
-
Browser muss nicht verarbeiten
Nachteil:
-
Nur noch bedingte Anpassung auf dem Client
Zweck: Darstellungseigenschaften beschreiben
Eigenschaften:
-
Keine Browserunterstützung
Erlaubt exakte und detaillierte Kontrolle über Layout
Aufbau ähnlich TeX ist aber XML
Tags an CSS angelehnt
Master Seiten
- Beschreiben das Layout einer Seite
- Rechteckige Seite mit Rändern und Leerraum an
Seiten
- Haben Namen
Bereiche:
-
region-body: Hauptbereich ist obligatorisch
region before: Bereich davor
region-after: Bereich nachher
region-start: Anfangsbereich
region-end: Endbereich
Einfache Master Seiten: simple-page-master
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page"
page-width="21.0cm" page-height="29.7cm"
margin-right="1.5cm" margin-left="1.5cm"
margin-bottom="1.5cm" margin-top="1.5cm">
<fo:region-start extent=”1.0cm ”/>
<fo:region-before extent=”1.0cm ”/>
<fo:region-body margin="1.0cm" column-count=”3” columngap=”0.5cm”/> <!--Obligatorisch -->
<fo:region-end extent=”1.0cm ”/>
<fo:region-after extent=”1.0cm ”/>
</fo:simple-page-master>
</fo:layout-master-set>
Aufruf von FO in XSLT:
fop -xml <xml-Datei-Namen> -xsl <xsl-Datei-Namen> -pdf
out.pdf
Seitensequenz-Master (page-sequence-master)
-
sagt wie Layout der Seiten aussieht (Titelblatt, folgende)
Sequenzen oder einzelne Seiten
single-page-master-reference
-
master-reference: master-name des Masters
repeatable-page-master-reference
-
master-reference: master-name des Masters
- maximum-repeats
repeatable-page-master-alternatives
- alternativen
<fo:repeatable-page-master-alternatives>
// first | last | rest | any
<fo:conditional-page-master-reference page-position="first"
master-reference="first-page"/>
<fo:conditional-page-master-reference odd-or-even="odd"
master-reference="odd-page"/>
<fo:conditional-page-master-reference odd-or-even="even"
master-reference="even-page"/>
</fo:repeatable-page-master-alternatives>
<fo:layout-master-set>
<fo:simple-page-master master-name="first-page">
<fo:region-body margin="2cm" />
</fo:simple-page-master>
<fo:simple-page-master master-name="all-pages">
<fo:region-body margin="1cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="my-sequence">
<fo:single-page-master-reference master-reference="firstpage"/>
<fo:repeatable-page-master-reference master-reference="allpages"/>
</fo:page-sequence-master>
</fo:layout-master-set>
Seitensequenzen (Seiteninhalt)
Besteht aus einem Fluss von Inhalt in Bereiche
-
page-sequence: gibt an auf welchen Master
static-content: auf allen Seiten gleich  Header/Footer
flow: fliessender Inhalt
block-container: Gruppe von Blöcken vererbt Attribute
block: Textblock mit dem eigentlichen Text
inline: auf einzelne Teile im Block: Inline Element
Allgemeine Bereichseigenschaften (wie CSS)
- margin: (left, right, top, bottom, start, end,
before, after) Rand
- space-after/before: Platz zwischen Bereichen
- display-align: (after, auto, before, center)
- width/height auf block-container
- reference-orientation=180: Orientierung
<fo:page-sequence master-reference="my-page"> // welchen master
<fo:static-content flow-name=”xsl-region-after”>
<fo:block>The Periodic Table</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
// welchen Bereich
<fo:block>Hello, world!</fo:block>
// Text-Blöcke
<fo:block> <fo:inline color="red"> It's </fo:inline> a cruel
world</fo:block>
</fo:flow>
</fo:page-sequence>
Text- Bereiche
-
line-height=”1.5cm”
text-align=”justify,center, start, end”
letter-spacing
word-spacing
text-transform=”uppercase, lowercase, capitalize”
baseline-shift=”sub, super”
hyphenate=”true” language=”de” //Silbentrennung
Listen
Tabellen
<fo:list-block provisional-distance-between-starts="18pt">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>First item</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>Second item</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
Grafiken
<fo:external-graphic src="file:boxes.svg"/>
<fo:external-graphic src="url('aufmacher.jpg')" width="7cm">
<fo:table border-style="solid" border-width="thick">
<fo:table-column column-width="20mm"
number-columns-repeated="2"/>
<fo:table-body>
<fo:table-row >
<fo:table-cell border-style="solid">
<fo:block>Hallo</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid">
<fo:block> World </fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
Direkt SVG
<fo:instream-foreign-object>
<svg:svg xmlns:svg="http://www.w3.org/2000/svg"
width="3cm" height="4cm" xml:space="preserve">
<svg:polygon style="fill" color="#FFCCCC" points="0,31 18,0 36,31"/>
</svg:svg>
</fo:instream-foreign-object>
Seiten Nummern und Referenzen
Seitennummer:
<fo:static-content flow-name="xsl-region-before">
<fo:block text-align="end">Page <fo:page-number/></fo:block>
</fo:static-content>
Seitennummer-Referenz:
<fo:block text-align-last="justify">
1. Introduction
<fo:leader leader-pattern="dots"/>·
<fo:page-number-citation ref-id="intro"/>
</fo:block>
Links
Innerhalb Dokument: (Ziel muss id haben)
<fo:basic-link internal-destination="smiley"
text-decoration="underline">Click here</fo:basic-link>
Ausserhalb Dokument:
<fo:basic-link external-destination="http://www.zhwin.ch/~rea"
text-decoration="underline"
color="blue">Rege's Homepage</fo:basic-link>
Marker und Fussnote
- Folien nachsehen
<fo:block> This text contains a footnote
<fo:footnote>
…
<fo:footnote-body>
…
</fo:footnote-body>
</fo:footnote>
after the word "footnote".</fo:block>
DOM Document Object Model
- DOM bildet Baumstruktur des XML in Speicher
ab
- DOM standardmethode um XML zu verarbeiten
- Schnell lieber SAX
- Java unterstützung über: JAXP Java API for XML
- Unterschied Node und Element: Element ein
spezieller Node
Dokument Parsen:
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
Factory Einstellungen:
dbf.setValidating(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setNamespaceAware(true);
Befehle
Alle Kindknoten erhalten
Root-Element erhalten
Alle untergeordneten Tags vom Typ tag
Alle Attribute vom Element erhalten
Länge der NodeListe
Auf ein spezielles Kind Element zugreifen
Name und Wert eines Nodes
Typ eines Nodes abfragen
Attribut per Name ansprechen
Wert eines Nodes ändern
Nodes erstellen
Nodes einfügen/anhängen
Auf Eltern Element zugreifen
Auf ersten Kindknoten zugreifen
Element austauschen
Attribute hinzufügen
Attribut-Wert setzen
Attribut entfernen
Namespace zugreifen
Node-Typen
- Element: kann als einziger Attribute haben
- Attribute
- Text
- Document: oberstes Element keine Eltern
- Andere CDATA, Comment, Entities, Notations
Dokument Ausgabe:
- DOMUtil .printDOM(Node),
writeXmlToFile(filename, document) // nicht in
standard API
- Über Transform
Source source = new DOMSource(document);
File file = new File(filename);
Result result = new StreamResult(file);
Transformer transformer =
TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
// Achtung: TransformerConfigurationException
// Achtung: .parse() SAXException
NodeList children = node.getChildNodes();
Element root = doc.getDocumentElement();
NodeList desc = e.getElementsByTagName(tag);
NamedNodeMap attr = e.getAttributes();
children.getLength()
Children.item(i)
node.getNodeName() node.getNodeValue()
if (start.getNodeType() == Node.ELEMENT_NODE)
Node att = node.getAttributes().getNamedItem("attributname");
Node.setNodeValue(String value);
Element e = doc.createElement (name);
Text t = doc.createTextNode (name);
Attr a = doc.createAttribute (name);
e.appendChild(n);
e.insertBefore (n, childNode);
e.removeChild(node);
n.getParentNode()
…item(0).getFirstChild()
alt.getParentNode().replaceChild( neu, alt);
e.setAttributeNode(a);
e.setAttribute(attributeName, attributeValue);
e.removeAttribute(attributeName);
String getNamespaceURI()
String getLocalName()
String getPrefix()
getElementsByTagNameNS() etc.
XPath
Import
Factory
Import javax.xml.xpath.*;
Neuer XPath
XPath String
Ausführen
String expr = "//NAME[text()='Cindy']";
XPathFactory factory =
XPathFactory.newInstance();
XPath xpath = factory.newXPath();
Element name = (Element)xpath.evaluate (expr, doc,
XPathConstants.NODE);
Vorkompiliert (falls mehrfach verwendet)
XPathExpression xexpr = xpath.compile(expr);
Element name = (Element) xexpr.evaluate(
doc, XPathConstants.NODE);
SAX (Simple API for XML)
- Schneller als DOM
- Event bassiert
- Kein w3c-Standard
- StAX: Streaming API for XML  pull-API: Client calls
Klassen und Interfaces
Methoden von StAX, statt Events  Switch-Anweisung
Ablauf:
-
-
SAXParser erzeugen
EventHandler erzeugen
Handler an Parser binden
Parse Dokument und sende events zu den Handlern
SAXParser erstellen
Direkt:
XMLReader reader = new org.apache.xerces.parsers.SAXParser();
Treiber zur Laufzeit:
-
Attributes
XMLReader: representiert Parser
InputSource
ContentHandler: spezifiert die Events
DefaultHandler: ContentHandler mit DTDHandler und
ErrorHandler
XMLReaderFactory: bezug des XMLReaders
SAXParser
EventHandler erstellen
-
reader.setContentHandler()
reader.setDTDHandler()
reader.setEntityResolver()
reader.setErrorHandler()
java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
XMLApp
XMLReader reader = XMLReaderFactory.createXMLReader();
DefaultHandler implementiert alle bereits mit leeren Methoden
Treiber übergabe bei XMLReaderFactory:
ContentHandler:
XMLReader reader = XMLReaderFactory.createXMLReader(
"org.apache.xerces.parsers.SAXParser");
Benutze JAXP:
SAXParserFactory spfactory = SAXParserFactory.newInstance();
SAXParser saxParser = spfactory.newSAXParser();
XMLReader reader = saxParser.getXMLReader();
Parser -Verhalten ändern
-
-
Factory.setNamespaceAware(true);
Factory.setValidationg(true)
setFeature();
setProperty();
-
-
characters (char[] ch, int start, int length)
endDocument()
endElement(String namespaceURI, String localName, String
qName)
endPrefixMapping(String prefix)
ignorableWhitespace(char[] ch, int start, int length)
processingInstruction(String target, String data)
setDocumentLocator(Locator locator)
skippedEntity(String name)
startDocument()
startElement(String namespaceURI, String localName, String
qName, Attributes atts)
startPrefixMapping(String prefix, String uri)
ErrorHandling:
warning()
error()
fatalError()
z.B: public void error (SAXParseException e) {System.out.println (“Error”)}
SVG( Scalable Vector Graphics)
Vektor Grafik:
-
Bild durch Geometrie-Formen beschrieben
Viewer erhält Kommandos zum darstellen
Beschrieben durch eine Liste von Instruktionen
Raster Grafik
-
Formate :
-
-
Adobe Illustrator
PostScript
Flash
Windows Meta File
Pixel Array
Pixel durch RGB bestimmt
Serie von Pixel  Bitmap
Kompremiert /Kompression
Viewer untkomprimiert ung transferiert zu Screen
Koordinaten
Anzeigebereich im <svg>-Tag
Einheit wählbar, Standard Pixel
Die Viewbox setzt die Grafik realtiv zu en Angaben.
<svg width="4cm" height="5cm" viewBox="0 0 64 80">
<rect x="16" y="16" width="40" height="40"
style="fill: none; stroke: black;"/>
...
</svg>
Formen
<?xml version="1.0"?>
<!DOCTYPE svg SYSTEM
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg">
<desc>Basic shapes</desc>
<circle cx="50" cy="50" r="25" stroke="black" fill="none"/>
<ellipse cx="75" cy="125" rx="50" ry="25"/>
<rect x="155" y="5" width="75" height="100" fill="#ffff00"/>
<rect x="250" y="5" width="75" height="100" rx="30" ry="20" fill="red"/>
<line x1="0" y1="150" x2="400" y2="150" stroke-width="2" stroke="blue"/>
<polyline points="50,175 150,175 150,125 250,200" stroke="magenta" fill="none"/>
<polygon points="350,75 379,175 355,175 355,200 345,200 345,175321,175" fill="green"/>
</svg>
Text an Pfad
Text transformieren (transformieren)
<defs>
<path id="curve" d="M 30 40 C 50 10, 70 10,120 40 S 150 0, 200 40" />
</defs>
<text font-size="15" style="fill:blue;">
<textPath xlink:href="#curve">
Following a Bezier curve
</textPath>
</text>
<text x="10" y="180" font-size="30" transform="rotate(30,10,180)"
font-family="Times" style="fill:green;">
Rotated 30 degrees
</text>
Pfade
Ellipsen Bogen
<path d="M 40 60, L 10 60, L 40 30, Z, M 70 80,
L 100 100"/>
M: MoveTo, L: LineTo, Z: ClosePath A: Bogel, Q: Quadric Bezier, C:
Cubic Bezier (kleine Buchstaben sind Relativ zur aktuellen Position)
A radiusX radiusY rotation largeArcFlag sweepFlag endX endY
Styles
Gruppieren und Referenzieren
//Reihenfolge Transformationen wichtig!
-
Gruppen mit <g>
Wenn <g> nicht in <defs> wird es gleich gezeichnet
<g id="house" style="fill: none; stroke: black;">
<rect x="6" y="50" width="60" height="60"/>
<polyline points="6 50, 36 9, 66 50"/>
<polyline points="36 110, 36 80, 50 80, 50 110"/>
</g>
<use xlink:href="#house" transform="translate(70,100)"/>
Bild-Dateien Referenzieren
External:
<?xml-stylesheet href="ext_style.css"
type="text/css"?>
Inline:
<circle cx="20" cy="20" r="10" style="stroke: black; strokewidth: 1.5; fill:blue;"/>
Oder:
<defs>
<style type="text/css">
<![CDATA[
circle {stroke: black; stroke-width: 5; fill: blue;}
line {stroke: black; stroke-width: 2;} ]]>
</style>
</defs>
-
JPEG und PNG möglich
<image xlink:href="LakePowell.jpg"
x="100" y="100" width="400" height="300"/>
Transformationen
Translate:
<use xlink:href="#square" transform="translate(100, 100)"/>
Scaling:
<use xlink:href="#square" transform="scale(2)"/>
Rotation (im Uhrzeigersinn, x, y):
<use xlink:href="#square" transform="rotate(-45,50,50)"/>
Nacheinander hinten zuerst ausgeführt:
<use xlink:href="#square"
transform= "rotate(-45, 50, 50) translate(0,100)" zuerst Traslation
SVG in HTML
<object type="image/svg+xml" data="Cat6.svg"
width="1200" height="800">
</object>
Animation
Elemente auf zu animierendes Element
Animate
animateColor
animateTransform
animateMotion
Im Animations-Element spezifiziert man
die zu animierenden Attribute
den Bereich
Timing
Endwert
Animate:
<ellipse ry=”5” …>
<animate id="close" attributeName="ry" from="5" to="0"
begin="nose.click" dur="0.5s" repeatCount="7" fill="freeze"/>
</ellipse>
AnimateColor:
<circle …>
<animateColor id="toGreen" attributeName="fill"
from="blue" to="green" begin=“close.end" dur="1s"
repeatCount="7" fill="remove"/>
</circle>
AnimateTransform:
<animateTransform attributeName="transform" type="rotate"
from="20,70,95" to="-20,70,95" begin="toGreen.begin+7s" dur="1s"
repeatCount="7" fill="freeze"/>
Webservice
-
-
Definition: Ein Web Service ist eine Funktion (Prozedur,Methode, Teil der
Geschäftslogik), die via Internet-Technologien zugegriffen werden kann
Zweck: Interoperation zwischen Maschinen
Schnittstelle beschrieben in maschinenlesbarer Form
Nachrichtenaustausch über SOAP (unabhängig von Transportprotokoll,
und implementierung Java/.NET)
Transportiert via http oder andere Web Protokolle (FTP,SMTP)
Meistens XML kodierte Nachrichten
WSDL: Web Service Description Language: Schnittstellenbeschreibung
SOAP Simple Object Access Protocol
SOAP: Definiert Standard-Format für
-
-
Architektur
- Service Anbieter (Server): bietet und beschreibt Dienst, registriert
Transport von XML über HTTP; SMTP, FTP, ist
erweiterbar (Auth, Sicherheit etc.)
WSDL: Beschreibt die Schnittstelle
(Ein/Ausgabe Params , Protokollbindung)
UDDI: Universal Description, Discovery and
Integration  (Weltweites) Verzeichnis von
registrierten Services (Nach Kriterien
suchbar)
allenfals in Verzeichnis
-
-
Service Verzeichnis: ermöglicht Finden,Eintragen in Service
Service Konsument (Client): benutzt Dienste, sucht diese im
Verzeichnis, stellt Verbindung mit Service her
Vorteile:
-
Unäbhängig Programmiersprache/Laufzeitumgebung, OS
Baut auf bestehender Internetinfrastruktur auf
Standardisiert
Weit unterstützt
Nachteile:
-
Performance (wegen XML)
Gremien bestehen aus Vertretern mit eigenen Interessen
Standards zu komplex
Erweiterbarkeit führt zu Interoperabilität
Funktionsweise
- Verschiedene
Meldungsaustauschmuster: oneway, request-response
Interaktionsmodelle
-
-
One Way: SOAP/SMTP  nur ein Weg
Request-Response: SOAP/http  synchrone
Kommunikation Server antwortet
Solicit Rsponse: SOAP/SMTP  Asynchrone
Kommunikation, keine Bestätigungen
Notification: POP3  Benachrichtigung vom
Service
SOAP Meldungen
http-Header:
-
-
POST: fast immer POST
HOST: Zielmaschine
SOAPAction: für Routing und Dispatching von
SOAP Meldungen mit ““ direkt Endpunkt
Envelope
- Ns: http://schemas.xmlsoap.org/soap/envelope/
- Beinhaltet Header(optional), Body und bei Fehlern im Body noch fault
(faultcode, faultString)
Header
-
-
Anwendungsspezifishce Informationen (Auth, Transaktionssteuerung)
Ermöglicht piggybacking von Metainformatinen (info über Daten)
http-Aufruf:
GET: Einschränkung auf einfache Aufrufe
(keine Strukturierten Daten) Aufruf httpkodiert Response: xml-kodiert
Body
- Eigentliche Daten
- Frei wählbar wellformed (meist durch Schema)
Datenformat im Body
http://localhost/time/TimeService.asmx/GetTime?
shortForm=true
-
POST: Datenteil des post enthält SOAP
Anfrage  keine Einschränkungen
NachrichtenFormat: Dokument Übermittlung oder Aufruf von Funktion
Document: Methodenname nicht Teil der Meldung
rpc: Methodenname teil der Meldung
Kodierung  heute literal
- Literal: Daten nach XML-Schema kodiert, Vorteil validierung, Nachteil:
nicht Baumstrukturen komplex
- encoded: Daten nach SOAP Regeln kodiert
Kombinationen:
rpc/literal  Java
document/literal  meisten verwendet, läuft am besten
rpc/encoded  früher oft gebraucht
Serialisierung Datentypen
-
-
Siehe Folien (meistens genau gleich)
Einfache Typen: VariblenName = Elementname, Wert = ElementInhalt, Typ
durch Schema definiert
Single Refernce: einfach eingebettet (verschachtelt)
Multi Reference: Objekt mit id und die anderen referenzieren über
href=“#id“ auf das Element
WSDL ist eine IDL  siehe genaues Folien
- Von Mensch lesbar
- Von Maschine lesbar  Implementierungsrumpf
- Version 1.0 seit 2001 2.0 Recommendation (Umbenennung
PortEndpoint, Definition  description, eliminiert
message)
- Beschreibt: Service Interface (Datentypen, Aufbau Nachricht,
Operationen) und Service Implementation (Protokolle für
Operation, Adressen für Webservice)
Konkrete Implementierung Java
Stubs eines Webservice erzeugen
(Kommandozeile):
wsimport -d . –keep -p
com.javatutor.insel.ws.gen.chrisws
http://localhost:8081/services?wsdl
-d .  aktuelles Directory
Package
WebServiceWSDL URL
Clientseitige Verwendung (alternative dll):
CalculatorService service = new CalculatorService();
Calculator calc = service.getCalculatorEndPoint();
double d = calc.add(4,5);
Server: Webservice erstellen seit 1.6 mit
annotations
package com.javatutor.insel.ws;
import javax.jws.*;
import javax.jws.soap.*;
@WebService(name="BmiWebServices")
@SOAPBinding(style = SOAPBinding.Style.RPC)
//DOCUMENT
public class MyBmiWeb {
@WebMethod(operationName=”hello”) //name
optional
public String hello( String name )
{ return "Hello " + name + "!"; }
@WebMethod(operationName="body-massindex")
@WebResult(name = "your-bmi")
public double bmi( @WebParam(name="height")
double
height,
@WebParam(name="weight")
double
weight )
{
double bmi = weight / (height * height) * 10000;
System.out.println(this.getClass().getSimpleName()+"
called:"+height+ " "+weight+" "+bmi);
return bmi;
}
}
Kommandozeile: Webservice erzeugen:
wsgen -r . -extension -wsdl:Xsoap1.2
-cp . -keep timerservice.Timer
-r . : resourcenfiles wsdl version Klasse
xQuery – (XML und Datenbanken)
Vorteile XML
-
Portabilität: Unicode
Verschiedene Verarbeitungsmöglickeiten XSLT, DOM, SAX
Trasfer über Netzwerk (Text)
Nachteile XML
-
Speicherung nicht standardisiert (ausser Datei)
Mehrere Arten der Beschreibung, XSD, DTD
Grad der Strukturierung
Speicher und Rechenleistungsbedarf
Vergleich XML – RDBMs:
Drei-Ebenen-Modell
-
Konzeptionelle Ebene: Datentypen z.B. ERM, Schema
Logische Ebene: Dateninhalte z.B.Relationenmodell, XML
Dokument/Element
- Physische Ebene: Datenspeicherung
Klassifikation von XML-Dokumenten
-
Strukturierte Daten (alles schön in Elementen)relationale
DB speichern
Semistrukturiert: Generische Speicherung
Unstrukturiert (Mixed Content): Dateien speichern
XML
- einfach-hierarchische Struktur (Baum)
- Knoten haben Elemente und Attribute
- Elemente können eingebettet sein
- Elemente habe Reihenfolge
- Schema ist optional
- direkte Speicherung/Abfrage von einfachen Dokumenten
- Abfrage basierend auf XML Standard
RDBMS
- Daten in mehreren Tabellen
- Zellen haben einzelnen Wert
- Atomare Zellen Inhalte
- Kolonnen/Zeilen Reihenfolge undefiniert
- Schema ist vorgeschrieben
- Joins für die Abfrage von einfachen Dokumenten (bei normalisierten
Daten)
- Abfrage mittels SQL
Speicherung von XML Dokumenten
Als ganzes CLOB
Generierung XML aus DB
- Vollständige Abbildung
- Abbildung von Abfrageergebnissen
- Individuelle Transformationen
Volltext- XML-Index unstrukturiert + semiunstruk.
-
 Volltextindex oder Volltext- XML-Index
Dokumentstruktur
 Abbildung Graphstruktur oder DOM Speicherung
-
Strukturiert
 vollständiges Mapping
Volltext-Index  unstrukturierte
-
Zusätzlich XML-Markup auswertbar  XPath/Query
Abbildung Graphenstruktur
-
Struktur und Inhalt in DB gespeichert
Generishce Speicherung
Verwendet Relationen zur Speicherung von Elementen und
Attributen
DOM-Speicherung  Excelon
Vollständiges Mapping
-
Schema DTD wird gebraucht
Benutzerdefinites Mapping
Hybrid-Verfahren
-
Struktur Teilen und bestes nehmen
XQuery
-
-
Erweitertes XPath basiert auf Version 2.0
ähnelt SQL
viele Datenbankhesteller haben Unterwstützung
angekündigt
FLWR-Ausdruck: for –let, where, return
Variablen mit $
Konzeptbedingt kein JOIN wie in SQL
Syntax
for $var in expr [, $var in expr ...]
let $var := expr [, $var := expr ...]
where expr
return expr
Berechnete Werte
return <hotel name="{$h/@name}">
Bedingte Anweisung
if (Bedingung) then <...> else <...>
if ($h/foto) then
return <hotel name= {$h/@name} foto = {$h/phot/@href} />
Some Every
[some ¦ every] var in expr-1 satisfies expr-2
for $h in document("hotels.xml")//hotel
where some $z in $hotel/zimmmer/typ satisfies $z = "EZ"
return <hotel name= {$h/@name}/>
Sortierung
where ... order by expr
ID, IDREF
for $h in document("hotels.xml")//hotel
return <hotel name=
{$h/@name}>{id($h/@adrID)/addresse}</hotel>
Glossar
Element Typ
Element
Element Content
Character Content
Attributname
Attributvalue
Well-formed
Tagname
Das ganze Konstrukt von Tag bis Schlusstag
<element></element>
Alles was innerhalb des Tags ist.
Nur Text als Element Content
attributname=“attributvalue“
attributname=“attributvalue“
Syntax Korrekt, aber entspricht noch nicht dem Schema
 valid
Herunterladen