-
Namensräume
-
Motivation
-
Ziele
- Kombination von XML-Dokument-Fragmenten, die verschiedenen DTDs unterliegen
- Verwendung von Standard-Modellen statt Eigenentwicklung
-
Zu lösende Probleme
- Namenskonflikte vermeiden
- Welche DTD gehört zu welchem XML-Dokument-Fragment?
- Wie die Gültigkeit des kombinierten Dokuments überprüfen?
-
Grundidee
- Einführung eines Namensraums für die Bezeichner jeder konkreten DTD
-
Wie wird der Name vergeben?
-
1. Möglichkeit: Vergabe durch den Entwickler einer DTD
- Lediglich Verschiebung eines möglichen Namenskonflikts
-
2. Möglichkeit: Globale Vergabe der Namen durch eine zentrale Instanz
- Immenser Verwaltungsaufwand
-
3. Möglichkeit: Nutzung eines existierenden Konzepts: URI (Uniform Resource Identifier)
- Globale und lokale Bestandteile des Namens
-
Definition
-
Definition der offiziellen deutschen Übersetzung der W3C-Spezifikation:
"Ein XML-Namensraum ist eine Zusammenstellung von Namen, identifiziert durch einen URIVerweis,
die in XML-Dokumenten als Elementtypen und Attributnamen verwendet werden."
- Und weiter:
"XML-Namensräume unterscheiden sich von den 'Namensräumen', die normalerweise im
Computerbereich verwendet werden, in dem Maße, dass die XML-Version eine interne Struktur
hat und im mathematischen Sinne keine Zusammensetzung ist."
(Bezug auf Kontext eines Elements)
-
URL's
-
URL (Uniform Resource Locator)
- Bekannte Teilmenge der URI zur
Lokalisation von Dateien
- Sind entwickelt worden, um Internet-Dokumente zu identifizieren
- Beschreiben den Ort der Ablage (es geht also nicht primär um einen eindeutigen Namen)
- Sind aber so allgemein, dass sie nicht nur Daten im Internet, sondern auch im Intranet oder auf
einer lokalen Maschine identifizieren
- Werden in XML für Hyperlinks und zur Referenzierung von Entities benutzt.
- URL: Typischer Aufbau für HTTP URL
- Referenzierung von Fragmenten
-
Relative URLs
- Wenn sich das referenzierte Objekt im selben Dateisystem befindet, reicht es, einen relativen
Pfad anzugeben
- Pfad anzugeben.
<!ENTITY introduction SYSTEM "chapters/intro.xml">
<!ENTITY introduction SYSTEM "../chapters/intro.xml">
-
Beispiele für URIs (aus IETF RFC 2396)
- ftp://ftp.is.co.za/rfc/rfc1808.txt
-- ftp scheme for File Transfer Protocol services
gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles
-- gopher scheme for Gopher and Gopher+ Protocol services
http://www.math.uio.no/faq/compression-faq/part1.html
-- http scheme for Hypertext Transfer Protocol services
mailto:mduerst@ifi.unizh.ch
-- mailto scheme for electronic mail addresses
news:comp.infosystems.www.servers.unix
-- news scheme for USENET news groups and articles
telnet://melvyl.ucop.edu/
-- telnet scheme for interactive services via the TELNET Protocol
-
Wie wird mit URIs für Namensräume umgegangen?
- Beispiel für Namensraum-URI: "http://www.w3.org/1999/xhtml"
- Obwohl es sich um Internet-Adressen handelt, muss die verarbeitende Applikation keinen
Internet-Zugang haben und darauf zugreifen.
- Es geht nur um eine eindeutige Identifizierung.
-
Verwendung von Namensraum-Bezeichnern im XMLDokument
-
Aber: URIs sind nicht geeignet als Präfix
- zu lang
- nicht erlaubte Sonderzeichen
- Deshalb Kurzbezeichner als Präfix
-
Namensraum-Deklaration
-
Bindung einer URI an ein Präfix
- Wird realisiert durch das reservierte Attribut "xmlns"
-
Das Attribut "xmlns" ist für alle Elemente erlaubt
- Beispiel:
<x xmlns:edi='http://ecommerce.org/schema'>
<!-- the "edi" prefix is bound to http://ecommerce.
org/schema for the "x" element and contents -->
</x>
- Das Präfix kann durch die Deklaration für das betreffende Element und Unterelemente
verwendet werden
-
Namensraum-Deklaration bezieht sich auf das betreffende Element
und alle Unter-Element
- <?xml version="1.0"?>
<!-- all elements here are explicitly in the HTML namespace -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
<html:head>
<html:title>Frobnostication</html:title>
</html:head>
<html:body>
<html:p>Moved to
<html:a href='http://frob.com'>here.</html:a></html:p>
</html:body>
</html:html>
- Namensraum-Deklarationen sind für alle Elemente erlaubt. Üblich ist es jedoch, sie am
Wurzelelement aufzuführen
-
Mehrere Namensraum-Deklarationen im selben Element erlaubt
- <?xml version="1.0"?>
<!-- both namespace prefixes are available throughout -->
<bk:book xmlns:bk='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<bk:title>Cheaper by the Dozen</bk:title>
<isbn:number>1568491379</isbn:number>
</bk:book>
- Es handelt sich hier um zwei Attribute, die sich im Suffix unterscheiden
-
Default-Namensraum: Suffix und Doppelpunkt entfallen
- <?xml version="1.0"?>
<!-- elements are in the HTML namespace, in this case by default -->
<html xmlns='http://www.w3.org/TR/REC-html40'>
<head><title>Frobnostication</title></head>
<body><p>Moved to <a href='http://frob.com'> here</a>.</p>
</body>
</html>
...
<?xml version="1.0"?>
<!-- unprefixed element types are from "books" -->
<book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
</book>
-
Default-Namensraum: Vererbungsregeln für Elemente
- Default-Namensraum bezieht sich auf das Element, wo die Deklaration stattfindet und auf Kind-
Elemente.
- Wenn ein Element kein Namensraum-Präfix aufweist und es keinen Default-Namensraum gibt,
wird für das Element gar kein Namensraum angenommen.
-
Namensraum-Regeln für Attribute
- Default-Namensraum gilt nicht automatisch für Attribute
- Ein Attribut mit Namensraum-Präfix gehört zum entsprechenden Namensraum
-
Ein Attribut ohne Namensraum-Präfix erbt den Namensraum des umgebenden Elements
- Wenn das umgebende Element ein Namensraum-Präfix aufweist, gilt dieser Namensraum
für das Attribut.
- <FLIGHTS:SEAT CLASS="Y" HTML:CLASS="reallyImportant">
33B</FLIGHTS:SEAT>
- Wenn das umgebende Element keinen Namensraum-Präfix aufweist, aber den Default-
Namensraum erbt, so gilt der Default-Namensraum auch für das Attribut
- Wenn das umgebende Element keinem Namensraum angehört, ist das Attribut auch an
keinen Namensraum gebunden.
-
Default-Namensraum: Leerer String als URI hebt Default-Wirkung auf
-
Übung: Welchen Namensraum weisen die Elemente auf?
<?xml version='1.0'?>
<Beers>
<table xmlns='http://www.w3.org/TR/REC-html40'>
<th><td>Name</td>
<td>Origin</td>
<td>Description</td></th>
<tr>
<td><brandName xmlns="">Huntsman</brandName></td>
<td><origin xmlns="">Bath, UK</origin></td>
<td>
<details xmlns="">
<class>Bitter</class>
<hop>Fuggles</hop>
<pro>Wonderful hop, good summer beer</pro>
<con>Fragile</con>
</details></td>
</tr></table></Beers>
- Lösung:
<?xml version='1.0'?>
<Beers>
<!-- the default namespace is now that of HTML -->
<table xmlns='http://www.w3.org/TR/REC-html40'>
<th><td>Name</td>
<td>Origin</td>
<td>Description</td></th>
<tr><!-- no default namespace inside table cells -->
<td><brandName xmlns="">Huntsman</brandName></td>
<td><origin xmlns="">Bath, UK</origin></td>
<td>
<details xmlns="">
<class>Bitter</class>
<hop>Fuggles</hop>
<pro>Wonderful hop, good summer beer</pro>
<con>Fragile</con>
</details></td>
</tr></table></Beers>
-
Namensräume und DTDs
-
Eine DTD muss in den Inhaltsmodellen alle erlaubten Elemente aus den
verschiedenen Namensräumen aufführen
- Dabei Nennung des Präfix als Bestandteil des Element-Namens
- <!ELEMENT bk:book (bk:title, isbn:number) >
-
Auch die Namensraum-Deklaration ist Bestandteil der DTD
- <!ATTLIST bk:book xmlns:bk CDATA #FIXED "urn:loc.gov:books"
xmlns:isbn CDATA #FIXED "urn:ISBN:0-395-36341-6">
-
DTD
-
Schwächen von DTDs
-
Keine XML Syntax
- Keine XML-Software anwendbar: Parser, Verarbeitung, Überprüfung der Wohlgeformtheit und Gültigkeit
- Nicht in XML-Editoren zu erstellen
- Keine leichte Erweiterbarkeit und Einbettung (z.B. Verarbeitung durch XSLT)
-
Datentypen
- Wenige Datentypen verfügbar
-
Keine Konzepte zur Definition neuer Datentypen
- Schlechte Erweiterbarkeit
- Praktisch keine Datentypen für den Inhalt von Elementen
- Sehr Zeichenketten-orientierte Datentypen für Attribute
-
Einschränkungen bei Inhaltsmodellen
- Steuerung der Anzahl von Elementen
- Mixed Content
- Starke Einschränkungen bzgl. Namensräumen
-
Einschränkungen bezüglich Wiederverwendbarkeit
- Konzept der globalen Definition von Elementen und Parameter Entities
versus expliziter Referenzierung von Attributen, Elementen und Datentypen
- Einschränkungen bei der Wiederverwendbarkeit von DTD-Elementen: Attribute sind an
Elemente gebunden
-
Einschränkung bezüglich lokaler Gültigkeitsbereiche
- Attribute immer lokal, Elemente immer global
- Keine anonymen Typen
- Sehr eingeschränkter Referenzierungs-Mechanismus
-
XML Dokument Struktur
-
Element-Deklaration
-
Element-Name
- Muss mit einem Buchstaben, “_”, oder “:” beginnen.
- Darf neben Buchstaben, “_” und “:” auch Zahlen, “.” und “-” enthalten
- Beliebige Länge
-
Konnektoren
- Sequenz-Konnektor: “,”
- Oder-Konnektor: “| “
-
Occurence Indicators
- Mindestens einmal: “+” (1-n)
- Optional: “?” (0-1)
- Beliebig oft (auch 0 mal): “*” (0-n)
- Häufigkeits-Kennzeichen haben Vorrang vor Konnektoren
-
Inhaltsmodell
- #PCDATA
- Text-Inhalte
- “Mixed Content”
- Erlaubt:
<!ELEMENT okay-xml (#PCDATA | emph)* >
<!ELEMENT okay-xml1 (#PCDATA | emph | refint)* >
<!ELEMENT okay-xml2 (#PCDATA) >
Auch erlaubt:
<!ELEMENT okay-xml4 (#PCDATA)* >
- Regeln
- #PCDATA muss immer an erster Stelle der Inhaltsbeschreibung stehen
(andernfalls gibt es einen Parserfehler).
- #PCDATA und Elemente müssen in der Inhaltsbeschreibung
mit »|« verknüpft werden.
- gesamte Mixed Content-Gruppe muss optional sein und
beliebig oft vorkommen dürfen (es ist also nur der »*«-Operator zulässig).
- Weder die Anzahl noch die Reihenfolge der Child-Elemente
eines Mixed-Content-Elements können daher genauer festgelegt werden.
-
Empty Element
- Typische Anwendung: Meta-Information
- Elemente, die einen leeren Inhalt haben können
-
Beliebiger Inhalt
- Element darf beliebige andere Elemente der DTD enthalten
-
Attribut-Deklaration
-
Regeln
- Attribut-Namen werden wie Element-Namen gebildet
- Für ein Element darf es mehrere Attribut-Deklarationen geben
- Die verschiedenen Deklarationen werden wie eine gemeinsame behandelt
- Wenn ein Attribut-Name mehrfach auftritt, gilt die erste Deklaration
-
Default-Wert-Schlüsselwörter
- #REQUIRED
- Es muss ein Wert in der Dokument-Instanz angegeben werden.
- #IMPLIED
- Es muss kein Wert in der Dokument-Instanz angegeben werden
- #FIXED
- Der Wert ist fest vorgegeben
- Aufzählungstypen
-
Datentypen für Attribut-Werte
- Beliebige Zeichenketten
- CDATA (Character Data), String
- Besondere Zeichenketten
- NMTOKEN (Name Token),
- wie Element/Attribut-Namen, aber ohne Sonderbedingungen für
das erste Zeichen
- NMTOKENS
- mehrere NMTOKEN, durch Blank getrennt
- Für Referenzierungen
- ID
- IDREF
- IDREFS
- externe Daten
- ENTITY
- ENTITIES
- nicht-XML Daten
- NOTATION
-
Entities
- Anderer Entity-Typ, um Namenskonflikte zu vermeiden
- Deklaration in der DTD (typischerweise der internen Teilmenge)
- Nutzung in der Dokument-Instanz
-
Entity-Typen
- Parameter Entität (%)
- <!ENTITY % blocks "para | table | numlist | unumlist" >
- <!ELEMENT section (title, %blocks;) >
- mehrfach benötigt werden
- Parameter-Entitities in externen Dateien auszulagern, damit sie von
verschiedenen DTDs genutzt werden können.
- Parameter Entities für komplexere Inhaltsmodelle
- OHNE
<!ELEMENT chapter (title, note?, para+) >
<!ELEMENT section (title, note?, para+) >
- <!ENTITY % chap-sec-content "(title, note?, para+)"
<!ELEMENT chapter %chap-sec-content; >
<!ELEMENT section %chap-sec-content; >
- Interne allgemeine (&)
- <!ENTITY amm "Aircraft Maintenance Manual">
- <para>The &amm; has 24,000 pages.</para>
- <amm long-name="&amm;">
- Text Entities
- Definition in der DTD, typischerweise in der internen Teilmenge
- Texte und Markup als Ersetzungstext erlaubt
- Anführungszeichen im Ersetzungstext erlaubt (einfache Anführungszeichen, wenn der
Ersetzungstext in doppelten steht, und umgekehrt)
- Referenzierung der Entität darf im Inhalt und im Attributwert auftauchen
- Referenzierung darf nicht als Attributwert auftauchen
- Referenzierung darf im Entity-Wert einer Entity-Deklaration auftauchen
- Externe allgemeine (&)
- Referenzierung der Entität ist in Attribut-Werten verboten
- Referenzierung darf im Entity-Wert einer Entity-Deklaration auftauchen
- <!ENTITY introduction SYSTEM "chapters/intro.xml">
<!ENTITY introduction PUBLIC "//LUFTHANSASYSTEMS//CONTENTS//EN" "chapters/intro.xml " >
- <manual>&introduction;<chapter>...
- Externe, nicht-XML (z.B. graphic)
- Als externe Entität, Referenzierung im Attribut
- In der DTD: Empty Element mit Attribut vom Typ ENTITY oder ENTITIES
- <!ELEMENT graphic EMPTY>
<!ATTLIST graphic gnbr ENTITY #REQUIRED>
- In der internen DTD-Teilmenge: Deklaration als allgemeine externe Entität, ungeparst
- <!ENTITY g123 SYSTEM "graphics/g123.cgm" NDATA CGM>
- Im Dokument: Referenzierung über Attribut im Empty Element
- <graphic gnbr="g123"/>
- Als Inhalt eines Elements
- Daten als Inhalt eines Elements, Angabe der Notation im Attribut vom Typ NOTATION
- <!ATTLIST word-document
title CDATA #IMPLIED format NOTATION (RTF | MIF) "MIF">
<word-document title="An unstructured Text" format="RTF">
{\rtf\ansi\ansicpg1252\...
</word-document>
- Format in einer Notation-Deklaration
- <!NOTATION CGM SYSTEM "graphics/mycgmviewer.exe" >
oder
<!NOTATION CGM PUBLIC "-//USA-DOD//NOTATION Computer Graphics
Metafile//EN">
- Regeln für Notation-Deklarationen
- Wie in SGML ist es hier erlaubt, nur einen PUBLIC Identifier anzugeben
- Wenn keine Applikation zur Verarbeitung der nicht-XML-Daten verfügbar ist oder wenn das
Format unbekannt ist, ist eine Einbindung dennoch möglich, wenn ein leeres System Literal
angegeben wird:
<!NOTATION UNKNOWN SYSTEM "" >
- Zeichen-Entität (z.B. Sonderzeichen <)
- Die Referenzierung von Zeichen-Entities entspricht der von allgemeinen Entities.
- Zeichen-Entities nehmen Bezug auf den Zeichensatz ISO10646.
- Zur Bezeichnung eines Zeichens können dezimale Zahlen oder Hexadezimal-Zahlen benutzt
werden.
- Eine Entity-Deklaration ist nicht notwendig, da die Abbildung von Namen auf Zeichen durch die
Zeichensätze gegeben ist.
- Vordefinierte Entities
- Zeichen mit besonderer Bedeutung
- <!ENTITY lt "&#60;">
- <!ENTITY gt ">">
- <!ENTITY amp "&#38;">
- <!ENTITY apos "'">
- <!ENTITY quot """>
- Einsatz der Zeichen dort, wo die direkte Verwendung verboten ist.
-
Referenzierung von Entities im Entity-Wert
- Auflösung von allgemeinen Entities erst im Dokument
- Beispiel aus XML-Spezifikation:
<!ENTITY % pub "Éditions Gallimard" >
<!ENTITY rights "All rights reserved" >
<!ENTITY book "La Peste: Albert Camus, © 1947 %pub;. &rights;" >
- Der Ersetzungstext des Entity-Werts von "book" lautet:
La Peste: Albert Camus, © 1947 Éditions Gallimard. &rights;
- Erst wenn "&book;" im Dokument-Inhalt oder einem Attribut-Wert auftauchen sollte, würde
"&rights;" aufgelöst werden.
-
ID/IDREF-Konzept
-
Beispiel:
<!ELEMENT chapter (...)>
<!ATTLIST chapter key ID #REQUIRED>
<!ELEMENT refint (#PCDATA)>
<!ATTLIST refint refid IDREF #REQUIRED>
- Im Dokument:
<para>Please refer to <refint refid="c12">chapter 12</refint> .</para>
-
Regelln
- Identifier muss mit einem Buchstaben beginnen, darf "." und "-" enthalten
- Eindeutigkeit der Identifier wird durch den XML Parser überprüft
- ID/IDREF Konzept stammt von SGML
-
Physikalische Organisation
- System Identifier
-
Public Identifier
- Indirekter Zugriff über einen logischen Namen
- Auflösung mittels einer Katalog-Datei
- Zusätzlicher System Identifier erforderlich, falls Suche im Katalog nicht erfolgreich
-
Conditional Sections
- Teilbereiche der DTD aus- und
eingeblendet werden
- Konzept: Included / Ignored Sections
- Üblicherweise wird das INCLUDE bzw. IGNORE Schlüsselwort über eine Parameter-Entität
eingebunden, um in den spezifischen Bestandteilen der DTD entsprechend gesetzt werden zu
können.
-
<![ %boeing-variant; [ <!ELEMENT example (action | command)+> ]]>
<![ %airbus-variant; [ <!ELEMENT example (action | command | andasap)+> ]]>
- Bestandteile der Boeing DTD:
<!ENTITY % boeing-variant " INCLUDE ">
<!ENTITY % airbus-variant " IGNORE ">
- Bestandteile der Airbus DTD:
<!ENTITY % boeing-variant "IGNORE">
<!ENTITY % airbus-variant "INCLUDE">
-
Info Sets
-
Was ist ein XML Information Set?
- Abstraktes Datenmodell, dass ein wohlgeformtes XML-Dokument repräsentiert
- Ein XML-Dokument stellt eine mögliche, konkrete Implementierung eines Infosets dar, Infoset
beschreibt Struktur unabhängig von konkreter Syntax
- Kann beim Parsen eines XML-Dokuments erzeugt werden, muss aber nicht
- Ein XML-Dokument muss nicht gültig bzgl. einer DTD sein, um ein Infoset zu haben
-
Aufbau eines Infosets
- Setzt sich aus Informationseinheiten zusammen
- Es gibt verschiedene Typen von Informationseinheiten
- Informationseinheiten werden durch Eigenschaften beschrieben
-
Typen von Informations-Einheiten
-
Dokument-IE
-
Eigenschaften der Dokument-IE
- [children] - Geordnete Liste mit den Kind-IEs (IE für Wurzel-Element, ggf. für PIs, ggf. für
Kommtare, Dokumenttyp-Deklaration) (PI = Processing Instruction)
- [document element] - IE für das Wurzel-Element
- [notations] - die in der DTD deklarierten Notationen
- [unparsed entities] - Menge der ungeparsten Entities, die in der DTD deklariert sind
- [base URI] - Adresse des XML-Dokuments
- [character encoding scheme] - Zeichensatz
- [standalone] - Entspricht standalone-Attribute aus XML-Deklaration
- [version] - XML-Version
- [all declarations processed] - Boolsches Attribut, das anzeigt, ob der Prozessor die gesamte
DTD lesen konnte
-
Element-IE
- Eigenschaften der Element-IE
I [namespace name] - Namensraum-Bezeichner
I [local name] - Name des Elements
I [prefix] - Namensraum-Kurzname
I [children] - Geordnete Liste mit den Kind-IEs (für Elemente, Zeichen, ggf. PIs, ggf. Kommtare,
ggf. nicht-erweiterte Entity-Verweise)
I [attributes] - Ungeordnete Zusammenstellung von Attribut-IEs (eine IE für jedes Attribut des
Elements)
I [namespace attributes] - Ungeordnete Zusammenstellung von Attribut-IEs (eine IE für jedes
Namensraum-Attribut)
I [in-scope namespaces] - Ungeordnete Zusammenstellung von Namensraum-IEs
I [base URI]: Basis-URI des Elements
I [parent]: Die Eltern-IE
-
Attribut-IE
- Eigenschaften der Attribut-IE
I [namespace name]
I [local name]
I [prefix]
I [normalized value] - Der Attributwert
I [attribute type] - Der in der DTD angegebene Typ, sonst kein Wert (soll wie CDATA behandelt
werden)
I [references] - Nur für die Typen IDREF, IDREFS, ENTITY, ENTITIES, NOTATION: Liste der IE
der referenzierten Objekte
I [owner element] - Element-IE zu der das Attribut gehört
-
Zeichen-IE
- Eigenschaften der Zeichen-IE
I [character code] - Der ISO-10646-Zeichencode (bis #x10FFFF)
I [element content whitespace] - Boolescher Wert für Whitespace
I [parent] - Die Eltern-IE
- Kommentar-IE
- PI-IE
- IE für nicht-erweiterte Entity-Referenzen (Entities werden im Allgemeinen aufgelöst)
- Notations-IE
- IE für ungeparste Entities
- IE für Dokumenttyp-Deklarationen
- Namensraum-IE
-
Generierung von IEs durch XML-Prozessor
- Ein XML-Prozessor muss immer alle Zeichen, die nicht zum Markup zählen, an die Anwendung
liefern.
- Ein validierender XML-Prozessor muss für ein Attribut mit Default-Wert, das nicht im XMLDokument
auftaucht, ein Attribut-IE erzeugen
-
Übung
-
Übung: Welche IEs werden von einem XML-Prozessor für das folgende
Dokument erzeugt?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<adresse>
<name>HAW</name>
<strasse nr="7">Berliner Tor</strasse>
<ort plz="20099">Hamburg</ort>
</adresse>
- Lösung:
-
XML Schema
-
Vorteile vs DTD
- XML Applikation (validierbar, Verarbeitung durch XML Tools möglich)
- Mächtiger bzgl. Datentypen
- Datentypen selbst definierbar
- Modularisierbar (Wiederverwendung)
- Unterstützung von Namensräumen
- Auftrittshäufigkeit leichter zu steuern
- Lokal unterschiedliche Deklarationen
- Besserer Referenzierungsmechanismus
- Restriktivere Mixed Content Modelle
-
Schwächen von XML Schema
-
Umfangreich, aufwendig
- Für einfache Anwendungen umständlich
- Für Dokumenten-zentrierte Anwendungen manchmal unnötig
- (Höhere Entwicklungskosten)
-
Keine Parameter-Entities
- Sehr flexibles und einfaches Konstrukt
- Häufig ist die einfachere Lösung die bessere!
-
Grundkonzepte
-
Datentyp-Definitionen
-
Einfache Datentypen (Simple Type)
- Alle Attribute
- Elemente ohne Kinder und Attribute
- Es existiert eine Reihe vordefinierter einfacher Datentypen
- Auf der Basis der vordefinierten Datentypen kann man eigene definieren
- Ableitung neuer einfacher Datentypen
- Benutzer-definierte Datentypen können aus bereits existierenden abgeleitet werden
- Einschränkung auf eine Teilmenge ("Restriction")
- Durch das Restriction-Element
- Bezug zu einem Basis-Typ über Attribut "base" oder über Simple-Type-Deklaration als Kind-
Element
- Definition der Einschränkung über "Facets"
- Spezifikation
- <restriction
base = QName
id = ID
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (simpleType?, (minExclusive | minInclusive |
maxExclusive | maxInclusive | totalDigits | fractionDigits | length |
minLength | maxLength | enumeration | whiteSpace | pattern)*))
</restriction>
- Ableitung eines neuen einfachen Datentyps durch Einschränkung:
Beispiele
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
- Liste von Elementen eines Basis-Datentyps ("List")
- Vordefinierte Listen-Typen: NMTOKENS, IDREFS, ENTITIES
- Definition eigener Listen-Typen durch Element "list"
- Bezug zum Basis-Typ über Attribut "itemType" oder Simple-Type-Deklaration (nur
Simple Types erlaubt)
- Spezifikation
- <list
id = ID
itemType = QName
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (simpleType?))
</list>
- Beispiele
<xsd:simpleType name='messwerte'>
<xsd:list itemType='xsd:float'/>
</xsd:simpleType>
<xsd:simpleType name='jahreszahlen'>
<xsd:list itemType='xsd:positiveInteger'/>
</xsd:simpleType>
- Vereinigung mehrerer Basis-Datentypen ("Union")
- Definition eines Vereinigungs-Typs über Element "union"
- Bezug zu den Basis-Typen über Attribut "memberTypes" oder durch Simple Type
Deklarationen
- <union
id = ID
memberTypes = List of QName
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (simpleType*))
</union>
- Beispiel
<xsd:attribute name="size">
<xsd:simpleType>
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:minInclusive value="8"/>
<xsd:maxInclusive value="72"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="small"/>
<xsd:enumeration value="medium"/>
<xsd:enumeration value="large"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
</xsd:attribute>
<p> <font size='large'>A header</font> </p>
<p> <font size='12'>this is a test</font> </p>
- Variante
über Attribut "memberTypes":
<xsd:simpleType name="point">
<xsd:restriction base="xsd:positiveInteger">
<xsd:minInclusive value="8"/>
<xsd:maxInclusive value="72"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="type">
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="small"/>
<xsd:enumeration value="medium"/>
<xsd:enumeration value="large"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attribute name="size">
<xsd:simpleType>
<xsd:union memberTypes="point type"/>
</xsd:simpleType>
</xsd:attribute>
- Die vordefinierten abgeleiteten Datentypen sind als Einschränkung oder als Liste definiert
- Beispiel
- Simple Type Definition
<simpleType
final = (#all | (list | union | restriction))
id = ID
name = NCName
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (restriction | list | union))
</simpleType>
-
Komplexe Datentypen (Complex Type)
- Für Elemente
- Elemente mit Kindern oder Attributen
- Komplexe Typen können auf zwei Arten definiert werden
- globale Definition
- lokale Definition
- Komplexe Datentypen betreffen die Inhaltsmodelle von Elementen
- Nur einfacher Inhalt: keine Attribute, keine Unterelemente: -> "Simple Type"
- Kein Inhalt (leeres Inhaltsmodell), aber Attribute
- Wenn ein Element Attribute aufweist, ist es von einem komplexen Datentyp
- Es reicht, die Attribut-Deklarationen innerhalb einer Complex Type Definition aufzuführen
- <xsd:element name="effect"
<xsd:complexType>
<xsd:attribute name="effrg" type="xsd:string"/>
<xsd:attribute name="efftxt" type="EfftxtType"/>
</xsd:complexType>
</xsd:element>
- Kein Inhalt, keine Attribute
- Wie kein Inhalt mit Attributen, jedoch keine Nennung von Attributen
- <xsd:element name="revst">
<xsd:complexType/>
</xsd:element>
- Einfacher Inhalt, aber Attribute
- Inhalt wird durch einfachen Datentyp beschrieben, auf den selbstverständlich Bezug
genommen werden soll.
- Das Element ist aber von einem komplexen Datentyp, weil es Attribute aufweist.
- Die Beschreibung des komplexen Datentyps muss also einen einfachen Datentyp
referenzieren
- Dies geschieht über ein "Simple Content" Element (der Basis-Datentyp wird um Attribute
erweitert)
- erweitert):
<xsd:element name="PreisInternational"
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="Währung" type="xsd:string"/>
<xsd:/extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
- Mixed Content
- Beispiel
- <BriefText>
<Anrede>Sehr geehrter Herr <Name>Schmid</Name>,</Anrede>
Ihre Bestellung von <Anzahl>1</Anzahl> <Buchtitel>Herr der
Ringe</Buchtitel> wurde am <Lieferdatum>1999-05-21</Lieferdatum>
ausgeliefert. ...
</BriefText>
- <xsd:element name="BriefText">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Anrede">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Anzahl" type="xsd:positiveInteger"/>
<xsd:element name="Buchtitel" type="xsd:string"/>
<xsd:element name="Lieferdatum" type="xsd:date"/>
<!-- usw. -->
</xsd:sequence>
</xsd:complexType>
</xsd:element>
- Modell kann mit XML Schema genauer spezifiziert werden als in der XMLSpezifikation
vorgesehen
- Reihenfolge und Anzahl der Kindelemente können festgelegt werden
- Konzepte für komplexe Inhaltsmodelle
- Sequenz-Gruppe ("Sequence Group")
- Auswahl-Gruppe ("Choice Group")
- "All"-Gruppe: Mehrere Elemente in beliebiger Reihenfolge (wenig restriktiv)
- Beispiel: All-Gruppe
<xsd:complexType name="Contact">
<xsd:all>
<xsd:element name="email" type="EmailType" minOccurs="0"/>
<xsd:element name="address" type="AddressType" minOccurs="0"/>
<xsd:element name="tel" type="TelType" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
- Steuerung der Wiederholung durch Attribute "minOccurs", "maxOccurs"
- Erlaubt für Sequenz-Gruppe und Auswahl-Gruppe
- Für All-Gruppe gilt: minOccurs=0|1, maxOccurs=1
- Default-Werte: 1
- Model Groups
- Globale Definition einer Model Group durch das Element "group"
- Erlaubte Bestandteile einer Model Group: (sequence | choice | all)
- Referenzierung in komplexen Typdefinitionen
- <xsd:group name="wcnGroup">
<xsd:choice>
<xsd:element name="warning" type="paraType"/>
<xsd:element name="caution" type="paraType"/>
<xsd:element name="note" type="paraType"/>
</xsd:choice>
</xsd:group>
...
<xsd:complexType>
<xsd:sequence>
<xsd:group ref="wcnGroup" maxOccurs="unbounded"/>
<xsd:element name="procitems" type="procitemsType"/>
</xsd:sequence>
</xsd:complexType>
- Kind-Elemente und ggf. Attribute
- Beispiel
- Beispiel: Komplexe Datentypen
<xsd:complexType name="Items">
<xsd:sequence>
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="USPrice" type="xsd:decimal"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="partNum" type="SKU" use="required"/>
</xsd:complexType> </xsd:element> </xsd:sequence>
</xsd:complexType>
- Einschränkung und Erweiterung von Datentypen
- Sinn und Zweck?
- Es kann auf bestehende Definitionen zurückgegriffen werden
- Anwendungen, die den allgemeinen Fall beherrschen, können auch mit dem
eingeschränkten Fall umgehen
- Einschränkung und Erweiterung von einfachen Datentypen
- Einschränkung (restriction) eines einfachen Datentyps ergibt einen einfachen Datentyp
- Erweiterung eines einfachen Datentyps, um Attribute einzubinden. Resultat: komplexer
Datentyp
- Einschränkung von komplexen Datentypen
- complexContent
- restriction
- Beispiel:
- I Beispiel:
<xsd:complexType name="ArbeitstagTyp">
<xsd:complexContent>
<xsd:restriction base="WochentagTyp">
<xsd:sequence>
<xsd:element name="Montag" type="xsd:string"/>
<xsd:element name="Dienstag" type="xsd:string"/>
<xsd:element name="Mittwoch" type="xsd:string"/>
<xsd:element name="Donnerstag" type="xsd:string"/>
<xsd:element name="Freitag" type="xsd:string"/>
</xsd:sequence>
</xsd:restriction>
</complexContent>
</xsd:complexType>
- Erweiterung von komplexen Datentypen
- complexContent
- extension
- Beispiel
- Beispiel:
<xsd:complexType name="KonferenzteilnehmerTyp">
<xsd:complexContent>
<xsd:extension base="PersonenTyp">
<xsd:sequence>
<xsd:element name="firma" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</complexContent>
</xsd:complexType>
- Zusatzinformation
- Ableitung von Datentypen:
Verhinderung der Definition abgeleiteter Datentypen
- final
- restriction
- extension
- #all
- Beispiel: Erweiterung erlaubt, Einschränkung verboten
- Beispiel: Erweiterung erlaubt, Einschränkung verboten
<xsd:complexType name="PersonenTyp" final="restriction">
<xsd:sequence>
<xsd:element name="anrede" type="xsd:string"/>
<xsd:element name="vorname" type="xsd:string"/>
<xsd:element name="nachname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
- Attribut "finalDefault" im Element "schema" verhindert die Ableitung für alle Typen
- Abgeleitete Typen in Dokumenten-Instanzen
- Beispiel
- Im Schema:
<xsd:element name="person" type="PersonenTyp"/>
In der Instanz:
<person xsi:type="KonferenzteilnehmerTyp">
<anrede>Herr</anrede>
<vorname>Rudolf</vorname>
<nachname>Meyer</nachname>
<firma>Lufthansa</firma>
</person>
- Zusatzinformation
- Abgeleitete Typen in Dokumenten-Instanzen:
Verhinderung dieses Mechanismus im Schema
- block
- <xsd:complexType name="PersonenTyp" block="extension">
<xsd:sequence>
<xsd:element name="anrede" type="xsd:string"/>
<xsd:element name="vorname" type="xsd:string"/>
<xsd:element name="nachname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
- Attribut "blockDefault" im Element "schema" verhindert die
Verwendung von abgeleiteten Typen in der Instanz für alle Typen.
-
Grundeigenschaften von Datentypen
- Ein Datentyp ist ein 3-Tupel
- Wertebereich ("value space")
- Die grundsätzlich erlaubten Werte
- Lexikalische Repräsentation ("lexical space")
- die Menge der gültigen Literale
- Darstellungen der erlaubten Werte (z.B. 135000 oder 135.000,00 oder 13,5E4 für
dasselbe Element der Wertebereichs
- Für jedes Element des Wertebereichs existiert mindestens 1 Element des lexikalischen
Bereichs. (U.a. für den Datentyp "String" sind Wertebereich und lexikalischer Bereich
gleich.)
- "Facets"
- "Fundamental Facets"
- Test auf Gleichheit
- Für zwei Werte a und b eines Wertebereichs gilt
immer entweder a=b oder a<>b
- Existenz einer Ordnungsrelation
- false, partial, total
- Bounded
- Existenz von Schranken
- Kardinalität
- "endlich" oder "abzählbar unendlich"
- Numerisch
- "wahr" oder "falsch"
- "Constraining Facets"
- length, minLength, maxLength
- Länge von String-ähnlichen Daten
- pattern
- Muster, definiert durch reguläre Ausdrücke
- <xsd:simpleType name="USState">
<xsd:restriction base="xsd:string">
<xsd:pattern value="AK|AL|AR"/>
<!-- and so on ... -->
</xsd:restriction>
</xsd:simpleType>
- Einschränkung des duration-Datentyps:
<xsd:simpleType name="myduration">
<xsd:restriction base="xsd:duration">
<xsd:pattern value="P\d+D\d+H\d+M\d+S"/>
</xsd:restriction>
</xsd:simpleType>
Beispiel-Wert: P10D2H30M45S (P:period, D:days, H:hours, M:minutes, S:seconds)
- enumeration
- Aufzählungen
- <xsd:simpleType name="USState">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="AK"/>
<xsd:enumeration value="AL"/>
<xsd:enumeration value="AR"/>
<!-- and so on ... -->
</xsd:restriction>
</xsd:simpleType>
- whiteSpace
- Umgang mit Leerzeichen, Zeilenumbrüchen,
etc. (erlaubte Werte: "preserve", "replace",
"collapse")
- minInclusive, minExclusive,
maxInclusive, minInclusive
- Obere und untere Schranken
- totalDigits, fractionDigits
- Anzahl Stellen bzw. der Nachkomma-Stellen
von Zahlen
- <xsd:simpleType name='amount'>
<xsd:restriction base='xsd:decimal'>
<xsd:totalDigits value='8'/>
<xsd:fractionDigits value='2' fixed='true'/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name='celsiusBodyTemp'>
<xsd:restriction base='xsd:decimal'>
<xsda:totalDigits value='4'/>
<xsd:fractionDigits value='1'/>
<xsd:minInclusive value='36.4'/>
<xsd:maxInclusive value='40.5'/>
</xsd:restriction>
</xsd:simpleType>
-
Definitionen
-
Global
- Referenzierung über einen Namen
-
Lokal
- Z.B. innerhalb von Deklarationen ("Anonymous Type Definitions")
-
Deklarationen
-
Global
- Auch für Attribute
-
Lokal
- Auch für Elemente
- Innerhalb von Deklarationen und innerhalb von Typ-Definitionen
-
Spezielle Konzepte
-
Attributgruppen
- <xsd:element name="chapter">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="title"/>
<xsd:element ref="section" minOccurs="1"
maxOccurs="unbounded">
</xsd:sequence>
<xsd:attributeGroup ref="RevisionAtts">
</xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="RevisionAtts">
<xsd:attribute name="chg" type="chgType"/>
<xsd:attribute name="revdate" type="dateType"/>
<xsd:attribute name="key" type="xsd:string"/>
</xsd:attributeGroup>
-
Identity Constraints
-
Element "unique"
- Inhaltsmodell: (selector, field+)
- <xsd:unique name="eindeutigePerson">
<xsd:selector xpath="veranstaltung/teilnehmer"/>
<xsd:field xpath="vorname"/>
<xsd:field xpath="nachname"/>
<xsd:field xpath="firma"/>
</xsd:unique>
- Unterschiede zu DTDs
- Eindeutigkeit gilt nur für den spezifizierten Bereich
- Eindeutigkeit kann für beliebige Element-Inhalte und Attribut-Werte
verlangt werden
- Eindeutigkeit kann sich auf Kombinationen von Inhalten beziehen
-
Elemente "key", "keyref"
- Dient dazu, die Gleichheit von Kombinationen von Inhalten zu gewährleisten:
(key tritt innerhalb von Elementdeklarationen auf)
- <xsd:key name="PersonenSchlüssel">
<xsd:selector xpath="veranstaltung/teilnehmer"/>
<xsd:field xpath="vorname"/>
<xsd:field xpath="nachname"/>
<xsd:field xpath="firma"/>
</xsd:key>
<xsd:element name="Werbung" type="WerbungTyp"/>
<xsd:keyref name="teilnehmerRef"
refer="PersonenSchlüssel">
<xsd:selector xpath="InfoEmpfänger"/>
<xsd:field xpath="vorname"/>
<xsd:field xpath="nachname"/>
<xsd:field xpath="firma"/>
</xsd:keyref>
</xsd:element>
- Datentypen "ID", "IDREF"
-
Kommentare
- Kommentare sind praktisch überall als erstes Kindelement erlaubt
- Automatisch generierte Dokumentation eines Schemas möglich
-
annotation
- documentation
- app-info
- Beliebiges Inhaltsmodell für "documentation" und "app-info"
- Beispiel
- <annotation>
<documentation xml:lang="DE">
<myns:benutzer>Das Element <efflist> enthält die
Effectivity-Konfigurierungsdaten.</myns:benutzer>
<myns:entwickler>Die Efflist muss beim Aufruf des
Editors übergeben werden.</myns:entwickler></documentation>
<app-info>/customer/variant/ac/msn</app-info>
</annotation>
-
Gültigkeit
- Ein Schema stellt ebenfalls ein XML-Dokument dar. Seine Gültigkeit kann daher auch
bezüglich einer DTD oder eines Schemas überprüft werden
- Gültigkeit eines XML-Dokuments gilt bezüglich einer bestimmten DTD oder bezüglich eines
bestimmten Schemas
- Unterschied relevant: Schema bietet grundsätzlich stärkere Steuerungs-Möglichkeiten
-
Bezüglich Schema kann man unterscheiden zwischen
- Content Model Validity (korrekte Strukturen)
- Datatype Validity
-
XML Schema und Namensräume
-
Namensraum für Elemente und Attribute zur Beschreibung eines XML Schemas
- I Präfix: xsd
I URI: http://www.w3.org/2001/XMLSchema
-
Namensraum für solche Elemente und Attribute aus der Schema-Definition, die in Dokument-
Instanzen verwendet werden dürfen
- I Präfix: xsi
I URI: http://www.w3.org/2001/XMLSchema-instance
-
Ziel-Namensraum ("target namespace") für Dokument-Instanzen
- I Präfix: wird in der Instanz vergeben
I URI: wird im Schema festgelegt
-
Haupt-Bestandteile eines Schemas
- Bild
-
Design-Strategien
-
Salami Slice
- Fokus: Globale Element-Deklarationen
-
Beispiel
- <xsd:schema ...
<xsd:element name="manual">
<xsd:complexType>
<xsd:sequence
<xsd:element ref="title"/>
<xsd:element ref="chapter maxOccurs="unbounded">
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="chapter">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="title"/>
<xsd:element ref="section" maxOccurs="unbounded">
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
-
Eigenschaften
- Wie DTD
- Alle Elemente wiederverwendbar
- Keine lokal unterschiedlichen Definitionen von Element-Inhalten
- Wert von elementFormDefault ist ohne Bedeutung
- Element-Substitution möglich
-
Entwurfsziele XML
- im Internet auf einfache Weise nutzen lassen
- ein breites Spektrum von Anwendungen unterstützen
- zu SGML kompatibel
- einfach sein, Programme zu schreiben, die XML-Dokumente verarbeiten
- Zahl optionaler Merkmale in XML soll minimal sein
- XML-Dokumente sollten für Menschen lesbar
- Entwurf von XML soll formal und präzise sein
- XML-Dokumente sollen leicht zu erstellen sein
- Knappheit von XML-Markup ist von minimaler Bedeutung
-
Motivation
- HTML
- SGML
-
Wohlgeformtheit
-
Bedingung 1:
- Ein XML-Dokument enthält ein oder mehrere Elemente
- Es gibt exakt ein Wurzel-Element.
- Alle anderen Elemente haben Start-Tag und Ende-Tag im Inhalt desselben (Eltern-) Elements, sind also korrekt verschachtelt
-
Bedingung 2
- Für Ende-Tag gibt es passendes Start-Tag
- Attribut-Namen dürfen nur einmal pro Start-Tag oder Empty-Element auftauchen
- Zeichen gehören zum erlaubten Zeichensatz
-
Publikation von XML Dokumenten
- CSS
-
XPath
- Adressierung von Teilen eines XML-Baumes
- XQuery
- XSLT
-
Verarbeitung von XML Dokumenten
-
XSLT
-
XSL
- die FO Repräsentation
- die Vereinigung aus XSL (FO) und XSLT
- manchmal auch XSLT
- Transformationssprache zur Überführung von einer XMLDokumentart
-
XSLT-FO
- Layout-Beschreibungssprache
- FO (Formatting Objects)
-
SAX
-
Eigenschaften
- Ereignis-basiert, sequentielle Abarbeitung
- geringer Speicherbedarf, geeignet für große Dokumente
- kein Zugriff auf den gesamten Baum
- keine Schreibmöglichkeit
- schnell
- Push-Ansatz (Kontrolle bei Parser)
-
Methoden
- endDocument()
- endElement()
- startDocument()
- startElement()
- ignorableWhitespace()
- characters()
- skippedEntity()
-
DOM
-
Eigenschaften
- hoher Speicherbedarf, ungeeignet für große Dokumente
- Baumbasiert
- voller Zugriff aufs Dokument
- Schreibmöglichkeit
- keine inkrementelle Abarbeitung möglich
-
Methoden
- getElementsByTagName()
- createElement()
- getChildNodes()
- getFirstChild()
- getParentNode()
- hasChildNodes()
- hasAttributes()
- insertBefore()
-
StAX
-
Eigenschaften
- Ereignis-basiert
- Pull-Ansatz (Kontrolle bei aufr. Anw.)
- Streaming und Cursor API vs Iterator API
- geringer Speicherbedarf
- kein Zugriff auf den ganzen Baum
- frühzeitiger Abbruch des Parsens möglich
- mehrere Threads
-
JDOM
-
Eigenschaften
- keine Factories, Java-orientiert
- Baumbasiert
- Erzeugung von SAX Events möglich
- relativ effizient
-
Bestandteile
-
XML-Deklaration
- Zeichenfolge zur Kennzeichnung der XML-Deklaration "<?xml"
- Versions Information
- Encoding Deklaration
-
Standalone Dokument Deklaration
-
standalone="yes"
- Es wird nur die interne DTD-Teilmenge abgearbeitet. Die externe DTD-Teilmenge wird ignoriert,
unabhängig davon, ob eine externe DTD-Teilmenge referenziert wird oder nicht.
-
standalone="no"
- Die Voreinstellung: Die externe DTD-Teilmenge wird abgearbeitet, ebenso wie die interne.
-
Dokument-Typ Deklaration
-
Interne und externe DTD-Teilmenge
- Mit der internen Teilmenge kann man externe Definitionen überschreiben
- Interne DTD-Teilmenge wird typischerweise für Dokument-spezifische Deklarationen
verwendet
- Insbesondere spezifische Entity-Deklarationen
-
Kommentare (optional)
- Schlüsselwort auch am Ende (Konsistenz mit SGML)
- Zeilenumbrüche innerhalb der Kommentar-Deklaration erlaubt
- Keine Doppel-Bindestriche innerhalb des Kommentar-Textes erlaubt
- Keine Einbettung in andere Deklarationen, z.B. Element-Deklarationen,
erlaubt
- Ansonsten an beliebigen Positionen außerhalb anderen Markups
-
Processing Instructions (optional)
- Eine Verarbeitungs-Anweisung ist eine Information, die für eine
bestimmte XML-Applikation gilt und von dieser ausgeführt wird.
- Verarbeitungs-Anweisungen dürfen an fast beliebiger Stelle im Inhalt von
Elementen und im Prolog auftreten.
-
CDATA Sections (optional)
- Bereiche können als "CDATA Section" deklariert werden. Darin
enthaltene Sonderzeichen werden dann nicht als Markup interpretiert.
-
keine DTD vorhanden
- I Alle Attribute vom Typ CDATA (Annahme des Prozessors)
- I Alle Attribute optional (IMPLIED) (Annahme des Prozessors)
- I Keine Default-Werte
- Keine Entitities (außer den vordefinierten Zeichen-Entitities “<”, “>”, “&”, “'” und
“"”)
-
Gültigkeit
- wohlgeformt
- Verweis auf eine Grammatik
- durch die Grammatik beschriebene Format einhält