PDF (Acrobat)

Werbung
3
XML
• eXtensible Markup Language
• abgeleitet von SGML
• definierbare logische Struktur:
markierte, sortierte Bäume
• mächtige Hyperlinkmöglichkeiten (XLink, XPointer)
• Transformationssprachen (XSL)
• basiert auf Unicode
Vorläufige Version
118
c 2003 Peter Thiemann
• Anwendungen: WWW, Datenaustausch, E-Commerce
• spezialisierte Versionen: XHTML, WAP/WML,
VoiceXML, DSML (directory services), UPnP (Universal
Plug and Play), SyncML, Astronomical Markup
Language, GedML: Genealogical Data in XML,
XML/EDI (electronic data interchange), Synchronized
Multimedia Integration Language (SMIL), Mathematical
Markup Language, Open Trading Protocol (OTP),
Weather Observation Markup Format (OMF),
BIOpolymer Markup Language (BIOML), Bioinformatic
Sequence Markup Language (BSML), Chemical Markup
Language (CML), User Interface Markup Language
(UIML), . . .
Vorläufige Version
119
c 2003 Peter Thiemann
Beispiel: Wohlgeformtes XML Dokument
<?xml version="1.0"?>
<ELTERN>
<KIND>
Hier kommt der Inhalt.
</KIND>
<LEER />
</ELTERN>
XML Deklaration: <?xml version="1.0"?>
Elemente: ELTERN, KIND, LEER
Öffnende Tags: <ELTERN>, <KIND>
Schließende Tags: </KIND>, </ELTERN>
Vorläufige Version
120
c 2003 Peter Thiemann
Leeres Element: <LEER />
Wohlgeformt heißt
• XML Deklaration vorhanden
• sämtliche Elemente haben öffnendes und schließendes
Tag
(oder <LEER />, falls kein Inhalt)
• korrekte Schachtelung!
• Wurzelelement vorhanden
Vorläufige Version
121
c 2003 Peter Thiemann
Beispiel: Gültiges XML Dokument
• muß die logische Struktur definieren
→ DTD (Document Type Definition)
<?xml version="1.0"?>
<!DOCTYPE ELTERN [
<!ELEMENT ELTERN (KIND*)>
<!ELEMENT KIND (MARKE?,NAME+)>
<!ELEMENT MARKE EMPTY>
<!ELEMENT NAME (NACHNAME+,VORNAME+)*>
<!ELEMENT NACHNAME (#PCDATA)>
<!ELEMENT VORNAME (#PCDATA)>
<!ATTLIST MARKE
NUMMER ID #REQUIRED
GELISTET CDATA #FIXED "ja"
TYP (natürlich|adoptiert) "natürlich">
<!ENTITY STATEMENT "Wohlgeformtes XML">
]>
Vorläufige Version
122
c 2003 Peter Thiemann
<ELTERN>
&STATEMENT;
<KIND>
<MARKE NUMMER="1" GELISTET="ja" TYP="natürlich" />
<NAME>
<NACHNAME>Flavius</NACHNAME>
<VORNAME>Secundus</VORNAME>
</NAME>
</KIND>
</ELTERN>
Vorläufige Version
123
c 2003 Peter Thiemann
3.1
Inhalte eines XML Dokuments
• Elemente (benannte Baumknoten)
• Attribute (Namen/Wert-Paare an Baumknoten)
• Referenzen
– character reference <, >
– entity reference &STATEMENT;
– parameter-entity reference %ISOLat2; (nur in DTD)
• <!-- Kommentare -->
• Verarbeitungsanweisungen (processing instructions) <?name daten ?> werden
an Anwendung überreicht
<?xml:stylesheet type="text/css2" href="style.css"?>
• CDATA (character data)
<![CDATA[ uninterpretierte Daten
werden wörtlich eingefügt
]]>
Vorläufige Version
124
c 2003 Peter Thiemann
• Vorspann
– <?xml version="1.0" encoding="UTF-8"?>
– Spezifikation einer internen DTD
<!DOCTYPE Name [
Element-, Attribut-, Entitydeklarationen
]>
– Spezifikation einer externen DTD
<!DOCTYPE HTML3
PUBLIC "-//IETF//DTD HTML Strict//EN//3.0 "
"html-3s.dtd "
[ ggf. interne Deklarationen ]>
Vorläufige Version
125
c 2003 Peter Thiemann
3.1.1
Elementdeklaration
helementdecl i ::= <!ELEMENT hName i hcontentspec i>
hcontentspec i ::= EMPTY | ANY | hMixed i | hchildren i
• Produktion einer kf. Grammatik
• hMixed i: #PCDATA und Elemente vermischt
• hchildren i: regulärer Ausdruck über Elementnamen;
Operatoren , | ? + *
Vorläufige Version
126
c 2003 Peter Thiemann
3.1.2
Attributdeklaration
hAttlistDecl i
::=
<!ATTLIST hName i hAttDef i∗ >
hAttDef i
::=
hName i hAttType i hDefaultDecl i
hAttType i ::=
Vorläufige Version
CDATA
String
ID
eindeutiger Schlüssel
IDREF, IDREFS
Verweis(e) auf Schlüssel
ENTITY, ENTITIES
Name(n) von Entities
NMTOKEN, NMTOKENS
ein oder mehrere Wörter
(Nmtoken (| Nmtoken )∗ )
Aufzählungstyp
127
c 2003 Peter Thiemann
hDefaultDecl i ::=
Vorläufige Version
#REQUIRED
erforderlich
|
#IMPLIED
nicht erforderlich, kein Default
|
"hAttValue i"
Defaultwert
|
#FIXED "hAttValue i"
fester Wert
128
c 2003 Peter Thiemann
3.1.3
Entity Deklaration
hGEDecl i
::=
<!ENTITY hName i hEntityDef i>
hPEDecl i
::=
<!ENTITY % hName i hPEDef i>
hEntityDef i
::=
hEntityValue i | (hExternalID i hNDataDecl i?)
hPEDef i
::=
hEntityValue i | hExternalID i
• hGEDecl i general entity
Abkürzungen, Dokumentenbausteine (auch von Dateien hExternalID i)
<!ENTITY dd "Dagobert Duck">
• hPEDecl i parameter entity
Parameter zur Steuerung der DTD Definition
<!ENTITY % ISOLat2 "INCLUDE">
Vorläufige Version
129
c 2003 Peter Thiemann
3.1.4
Media Type
• text/xml eingeschränkt auf Zeichensatz mit
1-Byte/Zeichen
• application/xml mit voller Unicodeunterstützung
Vorläufige Version
130
c 2003 Peter Thiemann
3.2
XML Namespaces
“Modulsystem für XML”
Vermeidung von Namenskonflikten bei Benutzung von
• mehreren Quellen für Elementdeklarationen oder
• mehreren Anwendungen mit dem gleichen Dokument
Definition: An XML namespace is a collection of names, identified by a URI
reference RFC RFC2396, which are used in XML documents as element types
and attribute names.
• Qualifizierte Namen = hNamespace-Präfix i : hlokaler Teil i
• Präfix steht für URI, expandiert zu: hURI i : hlokaler Teil i
• Identität: String nach Expansion
• die URI ist beliebig, muß nicht funktional sein
Vorläufige Version
131
c 2003 Peter Thiemann
3.2.1
Deklaration eines Namespace
• für ein Element und sämtliche geschachtelten Elemente
• Attribut xmlns definiert Default-Namespace
(kein qualifizierter Name nötig)
• Attribut xmlns:hNamespace-Präfix i bindet einen
Namespace an das hNamespace-Präfix i
• können mehrfach auftreten
Vorläufige Version
132
c 2003 Peter Thiemann
Beispiele
<x xmlns:edi=’http://ecommerce.org/schema’>
<!-- the "edi" prefix is bound to http://ecommerce.org/schema
for the "x" element and contents -->
</x>
<BOOKS>
<bk:BOOK xmlns:bk="urn:BookLovers.org:BookInfo"
xmlns:money="urn:Finance:Money">
<bk:TITLE>A Suitable Boy</bk:TITLE>
<bk:PRICE money:currency="US Dollar">22.95</bk:PRICE>
</bk:BOOK>
</BOOKS>
Beispiel: Default Namespace
<BOOK xmlns="urn:BookLovers.org:BookInfo">
<TITLE>A Suitable Boy</TITLE>
<PRICE currency="US Dollar">22.95</PRICE>
</BOOK>
Vorläufige Version
133
c 2003 Peter Thiemann
3.3
XML Path Language (XPath)
Ziel: Spezifikation von Mengen von XML-Elementen
• Benutzung in URIs und Attributen
• kompakte Syntax (nicht XML)
• operiert auf logischer Struktur des Dokuments
Dokument ist ein Baum mit folgenden Knotenarten
• Wurzel
• Element
• Attribut
• Text
• Namespace
• Verarbeitungsanweisungen <?name daten ?>
• Kommentare
Vorläufige Version
134
c 2003 Peter Thiemann
XPath definiert für jede Knotenart einen string-value
• Wurzel: Konkatenation der string-values der Kinder
• Element: Konkatenation der string-values der Kinder
• Attribut: Wert des Attributs
• Text: Character Data
• Namespace: die URI
• Verarbeitungsanweisungen: daten
• Kommentare: Inhalt
Vorläufige Version
135
c 2003 Peter Thiemann
Datentypen von XPath
• Menge von Baumknoten
• Boolean (true, false)
• Number (Gleitkomma)
• String
Darüber werden Ausdrücke gebildet. Auswertung erfolgt in Kontext:
• Kontextknoten
• Paar von natürlichen Zahlen (Kontextposition, Kontextgröße)
• Variablenbindungen
• Bibliotheksfunktionen
• Namespace-Deklarationen
Vorläufige Version
136
c 2003 Peter Thiemann
3.3.1
Ausdrücke
hLocationPath i
hAbsoluteLocationPath i
::=
hRelativeLocationPath i
|
hAbsoluteLocationPath i
::=
|
hRelativeLocationPath i
Vorläufige Version
::=
/hRelativeLocationPath i?
hAbbreviatedAbsoluteLocationPath i
hStep i
|
hRelativeLocationPath i/hStep i
|
hAbbreviatedRelativeLocationPath i
137
c 2003 Peter Thiemann
Location hStep i
besteht aus
• Achse (traversierte Beziehung zwischen Knoten)
• Knotentest (Typ und Name)
• optionale Prädikate
Auswahl:
Menge der Knoten, die entlang der Achse erreicht werden, den
Knotentest erfüllen und sämtliche Prädikate erfüllen
Beispiel
child::para[position()=1]
hStep i
::=
|
hAxisSpecifier i
::=
|
Vorläufige Version
hAxisSpecifier i hNodeTest i hPredicate i∗
hAbbreviatedStep i
hAxisName i ::
hAbbreviatedAxisSpecifier i
138
c 2003 Peter Thiemann
hAxisName i ::=
• child
• descendant
• parent
• ancestor
• following-sibling
• preceding-sibling
• following
• preceding
• attribute
• namespace
• self
• descendant-or-self
• ancestor-or-self
Vorläufige Version
139
c 2003 Peter Thiemann
hNodeTest i
hNodeTest i
::=
|
hNameTest i
hNodeType i
Vorläufige Version
::=
hNameTest i
hNodeType i()
*
jeder Knoten
|
hNCName i:*
Element in Namespace
|
hQName i
benanntes Element
::=
comment
true, falls Kommentarknoten
|
text
falls Textknoten
|
processing-instruction
falls Verarbeitungsanweisung
|
node
immer true
140
c 2003 Peter Thiemann
hPredicate i
hPredicate i ::= [hExpr i]
Für jeden durch Achse und hNodeTest i selektierten Knoten
wird Ausdruck hExpr i wird im Kontext ausgewertet. Ergebnis
→ Boolean. Falls Ergebnis false, wird der Knoten verworfen.
Weitere Ausdrücke Boolesche Operationen, arithmetische
Operationen, Vergleichsoperationen, Stringoperationen (über
Funktionsaufrufe), Operationen auf Knotenmengen
Vorläufige Version
141
c 2003 Peter Thiemann
Beispiele
• child::para
selects the para element children of the context node
• child::*
selects all element children of the context node
• child::text()
selects all text node children of the context node
• child::node()
selects all the children of the context node, whatever their node type
• attribute::name
selects the name attribute of the context node
• attribute::*
selects all the attributes of the context node
Vorläufige Version
142
c 2003 Peter Thiemann
• self::para
selects the context node if it is a para element, and otherwise selects nothing
• child::chapter/descendant::para
selects the para element descendants of the chapter element children of the
context node
• child::*/child::para
selects all para grandchildren of the context node
• /
selects the document root (which is always the parent of the document
element)
• child::para[position()=1]
selects the first para child of the context node
• /descendant::figure[position()=42]
selects the forty-second figure element in the document
Vorläufige Version
143
c 2003 Peter Thiemann
3.3.2
Abkürzungen
In Location hStep is
child:: ist optional
// für /descendant-or-self::node()/
@ für attribute::
. für self::node()
.. für parent::node()
hAbbreviatedAbsoluteLocationPath i
::=
//hRelativeLocationPath i
hAbbreviatedRelativeLocationPath i
::=
hRelativeLocationPath i//hStep i
hAbbreviatedStep i
::=
. | ..
hAbbreviatedAxisSpecifier i
::=
@?
Vorläufige Version
144
c 2003 Peter Thiemann
3.4
XML Pointer Language (XPointer)
Ziel: Sprache zur Adressierung von Dokumentfragmenten (Ziele von Links)
• Erweiterung von XPath
• Punkte und Bereiche adressierbar
• Stringsuche
• Einsatz als Fragmentbezeichner in URIs
XPointer-Ausdrücke benutzen Sonderzeichen, die in XML oder in URIs nicht
verfügbar sind. → übliche Kodierung > bzw. %20.
Vorläufige Version
145
c 2003 Peter Thiemann
3.4.1
XPointer Adressierung
hXPointer i
::=
hBareName i
|
hChildSeq i
|
F ullXP tr
hFullXPtr i
::=
hXPtrPart i+
hXPtrPart i
::=
hScheme i(hExpr i)
hScheme i
::=
xpointer | . . .
hChildSeq i
::=
/1(/[0 − 9]∗ )∗
|
Vorläufige Version
146
hName i(/[0 − 9]∗ )+
c 2003 Peter Thiemann
Beispiele
xpointer(id("introduction"))
Element mit ID="introduction"; Abkürzung (bare name): introduction
Auch introduction/4/7 für das siebte Kind vom vierten Kind vom
introduction-Element (child sequence)
xpointer(id("introduction")) xpointer(child::*[4]/child::*[7])
Vorläufige Version
147
c 2003 Peter Thiemann
Definition Ein Ort ist
• ein Baumknoten eines Dokuments (wie XPath)
• ein Punkt im Dokument (ein Baumknoten und ein Index)
• ein Bereich zwischen zwei Punkten im Dokument
Neue hNodeType i
hNodeType i
::=
point
falls Punkt
|
range
falls Bereich
|
...
Neue Funktionen
xpointer(id("chap1")/range-to(id("chap2")))
xpointer(descendant::REVST/range-to(following::REVEND[1]))
string-range(//title,"Thomas Pynchon")[17]
Abkürzung: // steht für /descendant-or-self::node()/
Vorläufige Version
148
c 2003 Peter Thiemann
3.5
XML Linking Language (XLink)
Verallgemeinerung der Hyperlink-Fähigkeiten von HTML (wohlbekannt und erprobt
aus anderen Hypertext-Systemen)
• Links mit mehr als zwei Teilnehmern
• Assoziation von Daten mit einem Link
• Externe Link-Datenbanken
Eigenschaften von <A HREF=...> in HTML
• Ziel des Links gegeben durch URI
• Link befindet sich an seinem Ursprung
• Link identifiziert sein Ziel
• Nur von Ursprung nach Ziel zu verwenden
• Art der Verwendung festgelegt.
Was ist eigentlich ein Hyperlink? Eine Relation zwischen Teilen von Dokumenten,
möglichst in einem Benutzerinterface darstellbar.
Vorläufige Version
149
c 2003 Peter Thiemann
3.5.1
Der xlink Namespace
<rootElement
xmlns:xlink="http://www.w3.org/1999/xlink">
...
</rootElement>
enthält globale Attribute (benutzbar mit jedem Element): type, href, role,
title, show, actuate, from, to
<local:link
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:local="http://uni-freiburg.de/"
xlink:type="simple"
xlink:href="faculties.xml"
xlink:role="facultylist" xlink:title="Liste der Fakultäten"
xlink:show="new" xlink:actuate="onRequest">
Liste der Fakultäten
</local:link>
Vorläufige Version
150
c 2003 Peter Thiemann
3.5.2
Einfache Links
vom Typ xlink:type="simple" verbinden eine lokale und eine externe Ressource
<!ELEMENT studentlink ANY>
<!ATTLIST studentlink
xlink:type
(simple)
#FIXED "simple"
xlink:href
CDATA
#IMPLIED
xlink:role
NMTOKEN
#FIXED "student"
xlink:title
CDATA
#IMPLIED
xlink:show
(new|replace
|embed
|undefined)
#FIXED "replace"
xlink:actuate (onLoad|onRequest
|undefined)
#FIXED "onRequest"
>
...
<studentlink
xlink:href="/students/mmueller.xml"
xlink:title="Wer ist Michael Müller?">Michael</studentlink>
organisiert die F^
ete.
Vorläufige Version
151
c 2003 Peter Thiemann
Globale Attribute eines simple-Link
• xlink:href="URI "
Zeiger auf externe Ressource
• xlink:role="hqualified-name i" (semantisch)
zur Gruppierung und Bennennung von Ressourcen in
traversal rules
• xlink:title="hLesbarer Titel des Links i"
(semantisch)
Vorläufige Version
152
c 2003 Peter Thiemann
• xlink:show (Verhalten)
Wert
Verhalten
new
neues Browserfenster
replace
benutze altes Browserfenster
embed
einbetten in aktuelles Browserfenster
undefined
beliebig
• xlink:actuate (Verhalten)
Vorläufige Version
Wert
Aktivierung
onLoad
beim Laden des Links
onRequest
beim Anklicken
undefined
beliebig
153
c 2003 Peter Thiemann
3.5.3
Erweiterte Links
• verbinden eine beliebige Anzahl von internen oder externen
Ressourcen
• out-of-line, falls alle Ressourcen extern, sonst inline
• out-of-line erlaubt schreibgeschützte Ressourcen
• Verbindung zunächst ohne Richtung (→ traversal rules)
• Getrennte Spezifikation von
– Teilnehmern am Link
– Benutzung des Links
– Einbettung des Links
Vorläufige Version
154
c 2003 Peter Thiemann
• Element wird zum erweiterten Link durch Attribut xlink:type="extended"
• enthält beliebige Elemente mit
– xlink:type="locator"
Adresse einer externen Ressource
muß xlink:href angeben
ggf. xlink:role
– xlink:type="arc"
traversal rule
Quellenrolle spezifiziert durch xlink:from
Zielrolle(n) spezifiziert durch xlink:to
– xlink:type="title"
für menschliche Benutzer
– xlink:type="resource"
interne Ressource
ggf. xlink:role
als (direkte) Kinder
Vorläufige Version
155
c 2003 Peter Thiemann
Beispiel/DTD
<!-- courseload = extended-type
tooltip = title-type
go = arc-type
student, course, audit, advisor = locator-type
gpa = resource-type
-->
<!ELEMENT courseload
(tooltip*, (student|course|audit|advisor|go*), gpa)>
<!ATTLIST courseload
xlink:type
(extended)
#FIXED "extended"
xlink:role
NMTOKEN
#FIXED "courseload"
xlink:title
CDATA
#IMPLIED
>
Vorläufige Version
156
c 2003 Peter Thiemann
Beispiel/Dokument
<courseload
xlink:title="Course Load for Pat Jones">
<go xlink:from="gpa" xlink:to="course" />
<go xlink:from="student" xlink:to="course" />
<go xlink:from="student" xlink:to="audit" />
<go xlink:from="student" xlink:to="advisor" />
<student xlink:href="..." />
<course xlink:href="..." />
<course xlink:href="..." />
<audit xlink:href="..." />
<advisor xlink:href="..." />
<gpa>3.5</gpa>
</courseload>
Vorläufige Version
157
c 2003 Peter Thiemann
Beispiel/traversal rule
<!-- extendedlink = extended-type
loc = locator-type
-->
<extendedlink>
<loc xlink:href="..." xlink:role="parent"
<loc xlink:href="..." xlink:role="parent"
<loc xlink:href="..." xlink:role="child"
<loc xlink:href="..." xlink:role="child"
<loc xlink:href="..." xlink:role="child"
xlink:title="p1"
xlink:title="p2"
xlink:title="c1"
xlink:title="c2"
xlink:title="c3"
/>
/>
/>
/>
/>
<!-- go = arc-type -->
<go xlink:from="parent" xlink:to="child" />
</extendedlink>
Vorläufige Version
158
c 2003 Peter Thiemann
Beispiel/typischer Link
<!-- go = arc-type -->
<!ELEMENT go ANY>
<!ATTLIST go
xlink:type
(arc)
xlink:from
NMTOKEN
xlink:to
NMTOKEN
xlink:show
(new|replace|embed
|undefined)
xlink:actuate (onLoad|onRequest
|undefined)
xlink:role
NMTOKEN
xlink:title
CDATA
>
#FIXED "arc"
#IMPLIED
#IMPLIED
#IMPLIED
#IMPLIED
#IMPLIED
#IMPLIED
<go
xlink:from="student"
xlink:to="advisor"
xlink:show="new"
xlink:actuate="onRequest" />
Vorläufige Version
159
c 2003 Peter Thiemann
Herunterladen