XML Datenbank Technologien

Als XML-Datenbank werden Datenbanken oder Datenbankverwaltungssysteme bezeichnet, die Daten im XML-Format verarbeiten oder mit XML-Daten umgehen können. Man kann daher XML-Datenbanksysteme in zwei Kategorien unterteilen.

XML-enabled

Herkömmliche Datenbanksysteme (z. B. Relationale Datenbanksysteme, …) die ein Mapping auf oder ins XML-Format erlauben. Man bezeichnet diese Vorgehensweise als datenorientiert.

Native XML-Datenbanksysteme

Diese Systeme speichern die Information, ähnlich wie bei der Speicherung von XML-Dokumenten im Dateisystem, direkt als XML-Dokumente ab. Sie werden daher auch als dokumentenorientiert bezeichnet.

Quelle: https://de.wikipedia.org/wiki/XML-Datenbank

XML Binding Language – Was ist das?

Die XML Binding Language ist eine XML-basierte Auszeichnungssprache, mit der man das Verhalten und Aussehen von XML- und HTML-Elementen beschreiben kann. Sie wird auch XBL genannt. Dies geschieht über sogenannte Bindings (Bindungen) in XBL, die an ein solches Element angehängt werden. Die Bindings werden in einer separaten XBL-Datei definiert. Über ein Binding kann auch Text in das XML- oder HTML-Element eingefügt werden. Ein Binding kann an mehrere unterschiedliche Elemente angehängt werden. XBL kommt häufig als Erweiterung von XUL zum Einsatz, um das Verhalten eines XUL-Widgets zu beschreiben. So kann mit XBL beispielsweise die Funktionalität einer Scrollbar geändert werden, was in XUL alleine nicht möglich ist.

XBL wurde vom Mozilla-Projekt für die eigenen Mozilla-Anwendungen entwickelt. Die Sprache entspricht momentan keinem Standard und ist proprietär. Nur die Gecko-Engine kann mit dieser Sprache umgehen. XBL 2.0 ist die neue Version von XBL, welche vom World Wide Web Consortium standardisiert werden wird.

Quelle: https://de.wikipedia.org/wiki/XML_Binding_Language

XML Namespace oder Namensraum

XML-Namensräume (englisch „XML namespaces“) werden benutzt, um das Vokabular eines XML-Dokumentes eindeutig zu identifizieren und um in einem einzelnen Dokument mehrere XML-Sprachen zu mischen. Ihre Funktionsweise ist mit Vorwahlen bei Telefonnummern zu vergleichen.

Zum Beispiel beschreibt das <p>-Element in XHTML einen Absatz; in einer XML-Sprache für eine Personendatenbank könnte <p> ein Element für eine Person darstellen. Namensräume erlauben, diese Elemente eindeutig zu unterscheiden.

Der Namensraum-Mechanismus für XML-Daten wurde vom W3-Konsortium entwickelt und liegt seit dem 8. Dezember 2009 in der dritten Auflage sowohl für XML 1.0 als auch für XML 1.1 vor. Die erste Version der Spezifikation datiert auf den 14. Januar 1999, also etwa ein Jahr, nachdem die XML-Spezifikation verabschiedet wurde. Aus diesem Grund findet man z. B. in der Empfehlung zu MathML 1.0 noch keine Namensraumangabe. Die zweite Version wurde am 16. August 2006 veröffentlicht.

Aufbau der XML Namensräumen

Namensräume werden durch URIs dargestellt, meistens also durch normale Webadressen. Dabei ist zu beachten, dass die entsprechende Adresse nicht existieren muss. Sie kann beliebig definiert werden. Wichtig ist zudem, dass bei Namensraumangaben auf Groß- und Kleinschreibung, auch im Host-Teil, sowie eine eventuelle URL-Kodierung, z. B. %C3%A4 statt ä, geachtet werden muss.

Wenn eine URL als Namensraum verwendet wird, ist es jedoch meistens sinnvoll, unter dieser Adresse zusätzliche Informationen zu der XML-Sprache anzubieten, z. B. eine Dokumenttypdefinition (DTD) oder ein XML-Schema.

