Neben den Document Type Definitions ist in jüngerer Zeit ein alternativer Ansatz in den Blickpunkt des Interesses gerückt: die XML-Schemasprachen. XML Schema (im Jahre 2001 als Empfehlung des W3C veröffentlicht) ist dabei die heutzutage am meisten verwendete Schemasprache für XML. Sie wurde ersonnen, um die Einschränkungen der DTDs, die in ihrer Dokumentenorientierung wurzeln, zu umgehen und insbesondere die Möglichkeit zur Datentypisierung zu realisieren.
Für datenintensive Strukturen unterliegt der DTD-Mechanismus folgenden Einschränkungen:
EMPTY
),
ANY
, das
gemischte Inhaltsmodell
sowie
namentlich benannte Kindelemente
.
CDATA
,
ID
,
IDREF
,
IDREFS
,
ENTITY
,
ENTITIES
,
NMTOKEN
,
NMTOKENS
(vgl.
Diskussion im letzten Kapitel
). Strenggenommen handelt es sich aber bei all
diesen Datentypen um Zeichenketten, die
lediglich keine Markup-Symbole enthalten dürfen
(
In XML-Spezifikation nachlesen
).
+
,
?
und
*
ermöglichen die Steuerung der Anzahl von
Kindelementen. Allerdings ist dies sehr
fehlerbehaftet und nur sehr schwer lesbar.
ID/IDREF
-Mechanismus ist Einschränkungen unterworfen.
Verknüpfen sind nur innerhalb eines Dokumentes
möglich und es gibt keine Unterstützung dafür,
Elemente sowohl hinsichtlich der Identifizierung
durch IDs als auch in ihrer Eigenschaft als
Verweisziel zu differenzieren (vgl. das
Beispiel der Projektverwaltung im vorigen
Kapitel
).
Document Definition Markup Language
(DDML)
,
XML Data
,
Datatypes for DTDs (DT4DTD)
und
Schema for Object-Oriented XML (SOX)
die Schemasprache des W3C,
XML Schema
, entstanden.
XSD
abgekürzt) ist von allen XML-Schemasprachen
der meist genutzte. Damit kommt ihm die
größte praktische Bedeutung zu.
old styleDTD-Grammatik definiert, sondern stattdessen durch ein ausdrucksmächtigeres Schema.
string
,
integer
,
date
). Zusätzlich dazu können aber auch eigene
Datentypen definiert werden.
http://www.w3.org/2001/XMLSchema
(der Namensraum für die
Sprache XML Schema). Dieser Namensraum wird sehr oft an das Präfix
xsd
gebunden.
http://www.w3.org/2001/XMLSchema-instance
. In diesem Namensraum, der oft an das
Präfix
xsi
gebunden wird, befinden sich Elemente und
Attribute aus XML-Schema, die in sogenannten
Instanzdokumenten
(dies ist ein anderer Name für
XML-Dokumente, die den Regeln des Schemas
genügen) verwendet werden können.
Sprache des XML-Dokuments). Dieser Namensraum ist nicht vorgegeben und frei wählbar.
Ein XML-Dokument heißt gültig hinsichtlich eines Schemas (schema valid) , wenn es über ein Schema verfügt, und konform zu diesem aufgebaut ist.
schemaLocation
bzw.
noNamespaceSchemaLocation
(für den Fall, daß ein Schema ohne Target
Namespace vorliegt) angegeben. Eines dieser
Attribute muß im Wurzelelement des Dokuments
angegeben werden.
<?xml version="1.0" encoding="UTF-8"?> <ProjektVerwaltung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.barbara-zengler.de/vorlesung/projektverwaltung.xsd"/>
xsi
gebunden. Damit können Elemente und
Attribute aus Schema in das Dokument
eingebunden werden.
schemaLocation
verknüpft durch Angabe der URI des Schemas
das Dokument mit dem Schema.
schemaLocation
oder
noNamespaceSchemaLocation
im Wurzelelement eines Dokuments angegeben
werden müssen, ist die Angabe des
Schema-Instanzen-Namensraums für jedes
Dokument zwingend!
string
) oder der Zugriff auf die
Teilkomponenten ist nicht möglich
(Beispiel:
date
- kein Zugriff auf Jahr, Monat,
Tag).
8 10.5 12
.
float
).
)
| Typname | Beispiel | Bemerkung |
|---|---|---|
time
|
13:20:00-05:00, 13:20:00.000
|
Uhrzeit, die täglich wiederkehrt, ausgedrückt im Format gemäß ISO 8601 |
date
|
2007-11-13
|
Datumsformat: CCYY-MM-DD, gemäß ISO 8601 |
gYear
|
1999, 2001, 2004, 2007
|
Darstellung von Jahren des gregorianischen Kalenders gemäß ISO 8601 |
gYearMonth
|
2007-11
|
Darstellung eines Monats eines bestimmten Jahres des gregorianischen Kalenders gemäß ISO 8601 |
gDay
|
----05, ----31
|
Darstellung eines wiederkehrenden Tages eines Monats gemäß ISO 8601 |
gMonthDay
|
--31-12, --01-01
|
Darstellung eines wiederkehrenden
gregorianischen Datums, gebildet aus
Tag Monat und Monat im Format
--MM-DD
, gemäß ISO 8601
|
gMonth
|
--03, --12
|
Monatsformat:
--MM--
gemäß ISO 8601
|
dateTime
|
2007-11-13T08:09:46.000+01:00
|
Zeitpunkt, ausgedrückt durch Datum und Uhrzeit; beide gemäß ISO 8601 codiert. |
duration
|
P1Y2M3DT10H30M12.3S
|
Nach Größe (Signifikanz) geordnete Koordinate im sechs-dimensionalen Raum aus Jahr, Monat, Tag, Stunde, Minute und Sekunde. Formatdefinition laut ISO 8601 |
| Typname | Beispiel | Bemerkung |
|---|---|---|
string
|
Hello

 World
