XML-Technologien
Tutorium im Sommersemester 2014
niels.hoppe@fu-berlin.de
6. Mai 2014
XML Grundlagen
URIs, URNs, URLs, IRIs, . . . Namensr¨aume
Document Type Definitions
Elemente deklarieren Attribute deklarieren Entit¨aten deklarieren Teilmengen definieren
XML Grundlagen
Beachte besonders:
I Wohlgeformtheit
I XML-Deklaration
I Syntax
I Regeln f¨ur Namen
I . . .
Regeln f¨ ur Namen
G¨ultige Namen. . .
. . . beginnen immer mit einem Buchstaben oder Unterstrich,
jedoch nie mitxml(unabh¨angig von der Groß- und Kleinschreibung).
. . . enthalten nur Buchstaben, Zahlen, Punkte oder Unterstriche und insbesondere keine Leerzeichen oder Doppelpunkte.
URIs, URNs, URLs, IRIs, . . .
Ein verwirrendes Thema, es gibt laut W3C eine klassische und eine zeitgem¨aße Sichtweise dazu:http://www.w3.org/TR/uri-clarification/
URIs, URNs und URLs heute
I URI steht f¨ur Uniform Resource Identifier
I URI-Schemas bestimmen, wie URIs aussehen. Sie werden von IANA registriert:
http://www.iana.org/assignments/uri-schemes
I Eine URL ist eine URI, die eine Ressource durch eine Repr¨asentation ihrer prim¨aren Zugriffsmethode (z.B. HTTP) identifiziert.
I URN ist ein spezielles URI-Schema f¨ur universell eindeutige Namen, das ein Konzept von Namensr¨aumen, z.B. ISBN, beinhaltet:
urn:isbn:n-nn-nnnnnn-n
Namensr¨ aume
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
Namensr¨ aume
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
Namensr¨ aume
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
Namensr¨ aume
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
Namensr¨ aume
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 >
Namensr¨ aume
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.
Document Type Definitions
I Elemente deklarieren
I Attribute deklarieren
I Entit¨aten deklarieren
I Teilmengen definieren
I DTDs einbinden
DTD
Anwendung Beschreibung der Struktur von XML-Dokumenten.
Prinzip Beschreibe Struktur von Elementen und ihren Attributen mittels einfacher regul¨arer Ausdr¨ucke.
Markup < !E L E M E N T my - e l e m e n t ( first - child ,
( second - child - e i t h e r | second - child - or )) >
< !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 #R E Q U I R E D another - a t t r i b u t e P C D A T A #I M P L I E D
>
DTD
Anwendung Beschreibung der Struktur von XML-Dokumenten.
Prinzip Beschreibe Struktur von Elementen und ihren Attributen mittels einfacher regul¨arer Ausdr¨ucke.
Markup < !E L E M E N T my - e l e m e n t ( first - child ,
( second - child - e i t h e r | second - child - or )) >
< !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 #R E Q U I R E D another - a t t r i b u t e P C D A T A #I M P L I E D
>
DTD
Anwendung Beschreibung der Struktur von XML-Dokumenten.
Prinzip Beschreibe Struktur von Elementen und ihren Attributen mittels einfacher regul¨arer Ausdr¨ucke.
Markup < !E L E M E N T my - e l e m e n t ( first - child ,
( second - child - e i t h e r | second - child - or )) >
< !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 #R E Q U I R E D another - a t t r i b u t e P C D A T A #I M P L I E D
>
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 ( 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 ) ) >
Elemente deklarieren
Definition
elementdecl ’<!ELEMENT’Name contentspec’>’
contentspec ’EMPTY’|’ANY’|Mixed|children quantifier (’ ?’|’*’|’+’)
children (choice|seq)quantifier?
cp (Name|choice|sequence)quantifier?
choice ’(’cp(’|’cp)+ ’)’
seq ’(’cp(’,’cp)* ’)’
Mixed ’(’ ’#PCDATA’ (’|’Name)* ’)*’|’(’ ’#PCDATA’ ’)’
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
Attribute deklarieren
Definition
AttlistDecl ’<!ATTLIST’Name AttDef* ’>’
AttDef Name AttType DefaultDecl
AttType StringType|TokenizedType|EnumeratedType StringType ’CDATA’
TokenizedType ’ID’|. . .|’NMTOKENS’
EnumeratedType NotationType|Enumeration
NotationType ’NOTATION’ ’(’Name(’|’Name)* ’)’
Enumeration ’(’Nmtoken(’|’Nmtoken)* ’)’
DefaultDecl ’#REQUIRED’|’#IMPLIED’|((’#FIXED’)?AttValue)
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.