Quelle: https://de.wikipedia.org/wiki/Namensraum_(XML)

XML Events einfach beschrieben

XML Events ist eine Spezifikation des W3C, um Ereignisse, die in einem XML-Dokument auftreten, zu handhaben. Diese Ereignisse werden typischerweise durch einen Benutzer ausgelöst, der mit dem Dokument, einer Webseite, mit Hilfe eines Internetbrowsers auf einem PC, Mobiltelefon oder Telefon, interagiert.

Technisch gesehen ist ein XML-Event die Repräsentation eines asynchronen Vorgangs (z.B. eines Mausklicks auf einen Button) dem ein beliebiges Datenelement in einem XML-Dokument zugeordnet wird. XML-Events bietet eine statische, syntaktische Bindung zum DOM Events-Interface, wodurch das Ereignis verarbeitet werden kann.

Quelle: https://de.wikipedia.org/wiki/XML_Events

Was ist XML Base?

XML Base ist eine vom World Wide Web Consortium empfohlene Möglichkeit, Basis-URLs für Teile von XML-Dokumenten zu definieren. Basis-URL bezeichnet dabei diejenige URL, von der aus relative Pfadangaben im Dokument aufgelöst werden. Die XML Base-Empfehlung wurde am 27. Juni 2001 eingeführt.

Das xml:base-Attribut kann in XML-Dokumenten an beliebiger Stelle eingefügt werden, um eine andere Basis-URL als die des Dokumentes oder einer externen URI bzw. externen Entität zu verwenden. Der Wert des Attributes wird als URI-Referenz, wie in RFC 2396 [IETF RFC 2396] definiert, interpretiert, nachdem er wie in Teil 3.1 der Spezifikation verarbeitet wurde.

In XML-Prozessoren, die XML-Namensräume berücksichtigen, ist das „xml“-Präfix an die Namespace-Bezeichnung http://www.w3.org/XML/1998/namespace gebunden, wie dort unter Namespaces in XML [XML Names] beschrieben. Trotzdem kann xml:base auch von Prozessoren genutzt werden, die keine Namensräume verarbeiten.

Quelle: https://de.wikipedia.org/wiki/XML_Base

Was ist XMLHttpRequest?

XMLHttpRequest (XHR) ist eine Programmierschnittstelle für JavaScript zum Übertragen von Daten über das HTTP-Protokoll. XMLHttpRequest bildet einen Grundbaustein der Ajax-Technik.

XMLHttpRequest ermöglicht es einem Skript einer Webseite, Daten dynamisch vom Webserver abzurufen, ohne dass dazu die HTML-Seite neu geladen werden müsste. Dies war zuvor nur durch den Einsatz unsichtbarer HTML-Frames oder IFrames oder mit dynamisch nachgeladenen Skript-Dateien[1] möglich. Da beim XMLHttpRequest-Verfahren Daten asynchron verarbeitet werden können, muss ein Skript nicht warten, bis die Anfrage beantwortet ist, sondern kann sich solange anderen Aufgaben zuwenden.

Die Schnittstellenbeschreibung des XMLHTTPRequest-Objekts gemäß dem Standardisierungsvorschlag des W3C.

Mit XMLHttpRequest können sämtliche HTTP-Anfragemethoden (unter anderem GET, POST, HEAD, PUT) verwendet werden. Wenn eine Anfrage XML-Daten liefert, kann XMLHttpRequest diese alternativ als Text oder als DOM-Baumstruktur zurücksenden. Letzteres eignet sich beispielsweise dazu, mit Webservices zu kommunizieren.

Quelle: https://de.wikipedia.org/wiki/XMLHttpRequest

Datentypen beim XML Schema

