Teilen über


XML-Schemasammlungen (SQL Server)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Wie im Artikel xml (Transact-SQL) beschrieben, ermöglicht SQL Server eine systemeigene Speicherung von XML-Daten mithilfe des xml-Datentyps. Optional können Sie über eine XML-Schemaauflistung einer Variablen oder einer Spalte vom xml -Typ XSD-Schemas zuordnen. Die XML-Schemaauflistung speichert die importierten XML-Schemas und wird dann für folgende Zwecke verwendet:

  • Überprüfen von XML-Instanzen

  • Typisierung der in der Datenbank gespeicherten XML-Daten

Die XML-Schemasammlung ist genau wie eine Tabelle in der Datenbank eine Metadatenentität. Sie können sie erstellen, ändern und löschen. In einer CREATE XML SCHEMA COLLECTION (Transact-SQL) -Anweisung angegebene Schemas werden automatisch in das neu erstellte XML-Schemaauflistungsobjekt importiert. Mit der ALTER XML SCHEMA COLLECTION (Transact-SQL) -Anweisung können Sie zusätzliche Schemas oder Schemakomponenten in ein in der Datenbank vorhandenes Auflistungsobjekt importieren.

Wie im Artikel Vergleichen von typisiertem XML mit nicht typisiertem XML beschrieben, wird der XML-Code, der in einer Spalte oder in einer Variablen mit zugeordnetem Schema gespeichert ist, als typisiertes XML bezeichnet, weil das Schema die für die Instanzdaten benötigten Datentypinformationen bereitstellt. SQL Server verwendet diese Typinformationen für die Optimierung des Datenspeichers.

Die Abfrageverarbeitungs-Engine verwendet das Schema außerdem zur Typüberprüfung sowie zur Optimierung der Abfragen und zur Datenänderung.

SQL Server verwendet die zugeordnete XML-Schemasammlung außerdem bei typisiertem xml, um die XML-Instanz zu überprüfen. Wenn die XML-Instanz dem Schema entspricht, lässt die Datenbank das Speichern der Instanz und ihrer Typinformation im System zu. Anderenfalls wird die Instanz abgelehnt.

Um ein in der Datenbank gespeichertes Schema abzurufen, können Sie die systeminterne Funktion XML_SCHEMA_NAMESPACE verwenden. Weitere Informationen finden Sie unter Anzeigen einer gespeicherten XML-Schemaauflistung.

Die XML-Schemaauflistung können Sie auch verwenden, um XML-Variablen, -Parameter und -Spalten zu typisieren.

DDL zum Verwalten von Schemasammlungen

Sie können XML-Schemaauflistungen in der Datenbank erstellen und Variablen und Spalten des xml -Typs zuordnen. Zum Verwalten von Schemasammlungen in der Datenbank bietet SQL Server die folgenden DDL-Anweisungen:

Um eine XML-Schemaauflistung und die darin enthaltenen Schemas zu verwenden, müssen Sie zuerst mit der CREATE XML SCHEMA COLLECTION-Anweisung die Auflistung und die Schemas erstellen. Nach dem Erstellen der Schemaauflistung können Sie Variablen und Spalten vom Typ xml erstellen und diese der Schemaauflistung zuordnen. Nach dem Erstellen der Schemasammlung werden verschiedene Schemakomponenten in den Metadaten gespeichert. Mit der Anweisung ALTER XML SCHEMA COLLECTION können Sie zu vorhandenen Schemas außerdem weitere Komponenten oder zu vorhandenen Auflistungen neue Schemas hinzufügen.

Zum Löschen der Schemaauflistung verwenden Sie die DROP XML SCHEMA COLLECTION-Anweisung. Diese Anweisung löscht alle in der Auflistung enthaltenen Schemas und entfernt das Auflistungsobjekt. Zum Löschen einer Schemasammlung müssen die unter DROP XML SCHEMA COLLECTION (Transact-SQL) beschriebenen Bedingungen erfüllt sein.

Grundlegendes zu Schemakomponenten

Wenn Sie die CREATE XML SCHEMA COLLECTION-Anweisung verwenden, werden verschiedene Schemakomponenten in die Datenbank importiert. Zu den Schemakomponenten gehören Schemaelemente, -attribute und -typdefinitionen. Wenn Sie die DROP XML SCHEMA COLLECTION-Anweisung verwenden, wird die komplette Schemaauflistung entfernt.

CREATE XML SCHEMA COLLECTION speichert die Schemakomponenten in verschiedenen Systemtabellen.