(Carriage Return, Line Feed)
|
Jedes beliebige Unicode Symbol gemäß XML-Grammatikregel (Syntaxproduktion) 2 . |
normalizedString
|
HelloWorld
|
Jedes beliebige Unicode Symbol außer
Zeilenvorschub (
#xA
), Wagenrücklauf (
#xD
) und Tabulatoren (
#x9
).
normalizedString
ist eine einschränkende
Spezialisierung des Typs
string
.
|
token
|
Hello World
|
Jeder
normalizedString
, unter Weglassung führender,
abschließender und mehrfacher
Leerzeichen (
#x20
), sowie Zeilenvorschüben und
Tabulatoren.
token
ist eine einschränkende
Spezialisierung des Typs
normalizedString
.
|
language
|
en-GB, en, de-de
|
Sprachcodierung gemäß IETF RFC 1766
und XML Recommendation language
identification. Die
Identifikationsnamen werden durch
ISO 639 sowie ISO 3166 definiert.
language
ist eine einschränkende
Spezialisierung des Typs
token
.
|
Name
|
aName, _helloWorld,
:notAGoodIdea
|
Ein XML Name gemäß
Syntaxproduktion 5
.
Name
ist eine einschränkende
Spezialisierung des Typs
token
.
|
QName
|
xsd:element, element
|
Durch Namensraumpräfix qualifizierter Name gemäß Produktion 8 der XML Namespace Recommendation . |
NCName
|
aName, _anotherName, X
|
Name, der keinen Doppelpunkt enthält ( non colonized name ), gemäß Produktion 4 der XML Namespace Recommendation |
ID
|
test, XYZ
|
XSD-Darstellung des DTD-Typen
ID
. Zugelassen sind alle Ausprägungen
der Namespaceproduktion 4 (NCName).
ID
ist eine einschränkende
Spezialisierung des Typs
NCName
.
|
IDREF
|
test, XYZ
|
XSD-Darstellung des DTD-Typen
IDREF
. Zugelassen sind alle Ausprägungen
der Namespaceproduktion 4 (NCName).
IDREF
ist eine einschränkende
Spezialisierung des Typs
NCName
.
|
IDREFS
|
test1 test2 test4, test3 test5
|
XSD-Darstellung des DTD-Typen
IDREFS
. Zugelassen sind Listen aus white
space separierten Ausprägungen der
Namespaceproduktion 4 (NCName).
IDREFS
ist eine nichtleere Aufzählung von
IDREF
-Ausprägungen.
|
ENTITY
|
|
XSD-Darstellung des DTD-Typen
ENTITY
. Zugelassen sind alle Satzformen,
die der Produktion NCName der
XML-Namensräume entsprechen und als
ungeparste Entität definiert sind.
ENTITY
ist eine einschränkende
Spezialisierung des Typs
NCName
.
|
ENTITIES
|
|
XSD-Darstellung des DTD-Typen
ENTITIES
. Zugelassen sind Listen aus white
space separierten Ausprägungen des
Typs
ENTITY
.
ENTITIES
ist eine nichtleere Aufzählung von
ENTITY
-Ausprägungen
|
NMTOKEN
|
US, Deutschland
|
XSD-Darstellung des DTD-Typen
NMTOKEN
. Ausprägungen dieses Typs müssen
konform zur Produktion 7 der
XML-Spezifikation sein.
NMTOKEN
ist eine einschränkende
Spezialisierung des Typs
token
.
|
NMTOKENS
|
US UK Aus, Ger
|
XSD-Darstellung des DTD-Typen
NMTOKENS
. Zugelassen sind Listen aus white
space separierten Ausprägungen des
Typs NMTOKEN. NMTOKENS ist eine
nichtleere Aufzählung von
NMTOKEN-Ausprägungen
|
| Typname | Beispiel | Bemerkung |
|---|---|---|
decimal
|
-1.23, 12678967.543233,
+100000.00, 210
|
Wertebereich:
i*10
-n
, mit
i
,
n
aus
integer, n>=0
Ein Prozessor muß mindestens 18 Dezimalstellen unterstützen. |
integer
|
...-1, 0, 1, ...
|
Wertebereich: entspricht der
mathematischen Menge der ganzen
Zahlen (Z)
integer
ist eine einschränkende
Spezialisierung des Typs
decimal
|
nonPositiveInteger
|
... -2, -1, 0
|
Wertebereich:
{..., -2, -1, 0}
die unendliche Menge der negativen
Zahlen, und die Null
nonPositiveInteger
ist eine einschränkende
Spezialisierung des Typs
integer
|
negativeInteger
|
... -2, -1
|
Wertebereich:
{..., -2, -1}
, die unendliche Menge der negativen
Zahlen
negativeInteger
ist eine einschränkende
Spezialisierung des Typs
nonPositiveInteger
|
long
|
-9223372036854775808, ... -1, 0,
1, ... 9223372036854775807
|
Wertebereich:
2
63
<= long <= 2
63
-1
long
ist eine einschränkende
Spezialisierung des Typs
integer
|
int
|
-2147483648, ... -1, 0, 1, ...
2147483647
|
Wertebereich:
-2
31
<= int <= 2
31
-1
int
ist eine einschränkende
Spezialisierung des Typs
long
|
short
|
-32768, ... -1, 0, 1, ... 32767
|
Wertebereich:
-2
15
<= short <= 2
15
-1
short
ist eine einschränkende
Spezialisierung des Typs
int
|
byte
|
-128, ...-1, 0, 1, ... 127
|
Wertebereich:
-2
7
<= byte <= 2
7
-1
byte
ist eine einschränkende
Spezialisierung des Typs
short
|
nonNegativeInteger
|
0, 1, 2, ...
|
Wertebereich:
0 <= nonNegativeInteger
nonNegativeInteger
ist eine einschränkende
Spezialisierung des Typs
integer
|
positiveInteger
|
1, 2, ...
|
Wertebereich: entspricht der
mathematischen Menge der natürlichen
Zahlen (N)
positiveInteger
ist eine einschränkende
Spezialisierung des Typs
nonNegativeInteger
|
unsignedLong
|
0, 1, ... 18446744073709551615
|
Wertebereich:
0 <= unsignedLong <= 2
64
-1
unsignedLong
ist eine einschränkende
Spezialisierung des Typs
nonNegativeInteger
|
unsignedInt
|
0, 1, ...4294967295
|
Wertebereich:
0 <= unsignedInt <= 2
32
-1
unsignedInt
ist eine einschränkende
Spezialisierung des Typs
unsignedLong
|
unsignedShort
|
0, 1, ... 65535
|
Wertebereich:
0 <= unsignedShort <= 2
16
-1
unsignedShort
ist eine einschränkende
Spezialisierung des Typs
unsignedInt
|
unsignedByte
|
0, 1, ... 255
|
Wertebereich:
0 <= unsignedByte <= 2
8
-1
unsignedByte
ist eine einschränkende
Spezialisierung des Typs
unsignedShort
|
| Typname | Beispiel | Bemerkung |
|---|---|---|
boolean
|
true, false, 1, 0
|
Unterstützung der klassischen zweiwertigen Logik |
base64Binary
|
SGVsbG8gd29ybGQhCg==
|
Base64-Darstellung eines beliebigen Binär-interpretierten Inhaltes gemäß IETF RFC 2045 |
hexBinary
|
0FB7
|
Hexadezimale Darstellung beliebiger Binär-interpretierter Inhalte |
float
|
-1E4, 1267.43233E12, 12.78e-2,
12, INF
|
32-Bit-Zahl mit einfacher
Genauigkeit gemäß IEEE 754-1985.
Wertebereich:
m * 2
e
, wobei
m
und
e
integer
-Elemente mit
m <= 224, und -149 <= e
< 104
sind.
|
double
|
-1E4, 1267.43233E12, 12.78e-2,
12, INF
|
64-Bit-Zahl mit doppelter
Genauigkeit gemäß IEEE 754-1985.
Wertebereich:
m * 2
e
, wobei
m
und
e
integer
-Elemente mit
m <= 253, und -1075 <= e
< 970
sind.
|
anyURI
|
http://www.barbara-zengler.de/
|
Jede gemäß IETF RFC 2396 bzw. IETF RFC 2732 gültige URI |
QName
|
xsd:element, element
|
Durch Namensraumpräfix qualifizierter Name gemäß Produktion 8 der XML Namespace Recommendation . |
NOTATION
|
|
XSD-Darstellung des DTD-Typen
NOTATION
. Zur Verwendung dieses Typs in
einem Schema muß eine Ableitung von
NOTATION
durch den Anwender definiert werden.
|
schema
schema
.
schema
-Elements:
targetNamespace
als URI.
elementFormDefault
: kann den Namensraumzwang für Elemente
des Instanzdokuments lockern.
qualified
gibt an, daß sich die Elemente des
Dokuments immer im Zielnamensraum
befinden müssen,
unqualified
hingegen erlaubt das Vorkommen von
Elementen auch außerhalb dieses
Namensraums. Vorgabewert:
unqualified
.
attributeFormDefault
: analog für Attribute.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
element
<xsd:element
name="elementName"
type="typeName"/>Des weiteren können folgende Eigenschaften für Elemente mit Hilfe von Attributen angegeben werden:
true
gesetzt, darf ein solches Element nicht in
einem XML-Dokument auftreten. Es kann
ausschließlich zur Strukturierung des
Schemaentwurfs eingesetzt werden und als
Basis von Spezialisierungen dienen.
Vorgabewert ist
false
extension
,
restriction
und
substitution
oder der Einzelwert
#all
.
#all
verbietet generell die Ersetzung eines
Elements durch andere.
default
und
fixed
schließen sich gegenseitig aus.
qualified
(Namensraumpräfix muß angegeben werden) und
unqualified
.
nonNegativeInteger
. Das Attribut ist optional, und wird bei
fehlender Angabe mit dem Vorgabewert
1
belegt.
nonNegativeInteger
oder die Zeichenkette
unbounded
zur Kennzeichnung beliebig vieler Auftreten.
Das Attribut ist optional, und wird bei
fehlender Angabe mit dem Vorgabewert
1
belegt.
true
oder
false
, was auch als Vorgabe bei Fehlen dieses
Attributs angenommen wird.
Nachfolgend finden Sie einige beispielhafte Elementdeklarationen für nicht strukturierten (= keine Kindelemente), aber typisierten, Elementinhalt:
<element name="geburtsdatum" type="xsd:date"/> <element name="pi" type="xsd:double" fixed="3.141592653" block="#all"/> <element name="vorname" type="xsd:token" minOccurs="1" maxOccurs="unbounded"/> <element name="artikelNummer" type="xsd:NCName" form="qualified"/> <element
geburtsdatum
definiert ein XML-Element des Typs
date
zur Darstellung eines Datums. Weitere
Festlegungen sind nicht getroffen, daher
wird das Element mit
minOccurs
und
maxOccurs 1
belegt. Damit ist es im Instanzdokument
zwingend anzugeben.
pi
entspricht mit seiner konstanten Belegung (
fixed
-Attribut) der gleichnamigen mathematischen
Konstante. Als Datentyp wurde
double
, eine Gleitkommazahl mit doppelter
Genauigkeit gewählt. Durch die Belegung von
block
mit
#all
wird verhindert, daß eine weitere
Spezialisierung des Elements durch Vererbung
oder Aggregation erfolgt.
vorname
nutzt
token
als Datentyp. Hier werden automatisch
mehrfache, führende und abschließende
Leerzeichen sowie sonstige
Formatierungssymbole entfernt. Der Vorname
kann darüber hinaus beliebig häufig
auftreten --
maxOccurs
ist mit dem Wert
unbounded
belegt. Die minimale Auftrittshäufigkeit
wird mit
1
(
minOccurs
) festgelegt, dies entspricht der
Vorgabebelegung.
artikelNummer
ist als Typ
NCName
ausgewählt. Dies entspricht beliebigen
Zeichenketten, die keinen Doppelpunkt
enthalten. Darüberhinaus ist das Attribut
form
mit dem Wert
qualified
versehen. Dies führt dazu, daß das
Namensraumkürzel für dieses Element zwingend
im Instanzdokument anzugeben ist.
Zur Umsetzung des freien Inhaltsmodells, das
beliebige Inhalte aus den definierten Elementen
und freien Texten zuläßt, wird ebenfalls auf das
Typsystem zurückgegriffen.
Wird das
type
Attribut nicht belegt, so wird gemäß Vorgabe der
Typ
anyType
angenommen. Elemente dieses Typs können
beliebige wohlgeformte Inhalte beherbergen.
Die beiden nachfolgenden Angaben sind daher
äquivalent:
<element name="elementName" type="xsd:anyType"/> <element name="elementName"/>
complexType
- leeres Inhaltsmodell
XSD hat verglichen mit der DTD einen strengeren
Typbegriff. Dies zeigt sich deutlich in der
Existenz des XSD-Elements
complexType
. Dieses Element erlaubt die Bildung von Typen
losgelöst von ihrere Verwendung. Syntaktisch
kann die
complexType
-Definition sowohl innerhalb einer
Elementdefinition, als auch separat erfolgen.
Den einfachsten Anwendungsfall bildet die
eingebettete leere
complexType
-Definition zur Darstellung des leeren
Inhaltsmodells.
Die Syntax hierfür lautet (der XSD-Namensraum
sei an das Präfix
xsd
gebunden):
<xsd:element name="elementName"> <xsd:complexType/> </xsd:element>
In einem Instanzdokument werden für die obige
Festlegung ausschließlich die beiden
Darstellungsformen zum leeren Element (
<elementName/>
bzw.
<elementName></elementName>
) akzeptiert.
complexType
- strukturierter Inhalt - Reihenfolgetypen
sequence
: Sequentielles Auftreten der Elemente
in der angegebenen Reihenfolge.
choice
: Auswahl - entspricht einer
ODER
-Verknüpfung von einzelnen Elementen.
all
: Erlaubt die Angabe der Kindelemente in
beliebiger Reihenfolge.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="ProjektVerwaltung">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Person" maxOccurs="unbounded"/>
<xsd:element ref="Projekt" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Vorname" type="xsd:token" maxOccurs="unbounded"/>
<xsd:element name="Nachname" type="xsd:token"/>
<xsd:element ref="Qualifikationsprofil" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Projekt">
<xsd:complexType/>
</xsd:element>
<xsd:element name="Qualifikationsprofil">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>element
-Elements sind die entsprechenden
Kindelemente in
sequence
-Strukturen eingebettet. Sie müssen
genau in der Reihenfolge ihres
Auftretens im Schema auch im
Instanzdokument wiedergegeben werden.
Projekt
Qualifikationsprofil
ref
-Attributs.
<xsd:element name="Qualifikationsprofil">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element><!ELEMENT Qualifikationsprofil (#PCDATA | Qualifikation | Leistungsstufe)*> <!ELEMENT Qualifikation (#PCDATA)> <!ELEMENT Leistungsstufe (#PCDATA)>
mixed
ausgedrückt.
PersonType
. Dieser Typ wird zur Festlegung des
Inhaltsmodells des Elements
Person
verwendet.
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="PersonType">
<xsd:sequence>
<xsd:element name="Vorname" type="xsd:string" maxOccurs="unbounded"/>
<xsd:element name="Nachname" type="xsd:string"/>
<xsd:element ref="Qualifikationsprofil" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ProjektVerwaltung">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" type="PersonType" maxOccurs="unbounded"/>
<xsd:element ref="Projekt" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Projekt">
<xsd:complexType/>
</xsd:element>
<xsd:element name="Qualifikationsprofil">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>Adresse
, der aus Name, Straße und Ort besteht.
Adressen in D zeichnen sich zusätzlich noch
durch eine Postleitzahl aus. Der
ursprungliche Datentyp Adresse kann demnach
um die Postleitzahl erweitert werden.
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="parentType"> <xsd:sequence> <xsd:element name="elementA" type="xsd:int"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="childType"> <xsd:complexContent> <xsd:restriction base="parentType"> <xsd:sequence> <xsd:element name="elementA" type="xsd:short"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:element name="usage1" type="parentType"/> <xsd:element name="usage2" type="childType"/> </xsd:schema>
childType
und
parentType
.
childType
basiert auf
parentType
und erbt von diesem. Die Vererbung ist
ausgedrückt durch das
base
-Attribut im Element
restriction
, das auf den benannten Elterntypen
verweist.
restriction
-Elementen werden genauso angegeben wie
Inhalte von komplexen Typen: Es werden
Elemente definiert, sowie die Art und Weise
ihres Auftretens (Reihenfolge, Häufigkeit).
elementA
in
childType
schränkt
elementA
in
parentType
ein: der Datentyp
short
(
-2
15
<= short <= 2
15
-1
) ist enger gefaßt als der Datentyp
int
(
-2
31
<= short <= 2
31
-1
).
usage1
und
usage2
zeigen die Verwendung der
anwenderdefinierten Typen.
Es gibt - über die soeben gezeigte Möglichkeit der EInschränkung auf Typisierung hinaus -- weiter Möglichkeiten der Einschränkung, die Sie in der folgenden Tabelle zusammengestellt sehen.
| Basistyp | Restriktion | Bemerkung |
|---|---|---|
| default | Zusätzliche Belegung eines Elements mit einem Vorgabewert | |
| fixed | Beschränkung eines zunächst frei wählbaren Elements auf konstanten Inhalt | |
| type |
Definition eines Typen für ein
zunächst untypisiertes Element.
(Auch hierbei handelt es sich um
eine einschränkende Redefinition, da
allen Elementen ohne Typdefinition
standardmäßig der Typ
anyType
zugeordnet wird.)
|
|
minOccurs=n
1
, maxOccurs=m
1
|
minOccurs=n
2
, maxOccurs=m
2
|
Restriktion der Auftrittshäufigkeit
auf eine geringere Anzahl.Daher
gilt:
n
1
<= n
2
und
m
1
><= m
2
|
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="parentElement">
<xsd:sequence>
<xsd:element name="elementA"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="childElement">
<xsd:complexContent>
<xsd:extension base="parentElement">
<xsd:sequence>
<xsd:element name="elementB"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Test">
<xsd:complexType>
<xsd:element name="Elternelement" type="parentElement">
</xsd:element>
<xsd:element name="Kindelement" type="childElement">
</xsd:element>
</xsd:complexType>
</xsd:element>
</xsd:schema>
parentElement
und
childElement
genannt.
parentElement
genau ein Element
elementA
beinhaltet, wird
childElement
dahingehend erweitert, daß es zusätzlich
dazu auch noch genau ein Element
elementB
beinhalten kann.
Dieses Schema definiert das Element Vorname als einfachen Typ (string).
Hier hingegen wird der Datentyp
string
erweitert. Das Element enthält immer noch einen
einfachen Datentyp (
simpleContent
), darf aber nun ein Attribut (
rufname
) enthalten.
simpleType
simpleType
.
integer
verlangt, so kann der Anwender auch
Ausprägungen der Subtypen
int
,
short
oder
byte
angeben, ohne die Gültigkeit des
XML-Dokuments zu beeinträchtigen.)
NMTOKENS
,
IDREFS
und
ENTITIES
besteht die Möglichkeit, eigene Listentypen
zu definieren, die sich aus atomaren
Datentypen zusammensetzen.
ListeDerWochentage
:
<xsd:simpleType name="dieWochentage">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Montag"/>
<xsd:enumeration value="Dienstag"/>
<xsd:enumeration value="Mittwoch"/>
<xsd:enumeration value="Donnerstag"/>
<xsd:enumeration value="Freitag"/>
<xsd:enumeration value="Samstag"/>
<xsd:enumeration value="Sonntag"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ListeDerWochentage">
<xsd:list itemType="dieWochentage"/>
</xsd:simpleType>dieWochentage
die Werte des Typs auf eine Menge ganz
spezieller Werte begrenzt.
termin
, der eine Vereinigung aus dem vorgegebenen
Primitivtypen
date
und einer Liste
ListeDerWochentage
darstellt.
<xsd:element name="Termin" type="termin"/>
<xsd:element name="Wochentage" type="ListeDerWochentage"></xsd:element>
<xsd:simpleType name="termin">
<xsd:union memberTypes="xsd:date ListeDerWochentage"/>
</xsd:simpleType>integer
wird derart limitiert, daß lediglich die
Werte zwischen
10000
und
99999
als gültige Wertbelegungen zulässig sind.
<xsd:simpleType name="myInteger">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="10000"/>
<xsd:maxInclusive value="99999"/>
</xsd:restriction>
</xsd:simpleType>XML Schema definiert 12 voneinander unabhängige sogenannte Fassetten , die zur Begrenzung der erlaubten Werte vom Primitivtypen eingesetzt werden können. Nicht alle Fassetten können auf alle Typen angewendet werden. Eine Übersicht zur Anwendbarkeit findet sich in Anhang B von XML Schema Part 0: Primer .
<xs:simpleType name="Postleitzahl"> <xs:restriction base="xs:string"> <xs:length value="5"/> </xs:restriction> </xs:simpleType>
<simpleType name='nichtleereZeichenkette'>
<restriction base='string'>
<minLength value='1'/>
</restriction>
</simpleType>
<xs:simpleType name="VornamenList"> <xs:list itemType="xs:token"/> </xs:simpleType> <xs:simpleType name="VornamenRestrictedList"> <xs:restriction base="VornamenList"> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType>
<simpleType name='form-input'>
<restriction base='string'>
<maxLength value='50'/>
</restriction>
</simpleType>
<xs:simpleType name="VornamenList"> <xs:list itemType="xs:token"/> </xs:simpleType> <xs:simpleType name="VornamenRestrictedList"> <xs:restriction base="VornamenList"> <xs:minLength value="1"/> <xs:maxLength value="3"/> </xs:restriction> </xs:simpleType>
pattern
legt dem Wertebereich eines atomaren
Datenyps definierte Bedingungen auf. Die
Werte werden auf Zeichen begrenzt, die einem
bestimmten Muster entsprechen. Der Wert des
Musters muß ein
regulärer Ausdruck
sein (siehe nächste Seite).
<simpleType name='feiertage'>
<annotation>
<documentation>Feiertage</documentation>
</annotation>
<restriction base='gMonthDay'>
<enumeration value='--01-01'>
<annotation>
<documentation>Neujahr</documentation>
</annotation>
</enumeration>
<enumeration value='--08-20'>
<annotation>
<documentation>Friedensfest</documentation>
</annotation>
</enumeration>
<enumeration value='--12-24'>
<annotation>
<documentation>Heiligabend</documentation>
</annotation>
</enumeration>
</restriction>
</simpleType>
#x9
), Zeilenvorschub (
#xA
) und Wagenrücklauf (
#xD
) werden durch Leerzeichen (
#x20
) ersetzt.
maxInclusive
kann die obere (inklusive) Grenze für den
Wertebereich eines Datentyps angegeben
werden.
<xs:simpleType name="ZahlenBisNeunundneunzig"> <xs:restriction base="xs:decimal"> <xs:maxInclusive value="99"/> </xs:restriction> </xs:simpleType>
maxInclusive
, mit dem Unterschied, daß der angegebene
Wert nicht mehr zum Wertebereich zählt.
<xs:simpleType name="ZahlenUnterHundert"> <xs:restriction base="xs:decimal"> <xs:maxExclusive value="100"/> </xs:restriction> </xs:simpleType>
<simpleType name='HundertUndMehr'>
<restriction base='integer'>
<minInclusive value='100'/>
</restriction>
</simpleType>
minInclusive
, mit dem Unterschied, daß der angegebene
Wert nicht mehr zum Wertebereich zählt.
<simpleType name='MehrAlsNeunundneunzig'>
<restriction base='integer'>
<minExclusive value='99'/>
</restriction>
</simpleType>
<xs:simpleType name="myNumber"> <xs:restriction base="xs:decimal"> <xs:totalDigits value="7"/> </xs:restriction> </xs:simpleType>
<simpleType name='celsiusBodyTemp'>
<restriction base='decimal'>
<totalDigits value='4'/>
<fractionDigits value='1'/>
<minInclusive value='36.4'/>
<maxInclusive value='40.5'/>
</restriction>
</simpleType>
Ein Regulärer Ausdruck ist eine Syntax, die eine Menge von Zeichenketten beschreibt.
Quantoren steuern die Auftrittshäufigkeit von sog. atomaren Einheiten (Zeichen, Zeichenklasse, Regulärer Ausdruck).
| Quantifizierte atomare Einheit | Bedeutung |
|---|---|
S
|
Genau S: Alle Zeichenketten, die S
genau entsprechen.
|
S?
|
Optional: Die leere Zeichenkette oder alle Zeichenketten, die S
genau entsprechen.
|
S*
|
Beliebig: Alle Reihungen von S
; insbesondere auch auch die leere
Zeichenkette.
|
S+
|
Mindestens einmal: Alle Reihungen von S
, die
S
mindestens einmal enthalten.
|
S{n,m}
|
: Alle Zeichenketten, die aus mindestens n
, jedoch höchstens
m
Auftreten von
S
bestehen.
|
S{n}
|
Genau
: Alle Zeichenketten, die aus genau
n
Auftreten von
S
bestehen.
|
S{n,}
|
Mindestens
: Alle Zeichenketten, die aus
mindestens
n
Auftreten von
S
bestehen.
|
S{0,m}
|
Höchstens
: Alle Zeichenketten, die aus
höchstens
m
Auftreten von
S
bestehen.
|
S{0,0}
|
Die leere Zeichenkette |
| Ausdruck | entsprechende Zeichenketten |
|---|---|
a*x
|
x, ax, aax, aaax ....
|
a?x
|
ax, x
|
a+x
|
ax, aax, aaax ...
|
(a|b)+x
|
ax, bx, aax, abx, bax, bbx,
aaax, aabx, abax, abbx, baax,
babx, bbax, bbbx, aaaax ....
|
[abcde]x
|
ax, bx, cx, dx, ex
|
[a-e]x
|
ax, bx, cx, dx, ex
|
[-ae]x
|
-x, ax, ex
|
[ae-]x
|
ax, ex, -x
|
[^0-9]x
|
Jedes Zeichen, das keine Ziffer
darstellt, gefolgt von dem
Buchstaben x.
|
.x
|
Jedes Zeichen gefolgt von dem
Buchstaben x.
|
.*abc.*
|
1x2abc, abc1x2, z3456abchooray
....
|
ab{2}x
|
abbx
|
ab{2,4}x
|
abbx, abbbx, abbbbx
|
ab{2,}x
|
abbx, abbbx, abbbbx ....
|
(ab){2}x
|
ababx
|
Ein Fluchtsymbol (engl.: character escape ) in regulären Ausdrücken dient der Darstellung von Zeichen, die anderweitig nur schwer oder unmöglich in einen regulären Ausdruck schreiben kann (weil sie mit Bedeutung belegt sind oder praktisch schwer zu schreiben sind wie etwa Zeilenumbrüche, Zeilenvorschub oder Tabulatoren). Diese sind in Teilen aus den Programmiersprachen bekannt.
| Fluchtsymbol | dadurch ausgedrücktes Zeichen |
|---|---|
\n
|
Das Zeichen für Zeilenumbruch (
#xA
).
|
\r
|
Das Zeichen für Zeilenvorschub (
#xD
).
|
\t
|
Das Tabulator-Zeichen (
#x9
).
|
\\
|
\
|
\|
|
|
|
\.
|
.
|
\-
|
-
|
\^
|
^
|
\?
|
?
|
\*
|
*
|
\+
|
+
|
\{
|
{
|
\}
|
}
|
\(
|
(
|
\)
|
)
|
\[
|
[
|
\]
|
]
|
Verschiedene Zeichen mit ähnlichen Eigenschaften
werden im XML Schema zu
Zeichenklassen
gruppiert. Diese Zeichen können so in ihrer
Gesamtheit durch die Verwendung der sie
bezeichnenden Symbole in den regulären
Ausdrücken verwendet werden.
So bezeichnet die Angabe der Zeichenklasse
\p{X}
alle Zeichen aus X. Diese Angaben können durch
\P{X}
invertiert werden. (
[\P{X}] = [^\p{X}]
).
| Symbol | Bedeutung |
|---|---|
L
|
Alle Buchstaben |
Lu
|
Großbuchstaben (uppercase) |
Ll
|
Kleinbuchstaben (lowercase) |
Lt
|
Titlecase: Großschreibung des ersten Zeichens eines Wortes. Diese Art der Schreibung ist üblicherweise abhängig von der verwendeten Sprache. Im Englischen jedoch kommt der Name aus dem Zeitschriftenwesen, da dort oft in Überschriften einzelne Wörter großgeschrieben werden. |
Lm
|
Modifier: Verschiedene Ton- und Betonungszeichen |
Lo
|
Other: Alle Zeichen, die in keine der sonstigen L-Zeichenfamilien fallen |
Markierungssymbole
| Symbol | Bedeutung |
|---|---|
M
|
Alle Markierungssymbole |
Mn
|
Markierungssymbole ohne Leerzeichen (z.B. diakritische Zeichen: kleine Zeichen wie Punkte, Häkchen, Kringel, sie markieren eine besondere Betonung oder Aussprache.) |
Mc
|
Markierungssymbole
spacing combining: Hauptsächlich im asiatischen Sprachraum anzutreffende (Myanmar, Khmer, Tibetisch, Bengalisch, ...) Markierungssymbole, die mit Leerzeichen kombiniert sind. |
Me
|
Andere Markierungssymbole, die andere Zeichen beinhalten (z.B. das kyrillische Zeichen für Hunderttausend und Million). |
| Symbol | Bedeutung |
|---|---|
N
|
Alle Nummern |
Nd
|
Dezimalzahlen, darunter auch auch arabisch-indische, gurmukhi und gujarati (zwei indische Schriften), thailändisch, und Weitere, |
Nl
|
Durch Buchstaben dargestellte
Nummern, z.B. die lateinischen
Zahlen
I
,
II
,
III
, ....
|
No
|
Andere Darstellungen von Nummern (z.B. Brüche 1/4, 1/2, 3/4, weitere Khmer-Symbole für 10 bis 100, hochgestellt und tiefgestellte Ziffern, in Kreisen dargestellte Zahlen, etc.) |
| Symbol | Bedeutung |
|---|---|
P
|
Alle Interpunktionssymbole (Punctuation) |
Pc
|
Verbindende Interpunktionssymbole wie Unterstrich, Bogen über Zeichen, etc. |
Pd
|
Verbindungsstriche |
Ps
|
Bereiche öffnende Interpunktionssymbole (z.B. öffnende Klammern) |
Pe
|
Bereiche schließende Interpunktionssymbole (z.B. schließende Klammern) |
Pi
|
Zitatbeginn (z.B. öffnende Anführungszeichen) |
Pf
|
Zitatende (z.B. schließende Anführungszeichen) |
Po
|
Alle anderen Interpunktionssymbole (z.B. Semikolen, Ausrufezeichen, Fragezeichen, etc.) |
| Symbol | Bedeutung |
|---|---|
Z
|
Alle Separatoren |
Zs
|
Alle Leerzeichen (einfache, diverse Längen (3-fach, 4-fach), aber auch mongolische vokaltrennende Leerzeichen) |
Zl
|
Zeilentrenner (
#x2028
)
|
Zp
|
Absatztrenner (
#x2029
)
|
| Symbol | Bedeutung |
|---|---|
S
|
Alle Symbole |
Sm
|
mathematische Symbole |
Sc
|
Währungssymbole (
€, $
)
|
Sk
|
Modifier (wenige Akzente, Betonungshinweise, etc.) |
So
|
weitere Symbole (Copyright-Symbol, Grad Celsius, Pfeile, etc.) |
| Symbol | Bedeutung |
|---|---|
C
|
Alle Sonstigen |
Cc
|
Kontrollzeichen (z.B.
End of Transmission
,
>Backspace
,
Delete
, etc.)
|
Cf
|
Formatierungszeichen (z.B. syrisches Abkürzungszeichen) |
Co
|
Zeichen aus dem Unicode-Bereich zur freien anwenderdefinierten Belegung (mit ungefähr 137500 Zeichen) |
Cn
|
Zeichen, denen innerhalb Unicode explizit keine Belegung zugewiesen wurde |
^
wird eine Negation eines Ausdrucks
definiert.
| Symbol | Bedeutung |
|---|---|
.
|
Alle Zeichen außer Zeilenumbruch
und Zeilenvorschub (entspricht
[^\n\r]
)
|
\s
|
Versammelt Leerzeichen,
Tabulator, Zeilenumbruch und
Zeilenvorschub (
[#x20\t\n\r]
)
|
\S
|
Alles außer Leerzeichen,
Tabulator, Zeilenumbruch und
Zeilenvorschub (
[^\s]
)
|
\i
|
Die initialen Zeichen eines
gültigen XML-Namens: ein
Buchstabe, der Unterstrich
_
oder der Doppelpunkt
:
|
\I
|
Die Negation der vorhergehenden
Definition (
[^\i]
)
|
\c
|
Alle für XML-Namen zugelassenen Zeichen |
\C
|
Alle Zeichen, die nicht in XML-Namen zugelassen sind |
\d
|
Entspricht
\p{Nd}
: Dezimalzahlen, darunter auch
auch arabisch-indische, gurmukhi
und ....
|
\D
|
Alle Zeichen, die nicht
Dezimalzahlen entsprechen (
[^\d]
)
|
\w
|
Alle Zeichen außerhalb der Zeichenklassen Interpunktion, Separatoren" und Sonstige(
[#x0000-#x10FFFF]-[\p{P}\p{Z}\p{C}]
)
|
\W
|
Alle Zeichen innerhalb der
Zeichenklassen
Interpunktion, Separatoren" und Sonstige( [^\w]
)
|
<xsd:simpleType name="gerAutoNummer">
<xsd:restriction base="xs:string">
<xsd:pattern value="\p{Lu}{1,3}-\p{Lu}{1,2} \p{Nd}{1,4}"/>
</xsd:restriction>
</xsd:simpleType><xsd:simpleType name="SSN">
<xsd:restriction base="xs:string">
<xsd:pattern value="[0-9]{3}-[0-9]{2}-[0-9]{4}"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType><xsd:element name="Initialien">
<xsd:simpleType>
<xsd:restriction base="xs:string">
<xsd:pattern value="[A-Z]{2,3}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element> <xsd:simpleType name="Vorwahltyp">
<xsd:restriction base="xs:string">
<xsd:minLength value="3"></xsd:minLength>
<xsd:maxLength valie="5"></xsd:maxLength>
<xsd:pattern value="0[1-9]{2,4}"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>attribute
.
NCName
)
fixed
und
default
schließen sich gegenseitig aus.
type
wird der Typ des Attributes (ein
simpleType
) bestimmt.
qualified
, andernfalls
unqualified
).
optional
,
required
oder
prohibited
die Verwendung des Attributes fest.
Vorgabewert ist
optional
, das Attribut wird nicht zwingend im
XML-Dokument erwartet. Den Gegensatz
hierzu bildet
required
, wodurch das Attribut als zwingend
anzugeben definiert wird.
prohibited
verbietet die Nutzung des Attributes im
XML-Dokument.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:attribute name="myAtt1"/>
<xsd:attribute name="myAtt2" type="xsd:decimal"/>
<xsd:attribute name="myAtt3">
<xsd:simpleType>
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="10"/>
<xsd:maxInclusive value="20"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:simpleType name="myType1">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="5"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attribute name="myAtt4" type="myType1"/>
<xsd:element name="foo">
<xsd:complexType>
<xsd:attribute ref="myAtt1" use="optional"/>
<xsd:attribute ref="myAtt2" use="required"/>
<xsd:attribute ref="myAtt3" use="prohibited"/>
<xsd:attribute ref="myAtt4"/>
<xsd:attribute name="myAtt5" type="xsd:date" id="myDate"/>
<xsd:attribute name="myAtt6">
<xsd:simpleType>
<xsd:restriction base="xsd:float">
<xsd:totalDigits value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="bar">
<xsd:complexType>
<xsd:attribute ref="myAtt1" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>myAtt1
ist kein Typ vorgegeben. Es ist damit per
Definition vom Typ
anySimpleType
myAtt2
wird hingegen der vordefinierte Typ
decimal
zugewiesen.
myAtt3
wird innerhalb der Attributdefinition selbst
definiert (
simpleType
). Mit einer Einschränkung werden die
zulässigen Werte limitiert. Diese dürfen
zwar vom Typ
int
sein, davon sind aber nur die Werte
10
und
20
für das Attribut gültig.
myAtt4
zeigt die Verwendung eines benannten
komplexen Typs für die Typdefinition eines
Attributs. Zunächst wird der komplexe Typ
namens
myType1
definiert. Er erlaubt Zeichenketten mit
einer maximalen Länge von 5 Zeichen. Dieser
Typ wird danach in der Typdefinition
foo
wird die Verwendung der global definierten
Attribute
myAtt1
bis
myAtt4
demonstriert. Diese werden mit Hilfe des
ref
-Attributs referenziert.
myAtt1
ist als optional anzugebend deklariert,
wohingegen
myAtt2
zwingend anzugeben ist. Für
myAtt3
ist die Verwendung im Instanzdokument
verboten (
prohibited
).
myAtt5
stellt eine lokale Attributdefinition dar,
sie ist nur innerhalb der Elementdefinition
von
foo
gültig. Die Attributwerte müssen vom Typ
date
sein. Darüber hinaus erhält das Attribut
noch eine Zeichenkette zur Identifikation:
id
.
myAtt6
entspricht wiederum der Bildung eines
anonymen (inneren) Datentyps. Die lokale
Attributdefinition beschränkt Werte vom Typ
float
auf 5 Stellen.
bar
wird die globale Attributdefinition für
myAtt1
wiederverwendet, für dieses Element ist das
Attribut zwingend anzugeben.
Abschließend eine gültige (sowohl valid als auch schema valid) Dokumentinstanz der Projektverwaltungsstruktur.
<?xml version="1.0" encoding="ISO-8859-1"?>
<ProjektVerwaltung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.barbara-zengler.de/vorlesung/projektverwaltung.xsd">
<Person PersID="Pers01" mitarbeitInProjekt="Prj01">
<Vorname>Hans</Vorname>
<Nachname>Hinterhuber</Nachname>
</Person>
<Person PersID="Pers02" mitarbeitInProjekt="Prj02">
<Vorname>Franz</Vorname>
<Vorname>Xaver</Vorname>
<Nachname>Obermüller</Nachname>
<Qualifikationsprofil>
IT-Kompetenz verschiedene Betriebssysteme und <Leistungsstufe>professionelle</Leistungsstufe>
<Qualifikation>Programmierung</Qualifikation> verschiedener Programmiersprachen
<Qualifikation>Entwickler</Qualifikation> von 1988-1990
<Qualifikation>Projektleiterfunktion</Qualifikation> von 1990-93 im X42-Projekt in Abteilung AB&C
</Qualifikationsprofil>
</Person>
<Person PersID="Pers03" mitarbeitInProjekt="Prj02">
<Vorname>Fritz</Vorname>
<Nachname>Meier</Nachname>
</Person>
<Projekt ID="Prj01" Projektleiter="Pers01" Mitarbeiter="Pers01"/>
<Projekt ID="Prj02" Projektleiter="Pers02" Mitarbeiter="Pers03"/>
</ProjektVerwaltung>
Mittlerweile existieren eine Reihe von Werkzeugen, mit deren Hilfe XML-Schemata (grafisch) erstellt und gepflegt werden können. Eine kleine Auswahl finden Sie hier versammelt.
Erstellen Sie ein Schema, das die folgenden Bedingungen abbildet.
Autor
verfügt über die Kindknoten
Vorname
(mindestens einmaliges, aber höchstens
zweimaliges Auftreten) sowie
Nachname
. Beide Elemente sind Namen und verfügen
über keine interne Formatierung durch
Leerzeichen oder Zeilenumbrüche
Zeitschrift
enthält genau ein als
Verlag
bezeichnetes Kindelement des Typs
string
.
Beitrag
besitzt mindestens einen aber beliebig viele
Autor
en.
Beiträge
enthält eine positive Anzahl von Element
Information Items des Namens
Beitrag
.
Beitrag
enthält das Attribut
Seitenanzahl
(positive Ganzzahl) und
Annahmedatum
(Datum)
Zeitschrift
enthält genau ein Element Information Item
des Namens
Beiträge
.
Beitrag
existiert eine Menge von
Schlagworten
. Diese werden in einem Element Information
Item
Schlagworte
abgelegt. Dieses Element kann zwischen drei
und fünf Zeichenketten als Eintrag
beinhalten.