XML Schema unterscheidet zwischen einfachen (atomaren) Datentypen und komplexen Datentypen. Der Begriff Typ bezeichnet im nachfolgenden Text jeweils die abstrakte Spezifikation der Struktur eines Abschnitts innerhalb eines XML-Dokumentes. Datentypen in XML Schema werden klassifiziert in eingebaute bzw. vordefinierte (built-in) und benutzerdefinierte (user defined) Datentypen.

In der Spezifikation des W3C für XML Schema sind 19 voreingestellte primitive Datentypen (z. B. boolean, string, float, date und NOTATION) und weitere 25 davon abgeleitete primitive Datentypen (wie ID und integer) definiert.

Einfache Typen

XML Schema stellt einige grundlegende atomare Datentypen bereit. Die atomaren Datentypen enthalten die „klassischen“ Typen, wie sie zum Teil auch in anderen Typsystemen (z. B. C, Java oder SQL) spezifiziert sind:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:float
  • xs:boolean
  • xs:date
  • xs:time

Hinzu kommen weitere XML-spezifische atomare Typen, unter anderem:

  • QName: Qualifizierter Name, global eindeutiger Bezeichner. Aufgebaut aus sog. NCNames (Non-Colonized Names), wobei jeder NCName bis auf den letzten einen Namensraum (Namespace) bezeichnet. Der letzte NCName entspricht dem lokalen Namen innerhalb des Namensraumes. Die einzelnen NCNames werden mittels Punkt (.) zu einem QName zusammengesetzt.
  • anyURI: Uniform Resource Identifier (URI)
  • language: Sprachbezeichnung, z. B. de-DE, en-US, fr
  • ID: Identifikationsattribut innerhalb von XML-Elementen
  • IDREF: Referenz auf einen ID-Wert

Einfache XML-Datentypen dürfen weder XML-Kindelemente enthalten noch XML-Attribute besitzen.

Außer den atomaren Datentypen gehören Listen und Unions (bestehend aus atomaren Elementen und Listen) zu den einfachen Typen:

  • Das folgende Beispiel definiert einen neuen XML-Datentyp mit dem Namen monatInt sowie eine Liste dieses neuen Typs:
<xs:simpleType name="monatInt">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="1"/>
    <xs:maxInclusive value="12"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="monate">
  <xs:list itemType="monatInt"/>
</xs:simpleType>

Eine Instanz des neuen Typs könnte wie folgt aussehen:

<monate>
   1 2 3 4 5 6 7 8 9 10 11 12
</monate>

Die einzelnen Elemente einer Liste werden durch Whitespaces (hier Leerzeichen) getrennt.

  • Zu den einfachen Typen gehören zusätzlich noch sogenannte Vereinigungen (engl. unions).

Ein neuer Typ wird als Vereinigungsmenge bereits bestehender Typen definiert. Jede Instanz wählt dann ihren Typ aus dieser Menge. Das nachfolgende Beispiel definiert einen weiteren Typ monatsname sowie einen Union Typ monat:

<xs:simpleType name="monatsname">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Jan"/>
    <xs:enumeration value="Feb"/>
    <xs:enumeration value="Mär"/>
    <!-- und so weiter … -->
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="monat">
  <xs:union memberTypes="monatsname monatInt"/>
</xs:simpleType>

XML-Elemente vom Typ monat dürfen entweder Integer Werte im Bereich 1–12 enthalten oder eine der entsprechenden Monatsbezeichnungen als Zeichenkette. Gültige Instanzen sind beispielsweise:

<monat>Jan</monat>
<monat>2</monat>

Komplexe Typen

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.

Das folgende Beispiel definiert einen neuen Typ pc-Typ mit entsprechenden Kindelementen name, hersteller etc., sowie einem Attribut id:

<xs:complexType name="pc-Typ">
  <xs:sequence>
    <xs:element name="name"       type="xs:string"/>
    <xs:element name="hersteller" type="xs:string"/>
    <xs:element name="prozessor"  type="xs:string"/>
    <xs:element name="mhz"        type="xs:integer" minOccurs="0"/>
    <xs:element name="kommentar"  type="xs:string"  minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:integer"/>
</xs:complexType>

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.

