• Keine Ergebnisse gefunden

XML-Technologien Tutorium im Sommersemester 2012 niels.hoppe@fu-berlin.de 13. Juni 2012

N/A
N/A
Protected

Academic year: 2022

Aktie "XML-Technologien Tutorium im Sommersemester 2012 niels.hoppe@fu-berlin.de 13. Juni 2012"

Copied!
228
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

XML-Technologien

Tutorium im Sommersemester 2012

niels.hoppe@fu-berlin.de

13. Juni 2012

(2)

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¨

(3)

1. Tutorium - XML Grundlagen

(4)

Quelltext anzeigen

Erf¨ullt das XML-Dokument die Anforderungen?

(5)

Quelltext anzeigen

Erf¨ullt das XML-Dokument die Anforderungen?

(6)

(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.

(7)

(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 ">

< !- - ... - ->

(8)

(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 ">

< !- - ... - ->

(9)

(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.

(10)

(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.

(11)

(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.

(12)

(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 ">

< !- - ... - ->

(13)

(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.

(14)

(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.

(15)

(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.

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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 >

(21)

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.

(22)

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 >

(23)

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 >

(24)

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 >

(25)

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 >

(26)

2. Tutorium - DTDs

(27)

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.

(28)

Frage Wird Whitespace in der Deklaration des Namensraumes als Null-Namensraum interpretiert?

Antwort Nein. Jedenfalls erkennen einige Validatoren Whitespace als eigenen Namensraum.

(29)

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 ; >

(30)

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 ; >

(31)

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 ">

(32)

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 ">

(33)

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 +) >

(34)

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 ">

(35)

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 ">

< !- - ... - ->

(36)

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 ">

< !- - ... - ->

(37)

DTDs

I Elemente deklarieren

I Attribute deklarieren

I Entit¨aten deklarieren

(38)

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 ) >

(39)

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 ) >

(40)

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 ) >

(41)

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 ) ) >

(42)

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 ">

(43)

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 ">

(44)

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 ">

(45)

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 ">

(46)

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

(47)

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.&amp;und&lt;)

I Character Entities (z.B.&#243;und&#x00F3;)

I General Entities, selbst definiert

I Parameter Entities, selbst definiert

Entit¨aten k¨onnen sowohl innerhalb der DTD deklariert, als auch extern referenziert werden.

(48)

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.

(49)

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.

(50)

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 )) ">

(51)

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 )) ">

(52)

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.

(53)

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.

(54)

XML-Schema

Wer war schon mal auf http://www.w3schools.com?

(55)

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.

(56)

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.

(57)

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.

(58)

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.

(59)

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.

(60)

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.

(61)

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.

(62)

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.

(63)

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.

(64)

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.

(65)

Ubungen ¨

Bei der XML-Deklaration beachten:

I ”xml“ klein schreiben

I Reihenfolge der Attribute beachten

I versionimmer angeben

I encodingist optional

I standaloneist optional

(66)

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 ">

(67)

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 ">

(68)

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.

(69)

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.

(70)

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.

(71)

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.

(72)

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.

(73)

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.

(74)

Ubungen ¨

Welche Arten von Inhalten gibt es in XML?

I unstrukturierten Inhalt

I strukturierten Inhalt

I gemischten Inhalt

I leeren Inhalt

(75)

Ubungen ¨

Welche Arten von Inhalten gibt es in XML?

I unstrukturierten Inhalt

I strukturierten Inhalt

I gemischten Inhalt

I leeren Inhalt

(76)

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>

(77)

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>

(78)

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.

(79)

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.

(80)

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.

(81)

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.

(82)

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.

(83)

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.

(84)

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.

(85)

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.

(86)

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.

(87)

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.

(88)

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.

(89)

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.

(90)

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.

(91)

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.

(92)

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.

(93)

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.

(94)

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.

(95)

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.

(96)

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.

(97)

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.

(98)

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.

(99)

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.

(100)

3. Tutorium - XML Schema

(101)

Frage Darf das Attributversionin der XML-Deklaration fehlen?

Antwort Nein, es ist sowohl in XML 1.0 als auch in XML 1.1 obligatorisch.

(102)

Frage Darf ein Element mit Inhalt vom TypANY,#CDATAoder#PCDATA auch leer sein?

Antwort Ja. Nur wenn es leer seinmuss, muss es als TypEMPTYhaben.

(103)

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.

(104)

Schemata entwerfen

Quelltext ansehen

Erf¨ullt das Schema die Anforderungen?

(105)

Schemata entwerfen

Quelltext ansehen Erf¨ullt das Schema die Anforderungen?

(106)

(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 . . .

(107)

(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 >

(108)

(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 >

(109)

(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 >

(110)

(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 ">

< !- - ... - ->

(111)

(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 >

(112)

(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 ">

(113)

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 ">

(114)

XML-Schema

(115)

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 ">

(116)

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 "/ >

(117)

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 >

(118)

4. Tutorium - XSL Transformation

(119)

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.

(120)

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 >

(121)

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 >

(122)

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 >

< !- - ... - ->

Referenzen

ÄHNLICHE DOKUMENTE

(c) Die Daten orderDate, type, export-code und partNum sollen als Attribute repr¨ asentiert werden.. (d) Die Attribute orderDate, export-code und partNum sollen nicht

– Erstellt beim Parsen einen DOM-Baum auf dem nach dem Parsen zugegriffen werden kann. Der DOM-Baum kann wieder in einem XML-Dokument gespeichert

Anfragesprache zur Auswahlvon Knoten in einem XML-Dokument, über Patternmatch und Filter. ● Weist gewisse Ähnlichkeiten zur

An XML namespace is identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this

• keine vorgegebenen Tags, auch keine für das Layout von Dokumenten. • Vorgänger

(c) Die Daten orderDate, type, export-code und partNum sollen als Attribute repr¨ asentiert werden.. (d) Die Attribute orderDate, export-code und partNum sollen nicht

¨ Ubung durch eine Transformation folgendes HTML-Dokument erzeugt... in Java oder PHP (siehe

ƒ Mit Document Document Type Type Definitions Definitions ( DTDs) können aber DTDs spezielle Auszeichnungssprachen mit konkreten Tags definiert werden:. ƒ werden Anwendungen