Angenommen, das folgende Schema liegt vor:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="uri:Cust_Orders2"
            xmlns="uri:Cust_Orders2" >
  <xsd:attribute name="SomeAttribute" type="xsd:int" />
  <xsd:complexType name="SomeType" />
  <xsd:complexType name="OrderType" >
    <xsd:sequence>
      <xsd:element name="OrderDate" type="xsd:date" />
      <xsd:element name="RequiredDate" type="xsd:date" />
      <xsd:element name="ShippedDate" type="xsd:date" />
    </xsd:sequence>
    <xsd:attribute name="OrderID" type="xsd:ID" />
    <xsd:attribute name="CustomerID"  />
    <xsd:attribute name="EmployeeID"  />
  </xsd:complexType>
  <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="Order" type="OrderType"
                     maxOccurs="unbounded" />
       </xsd:sequence>
      <xsd:attribute name="CustomerID" type="xsd:string" />
      <xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
  </xsd:complexType>
  <xsd:element name="Customer" type="CustomerType" />
</xsd:schema>

Das obige Schema zeigt die verschiedenen Attributtypen von Komponenten, die in der Datenbank gespeichert werden können. Hierzu zählen SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateund ShippedDate.

Komponentenkategorien

Die in der Datenbank gespeicherten Schemakomponenten fallen in folgende Kategorien:

  • ELEMENT

  • ATTRIBUTE

  • TYPE (für einfache oder komplexe Typen)

  • ATTRIBUTEGROUP

  • MODELGROUP

Zum Beispiel:

  • SomeAttribute ist eine ATTRIBUT-Komponente.

  • SomeType, OrderType und CustomerType sind TYPE-Komponenten.

  • Customer ist eine ELEMENT-Komponente.

Wenn Sie ein Schema in die Datenbank importieren, wird von SQL Server nicht das Schema als solches gespeichert. Stattdessen speichert SQL Server die verschiedenen Einzelkomponenten. Das Tag <Schema> wird demnach nicht gespeichert, es werden nur die darin definierten Komponenten aufbewahrt. Nicht alle Schemaelemente werden erhalten. Wenn das Tag <Schema> Attribute enthält, die das Standardverhalten seiner Komponenten definieren, werden diese Attribute während des Importvorgangs in die darin enthaltenen Komponenten verschoben. Die folgende Tabelle stellt dies dar.

Attributname Behavior
attributeFormDefault Das form -Attribut, das für alle im Schema enthaltenen Attributdeklarationen angewendet wird, die dieses Attribut noch nicht enthalten. Der Wert wird auf den Wert des attributeFormDefault -Attributs festgelegt.
elementFormDefault Das form -Attribut, das für alle im Schema enthaltenen Elementdeklarationen angewendet wird, die dieses Attribut noch nicht enthalten. Der Wert wird auf den Wert des elementFormDefault -Attributs festgelegt.
blockDefault Das block -Attribut, das für alle Elementdeklarationen und Typdefinitionen angewendet wird, die dieses Attribut noch nicht enthalten. Der Wert wird auf den Wert des blockDefault -Attributs festgelegt.
finalDefault Das final -Attribut, das für alle Elementdeklarationen und Typdefinitionen angewendet wird, die dieses Attribut noch nicht enthalten. Der Wert wird auf den Wert des finalDefault -Attributs festgelegt.
targetNamespace Zum Zielnamespace gehörende Informationen zu den Komponenten werden in den Metadaten gespeichert.

Berechtigungen für eine XML-Schemasammlung

Sie müssen über die entsprechenden Berechtigungen verfügen, um die folgenden Aufgaben durchführen zu können:

  • Erstellen/Laden der XML-Schemaauflistung

  • Ändern der XML-Schemaauflistung

  • Löschen der XML-Schemaauflistung

  • Verwenden der XML-Schemaauflistung zum Typisieren von Spalten, Variablen und Parametern vom Typ xml oder Verwenden der Schemaauflistung in Tabellen- oder Spalteneinschränkungen

Das SQL Server-Sicherheitsmodell lässt die CONTROL-Berechtigung für jedes Objekt zu. Der Empfänger dieser Berechtigung erhält alle anderen Berechtigungen für das Objekt. Der Besitzer des Objekts verfügt ebenfalls über alle Berechtigungen für das Objekt.