Die Kindelemente eines komplexen Typs können auf drei unterschiedliche Arten kombiniert werden:

  • xs:sequence: Eine Liste von Kindelementen wird spezifiziert. Jedes dieser Elemente kann keinmal, einmal oder mehrfach auftreten (Attribute minOccurs und maxOccurs). Falls kein occurs-Attribut vorhanden ist, wird in beiden Fällen der Default-Wert 1 verwendet. Die Elemente innerhalb einer sequence müssen in der angegebenen Reihenfolge auftreten. In dem oben gezeigten Beispiel müssen die Elemente name, hersteller und prozessor genau einmal auftreten, das mhz-Element kann null- oder einmal auftreten, kommentar-Elemente können beliebig oft oder auch gar nicht auftreten.
  • xs:choice: Aus einer Liste von Alternativen kann ein Element ausgewählt werden. Das nachfolgende Beispiel definiert einen neuen Typ computer, der als Kindelement entweder ein desktop-Element besitzt (vom Typ pc-Type) oder ein laptop-Element:
<xs:complexType name="computer">
  <xs:choice>
    <xs:element name="desktop" type="pc-Typ"/>
    <xs:element name="laptop" type="laptop-Typ"/>
  </xs:choice>
</xs:complexType>
  • xs:all: Mittels des xs:all-Tags lässt sich eine Gruppe von Kindelementen definieren, von denen jedes maximal einmal auftreten darf (min- und maxOccurs der Kindelemente dürfen nur die Werte 0 oder 1 annehmen). Die Reihenfolge der Elemente ist beliebig.

Beliebiger Inhalt

XML-Elemente mit beliebigem Inhalt lassen sich mittels des Basistyps anyType definieren. Der nachfolgende Code spezifiziert ein kommentar-Element beliebigen Inhalts, d. h. sowohl komplexe XML-Elemente als auch Text können vorkommen.

<xs:element name="kommentar" type="xs:anyType"/>

Sollen in dem Inhalt Text und Tags in beliebiger Reihenfolge vorkommen können, muss der Wert für das Attribut “mixed” auf “true” gesetzt werden:

<xs:element name="tagname">
  <xs:complexType mixed="true">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="child" type="xs:integer"/>
      <!-- Weitere Elemente … -->
    </xs:sequence>
  </xs:complexType>
</xs:element>

Leere Elemente

Von leeren XML-Elementen spricht man, wenn das jeweilige Element aus nur einem einzelnen XML-Tag besteht und keine weiteren XML-Elemente oder Text umschließt (z. B. der XHTML-Zeilenumbruch: <br />). XML Schema bedient sich an dieser Stelle eines kleinen Tricks: Es wird mittels xs:complexType ein neuer Typ definiert, ohne ein Kindelement anzugeben. Da xs:complexType nach Vorgabe nur komplexe XML-Kindelemente als Inhalt zulässt, bleibt das jeweilige Element in diesem Fall leer.

Ableitung neuer Typen

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.

Bei der Ableitung eines neuen Typs handelt es sich nicht um eine Vererbung im Sinne der Objektorientierung, da keine Eigenschaften vergleichbar den Methoden oder Attribute objektorientierter 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 Typumwandlungen sind jedoch möglich).

Die Ableitung eines neuen Typs kann auf zweierlei Arten erfolgen: Erweiterung oder Einschränkung.

Erweiterung eines Typs

Die Erweiterung eines bisherigen Typs (engl. extension) um weitere Eigenschaften, d. h. neue Elemente oder Attribute werden hinzugefügt. Im folgenden Beispiel wird der oben definierte Typ pc-Typ um ein Element ram erweitert:

<xs:complexType name="myPC-Typ">
  <xs:complexContent>
    <xs:extension base="pc-Typ">
      <xs:sequence>
        <xs:element name="ram" type="xs:integer"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

