XML-Technologien
Tutorium im Sommersemester 2012
niels.hoppe@fu-berlin.de
13. Juni 2012
24. April Musterl¨osung
XML schreiben XML verstehen
Namensr¨aume
Erkl¨arung Beispiele
8. Mai
Offene Fragen Musterl¨osung
DTDs entwerfen DTDs anwenden
DTDs
Elemente deklarieren Attribute deklarieren Entit¨aten deklarieren Teilmengen definieren
XML-Schema Ubungen¨ 15. Mai
Offene Fragen Musterl¨osung
XML-Schema Ubungen¨ 22. Mai
Musterl¨osung
XSLT und XPath in der Praxis Ubungen¨
Wiederholung REST 29. Mai
Twitter als Beispiel einer REST-API
REST-Basics REST-Constraints
Exkurs: Basic authentication vs. OAuth
XML vs. JSON 5. Juni
Was ist eigentlich dieses
”Linked Data“?
XML-Technologien im ¨Uberblick
XML Grundlagen DTD und Schema XSL
XPath Ubungen¨
1. Tutorium - XML Grundlagen
Quelltext anzeigen
Erf¨ullt das XML-Dokument die Anforderungen?
Quelltext anzeigen
Erf¨ullt das XML-Dokument die Anforderungen?
(a) Es ist kompatibel mit XML-1.0-Parsern, da diese erwarten, dass die Version 1.0 oder nicht angegeben ist.
Es ist auch kompatibel mit XML-1.1-Parsern, da diese erwarten, dass die Version angegeben ist und selbst kompatibel zu XML-1.0 sein m¨ussen.
(b) Um ein Element einem Namensraum zuzuordnen, kann man entweder einen Standardnamensraum angeben,
< p u r c h a s e O r d e r
x m l n s =" h t t p : // www . a l t o v a . com / IPO "
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
o r d e r D a t e =" 1999 -12 -01 ">
< s h i p T o export - c o d e =" 1 " x s i : t y p e =" ipo:EU - A d d r e s s ">
< !- - ... - ->
oder dem Element ein Pr¨afix voranstellen, das zuvor als Namensraum deklariert wurde.
< i p o : p u r c h a s e O r d e r
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e " x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
o r d e r D a t e =" 1999 -12 -01 ">
< i p o : s h i p T o export - c o d e =" 1 " x s i : t y p e =" ipo:EU - A d d r e s s ">
< !- - ... - ->
(b) Um ein Element einem Namensraum zuzuordnen, kann man entweder einen Standardnamensraum angeben,
< p u r c h a s e O r d e r
x m l n s =" h t t p : // www . a l t o v a . com / IPO "
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
o r d e r D a t e =" 1999 -12 -01 ">
< s h i p T o export - c o d e =" 1 " x s i : t y p e =" ipo:EU - A d d r e s s ">
< !- - ... - ->
oder dem Element ein Pr¨afix voranstellen, das zuvor als Namensraum deklariert wurde.
< i p o : p u r c h a s e O r d e r
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
o r d e r D a t e =" 1999 -12 -01 ">
< i p o : s h i p T o export - c o d e =" 1 " x s i : t y p e =" ipo:EU - A d d r e s s ">
< !- - ... - ->
(c) Die DatenorderDate,type,export-codeundpartNumwerden als Attribute repr¨asentiert.
(d) Die AttributeorderDate,export-codeundpartNumhaben kein Pr¨afix. Da Attribute nur durch ein Pr¨afix einem Namensraum zugeordnet werden k¨onnen, sind sie nicht namensraumeingeschr¨ankt und liegen damit im Null-Namensraum. (e) Das Attributtypewird mit dem Pr¨afixxsiverwendet, das als der Namensraum http://www.w3.org/2001/XMLSchema-instancedeklariert ist. Dadurch liegt es in diesem Namensraum.
(c) Die DatenorderDate,type,export-codeundpartNumwerden als Attribute repr¨asentiert.
(d) Die AttributeorderDate,export-codeundpartNumhaben kein Pr¨afix. Da Attribute nur durch ein Pr¨afix einem Namensraum zugeordnet werden k¨onnen, sind sie nicht namensraumeingeschr¨ankt und liegen damit im Null-Namensraum.
(e) Das Attributtypewird mit dem Pr¨afixxsiverwendet, das als der Namensraum http://www.w3.org/2001/XMLSchema-instancedeklariert ist. Dadurch liegt es in diesem Namensraum.
(c) Die DatenorderDate,type,export-codeundpartNumwerden als Attribute repr¨asentiert.
(d) Die AttributeorderDate,export-codeundpartNumhaben kein Pr¨afix. Da Attribute nur durch ein Pr¨afix einem Namensraum zugeordnet werden k¨onnen, sind sie nicht namensraumeingeschr¨ankt und liegen damit im Null-Namensraum.
(e) Das Attributtypewird mit dem Pr¨afixxsiverwendet, das als der Namensraum http://www.w3.org/2001/XMLSchema-instancedeklariert ist. Dadurch liegt es in diesem Namensraum.
(a) Um auch die AttributeorderDate,export-codeundpartNumdem gleichen Namensraum wie die Elemente zuzuordnen, m¨ussen sie mit einem Pr¨afix verwendet werden.
< i p o : p u r c h a s e O r d e r
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
i p o : o r d e r D a t e =" 1999 -12 -01 ">
< i p o : s h i p T o i p o : e x p o r t - c o d e =" 1 " x s i : t y p e =" ipo:EU - A d d r e s s ">
< !- - ... - ->
(b) Nein, das Dokument ist nicht wohlgeformt bez¨uglich XML 1.0 und 1.1. Ein XML-Dokument ohne Angabe der Version oder mit Version 1.0 ist nicht wohlgeformt bez¨uglich XML 1.1 und ein XML-Dokument mit Version 1.1 ist nicht wohlgeformt bez¨uglich XML 1.0.
(c) Die klassische Betrachtungsweise geht davon aus, dass eine URI entweder ein URL oder ein URN ist. Sowohl f¨ur URLs als auch f¨ur URNs gibt es dabei verschiedene Schemata, deren Verwendung durch ein Pr¨afix angegeben wird, wie zum Beispielhttpoderisbn.
Die aktuelle Betrachtungsweise nimmt keine klare Unterteilung von URIs mehr vor. Schemata werden nur noch f¨ur URIs verwendet und als Namensr¨aume bezeichnet. URNs mit dem Pr¨afixurnsind ein m¨oglicher Namensraum. URLs werden nur noch als informelle Bezeichnung f¨ur solche Ressourcen verwendet, deren Namensraum ihre prim¨are Zugriffsmethode angibt.
(c) Die klassische Betrachtungsweise geht davon aus, dass eine URI entweder ein URL oder ein URN ist. Sowohl f¨ur URLs als auch f¨ur URNs gibt es dabei verschiedene Schemata, deren Verwendung durch ein Pr¨afix angegeben wird, wie zum Beispielhttpoderisbn.
Die aktuelle Betrachtungsweise nimmt keine klare Unterteilung von URIs mehr vor. Schemata werden nur noch f¨ur URIs verwendet und als Namensr¨aume bezeichnet. URNs mit dem Pr¨afixurnsind ein m¨oglicher Namensraum. URLs werden nur noch als informelle Bezeichnung f¨ur solche Ressourcen verwendet, deren Namensraum ihre prim¨are Zugriffsmethode angibt.
Definition
AnXML namespaceis identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this specification.
Definition
Anexpanded nameis a pair consisting of a namespace nameand alocal name.
Definition
For a name N in a namespace identified by a URI I, thenamespace name is I. For a name N that is not in a namespace, thenamespace name has no value. In either case thelocal name is N.
Definition
Aqualified nameis a name subject to namespace interpretation.
Quelle:http://www.w3.org/TR/REC-xml-names/#concepts
Definition
AnXML namespaceis identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this specification.
Definition
Anexpanded nameis a pair consisting of a namespace nameand alocal name.
Definition
For a name N in a namespace identified by a URI I, thenamespace name is I. For a name N that is not in a namespace, thenamespace name has no value. In either case thelocal name is N.
Definition
Aqualified nameis a name subject to namespace interpretation.
Quelle:http://www.w3.org/TR/REC-xml-names/#concepts
Definition
AnXML namespaceis identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this specification.
Definition
Anexpanded nameis a pair consisting of a namespace nameand alocal name.
Definition
For a name N in a namespace identified by a URI I, thenamespace name is I. For a name N that is not in a namespace, thenamespace name has no value. In either case thelocal name is N.
Definition
Aqualified nameis a name subject to namespace interpretation.
Quelle:http://www.w3.org/TR/REC-xml-names/#concepts
Definition
AnXML namespaceis identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this specification.
Definition
Anexpanded nameis a pair consisting of a namespace nameand alocal name.
Definition
For a name N in a namespace identified by a URI I, thenamespace name is I. For a name N that is not in a namespace, thenamespace name has no value. In either case thelocal name is N.
Definition
Aqualified nameis a name subject to namespace interpretation.
Quelle:http://www.w3.org/TR/REC-xml-names/#concepts
Man verwendetqualified namesanstelle vonexpanded names. Sie werden entweder als prefixed namesoder alsunprefixed namesgeschrieben.
< r o o t >
< foo
x m l n s =" h t t p : // www . e x a m p l e . org / default - n a m e s p a c e "
x m l n s : p r e =" h t t p : // www . e x a m p l e . org / another - n a m e s p a c e ">
< bar / > < !- - t h i s is in default- n a m e s p a c e - ->
< p r e : b a z / > < !- - t h i s is in another - n a m e s p a c e - ->
< !- - t h i s is in default- n a m e s p a c e - ->
< / foo >
< !- - t h i s is in null - n a m e s p a c e - ->
< / r o o t >
Attribute in XML sind sogenannte assoziierte Knoten. Sie werden nicht wie normale Kindelemente eines Elements behandelt.
I F¨ur Namensr¨aume bedeutet das, dass Attribute nicht im Namensraum des Elements stehen, in dem sie notiert sind, sondern im Null-Namensraum.
I Will man den Namensraum eines Attributes ¨andern, muss es mit einem Pr¨afix versehen werden:
< svg x m l n s =" h t t p : // www . w3 . org / 2 0 0 0 / svg "
x m l n s : x l i n k =" h t t p : // www . w3 . org / 1 9 9 9 / x l i n k ">
< a x l i n k : h r e f =" g r a f i k 2 . svg "> L i n k zur G r a f i k < / a >
< / svg >
I Es gibt f¨ur Attribute keine M¨oglichkeit, sie ohne Pr¨afix in einen bestimmten Namensraum zu setzen.
Beispiel 1
< p r e : f o o x m l n s : p r e =" h t t p : // www . e x a m p l e . org / some - n a m e s p a c e ">
< bar / >
< / p r e : f o o >
Beispiel 2
< foo x m l n s =" h t t p : // www . e x a m p l e . org / some - n a m e s p a c e ">
< bar x m l n s =" h t t p : // www . e x a m p l e . org / another - n a m e s p a c e ">
< baz / >
< / bar >
< / foo >
Beispiel 3
< foo x m l n s =" h t t p : // www . e x a m p l e . org / some - n a m e s p a c e ">
< bar x m l n s : p r e =" h t t p : // www . e x a m p l e . org / another - n a m e s p a c e ">
< p r e : b a z a t t r =" v a l u e " / >
< / bar >
< / foo >
Beispiel 4
< foo x m l n s =" h t t p : // www . e x a m p l e . org / some - n a m e s p a c e ">
< bar x m l n s =" ">
< baz / >
< / bar >
< / foo >
2. Tutorium - DTDs
Frage Ubernehmen Attribute den Namensraum des Elementes zu dem sie¨ geh¨oren, wenn dieser explizit mittels Pr¨afix angegeben ist?
Antwort Nein. Ein Attribut istimmerim Null-Namensraum, außer es hat selbst ein Namensraum-Pr¨afix.
Frage Wird Whitespace in der Deklaration des Namensraumes als Null-Namensraum interpretiert?
Antwort Nein. Jedenfalls erkennen einige Validatoren Whitespace als eigenen Namensraum.
DTDs entwerfen
(a) DasshipTo- und dasbillTo-Element kann entweder aus den Elementenname, street,city, undpostcodeoder aus den Elementenname,street,city,state undzipbestehen.
< !E L E M E N T s h i p T o ( name , street , city , ( p o s t c o d e | ( state , zip ))) >
< !E L E M E N T b i l l T o ( name , street , city , ( p o s t c o d e | ( state , zip ))) >
Zusammengefasst mittels einer Parameter-Entity:
< !E N T I T Y % A d d r e s s " ( name , street , city , ( p o s t c o d e | ( state , zip ))) ">
< !E L E M E N T s h i p T o % A d d r e s s ; >
< !E L E M E N T b i l l T o % A d d r e s s ; >
DTDs entwerfen
(a) DasshipTo- und dasbillTo-Element kann entweder aus den Elementenname, street,city, undpostcodeoder aus den Elementenname,street,city,state undzipbestehen.
< !E L E M E N T s h i p T o ( name , street , city , ( p o s t c o d e | ( state , zip ))) >
< !E L E M E N T b i l l T o ( name , street , city , ( p o s t c o d e | ( state , zip ))) >
Zusammengefasst mittels einer Parameter-Entity:
< !E N T I T Y % A d d r e s s " ( name , street , city , ( p o s t c o d e | ( state , zip ))) ">
< !E L E M E N T s h i p T o % A d d r e s s ; >
< !E L E M E N T b i l l T o % A d d r e s s ; >
DTDs entwerfen
(b) Sowohl dasshipTo- als auch dasbillTo-Element enth¨alt immer ein Attribut typeaus dem Namensraum http://www.w3.org/2001/XMLSchema-instance, jeweils mit dem Wertenipo:EU-Addressoderipo:US-Address.
< !A T T L I S T p u r c h a s e O r d e r x m l n s : x s i C D A T A #F I X E D
" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m - i n s t a n c e ">
< !A T T L I S T s h i p T o x s i : t y p e
( ipo:EU - A d d r e s s | ipo:US - A d d r e s s ) #R E Q U I R E D>
< !A T T L I S T b i l l T o x s i : t y p e
( ipo:EU - A d d r e s s | ipo:US - A d d r e s s ) #R E Q U I R E D>
ipoist als Namensraumpr¨afix f¨ur http://www.altova.com/IPO definiert.
< !A T T L I S T p u r c h a s e O r d e r x m l n s : i p o C D A T A #F I X E D
" h t t p : // www . a l t o v a . com / IPO ">
DTDs entwerfen
(b) Sowohl dasshipTo- als auch dasbillTo-Element enth¨alt immer ein Attribut typeaus dem Namensraum http://www.w3.org/2001/XMLSchema-instance, jeweils mit dem Wertenipo:EU-Addressoderipo:US-Address.
< !A T T L I S T p u r c h a s e O r d e r x m l n s : x s i C D A T A #F I X E D
" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m - i n s t a n c e ">
< !A T T L I S T s h i p T o x s i : t y p e
( ipo:EU - A d d r e s s | ipo:US - A d d r e s s ) #R E Q U I R E D>
< !A T T L I S T b i l l T o x s i : t y p e
( ipo:EU - A d d r e s s | ipo:US - A d d r e s s ) #R E Q U I R E D>
ipoist als Namensraumpr¨afix f¨ur http://www.altova.com/IPO definiert.
< !A T T L I S T p u r c h a s e O r d e r x m l n s : i p o C D A T A #F I X E D
" h t t p : // www . a l t o v a . com / IPO ">
DTDs entwerfen
(c) Das Elementitemsbesteht aus beliebig vielenitem-Elementen, mindestens aber aus einemitem-Element.
< !E L E M E N T i t e m s ( i t e m +) >
DTDs entwerfen
(d) Alle Elemente einer g¨ultigen Instanz sollen dem Namensraum http://www.altova.com/IPO zugeordnet sein.
< !A T T L I S T p u r c h a s e O r d e r x m l n s C D A T A #F I X E D
" h t t p : // www . a l t o v a . com / IPO ">
DTDs anwenden
Eine DTD kann entweder direkt eingebettet werden,
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E B o o k I n f o [
<!E L E M E N T p u r c h a s e O r d e r ( shipTo , billTo , I t e m s ) >
< !A T T L I S T p u r c h a s e O r d e r
x m l n s : x s i C D A T A #F I X E D " h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s C D A T A #F I X E D " h t t p : // www . a l t o v a . com / IPO "
x m l n s : i p o C D A T A #F I X E D " h t t p : // www . a l t o v a . com / IPO "
o r d e r D a t e C D A T A #R E Q U I R E D>
< !- - ... - ->
] >
< i p o : p u r c h a s e O r d e r
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
o r d e r D a t e =" 1999 -12 -01 ">
< !- - ... - ->
oder es kann ein Pfad zu einer DTD, die lokal oder im Netzwerk gespeichert ist, angegeben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E h t m l S Y S T E M " x m l _ u e b 0 2 _ l s g . dtd ">
< i p o : p u r c h a s e O r d e r
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
o r d e r D a t e =" 1999 -12 -01 ">
< !- - ... - ->
DTDs
I Elemente deklarieren
I Attribute deklarieren
I Entit¨aten deklarieren
Elemente deklarieren
Elemente k¨onnen verschiedene Arten von Inhalten haben:
< !E L E M E N T my - e l e m e n t E M P T Y>
< !E L E M E N T my - e l e m e n t ANY>
< !E L E M E N T my - e l e m e n t (#P C D A T A) >
< !E L E M E N T my - e l e m e n t (#C D A T A) >
< !E L E M E N T my - e l e m e n t ( s p e c i f i e d , c o n t e n t s ) >
Elemente deklarieren
Die H¨aufigkeit enthaltener Elemente l¨asst sich festlegen:
< !E L E M E N T my - e l e m e n t ( zero - or - o n c e ? , zero - or - m o r e * , once - or - m o r e + , exactly - o n c e ) >
Elemente deklarieren
Man kann Alternativen angeben:
< !E L E M E N T my - e l e m e n t ( either - t h i s
| or - t h i s
| or - t h a t ) >
Elemente deklarieren
Man kann Gruppierungen vornehmen:
< !E L E M E N T my - e l e m e n t ( a l i c e
| ( bob , c h a r l i e ) ) >
Attribute deklarieren
Attribute eines Elementes werden nacheinander aufgelistet:
< !A T T L I S T my - e l e m e n t some - a t t r i b u t e C D A T A " default - v a l u e ">
< !A T T L I S T my - e l e m e n t
r e q u i r e d - a t t r i b u t e C D A T A #R E Q U I R E D> o p t i o n a l - a t t r i b u t e C D A T A # IMPLIED >
< !A T T L I S T my - e l e m e n t fixed - a t t r i b u t e C D A T A #F I X E D " always - this - v a l u e ">
< !A T T L I S T my - e l e m e n t choice - a t t r i b u t e ( either - this - v a l u e
| or - this - v a l u e
| or - that - v a l u e ) " either - this - v a l u e ">
Attribute deklarieren
Attribute eines Elementes werden nacheinander aufgelistet:
< !A T T L I S T my - e l e m e n t some - a t t r i b u t e C D A T A " default - v a l u e ">
< !A T T L I S T my - e l e m e n t
r e q u i r e d - a t t r i b u t e C D A T A #R E Q U I R E D>
o p t i o n a l - a t t r i b u t e C D A T A # IMPLIED >
< !A T T L I S T my - e l e m e n t fixed - a t t r i b u t e C D A T A #F I X E D " always - this - v a l u e ">
< !A T T L I S T my - e l e m e n t choice - a t t r i b u t e ( either - this - v a l u e
| or - this - v a l u e
| or - that - v a l u e ) " either - this - v a l u e ">
Attribute deklarieren
Attribute eines Elementes werden nacheinander aufgelistet:
< !A T T L I S T my - e l e m e n t some - a t t r i b u t e C D A T A " default - v a l u e ">
< !A T T L I S T my - e l e m e n t
r e q u i r e d - a t t r i b u t e C D A T A #R E Q U I R E D>
o p t i o n a l - a t t r i b u t e C D A T A # IMPLIED >
< !A T T L I S T my - e l e m e n t fixed - a t t r i b u t e C D A T A #F I X E D " always - this - v a l u e ">
< !A T T L I S T my - e l e m e n t choice - a t t r i b u t e ( either - this - v a l u e
| or - this - v a l u e
| or - that - v a l u e ) " either - this - v a l u e ">
Attribute deklarieren
Attribute eines Elementes werden nacheinander aufgelistet:
< !A T T L I S T my - e l e m e n t some - a t t r i b u t e C D A T A " default - v a l u e ">
< !A T T L I S T my - e l e m e n t
r e q u i r e d - a t t r i b u t e C D A T A #R E Q U I R E D>
o p t i o n a l - a t t r i b u t e C D A T A # IMPLIED >
< !A T T L I S T my - e l e m e n t fixed - a t t r i b u t e C D A T A #F I X E D " always - this - v a l u e ">
< !A T T L I S T my - e l e m e n t choice - a t t r i b u t e ( either - this - v a l u e
| or - this - v a l u e
| or - that - v a l u e ) " either - this - v a l u e ">
Attribute deklarieren
Es gibt eine ganze Menge von Attributtypen:
CDATA The value is character data
(en1|en2|..) The value must be one from an enumerated list ID The value is a unique id
IDREF The value is the id of another element IDREFS The value is a list of other ids NMTOKEN The value is a valid XML name NMTOKENS The value is a list of valid XML names
ENTITY The value is an entity ENTITIES The value is a list of entities NOTATION The value is a name of a notation
xml: The value is a predefined xml value
Quelle:http://www.http://w3schools.com/dtd/dtd_attributes.asp
Entit¨ aten deklarieren
Entit¨aten sind Konstanten, die innerhalb von PCDATA-Bl¨ocken ausgewertet werden.
Es gibt verschiedene Arten von Entit¨aten:
I Built-in Entities (z.B.&und<)
I Character Entities (z.B.óundó)
I General Entities, selbst definiert
I Parameter Entities, selbst definiert
Entit¨aten k¨onnen sowohl innerhalb der DTD deklariert, als auch extern referenziert werden.
Entit¨ aten deklarieren
Beachte bei General Entities:
I Der Name muss ein g¨ultiger XML-Name sein.
I Der Wert interner Entit¨aten muss wohlgeformt sein.
I Der Wert externer Entit¨aten muss nicht wohlgeformt sein, wohl aber das Dokument, nachdem sie ausgewertet wurden.
I Der Wert kann andere Entit¨aten enthalten.
Parameter Entities erm¨oglichen es, Strukturen wieder zu verwenden.
Entit¨ aten deklarieren
Beachte bei General Entities:
I Der Name muss ein g¨ultiger XML-Name sein.
I Der Wert interner Entit¨aten muss wohlgeformt sein.
I Der Wert externer Entit¨aten muss nicht wohlgeformt sein, wohl aber das Dokument, nachdem sie ausgewertet wurden.
I Der Wert kann andere Entit¨aten enthalten.
Parameter Entities erm¨oglichen es, Strukturen wieder zu verwenden.
Entit¨ aten deklarieren
Und so sehen sie aus:
< !E N T I T Y i n t e r n a l - e n t i t y " entity - v a l u e ">
< !E N T I T Y e x t e r n a l - e n t i t y S Y S T E M
" h t t p : // www . e x a m p l e . org / e n t i t i e s . dtd ">
< ! E N T I T I Y % p a r a m e t e r - e n t i t y " ( some ,( c o m p l e x | c o n s t r u c t )) ">
Entit¨ aten deklarieren
Und so sehen sie aus:
< !E N T I T Y i n t e r n a l - e n t i t y " entity - v a l u e ">
< !E N T I T Y e x t e r n a l - e n t i t y S Y S T E M
" h t t p : // www . e x a m p l e . org / e n t i t i e s . dtd ">
< ! E N T I T I Y % p a r a m e t e r - e n t i t y " ( some ,( c o m p l e x | c o n s t r u c t )) ">
Teilmengen definieren
Es ist m¨oglich, in einer internen DTD eine Teilmenge einer externen DTD zu definieren:
< !D O C T Y P E B o o k S t o r e S Y S T E M " b o o k . dtd " [
<!E L E M E N T B o o k S t o r e ( B o o k | B o o k S h e l f )* >
] >
Beachte dabei:
I Elemente und Attribute k¨onnen nicht ver¨andert werden.
I Entit¨aten k¨onnen ¨uberschrieben werden.
Teilmengen definieren
Es ist m¨oglich, in einer internen DTD eine Teilmenge einer externen DTD zu definieren:
< !D O C T Y P E B o o k S t o r e S Y S T E M " b o o k . dtd " [
<!E L E M E N T B o o k S t o r e ( B o o k | B o o k S h e l f )* >
] >
Beachte dabei:
I Elemente und Attribute k¨onnen nicht ver¨andert werden.
I Entit¨aten k¨onnen ¨uberschrieben werden.
XML-Schema
Wer war schon mal auf http://www.w3schools.com?
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? > Ja.
< ?xml s t a n d a l o n e=" yes " ? > Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? > Ja.
< ?xml s t a n d a l o n e=" yes " ? > Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? > Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? > Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? > Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? >
Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? >
Ja.
< ?xml v e r s i o n=" 1.0 " ? > Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? >
Ja.
< ?xml v e r s i o n=" 1.0 " ? >
Ja.
Ubungen ¨
Welche XML-Deklaration ist zul¨assig?
< ?xml e n c o d i n g =" UTF -8 " v e r s i o n=" 1.0 " ? >
Nein.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" " ? >
Ja.
< ?xml s t a n d a l o n e=" yes " ? >
Nein.
< ?xml v e r s i o n=" 1.1 " e n c o d i n g =" ISO -8859 -1 " s t a n d a l o n e=" no " ? >
Ja.
< ?xml v e r s i o n=" 1.0 " ? >
Ja.
Ubungen ¨
Bei der XML-Deklaration beachten:
I ”xml“ klein schreiben
I Reihenfolge der Attribute beachten
I versionimmer angeben
I encodingist optional
I standaloneist optional
Ubungen ¨
Formuliere eine DTD f¨ur folgendes XML und beachte dabei:
I Es darf nur einen Baecker geben.
I Der Ofentyp ist optional und im Zweifel ein
”Backofen“.
I Der Ofen muss leer sein.
< B a e c k e r e i >
< B a e c k e r > B e r n d B a c k f i x < / B a e c k e r >
< O f e n Typ =" S t e i n o f e n " / >
< / B a e c k e r e i >
< !E L E M E N T B a e c k e r e i ( Baecker , O f e n ) >
< !E L E M E N T B a e c k e r (#P C D A T A) >
< !E L E M E N T O f e n E M P T Y>
< !A T T L I S T O f e n Typ C D A T A " B a c k o f e n ">
Ubungen ¨
Formuliere eine DTD f¨ur folgendes XML und beachte dabei:
I Es darf nur einen Baecker geben.
I Der Ofentyp ist optional und im Zweifel ein
”Backofen“.
I Der Ofen muss leer sein.
< B a e c k e r e i >
< B a e c k e r > B e r n d B a c k f i x < / B a e c k e r >
< O f e n Typ =" S t e i n o f e n " / >
< / B a e c k e r e i >
< !E L E M E N T B a e c k e r e i ( Baecker , O f e n ) >
< !E L E M E N T B a e c k e r (#P C D A T A) >
< !E L E M E N T O f e n E M P T Y>
< !A T T L I S T O f e n Typ C D A T A " B a c k o f e n ">
Ubungen ¨
Beschreibe kurz, was die fogende DTD ¨uber die Keksfabrik aussagt:
< !E L E M E N T K e k s f a b r i k ( B a e c k e r + , K u n d e n * , C h e f ?) >
I Es gibt mindestens einen B¨acker.
I Es kann beliebig viele (auch keine) Kunden geben.
I Es gibt h¨ochstens einen (oder keinen) Chef.
Ubungen ¨
Beschreibe kurz, was die fogende DTD ¨uber die Keksfabrik aussagt:
< !E L E M E N T K e k s f a b r i k ( B a e c k e r + , K u n d e n * , C h e f ?) >
I Es gibt mindestens einen B¨acker.
I Es kann beliebig viele (auch keine) Kunden geben.
I Es gibt h¨ochstens einen (oder keinen) Chef.
Ubungen ¨
Worum handelt es sich bei dem folgenden XML-Fragment?
< I n h a l t >
< A n f a n g > H i e r g e h t es los < / A n f a n g >
< E n d e > Und h i e r ist S c h l u s s < / E n d e >
< / I n h a l t >
Um strukturierten Inhalt.
Ubungen ¨
Worum handelt es sich bei dem folgenden XML-Fragment?
< I n h a l t >
< A n f a n g > H i e r g e h t es los < / A n f a n g >
< E n d e > Und h i e r ist S c h l u s s < / E n d e >
< / I n h a l t >
Um strukturierten Inhalt.
Ubungen ¨
Worum handelt es sich bei dem folgenden XML-Fragment?
< I n h a l t >
< A n f a n g > H i e r g e h t es los < / A n f a n g >
Und h i e r ist S c h l u s s
< E n d e / >
< / I n h a l t >
Um gemischten Inhalt.
Ubungen ¨
Worum handelt es sich bei dem folgenden XML-Fragment?
< I n h a l t >
< A n f a n g > H i e r g e h t es los < / A n f a n g >
Und h i e r ist S c h l u s s
< E n d e / >
< / I n h a l t >
Um gemischten Inhalt.
Ubungen ¨
Welche Arten von Inhalten gibt es in XML?
I unstrukturierten Inhalt
I strukturierten Inhalt
I gemischten Inhalt
I leeren Inhalt
Ubungen ¨
Welche Arten von Inhalten gibt es in XML?
I unstrukturierten Inhalt
I strukturierten Inhalt
I gemischten Inhalt
I leeren Inhalt
Ubungen ¨
< x s : e l e m e n t n a m e =" e t h n o s ">
< x s : c o m p l e x T y p e >
< x s : a t t r i b u t e n a m e =" s e l f " t y p e =" x s : s t r i n g " use =" r e q u i r e d " / >
< / x s : c o m p l e x T y p e >
< / x s : e l e m e n t >
Welche der folgenden DTD ist mit der obigen Schema-Definition ¨aquivalent?
< !A T T L I S T e t h n o s s e l f (#P C D A T A) #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f P C D A T A #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f C D A T A #F I X E D>
< !A T T L I S T e t h n o s s e l f P C D A T A #I M P L I E D>
< !A T T L I S T e t h n o s s e l f C D A T A #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f C D A T A #R E Q U I R E D>
Ubungen ¨
< x s : e l e m e n t n a m e =" e t h n o s ">
< x s : c o m p l e x T y p e >
< x s : a t t r i b u t e n a m e =" s e l f " t y p e =" x s : s t r i n g " use =" r e q u i r e d " / >
< / x s : c o m p l e x T y p e >
< / x s : e l e m e n t >
Welche der folgenden DTD ist mit der obigen Schema-Definition ¨aquivalent?
< !A T T L I S T e t h n o s s e l f (#P C D A T A) #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f P C D A T A #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f C D A T A #F I X E D>
< !A T T L I S T e t h n o s s e l f P C D A T A #I M P L I E D>
< !A T T L I S T e t h n o s s e l f C D A T A #R E Q U I R E D>
< !A T T L I S T e t h n o s s e l f C D A T A #R E Q U I R E D>
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Was k¨onnte g¨ultig sein?
< !xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E g a l a x y S Y S T E M " c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist falsch ge¨offnet.
< ? XML v e r s i o n=" 1.0 " e n c o d i n g =" UFTF -8 "? >
< !D O C T Y P E g a l a x y [ <!E L E M E N T g a l a x y (#P C D A T A) > ] >
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag muss klein geschrieben werden.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E S Y S T E M " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
< ?xml v e r s i o n=" 1.0 ">
< !D O C T Y P E g a l a x y S Y S T E M
" h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist nicht korrekt geschlossen.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E P U B L I C " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
< ?xml v e r s i o n=" 1.0 ">
< !D O C T Y P E g a l a x y S Y S T E M
" h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist nicht korrekt geschlossen.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E P U B L I C " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
< ?xml v e r s i o n=" 1.0 ">
< !D O C T Y P E g a l a x y S Y S T E M
" h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist nicht korrekt geschlossen.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E P U B L I C " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
< ?xml v e r s i o n=" 1.0 ">
< !D O C T Y P E g a l a x y S Y S T E M
" h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. Dasxml-Tag ist nicht korrekt geschlossen.
< ?xml v e r s i o n=" 1.0 "? >
< !D O C T Y P E P U B L I C " h t t p : // www . e x a m p l e . com / c o s m o s . dtd ">
< g a l a x y > M85 < / g a l a x y >
Nein. ImDOCTYPEist kein Wurzel-Element angegeben.
Ubungen ¨
Welchen Wert hat die Entit¨at&color;in einem Dokument, das folgende DTD verwendet?
< !E N T I T Y c o l o r " red ">
< !E N T I T Y c o l o r " b l a c k ">
< !E N T I T Y c o l o r " ">
I ”red“
I ”black“
I ”“
←
I Die DTD ist gar nicht g¨ultig.
Ubungen ¨
Welchen Wert hat die Entit¨at&color;in einem Dokument, das folgende DTD verwendet?
< !E N T I T Y c o l o r " red ">
< !E N T I T Y c o l o r " b l a c k ">
< !E N T I T Y c o l o r " ">
I ”red“
I ”black“
I ”“←
I Die DTD ist gar nicht g¨ultig.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n > Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n > Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n / >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y
< w a g o n > D i n e r < / w a g o n >
< / e n g i n e > < / t r a i n >
Nein. Gemischter Inhalt ist f¨urenginenicht erlaubt.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e >
< w a g o n > D i n e r < / w a g o n > < w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < e n g i n e > D i e s e l < / e n g i n e >
< w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Nein. Es darf nur einenginegeben.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e >
< w a g o n > D i n e r < / w a g o n > < w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < e n g i n e > D i e s e l < / e n g i n e >
< w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Nein. Es darf nur einenginegeben.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e >
< w a g o n > D i n e r < / w a g o n > < w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < e n g i n e > D i e s e l < / e n g i n e >
< w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Nein. Es darf nur einenginegeben.
Ubungen ¨
< !E L E M E N T t r a i n ( e n g i n e ? , w a g o n *) >
< !E L E M E N T e n g i n e (#P C D A T A) >
< !E L E M E N T w a g o n (#P C D A T A) >
Ist das folgende XML-Fragment valide bez¨uglich obiger DTD?
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e >
< w a g o n > D i n e r < / w a g o n > < w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Ja.
< t r a i n > < e n g i n e > S t e a m y < / e n g i n e > < e n g i n e > D i e s e l < / e n g i n e >
< w a g o n > S l e e p e r < / w a g o n >
< / t r a i n >
Nein. Es darf nur einenginegeben.
3. Tutorium - XML Schema
Frage Darf das Attributversionin der XML-Deklaration fehlen?
Antwort Nein, es ist sowohl in XML 1.0 als auch in XML 1.1 obligatorisch.
Frage Darf ein Element mit Inhalt vom TypANY,#CDATAoder#PCDATA auch leer sein?
Antwort Ja. Nur wenn es leer seinmuss, muss es als TypEMPTYhaben.
Frage Darf in einem Element mit Inhalt vom Typ CDATA eine ¨offnende spitze Klammer vorkommen?
Antwort Nein. Nur in einem Bereich, der gesondert mit<![CDATA[ ...]]>
gekennzeichnet ist.
Schemata entwerfen
Quelltext ansehen
Erf¨ullt das Schema die Anforderungen?
Schemata entwerfen
Quelltext ansehen Erf¨ullt das Schema die Anforderungen?
(a) DasshipTo- und dasbillTo-Element einer g¨ultigen Instanz muss ein Attribut type aus dem Namensraum http://www.w3.org/2001/XMLSchema-instance enthalten.
< c o m p l e x T y p e n a m e =" A d d r e s s " a b s t r a c t =" t r u e ">
< s e q u e n c e >
< e l e m e n t n a m e =" n a m e " t y p e =" s t r i n g " / >
< e l e m e n t n a m e =" s t r e e t " t y p e =" s t r i n g " / >
< e l e m e n t n a m e =" c i t y " t y p e =" s t r i n g " / >
< / s e q u e n c e >
< a t t r i b u t e n a m e =" t y p e ">
< s i m p l e T y p e >
< r e s t r i c t i o n b a s e =" s t r i n g ">
< e n u m e r a t i o n v a l u e =" ipo:US - A d d r e s s " / >
< e n u m e r a t i o n v a l u e =" ipo:EU - A d d r e s s " / >
< / r e s t r i c t i o n >
< / s i m p l e T y p e >
< / a t t r i b u t e >
< / c o m p l e x T y p e >
Und kann entweder . . .
(a) i. aus den Elementenname,street,city, undpostcodebestehen, dann musstypeden
Wertipo:EU-Addresshaben, sowie das Attributexport-codemit dem Wert1
vorhanden sein,
< c o m p l e x T y p e n a m e =" EU - A d d r e s s ">
< c o m p l e x C o n t e n t >
< e x t e n s i o n b a s e =" i p o : A d d r e s s ">
< s e q u e n c e >
< e l e m e n t n a m e =" p o s t c o d e " t y p e =" ipo:EU - P o s t c o d e " / >
< / s e q u e n c e >
< a t t r i b u t e n a m e =" export - c o d e " t y p e =" p o s i t i v e I n t e g e r " f i x e d =" 1 " / >
< / e x t e n s i o n >
< / c o m p l e x C o n t e n t >
< / c o m p l e x T y p e >
(a)
ii. oder aus den Elementenname,street,city,stateundzipbestehen, dann muss das Attributtypeden Wertipo:US-Addresshaben und das Attribut export-codedarf nicht vorhanden sein.
< c o m p l e x T y p e n a m e =" US - A d d r e s s ">
< c o m l e x C o n t e n t >
< e x t e n s i o n b a s e =" i p o : A d d r e s s ">
< s e q u e n c e >
< e l e m e n t n a m e =" s t a t e " t y p e =" ipo:US - S t a t e " / >
< e l e m e n t n a m e =" zip " t y p e =" p o s i t i v e I n t e g e r " / >
< / s e q u e n c e >
< / e x t e n s i o n >
< / c o m p l e x C o n t e n t >
< / c o m p l e x T y p e >
(b) Um Elementinhalte und Attribut-Werte (wie z.B. beiorderDate,shipDate, quantity,priceundstate) sinnvoll einzuschr¨anken, verwenden wir die eingebauten Datentypendate,decimalund einen eigenen Datentypenipo:Sku.
< e l e m e n t n a m e =" s h i p D a t e " t y p e =" d a t e " / >
< e l e m e n t n a m e =" p r i c e " t y p e =" d e c i m a l " / >
< e l e m e n t n a m e =" q u a n t i t y ">
< s i m p l e T y p e >
< r e s t r i c t i o n b a s e =" p o s i t i v e I n t e g e r ">
< m a x E x c l u s i v e v a l u e =" 1 0 0 0 " / >
< / r e s t r i c t i o n >
< / s i m p l e T y p e >
< / e l e m e n t >
< a t t r i b u t e n a m e =" p a r t N u m " t y p e =" i p o : S k u " / >
< s i m p l e T y p e n a m e =" Sku ">
< r e s t r i c t i o n b a s e =" s t r i n g ">
< p a t t e r n v a l u e =" \ d {3} -[ A - Z ] { 2 } " / >
< / r e s t r i c t i o n >
< / s i m p l e T y p e >
(c) Das Elementitemsbesteht aus beliebig vielenitem-Elementen, mindestens aber aus einem item-Element. Dazu geben wir die H¨aufigkeit nach oben hin frei. Die untere Beschr¨ankung ist voreingestellt Eins.
< s e q u e n c e >
< e l e m e n t n a m e =" i t e m " m a x O c c u r s =" u n b o u n d e d ">
< !- - ... - ->
(d) Das AttributpartNumdesitem-Elementes soll immer aus 3 Ziffern gefolgt von einem Bindestrich und schließlich zwei Buchstaben bestehen. Dazu schr¨anken wir den Datentypstringmit Hilfe eines regul¨aren Ausdruckes ein:
< s i m p l e T y p e n a m e =" Sku ">
< r e s t r i c t i o n b a s e =" s t r i n g ">
< p a t t e r n v a l u e =" \ d {3} -[ A - Z ] { 2 } " / >
< / r e s t r i c t i o n >
< / s i m p l e T y p e >
(e) Alle Elemente einer g¨ultigen Instanz werden durch die Angabe des Attributes
taregtNamespacedem Namensraum http://www.altova.com/IPO zugeordnet.
< s c h e m a x m l n s =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a "
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
t a r g e t N a m e s p a c e =" h t t p : // www . a l t o v a . com / IPO "
e l e m e n t F o r m D e f a u l t =" q u a l i f i e d "
a t t r i b u t e F o r m D e f a u l t =" u n q u a l i f i e d ">
Schemata anwenden
Um ein XML-Dokument mit einem Schema zu verkn¨upfen, verwendet man das Attributxsi:schemaLocationim Wurzelelement des Dokuments:
< ?xml v e r s i o n=" 1.0 "? >
< i p o : p u r c h a s e O r d e r
x m l n s : i p o =" h t t p : // www . a l t o v a . com / IPO "
x m l n s : x s i =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x s i : s c h e m a L o c a t i o n =" h t t p : // www . w 3 s c h o o l s . com n o t e . xsd "
o r d e r D a t e =" 1999 -12 -01 ">
XML-Schema
Ubung ¨
Welches der folgenden Elemente ist ein g¨ultiges Wurzelelement eines XML-Schemas?
1. < s c h e m a
x m l n s : x s =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a "
t a r g e t N a m e s p a c e =" h t t p : // www . e x a m p l e . org ">
< x s : s c h e m a t a r g e t N a m e s p a c e =" h t t p : // www . e x a m p l e . org ">
2.
3. < x s : s c h e m a
x m l n s =" h t t p : // www . e x a m p l e . org ">
x m l n s : x s =" h t t p : // www . w3 . org / 2 0 0 1 / X M L S c h e m a ">
< s c h e m a x m l n s =" h t t p : // www . e x a m p l e . org ">
Ubung ¨
< d a t a h r e f =" h t t p : // www . e x a m p l e . com / d a t A d a t "/ >
Welche der folgenden Schema-Definitionen ist am geeignetsten, um das Attributhref zu definieren?
4.
1. < x s : a t t r i b u t e n a m e =" h r e f " t y p e =" x s : s t r i n g "/ >
< x s : a t t r i b u t e n a m e =" h r e f " t y p e =" x s : a n y U R I "/ >
2.
3. < x s : a t t r i b u t e n a m e =" h r e f " t y p e =" x s : N M T O K E N "/ >
< x s : a t t r i b u t e n a m e =" h r e f " t y p e =" x s : a n y T y p e "/ >
4.
5. < x s : a t t r i b u t e n a m e =" h r e f " t y p e =" x s : Q N a m e "/ >
Ubung ¨
In welchen XML-Schema Elementen sollte die folgende Definition enthalten sein?
< x s d : e x t e n s i o n b a s e =" x s d : i n t e g e r ">
< x s d : a t t r i b u t e n a m e =" c u r r e n c y " t y p e =" x s d : s t r i n g " / >
< / x s d : e x t e n s i o n >
1. < x s d : s i m p l e T y p e > < x s d : s i m p l e C o n t e n t >
< x s d : s i m p l e T y p e > < x s d : c o m p l e x C o n t e n t >
2.
3. < x s d : c o m p l e x T y p e > < x s d : s i m p l e C o n t e n t >
< x s d : c o m p l e x T y p e > < x s d : c o m p l e x C o n t e n t >
4. Tutorium - XSL Transformation
XSLT entwerfen und verwenden
Entwerfen Sie ein XSLT-Stylesheet, das aus der Musterl¨osung der 1. ¨Ubung durch eine Transformation folgendes HTML-Dokument erzeugt. Das Stylesheet soll auch f¨ur jedes andere XML-Dokument, das dem Schema aus der Musterl¨osung der 2. ¨Ubung gen¨ugt, eine sinngem¨aße Transformation durchf¨uhren.
Die Grundstruktur
Zuerst matchen wir auf das WurzelelementpurchaseOrderund erzeugen die Grundstruktur unserer HTML-Seite:
< x s l : t e m p l a t e m a t c h =" p u r c h a s e O r d e r ">
< h t m l >
< h e a d >
< t i t l e > O r d e r of < x s l : v a l u e - of s e l e c t =" @ o r d e r D a t e " / >
< / t i t l e >
< / h e a d >
< b o d y >
< h1 > O r d e r of < x s l : v a l u e - of s e l e c t =" @ o r d e r D a t e " / > < / h1 >
< !- - d i s p l a y s h i p T o and b i l l T o - ->
< h2 > O r d e r d e t a i l s < / h2 >
< x s l : a p p l y - t e m p l a t e s / >
< / b o d y >
< / h t m l >
< / x s l : t e m p l a t e >
shipTo und billTo
< h2 > S h i p p i n g a d d r e s s < / h2 >
< x s l : c a l l - t e m p l a t e n a m e =" a d d r e s s ">
< x s l : w i t h - p a r a m n a m e =" a d d r e s s " s e l e c t =" s h i p T o " / >
< / x s l : c a l l - t e m p l a t e >
< h2 > B i l l i n g a d d r e s s < / h2 >
< x s l : c a l l - t e m p l a t e n a m e =" a d d r e s s ">
< x s l : w i t h - p a r a m n a m e =" a d d r e s s " s e l e c t =" b i l l T o " / >
< / x s l : c a l l - t e m p l a t e >
address
Dieses Template erzeugt aus dem als Parameter ¨ubergebenen Element eine Adresse abh¨angig von dessen Attributwert f¨urxsi:type:
< x s l : t e m p l a t e n a m e =" a d d r e s s ">
< x s l : p a r a m n a m e =" a d d r e s s " / >
< x s l : c h o o s e >
< x s l : w h e n t e s t =" $ a d d r e s s / @ x s i : t y p e = ’ ipo:EU - Address ’ ">
< a d d r e s s c l a s s =" e x p o r t ">
< x s l : v a l u e - of s e l e c t =" $ a d d r e s s / n a m e " / > < br / >
< x s l : v a l u e - of s e l e c t =" $ a d d r e s s / s t r e e t " / > < br / >
< x s l : v a l u e - of s e l e c t =" $ a d d r e s s / c i t y " / > < br / >
< x s l : v a l u e - of s e l e c t =" $ a d d r e s s / p o s t c o d e " / >
< / a d d r e s s >
< / x s l : w h e n >
< !- - ... - ->