Der Besitzer und der Empfänger der CONTROL-Berechtigung für ein Objekt können beliebige Berechtigungen für das Objekt erteilen. Ein Benutzer, der nicht der Besitzer ist und keine CONTROL-Berechtigung besitzt, kann dennoch Berechtigungen für ein Objekt erteilen, wenn WITH GRANT OPTION angegeben wurde. Angenommen, Benutzer A verfügt über WITH GRANT OPTION z. B. über REFERENCES-Berechtigung für eine XML-Schemaauflistung S, besitzt jedoch keine weiteren Berechtigungen für S. Benutzer A kann Benutzer B die REFERENCES-Berechtigung für Schemaauflistung S erteilen.

Das Sicherheitsmodell ermöglicht außerdem Berechtigungen zum Erstellen oder Verwenden von XML-Schemaauflistungen oder zum Übertragen des Besitzes von einem auf einen anderen Benutzer. In den folgenden Artikeln werden die Berechtigungen für XML-Schemasammlungen beschrieben.

Abrufen von Informationen zu XML-Schemas und -Schemasammlungen

XML-Schemaauflistungen sind in der Katalogsicht sys.xml_schema_collections aufgeführt. Die XML-Schemasammlung sys wird durch das System definiert. Sie enthält die vordefinierten Namespaces, die in allen benutzerdefinierten XML-Schemaauflistungen verwendet werden können, ohne dass sie explizit geladen werden müssen. Diese Auflistung enthält die Namespaces für xml, xs, xsi, fn und xdt. Zwei weitere Katalogsichten sind sys.xml_schema_namespaces, die alle Namespaces innerhalb jeder Schemasammlung aufführt, und sys.xml_components, die alle XML-Schemakomponenten innerhalb jedes XML-Schemas aufführt.

Die integrierte Funktion XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri erbringt eine xml-Datentypinstanz. Diese Instanz enthält XML-Schemafragmente für Schemas, die in einer XML-Schemaauflistung enthalten sind, mit Ausnahme der vordefinierten XML-Schemas.

Es gibt folgende Möglichkeiten, um den Inhalt einer XML-Schemaauflistung aufzuführen:

  • Schreiben Sie Transact-SQL-Abfragen zur jeweiligen Katalogsicht für XML-Schemaauflistungen.

  • Verwenden Sie die integrierte Funktionen XML_SCHEMA_NAMESPACE(). Auf das Ergebnis dieser Funktion können Sie die xml -Datentypmethoden anwenden. Allerdings können Sie dabei die zugrunde liegenden XML-Schemas nicht ändern.

Diese Möglichkeiten werden in den folgenden Beispielen veranschaulicht.

Beispiele

Auflisten der XML-Namespaces in einer XML-Schemasammlung

Verwenden Sie die folgende Abfrage für die XML-Schemasammlung myCollection:

SELECT XSN.name
FROM    sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
    ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE    XSC.name = 'myCollection';

Auflisten des Inhalts einer XML-Schemasammlung

Mit der folgenden Anweisung wird der Inhalt der XML-Schemasammlung myCollection im relationalen Schema dbo aufgelistet.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');

Einzelne XML-Schemas innerhalb der Auflistung können als xml -Datentypinstanzen abgerufen werden, indem der Zielnamespace als drittes Argument für XML_SCHEMA_NAMESPACE()angegeben wird. Dies wird im folgenden Beispiel gezeigt.

Ausgeben eines angegebenen Schemas aus einer XML-Schemasammlung

Mit der folgenden Anweisung wird das XML-Schema mit dem pretend-Zielnamespace https://www.microsoft.com/was-books aus der XML-Schemasammlung myCollection im relationalen Schema dbo ausgegeben.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')

Abfragen von XML-Schemas

Es gibt folgende Möglichkeiten, um XML-Schemas, die Sie in XML-Schemaauflistungen geladen haben, abzufragen:

  • Schreiben Sie Transact-SQL-Abfragen zu Katalogsichten für XML-Schemaauflistungen.

  • Erstellen Sie eine Tabelle, die eine xml -Datentypspalte enthält, um die XML-Schemas zu speichern, und laden Sie diese auch in das XML-Typsystem. Sie können dann diese XML-Spalte abfragen, indem Sie xml -Datentypmethoden verwenden. Für diese Spalte können Sie auch einen XML-Index erstellen. Allerdings muss die Anwendung für diese Vorgehensweise die Konsistenz zwischen den in der XML-Spalte gespeicherten XML-Schemas und dem XML-Typsystem beibehalten. Wenn Sie z. B. den XML-Schemanamespace aus dem XML-Typsystem löschen, müssen Sie ihn auch aus der Tabelle löschen, damit die Konsistenz beibehalten wird.

Siehe auch