<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=XML_Schema</id>
	<title>XML Schema - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=XML_Schema"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=XML_Schema&amp;action=history"/>
	<updated>2026-05-17T21:45:58Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=XML_Schema&amp;diff=4022&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=XML_Schema&amp;diff=4022&amp;oldid=prev"/>
		<updated>2025-06-17T11:26:11Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039;&amp;#039;, abgekürzt &amp;#039;&amp;#039;&amp;#039;XSD&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;(XML Schema Definition),&amp;#039;&amp;#039; ist eine Empfehlung des [[World Wide Web Consortium|W3C]] zum Definieren von Strukturen für [[Extensible Markup Language|XML]]-Dokumente. Anders als bei den klassischen [[Dokumenttypdefinition|XML-DTDs]] wird die Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird eine große Anzahl von [[Datentyp]]en unterstützt.&lt;br /&gt;
&amp;lt;!-- Das stimmt nicht! Was stimmt denn? Die Erläuterung zum Parsen beschreibt keinen erkennbaren Widerspruch. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; beschreibt in einer komplexen [[Schemasprache (XML)|Schemasprache]] Datentypen, einzelne XML-Schema-Instanzen (Dokumente) und Gruppen solcher Instanzen. Ein konkretes XML-Schema wird auch als eine &amp;#039;&amp;#039;&amp;#039;XSD&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;(XML Schema Definition)&amp;#039;&amp;#039; bezeichnet und hat als Datei üblicherweise die [[Dateiendung|Endung]] &amp;#039;&amp;#039;&amp;#039;.xsd&amp;#039;&amp;#039;&amp;#039;. Im Gegensatz zu [[Dokumenttypdefinition|DTDs]] kann bei Verwendung von XML-Schemata zwischen dem Namen des XML-Typs und dem in der Instanz verwendeten Namen des XML-Tags unterschieden werden.&lt;br /&gt;
&lt;br /&gt;
Neben &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; gibt es weitere Konzepte zur Definition von XML-Strukturen, wie [[RELAX NG]] oder [[Schematron]]. Auch [[Dokumenttypdefinition|DTD]] als Normbestandteil von XML selbst kann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Datentypen ==&lt;br /&gt;
&amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; unterscheidet zwischen einfachen (atomaren) Datentypen und komplexen Datentypen. Der Begriff &amp;#039;&amp;#039;Typ&amp;#039;&amp;#039; bezeichnet im nachfolgenden Text jeweils die abstrakte Spezifikation der Struktur eines Abschnitts innerhalb eines XML-Dokumentes. Datentypen in &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; werden klassifiziert in eingebaute bzw. vordefinierte &amp;#039;&amp;#039;(built-in)&amp;#039;&amp;#039; und benutzerdefinierte &amp;#039;&amp;#039;(user defined)&amp;#039;&amp;#039; Datentypen.&lt;br /&gt;
&lt;br /&gt;
In der Spezifikation des W3C für &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; sind 19 voreingestellte primitive Datentypen (z.&amp;amp;nbsp;B. &amp;#039;&amp;#039;boolean, string, float, date&amp;#039;&amp;#039; und &amp;#039;&amp;#039;NOTATION&amp;#039;&amp;#039;) und weitere 25 davon abgeleitete primitive Datentypen (wie &amp;#039;&amp;#039;ID&amp;#039;&amp;#039; und &amp;#039;&amp;#039;integer&amp;#039;&amp;#039;) definiert.&lt;br /&gt;
&lt;br /&gt;
=== Einfache Typen ===&lt;br /&gt;
&amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; stellt einige grundlegende atomare Datentypen bereit. Die atomaren Datentypen enthalten die „klassischen“ Typen, wie sie zum Teil auch in anderen Typsystemen (z.&amp;amp;nbsp;B. [[C (Programmiersprache)|C]], [[Java (Programmiersprache)|Java]] oder [[SQL]]) spezifiziert sind:&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:string&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:decimal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:integer&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:float&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:boolean&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:date&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:time&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinzu kommen weitere XML-spezifische atomare Typen, unter anderem:&lt;br /&gt;
* &amp;lt;code&amp;gt;QName&amp;lt;/code&amp;gt;: qualifizierter Name, global eindeutiger Bezeichner. Aufgebaut aus sogenannten &amp;#039;&amp;#039;NCNames (Non-Colonized Names),&amp;#039;&amp;#039; wobei jeder &amp;#039;&amp;#039;NCName&amp;#039;&amp;#039; bis auf den letzten einen [[Namensraum]] &amp;#039;&amp;#039;(Namespace)&amp;#039;&amp;#039; bezeichnet. Der letzte &amp;#039;&amp;#039;NCName&amp;#039;&amp;#039; entspricht dem lokalen Namen innerhalb des Namensraumes. Die einzelnen &amp;#039;&amp;#039;NCNames&amp;#039;&amp;#039; werden mittels Punkt (.) zu einem &amp;#039;&amp;#039;QName&amp;#039;&amp;#039; zusammengesetzt.&lt;br /&gt;
* &amp;lt;code&amp;gt;anyURI&amp;lt;/code&amp;gt;: &amp;#039;&amp;#039;Uniform Resource Identifier&amp;#039;&amp;#039; ([[Uniform Resource Identifier|URI]])&lt;br /&gt;
* &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt;: Sprachbezeichnung, z.&amp;amp;nbsp;B. de-DE, en-US, fr&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt;: Identifikationsattribut innerhalb von XML-Elementen&lt;br /&gt;
* &amp;lt;code&amp;gt;IDREF&amp;lt;/code&amp;gt;: Referenz auf einen ID-Wert&lt;br /&gt;
Einfache XML-Datentypen dürfen weder XML-Kindelemente enthalten noch XML-Attribute besitzen.&lt;br /&gt;
&lt;br /&gt;
Außer den atomaren Datentypen gehören Listen und Unions (bestehend aus atomaren Elementen und Listen) zu den einfachen Typen:&lt;br /&gt;
&lt;br /&gt;
* Das folgende Beispiel definiert einen neuen XML-Datentyp mit dem Namen &amp;lt;code&amp;gt;monatInt&amp;lt;/code&amp;gt; sowie eine Liste &amp;lt;code&amp;gt;monate&amp;lt;/code&amp;gt; dieses neuen Typs:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;monatInt&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:restriction base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:minInclusive value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:maxInclusive value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;monate&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:list itemType=&amp;quot;monatInt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine Instanz des neuen Typs könnte wie folgt aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;monate&amp;gt;&lt;br /&gt;
   1 2 3 4 5 6 7 8 9 10 11 12&lt;br /&gt;
&amp;lt;/monate&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die einzelnen Elemente einer Liste werden durch [[Leerraum]] (hier: Leerzeichen) getrennt.&lt;br /&gt;
&lt;br /&gt;
* Zu den einfachen Typen gehören zusätzlich noch sogenannte Vereinigungen (englisch &amp;#039;&amp;#039;{{lang|en|unions}}&amp;#039;&amp;#039;).&lt;br /&gt;
Ein neuer Typ wird als Vereinigungsmenge bereits bestehender Typen definiert. Jede Instanz wählt dann ihren Typ aus dieser Menge.&lt;br /&gt;
Das nachfolgende Beispiel definiert einen weiteren Typ &amp;lt;code&amp;gt;monatsname&amp;lt;/code&amp;gt; sowie einen Union-Typ &amp;lt;code&amp;gt;monat&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;monatsname&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;Jan&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;Feb&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;Mär&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;!-- und so weiter … --&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;monat&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:union memberTypes=&amp;quot;monatsname monatInt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
XML-Elemente vom Typ &amp;lt;code&amp;gt;monat&amp;lt;/code&amp;gt; dürfen entweder ganzzahlige Werte im Bereich 1–12 enthalten oder eine der entsprechenden Monatsbezeichnungen als [[Zeichenkette]]. Gültige Instanzen sind beispielsweise:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;monat&amp;gt;Jan&amp;lt;/monat&amp;gt;&lt;br /&gt;
&amp;lt;monat&amp;gt;2&amp;lt;/monat&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Typen ===&lt;br /&gt;
In Ergänzung zu den einfachen Typen bieten komplexe XML-Datentypdefinitionen die Möglichkeit, Elementenstrukturen zusammenhängend zu definieren. Solche Strukturen können weitere Elemente und Attribute beinhalten.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel definiert einen neuen Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; mit entsprechenden Kindelementen &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hersteller&amp;lt;/code&amp;gt; etc., sowie einem Attribut &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;pc-Typ&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;name&amp;quot;       type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;hersteller&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;prozessor&amp;quot;  type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;mhz&amp;quot;        type=&amp;quot;xs:integer&amp;quot; minOccurs=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;kommentar&amp;quot;  type=&amp;quot;xs:string&amp;quot;  minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:integer&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Möglichkeiten zur Definition komplexer Typen sollen hier nur exemplarisch erläutert werden. Der interessierte Leser sei auf die unten angegebenen Links zu den Seiten des W3C verwiesen.&lt;br /&gt;
&lt;br /&gt;
Die Kindelemente eines komplexen Typs können auf drei unterschiedliche Arten kombiniert werden:&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:sequence&amp;lt;/code&amp;gt;: Eine Liste von Kindelementen wird spezifiziert. Jedes dieser Elemente kann keinmal, einmal oder mehrfach auftreten (Attribute &amp;lt;code&amp;gt;minOccurs&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;maxOccurs&amp;lt;/code&amp;gt;). Falls kein &amp;lt;code&amp;gt;occurs&amp;lt;/code&amp;gt;-Attribut vorhanden ist, wird in beiden Fällen der Default-Wert 1 verwendet. Die Elemente innerhalb einer &amp;lt;code&amp;gt;sequence&amp;lt;/code&amp;gt; müssen in der angegebenen Reihenfolge auftreten. In dem oben gezeigten Beispiel müssen die Elemente &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hersteller&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;prozessor&amp;lt;/code&amp;gt; genau einmal auftreten, das &amp;lt;code&amp;gt;mhz&amp;lt;/code&amp;gt;-Element kann null- oder einmal auftreten, &amp;lt;code&amp;gt;kommentar&amp;lt;/code&amp;gt;-Elemente können beliebig oft oder auch gar nicht auftreten.&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:choice&amp;lt;/code&amp;gt;: Aus einer Liste von Alternativen kann ein Element ausgewählt werden. Das nachfolgende Beispiel definiert einen neuen Typ &amp;lt;code&amp;gt;computer&amp;lt;/code&amp;gt;, der als Kindelement entweder ein &amp;lt;code&amp;gt;desktop&amp;lt;/code&amp;gt;-Element besitzt (vom Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt;) oder ein &amp;lt;code&amp;gt;laptop&amp;lt;/code&amp;gt;-Element:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;computer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:choice&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;desktop&amp;quot; type=&amp;quot;pc-Typ&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;laptop&amp;quot; type=&amp;quot;laptop-Typ&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:choice&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xs:all&amp;lt;/code&amp;gt;: Mittels des &amp;lt;code&amp;gt;xs:all&amp;lt;/code&amp;gt;-Tags lässt sich eine Gruppe von Kindelementen definieren, von denen jedes maximal einmal auftreten darf (&amp;lt;code&amp;gt;min&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;maxOccurs&amp;lt;/code&amp;gt; der Kindelemente dürfen nur die Werte 0 oder 1 annehmen). Die Reihenfolge der Elemente ist beliebig.&lt;br /&gt;
&lt;br /&gt;
==== Beliebiger Inhalt ====&lt;br /&gt;
XML-Elemente mit beliebigem Inhalt lassen sich mittels des Basistyps &amp;lt;code&amp;gt;anyType&amp;lt;/code&amp;gt; definieren. Der nachfolgende Code spezifiziert ein &amp;lt;code&amp;gt;kommentar&amp;lt;/code&amp;gt;-Element beliebigen Inhalts, d.&amp;amp;nbsp;h. sowohl komplexe XML-Elemente als auch Text können vorkommen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;kommentar&amp;quot; type=&amp;quot;xs:anyType&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen in dem Inhalt Text und Tags in beliebiger Reihenfolge vorkommen können, muss der Wert für das Attribut &amp;quot;mixed&amp;quot; auf &amp;quot;true&amp;quot; gesetzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;tagname&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType mixed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;child&amp;quot; type=&amp;quot;xs:integer&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Weitere Elemente … --&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Leere Elemente ====&lt;br /&gt;
Von &amp;#039;&amp;#039;leeren XML-Elementen&amp;#039;&amp;#039; spricht man, wenn das jeweilige Element aus nur einem einzelnen XML-Tag besteht und keine weiteren XML-Elemente oder Text umschließt (z.&amp;amp;nbsp;B. der XHTML-Zeilenumbruch: &amp;lt;code&amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;lt;/code&amp;gt;). &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; bedient sich an dieser Stelle eines kleinen Tricks: Es wird mittels &amp;lt;code&amp;gt;xs:complexType&amp;lt;/code&amp;gt; ein neuer Typ definiert, ohne ein Kindelement anzugeben. Da &amp;lt;code&amp;gt;xs:complexType&amp;lt;/code&amp;gt; nach Vorgabe nur komplexe XML-Kindelemente als Inhalt zulässt, bleibt das jeweilige Element in diesem Fall leer.&lt;br /&gt;
&lt;br /&gt;
=== Ableitung neuer Typen ===&lt;br /&gt;
Neue Datentypen lassen sich zum einen durch die Definition eines neuen Typs erstellen (siehe vorheriger Abschnitt) oder durch die Ableitung eines neuen Typs aus bereits bestehenden.&lt;br /&gt;
&lt;br /&gt;
Bei der Ableitung eines neuen Typs handelt es sich nicht um eine [[Vererbung (Programmierung)|Vererbung]] im Sinne der [[Objektorientierung]], da keine Eigenschaften vergleichbar den Methoden oder Attribute objektorientierter [[Klasse (objektorientierte Programmierung)|Klassen]] vererbt werden. Vielmehr handelt es sich hier um die Wiederverwendung bestehender Typdefinitionen. Dementsprechend ist bei der Ableitung neuer Typen auch keine implizite Substituierbarkeit gegeben, wie sie in anderen Typsystemen üblich ist (explizite [[Typumwandlung]]en sind jedoch möglich).&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;Ableitung&amp;#039;&amp;#039; eines neuen Typs kann auf zweierlei Arten erfolgen: Erweiterung oder Einschränkung.&lt;br /&gt;
&lt;br /&gt;
==== Erweiterung eines Typs ====&lt;br /&gt;
Die Erweiterung eines bisherigen Typs (engl. &amp;#039;&amp;#039;extension&amp;#039;&amp;#039;) um weitere Eigenschaften, d.&amp;amp;nbsp;h. neue Elemente oder Attribute werden hinzugefügt.&lt;br /&gt;
Im folgenden Beispiel wird der oben definierte Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; um ein Element &amp;lt;code&amp;gt;ram&amp;lt;/code&amp;gt; erweitert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;myPC-Typ&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexContent&amp;gt;&lt;br /&gt;
    &amp;lt;xs:extension base=&amp;quot;pc-Typ&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;ram&amp;quot; type=&amp;quot;xs:integer&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexContent&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der neu definierte XML-Typ &amp;lt;code&amp;gt;myPC-Typ&amp;lt;/code&amp;gt; besteht aus allen Kindelementen des Typs &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; sowie dem Element &amp;lt;code&amp;gt;ram&amp;lt;/code&amp;gt;. Letzteres wird, wie in einer &amp;lt;code&amp;gt;xs:sequence&amp;lt;/code&amp;gt;-Definition, an die bisherigen Kindelemente angehängt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da keine Substituierbarkeit gegeben ist, darf an einer Stelle an der ein Element vom Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; erwartet wird nicht ohne weiteres ein Element vom Typ &amp;lt;code&amp;gt;myPC-Typ&amp;lt;/code&amp;gt; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Einschränkung eines Typs ====&lt;br /&gt;
Durch Einschränkung bereits bestehender Typen (engl. &amp;#039;&amp;#039;restriction&amp;#039;&amp;#039;) lassen sich ebenfalls neue Definitionen ableiten. Zu diesem Zweck müssen alle Elementdefinitionen des Basistyps wiederholt werden, verändert um die jeweiligen restriktiveren Einschränkungen. Im folgenden Beispiel wird ein neuer Typ &amp;lt;code&amp;gt;myPC2-Typ&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; abgeleitet. In diesem Fall darf maximal ein &amp;lt;code&amp;gt;kommentar&amp;lt;/code&amp;gt;-Element auftreten (im Gegensatz zu einer beliebigen Anzahl beim Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;myPC2-Typ&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexContent&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;pc-Typ&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
       &amp;lt;xs:element name=&amp;quot;name&amp;quot;       type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;xs:element name=&amp;quot;hersteller&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;xs:element name=&amp;quot;prozessor&amp;quot;  type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;xs:element name=&amp;quot;mhz&amp;quot;        type=&amp;quot;xs:integer&amp;quot; minOccurs=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;xs:element name=&amp;quot;kommentar&amp;quot;  type=&amp;quot;xs:string&amp;quot; minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexContent&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu der Einschränkung komplexer Typen ist es auch möglich, neue Typen als Einschränkung einfacher Typen zu definieren. Ein Beispiel für eine solche Definition befindet sich bereits im Abschnitt zu den einfachen Typen. Ein neuer Typ &amp;lt;code&amp;gt;monatInt&amp;lt;/code&amp;gt; wird als Einschränkung des Typs Integer auf den Wertebereich 1–12 definiert. Grundsätzlich stehen die folgenden Primitive zur Verfügung, um Einschränkungen auf einfachen Typen zu beschreiben:&lt;br /&gt;
* &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxLength&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;minLength&amp;lt;/code&amp;gt; – Beschränkt die Länge eines Strings oder einer Liste.&lt;br /&gt;
* &amp;lt;code&amp;gt;enumeration&amp;lt;/code&amp;gt; – Beschränkung durch Angabe alternativer Werte&lt;br /&gt;
* &amp;lt;code&amp;gt;pattern&amp;lt;/code&amp;gt; – Beschränkung durch Angabe eines [[Regulärer Ausdruck|regulären Ausdrucks]]&lt;br /&gt;
* &amp;lt;code&amp;gt;minExclusive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;minInclusive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxExclusive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxInclusive&amp;lt;/code&amp;gt; – Einschränkung des Wertebereichs.&lt;br /&gt;
* &amp;lt;code&amp;gt;totalDigits&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fractionDigits&amp;lt;/code&amp;gt; – Einschränkung der Dezimalstellen (Gesamtzahl und Nachkommastellen)&lt;br /&gt;
* &amp;lt;code&amp;gt;whiteSpace&amp;lt;/code&amp;gt; – Behandlung von Leerzeichen und Tabs&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele veranschaulichen die Verwendung dieser Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Körpertemperatur, 3 Dezimalstellen, 1 Nachkommastelle, Minimal- und Maximalwert&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;celsiusKörperTemp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:restriction base=&amp;quot;xs:decimal&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:totalDigits value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:fractionDigits value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:minInclusive value=&amp;quot;35.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:maxInclusive value=&amp;quot;42.5&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Deutsche Postleitzahlen, optionales „&amp;lt;code&amp;gt;D &amp;lt;/code&amp;gt;“ gefolgt von fünf Ziffern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;plz&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;xs:pattern value=&amp;quot;(D )?[0-9]{5}&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Größenangabe&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:simpleType name=&amp;quot;size&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;XS&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;S&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;M&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;L&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:enumeration value=&amp;quot;XL&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Definition eines Typs ist es möglich festzulegen, ob und auf welche Art von diesem Typ weitere XML-Elementtypen abgeleitet werden dürfen. So kann man zum Beispiel festlegen, dass von einem Typ &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; weitere Typen nur durch das Setzen weiterer Einschränkungen abgeleitet werden dürfen – und nicht durch das Hinzufügen neuer Kindelemente.&lt;br /&gt;
&lt;br /&gt;
== Elementdefinition ==&lt;br /&gt;
Wie im vorangegangenen Abschnitt erläutert erlaubt es &amp;#039;&amp;#039;XML Schema,&amp;#039;&amp;#039; neue XML-Datentypen zu definieren und diese bei der Definition eigener XML-Elemente zu verwenden. Das folgende Beispiel veranschaulicht die Verwendung des bereits definierten Typs &amp;lt;code&amp;gt;pc-Typ&amp;lt;/code&amp;gt; innerhalb einer Liste von pc-Elementen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;pc-liste&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;pc&amp;quot; type=&amp;quot;pc-Typ&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ein entsprechendes XML-Element könnte wie folgt aussehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pc-liste&amp;gt;&lt;br /&gt;
  &amp;lt;pc&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;Dimension 3100 &amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;hersteller&amp;gt;Dell&amp;lt;/hersteller&amp;gt;&lt;br /&gt;
    &amp;lt;prozessor&amp;gt;AMD&amp;lt;/prozessor&amp;gt;&lt;br /&gt;
    &amp;lt;mhz&amp;gt;3060&amp;lt;/mhz&amp;gt;&lt;br /&gt;
    &amp;lt;kommentar&amp;gt;Arbeitsplatzrechner&amp;lt;/kommentar&amp;gt;&lt;br /&gt;
  &amp;lt;/pc&amp;gt;&lt;br /&gt;
  &amp;lt;pc&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;T 42&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;hersteller&amp;gt;IBM&amp;lt;/hersteller&amp;gt;&lt;br /&gt;
    &amp;lt;prozessor&amp;gt;Intel&amp;lt;/prozessor&amp;gt;&lt;br /&gt;
    &amp;lt;mhz&amp;gt;1600&amp;lt;/mhz&amp;gt;&lt;br /&gt;
    &amp;lt;kommentar&amp;gt;Laptop&amp;lt;/kommentar&amp;gt;&lt;br /&gt;
  &amp;lt;/pc&amp;gt;&lt;br /&gt;
&amp;lt;/pc-liste&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In diesem Beispiel erfolgt die Spezifikation des [[Anonymer Datentyp|anonymen Listentyps]] direkt innerhalb der Elementdefinition, während die Spezifikation des pc-Typs extern erfolgt.&lt;br /&gt;
&lt;br /&gt;
Bei dem Entwurf eines komplexen XML-Schemas sollte sowohl die [[Wiederverwendbarkeit]] und Erweiterbarkeit der einzelnen XML-Elementtypen als auch die Lesbarkeit des Schemas selbst berücksichtigt werden. Die Verwendung anonymer XML-Elementtypen als Teil größerer Elemente gewährleistet im Allgemeinen eine bessere Lesbarkeit kleinerer XML-Schemata. Die Definition und Benennung einzelner, kleinerer und wiederverwendbarer XML-Elementtypen hingegen ermöglicht eine stärkere Modularisierung der XML-Schema-Struktur. Aufgrund der Vielzahl möglicher Anwendungsszenarien haben sich bisher noch keine allgemeingültigen Entwurfsprinzipien für XML-Schemata herausgebildet (vergleichbar den [[Normalisierung (Datenbank)|Normalformen]] für relationale Datenbanken).&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Konzepte und Eigenschaften ==&lt;br /&gt;
=== Eindeutige Schlüssel ===&lt;br /&gt;
Vergleichbar den [[Primärschlüssel]]n in [[Relationale Datenbank|relationalen Datenbanken]] lassen sich mittels &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; eindeutige Schlüssel definieren. &amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; unterscheidet zwischen der Eindeutigkeit (engl. &amp;#039;&amp;#039;unique&amp;#039;&amp;#039;) und der Schlüsseleigenschaft.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel definiert ein neues Element &amp;#039;&amp;#039;pc-list&amp;#039;&amp;#039; mit einer Liste von &amp;lt;code&amp;gt;pc&amp;lt;/code&amp;gt;-Kindelementen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;pc-list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;pc&amp;quot; type=&amp;quot;pc-Typ&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;xs:unique name=&amp;quot;hersteller-name&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:selector xpath=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:field xpath=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:field xpath=&amp;quot;hersteller&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:unique&amp;gt;&lt;br /&gt;
  &amp;lt;xs:key name=&amp;quot;idKey&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:selector xpath=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:field xpath=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:key&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die beiden Elemente &amp;lt;code&amp;gt;unique&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; selektieren mit einem [[XPath]] Pfadausdruck (im Beispiel: &amp;lt;code&amp;gt;pc&amp;lt;/code&amp;gt;) eine Menge von &amp;lt;code&amp;gt;pc&amp;lt;/code&amp;gt;-Elementen. Für diese Menge muss die jeweilige Eindeutigkeits- bzw. Schlüsselbedingung erfüllt werden.&lt;br /&gt;
Im obigen Beispiel wird festgelegt, dass die Kombination der Elemente &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hersteller&amp;lt;/code&amp;gt; für jedes &amp;lt;code&amp;gt;pc&amp;lt;/code&amp;gt;-Element innerhalb dieser Liste eindeutig sein muss.&amp;lt;br /&amp;gt;Durch das &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;-Element wird festgelegt, dass das Attribut &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; innerhalb dieser Liste eindeutig sein muss und von außerhalb referenziert werden kann.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt die Referenzierung dieses Schlüssels mit dem Attribut &amp;lt;code&amp;gt;refer&amp;lt;/code&amp;gt; und dem Schlüsselwort &amp;lt;code&amp;gt;@references&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:keyref name=&amp;quot;idFremdKey&amp;quot; refer=&amp;quot;idKey&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- idKey von obigem Beispiel --&amp;gt;&lt;br /&gt;
  &amp;lt;xs:selector xpath=&amp;quot;computerFremd&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:field xpath=&amp;quot;@references&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:keyref&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Beachte:&lt;br /&gt;
Mit &amp;lt;code&amp;gt;refer&amp;lt;/code&amp;gt; bezieht man sich auf das &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;-Attribut einer Schlüsselbedingung, nicht auf das Schlüsselfeld. Die Werte in &amp;lt;code&amp;gt;references&amp;lt;/code&amp;gt; müssen also immer unter den Schlüsseln zu den &amp;lt;code&amp;gt;computern&amp;lt;/code&amp;gt; zu finden sein. (Hintergrund dieses Konstrukts ist die Sicherstellung der [[Referentielle Integrität|referentiellen Integrität]], wie man sie von relationalen Datenbanksystemen her kennt.)&lt;br /&gt;
&lt;br /&gt;
=== Import, Include und Redefine ===&lt;br /&gt;
&amp;#039;&amp;#039;XML Schema&amp;#039;&amp;#039; erlaubt es, fremde Schemata wiederzuverwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Hierzu stehen sowohl der &amp;lt;code&amp;gt;include&amp;lt;/code&amp;gt;- als auch der &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;-Tag zur Verfügung sowie die Möglichkeit einer neuen Definition bzw. Anpassung fremder Schemata beim Einbinden.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;include&amp;lt;/code&amp;gt;&lt;br /&gt;
Typdefinitionen innerhalb eines Namensraumes, die auf mehrere Dateien verteilt sind, lassen sich mittels &amp;lt;code&amp;gt;include&amp;lt;/code&amp;gt; zusammenfügen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;schema xmlns=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
        xmlns:pcTeile=&amp;quot;http://www.example.com/pcTeile&amp;quot;&lt;br /&gt;
        targetNamespace=&amp;quot;http://www.example.com/pcTeile&amp;quot;&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
  &amp;lt;include schemaLocation=&amp;quot;http://www.example.com/schemata/harddisk.xsd&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include schemaLocation=&amp;quot;http://www.example.com/schemata/ram.xsd&amp;quot;/&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
&amp;lt;/schema&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Mehrere Schemata können inkludiert werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;targetNamespace&amp;lt;/code&amp;gt; des &amp;lt;code&amp;gt;harddisk.xsd&amp;lt;/code&amp;gt; muss mit dem des inkludierenden Schemas übereinstimmen.&lt;br /&gt;
; &amp;lt;code&amp;gt;redefine&amp;lt;/code&amp;gt;&lt;br /&gt;
Gleiches Beispiel wie gerade. Annahme es gäbe einen &amp;lt;code&amp;gt;complexType&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Hersteller&amp;lt;/code&amp;gt; im Schema &amp;lt;code&amp;gt;harddisk.xsd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;schema xmlns=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
        xmlns:pcTeile=&amp;quot;http://www.example.com/pcTeile&amp;quot;&lt;br /&gt;
        targetNamespace=&amp;quot;http://www.example.com/pcTeile&amp;quot;&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
  &amp;lt;redefine schemaLocation=&amp;quot;http://www.example.com/schemata/harddisk.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- redefinition of Hersteller --&amp;gt;&lt;br /&gt;
    &amp;lt;complexType name=&amp;quot;Hersteller&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;complexContent&amp;gt;&lt;br /&gt;
        &amp;lt;!-- redefinition of Hersteller mit &amp;#039;&amp;#039;restriction&amp;#039;&amp;#039; oder auch &amp;#039;&amp;#039;extension&amp;#039;&amp;#039; etc. --&amp;gt;&lt;br /&gt;
        &amp;lt;restriction base=&amp;quot;pcTeile:Hersteller&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;sequence&amp;gt;&lt;br /&gt;
            &amp;lt;element name=&amp;quot;hersteller&amp;quot; type=&amp;quot;string&amp;quot; minOccurs=&amp;quot;10&amp;quot; maxOccurs=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/sequence&amp;gt;&lt;br /&gt;
        &amp;lt;/restriction&amp;gt;&lt;br /&gt;
      &amp;lt;/complexContent&amp;gt;&lt;br /&gt;
    &amp;lt;/complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/redefine&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
  &amp;lt;include schemaLocation=&amp;quot;http://www.example.com/schemata/ram.xsd&amp;quot;/&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
&amp;lt;/schema&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;redefine&amp;lt;/code&amp;gt; kann an Stelle von &amp;lt;code&amp;gt;include&amp;lt;/code&amp;gt; verwendet werden.&lt;br /&gt;
* Der Name des Typs ändert sich dabei nicht.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;&lt;br /&gt;
Der &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;-Tag erlaubt es, Elemente aus anderen Namensräumen zu importieren, mit einem Präfix zu versehen und&lt;br /&gt;
damit Schema-Bestandteile aus unterschiedlichen Namensräumen wiederzuverwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Annahme ist, dass es einen definierten Typ &amp;lt;code&amp;gt;superTyp&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;pcTeile&amp;lt;/code&amp;gt; gibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;schema xmlns=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
        xmlns:pcTeile=&amp;quot;http://www.example.com/pcTeile&amp;quot;&lt;br /&gt;
        targetNamespace=&amp;quot;http://www.example.com/firma&amp;quot;&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
  &amp;lt;import namespace=&amp;quot;http://www.example.com/pcTeile&amp;quot;/&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
    &amp;lt;…&lt;br /&gt;
      &amp;lt;xs:attribute name=&amp;quot;xyz&amp;quot; type=&amp;quot;pcTeile:superTyp&amp;quot;/&amp;gt;&lt;br /&gt;
    …/&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
&amp;lt;/schema&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung von XML-Schemata ==&lt;br /&gt;
Zur Verwendung eines XML-Schemas in einer XML-Datei kann das Attribut &amp;lt;code&amp;gt;schemaLocation&amp;lt;/code&amp;gt; des Schema-Instance-Namensraums verwendet werden, um die Adresse des Schemas bekannt zu machen.&lt;br /&gt;
Somit ist es einer Anwendung wie beispielsweise einem XML-Parser möglich, das Schema zu laden, sofern es ihm nicht schon bekannt ist. Alternativ kann der Anwendung das Schema aber auch über andere Wege bekannt gemacht werden, z.&amp;amp;thinsp;B. über Konfigurationsdateien. Letztere Möglichkeit ist jedoch nicht standardisiert und somit von Anwendung zu Anwendung verschieden.&lt;br /&gt;
&lt;br /&gt;
In folgendem Beispiel wird ausgedrückt, dass der Standard-Namensraum &amp;lt;code&amp;gt;http://www.w3.org/1999/xhtml&amp;lt;/code&amp;gt; ist und dann angegeben, dass das XML-Schema für diesen Namensraum unter &amp;lt;code&amp;gt;www.w3.org/1999/xhtml.xsd&amp;lt;ref&amp;gt;{{Webarchiv | url=http://www.w3.org/1999/xhtml.xsd | wayback=20001110050100 | text=www.w3.org/1999/xhtml.xsd}}&amp;lt;/ref&amp;gt;&amp;lt;/code&amp;gt; aufzufinden ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;br /&gt;
      xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
      xsi:schemaLocation=&amp;quot;http://www.w3.org/1999/xhtml&lt;br /&gt;
                          http://www.w3.org/1999/xhtml.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Definition gilt für das XML-Element, bei dem die Attribute angegeben sind, und alle Kinderelemente.&lt;br /&gt;
&lt;br /&gt;
Soll Elementen, die keinem Namensraum angehören, ein XML-Schema zugeordnet werden, so geschieht dies, wie im folgenden Beispiel gezeigt, mittels des Attributes &amp;lt;code&amp;gt;noNamespaceSchemaLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
      xsi:noNamespaceSchemaLocation=&amp;quot;http://www.w3.org/1999/xhtml.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;schema xmlns=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
        xmlns:bsp=&amp;quot;http://de.wikipedia.org/wiki/XML_Schema#Beispiel&amp;quot;&lt;br /&gt;
        targetNamespace=&amp;quot;http://de.wikipedia.org/wiki/XML_Schema#Beispiel&amp;quot;&lt;br /&gt;
        elementFormDefault=&amp;quot;qualified&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;element name=&amp;quot;doc&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;complexType&amp;gt;&lt;br /&gt;
      &amp;lt;sequence&amp;gt;&lt;br /&gt;
        &amp;lt;element ref=&amp;quot;bsp:head&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;element name=&amp;quot;body&amp;quot; type=&amp;quot;string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/element&amp;gt;&lt;br /&gt;
  &amp;lt;element name=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;complexType&amp;gt;&lt;br /&gt;
      &amp;lt;sequence&amp;gt;&lt;br /&gt;
        &amp;lt;element name=&amp;quot;title&amp;quot; type=&amp;quot;string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/element&amp;gt;&lt;br /&gt;
&amp;lt;/schema&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies entspricht, abgesehen vom Namensraum, folgender [[Dokumenttypdefinition|DTD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!ELEMENT doc (head, body)&amp;gt;&lt;br /&gt;
&amp;lt;!ELEMENT head (title)&amp;gt;&lt;br /&gt;
&amp;lt;!ELEMENT title (#PCDATA)&amp;gt;&lt;br /&gt;
&amp;lt;!ELEMENT body (#PCDATA)&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine XML-Struktur, die dem Schema entspricht, ist diese:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;doc xmlns=&amp;quot;http://de.wikipedia.org/wiki/XML_Schema#Beispiel&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&lt;br /&gt;
      Dies ist der Titel&lt;br /&gt;
    &amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    Dies ist der Text.&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/doc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Liste der XML-Namensräume]]&lt;br /&gt;
* [[RELAX NG]]&lt;br /&gt;
* [[WSDL]]&lt;br /&gt;
* [[Schematron]]&lt;br /&gt;
* &amp;#039;&amp;#039;[[Document Structure Description]]&amp;#039;&amp;#039; (DSD)&lt;br /&gt;
* [[railML]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur |Autor=[[Alfons Kemper]], André Eickler |Titel=Datenbanksysteme – Eine Einführung |Verlag=Oldenbourg Wissenschaftsverlag |Ort=München |Datum=2004 |ISBN=3-486-27392-2}}&lt;br /&gt;
* {{Literatur |Autor=Helmut Vonhoegen |Titel=Einstieg in XML |TitelErg=&amp;#039;&amp;#039;Aktuelle Standards: XML Schema, XSL, XLink&amp;#039;&amp;#039; |Auflage=5. |Verlag=Galileo Press |Datum=2009 |ISBN=978-3-8362-1367-7}}&lt;br /&gt;
* {{Literatur |Autor=Margit Becher |Titel=XML – DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM |Verlag=W3L Verlag |Ort=Witten |Datum=2009 |ISBN=978-3-937137-69-8}}&lt;br /&gt;
* {{Literatur |Autor=Marco Skulschus, Marcus Wiederstein |Titel=XML Schema |Verlag=Comelio Medien |Ort=Berlin |Datum=2009 |ISBN=978-3-939701-22-4}}&lt;br /&gt;
* {{Literatur |Autor=Eric van der Vlist |Titel=XML Schema |Verlag=O’Reilly |Ort=Köln |Datum=2003 |ISBN=978-3-89721-345-6 |Online=[https://www.data2type.de/xml-xslt-xslfo/xml-schema online]}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* &amp;#039;&amp;#039;W3C XML Schema Specification: [https://www.w3.org/TR/xmlschema-0/ Primer,] [https://www.w3.org/TR/xmlschema-1/ Structures,] [https://www.w3.org/TR/xmlschema-2/ Datatypes]&amp;#039;&amp;#039; und &amp;#039;&amp;#039;[https://www.w3.org/XML/Schema Miscellaneous;]&amp;#039;&amp;#039;  deutsche Übersetzungen: [https://web.archive.org/web/20031008133141/http://edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/ Einführung,] [https://web.archive.org/web/20070310004358/http://www.edition-w3c.de/TR/2001/REC-xmlschema-1-20010502/ Strukturen,] [https://web.archive.org/web/20021205223145/http://edition-w3c.de/TR/2001/REC-xmlschema-2-20010502/ Datentypen]&lt;br /&gt;
* [https://www.data2type.de/xml-xslt-xslfo/xml-schema/ Einführung in XML Schema und Referenz]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste W3C-Standards}}&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4803276-1}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:XML-basierte Sprache]]&lt;br /&gt;
[[Kategorie:XML]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>