Der neu definierte XML-Typ myPC-Typ besteht aus allen Kindelementen des Typs pc-Typ sowie dem Element ram. Letzteres wird, wie in einer xs:sequence-Definition, an die bisherigen Kindelemente angehängt.
Da keine Substituierbarkeit gegeben ist, darf an einer Stelle an der ein Element vom Typ pc-Typ erwartet wird nicht ohne weiteres ein Element vom Typ myPC-Typ verwendet werden.

Einschränkung eines Typs

Durch Einschränkung bereits bestehender Typen (engl. restriction) 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 myPC2-Typ von pc-Typ abgeleitet. In diesem Fall darf maximal ein kommentar-Element auftreten (im Gegensatz zu einer beliebigen Anzahl beim Typ pc-Typ)

<xs:complexType name="myPC2-Typ">
  <xs:complexContent>
    <xs:restriction base="pc-Typ">
      <xs:sequence>
       <xs:element name="name"       type="xs:string"/>
       <xs:element name="hersteller" type="xs:string"/>
       <xs:element name="prozessor"  type="xs:string"/>
       <xs:element name="mhz"        type="xs:integer" minOccurs="0"/>
       <xs:element name="kommentar"  type="xs:string" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

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 monatInt 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:

  • length, maxLength, minLength – Beschränkt die Länge eines Strings oder einer Liste.
  • enumeration – Beschränkung durch Angabe alternativer Werte
  • pattern – Beschränkung durch Angabe eines regulären Ausdrucks
  • minExclusive, minInclusive, maxExclusive, maxInclusive – Einschränkung des Wertebereichs.
  • totalDigits, fractionDigits – Einschränkung der Dezimalstellen (Gesamtzahl und Nachkommastellen)
  • whiteSpace – Behandlung von Leerzeichen und Tabs

Die folgenden Beispiele veranschaulichen die Verwendung dieser Komponenten:

  • Körpertemperatur, 3 Dezimalstellen, 1 Nachkommastelle, Minimal- und Maximalwert
<xs:simpleType name="celsiusKörperTemp">
  <xs:restriction base="xs:decimal">
    <xs:totalDigits value="3"/>
    <xs:fractionDigits value="1"/>
    <xs:minInclusive value="35.0"/>
    <xs:maxInclusive value="42.5"/>
  </xs:restriction>
</xs:simpleType>
  • Deutsche Postleitzahlen, optionales „D “ gefolgt von fünf Ziffern
<xs:simpleType name="plz">
   <xs:restriction base="xs:string">
     <xs:pattern value="(D )?[0-9]{5}"/>
   </xs:restriction>
</xs:simpleType>
  • Größenangabe
<xs:simpleType name="size">
  <xs:restriction base="xs:string">
    <xs:enumeration value="XS"/>
    <xs:enumeration value="S"/>
    <xs:enumeration value="M"/>
    <xs:enumeration value="L"/>
    <xs:enumeration value="XL"/>
  </xs:restriction>
</xs:simpleType>

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 pc-Typ weitere Typen nur durch das Setzen weiterer Einschränkungen abgeleitet werden dürfen – und nicht durch das Hinzufügen neuer Kindelemente.

Quelle: https://de.wikipedia.org/wiki/XML_Schema

Das XML Schema

XML Schema, abgekürzt XSD (XML Schema Definition), ist eine Empfehlung des W3C zum Definieren von Strukturen für XML-Dokumente. Anders als bei den klassischen XML-DTDs wird die Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird eine große Anzahl von Datentypen unterstützt.

XML Schema beschreibt in einer komplexen Schemasprache Datentypen, einzelne XML-Schema-Instanzen (Dokumente) und Gruppen solcher Instanzen. Ein konkretes XML Schema wird auch als eine XSD (XML Schema Definition) bezeichnet und hat als Datei üblicherweise die Endung „.xsd“. Im Gegensatz zu 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.

Außer den XML Schemata sind weitere Konzepte zur Definition von XML-Strukturen mit verschiedenen Intentionen bekannt, wie DTD, RELAX NG oder Schematron.

Quelle: https://de.wikipedia.org/wiki/XML_Schema