Freigeben über


XML-Schemasammlungen (SQL Server)

Wie im Thema beschrieben, bietet XML (Transact-SQL) SQL Server systemeigene Speicherung von XML-Daten über den xml Datentyp. Sie können XSD-Schemas optional einer Variablen oder einer Spalte vom xml Typ über eine XML-Schemaauflistung zuordnen. Die XML-Schemaauflistung speichert die importierten XML-Schemas und wird dann verwendet, um Folgendes auszuführen:

  • Überprüfen von XML-Instanzen

  • Geben Sie die XML-Daten so ein, wie sie in der Datenbank gespeichert sind.

Beachten Sie, dass die XML-Schemaauflistung eine Metadatenentität wie eine Tabelle in der Datenbank ist. Sie können sie erstellen, ändern und ablegen. Schemas, die in einer CREATE XML SCHEMA COLLECTION (Transact-SQL) -Anweisung angegeben sind, werden automatisch in das neu erstellte XML-Schemaauflistungsobjekt importiert. Sie können zusätzliche Schemas oder Schemakomponenten in ein vorhandenes Auflistungsobjekt in der Datenbank importieren, indem Sie die ALTER XML SCHEMA COLLECTION (Transact-SQL) - Anweisung verwenden.

Wie im Thema beschrieben, typisierte und nicht typisierte XML-Daten, wird der in einer Spalte oder Variable gespeicherte XML-Code, dem ein Schema zugeordnet ist, als typisiertes XML bezeichnet, da das Schema die erforderlichen Datentypinformationen für die Instanzdaten bereitstellt. SQL Server verwendet diese Typinformationen, um die Datenspeicherung zu optimieren.

Das Abfrageverarbeitungsmodul verwendet außerdem das Schema für die Typüberprüfung und optimierung von Abfragen und Datenänderungen.

Zudem verwendet SQL Server die zugeordnete XML-Schemaauflistung im Falle der typisierten xml, um die XML-Instanz zu validieren. Wenn die XML-Instanz dem Schema entspricht, ermöglicht die Datenbank die Speicherung der Instanz im System mit ihren Typinformationen. Andernfalls wird die Instanz abgelehnt.

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

Sie können die XML-Schemaauflistung auch zum Eingeben von XML-Variablen, -Parametern und -Spalten verwenden.

DDL für die Verwaltung von Schemasammlungen

Sie können XML-Schemaauflistungen in der Datenbank erstellen und sie Variablen und Spalten des Typs xml zuordnen. Um Schemasammlungen in der Datenbank zu verwalten, stellt SQL Server die folgenden DDL-Anweisungen bereit:

Um eine XML-Schemaauflistung und die darin enthaltenen Schemas zu verwenden, müssen Sie zuerst die Auflistung und die Schemas mithilfe der CREATE XML SCHEMA COLLECTION-Anweisung erstellen. Nachdem die Schemaauflistung erstellt wurde, können Sie Variablen und Spalten vom xml Typ erstellen und die Schemaauflistung ihnen zuordnen. Beachten Sie, dass nach dem Erstellen einer Schemaauflistung verschiedene Schemakomponenten in den Metadaten gespeichert werden. Sie können auch die ALTER XML SCHEMA COLLECTION verwenden, um den vorhandenen Schemas weitere Komponenten hinzuzufügen oder einer vorhandenen Auflistung neue Schemas hinzuzufügen.

Verwenden Sie zum Ablegen der Schemaauflistung die DROP XML SCHEMA COLLECTION-Anweisung. Das entfernt alle Schemas, die in der Sammlung enthalten sind, und löscht das Sammlungsobjekt. Beachten Sie, dass vor dem Ablegen einer Schemaauflistung die in DROP XML SCHEMA COLLECTION (Transact-SQL) beschriebenen Bedingungen erfüllt sein müssen.

Grundlegendes zu Schemakomponenten

Wenn Sie die CREATE XML SCHEMA COLLECTION-Anweisung verwenden, werden verschiedene Schemakomponenten in die Datenbank importiert. Schemakomponenten umfassen Schemaelemente, Attribute und Typdefinitionen. Wenn Sie die DROP XML SCHEMA COLLECTION-Anweisung verwenden, entfernen Sie die vollständige Auflistung.

CREATE XML SCHEMA COLLECTION speichert die Schemakomponenten in verschiedenen Systemtabellen.

Betrachten Sie z. B. das folgende Schema:

<?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 vorherige Schema zeigt die verschiedenen Typen von Komponenten, die in der Datenbank gespeichert werden können. Dazu gehören SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate und ShippedDate.

Komponentenkategorien

Die in der Datenbank gespeicherten Schemakomponenten sind in die folgenden Kategorien unterteilt:

  • Element

  • ATTRIBUT

  • TYPE (für einfache oder komplexe Typen)

  • ATTRIBUTEGROUP

  • MODELGROUP

Beispiel:

  • SomeAttribute ist eine ATTRIBUT-Komponente.

  • SomeType, OrderType und CustomerType sind TYPE-Komponenten.

  • Kunde ist eine ELEMENT-Komponente.

Wenn Sie ein Schema in die Datenbank importieren, speichert SQL Server das Schema nicht selbst. Stattdessen speichert SQL Server die verschiedenen einzelnen Komponenten. <Das Schematag> wird also nicht gespeichert, nur die darin definierten Komponenten bleiben erhalten. Alle Schemaelemente bleiben nicht erhalten. Wenn das <Schematag> Attribute enthält, die das Standardverhalten seiner Komponenten angeben, werden diese Attribute während des Importvorgangs in die Schemakomponenten verschoben, wie in der folgenden Tabelle dargestellt.

Attributname Verhalten
attributeFormDefault Das Form-Attribut wird auf alle Attributdeklarationen im Schema angewendet, wo es noch nicht vorhanden ist, und der Wert wird auf den Wert des Attributs attributeFormDefault festgelegt.
elementFormDefault Das Attribut "form" wird auf alle Elementdeklarationen im Schema angewendet, bei denen es noch nicht vorhanden ist, und der Wert wird auf den Wert des Attributs 'elementFormDefault' festgelegt.
Standard blockieren Das Block-Attribut , das auf alle Elementdeklarationen und Typdefinitionen angewendet wird, in denen es noch nicht vorhanden ist, und der Wert wird auf den Wert des blockDefault-Attributs festgelegt.
finalDefault Das letzte Attribut, das auf alle Elementdeklarationen und Typdefinitionen angewendet wird, in denen es noch nicht vorhanden ist, und der Wert wird auf den Wert des finalDefault-Attributs festgelegt.
targetNamespace Informationen zu den Komponenten, die zum Zielnamespace gehören, werden in den Metadaten gespeichert.

Berechtigungen für eine XML-Schemaauflistung

Sie müssen über die erforderlichen Berechtigungen verfügen, um Folgendes auszuführen:

  • Erstellen/Laden der XML-Schemaauflistung

  • Ändern der XML-Schemaauflistung

  • Entfernen der XML-Schemasammlung

  • Verwenden Sie die XML-Schemaauflistung, um xml Typ-Spalten, Variablen und Parameter einzugeben oder sie in Tabellen- oder Spalteneinschränkungen zu verwenden.

Das SQL Server-Sicherheitsmodell ermöglicht CONTROL-Berechtigungen für jedes Objekt. Der Erteilte dieser Berechtigung erhält alle anderen Berechtigungen für das Objekt. Der Besitzer des Objekts verfügt auch über alle Berechtigungen für das Objekt.

Der Besitzer und der Inhaber der CONTROL-Berechtigung für ein Objekt können jegliche Berechtigungen für das Objekt erteilen. Ein Benutzer, der nicht der Besitzer ist und nicht über die CONTROL-Berechtigung verfügt, kann weiterhin Berechtigungen für ein Objekt erteilen, wenn die MIT GEWÄHRUNGSOPTION angegeben wird. Angenommen, Benutzer A verfügt mit der Option ZUR VERGABE über die REFERENCES-Berechtigungen für die XML-Schemasammlung S, aber keine anderen Berechtigungen für S. Benutzer A könnte Benutzer B die REFERENCES-Berechtigungen für die Schemasammlung S erteilen.

Das Sicherheitsmodell ermöglicht auch das Erstellen und Verwenden von XML-Schemasammlungen oder das Übertragen des Besitzes von einem Benutzer zu einem anderen. In den folgenden Themen werden die Berechtigungen für die XML-Schemasammlung beschrieben.

Abrufen von Informationen zu XML-Schemas und Schemasammlungen

XML-Schemaauflistungen werden in der Katalogansicht sys.xml_schema_collections aufgezählt. Die XML-Schemaauflistung "sys" wird vom System definiert. Sie enthält die vordefinierten Namespaces, die in allen benutzerdefinierten XML-Schemasammlungen verwendet werden können, ohne sie explizit laden zu müssen. Diese Liste enthält die Namespaces für XML, xs, xsi, fn und xdt. Zwei weitere Katalogansichten sind sys.xml_schema_namespaces, die alle Namespaces innerhalb jeder XML-Schemaauflistung aufzählt, und sys.xml_Komponenten, die alle XML-Schemakomponenten innerhalb jedes XML-Schemas auflisten.

Die integrierte Funktion XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, liefert 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.

Sie können den Inhalt einer XML-Schemaauflistung auf folgende Weise aufzählen:

  • Schreiben Sie Transact-SQL-Abfragen für die entsprechenden Katalogansichten von XML-Schemasammlungen.

  • Verwenden Sie die integrierte Funktion XML_SCHEMA_NAMESPACE(). Sie können die xml Datentypmethoden auf die Ausgabe dieser Funktion anwenden. Die zugrunde liegenden XML-Schemas können jedoch nicht geändert werden.

Diese werden in den folgenden Beispielen veranschaulicht.

Beispiel: Aufzählen der XML-Namespaces in einer XML-Schemaauflistung

Verwenden Sie die folgende Abfrage für die XML-Schemaauflistung "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'     

Beispiel: Aufzählen des Inhalts einer XML-Schemaauflistung

Die folgende Anweisung listet den Inhalt der XML-Schemaauflistung "myCollection" im relationalen Schema dbo auf.

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.

Beispiel: Ausgabe eines angegebenen Schemas aus einer XML-Schemaauflistung

Die folgende Anweisung gibt das XML-Schema mit dem Zielnamespace "https://www.microsoft.com/books" aus der XML-Schemaauflistung "myCollection" im relationalen Schema dbo aus.

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

Abfragen von XML-Schemas

Sie können XML-Schemas abfragen, die Sie auf folgende Weise in XML-Schemasammlungen geladen haben:

  • Schreiben sie Transact-SQL Abfragen in Katalogansichten für XML-Schemanamespaces.

  • Erstellen Sie eine Tabelle, die eine xml Datentypspalte enthält, um Ihre XML-Schemas zu speichern und auch in das XML-Typsystem zu laden. Sie können die XML-Spalte mithilfe der xml Datentypmethoden abfragen. Außerdem können Sie einen XML-Index für diese Spalte erstellen. Bei diesem Ansatz muss die Anwendung jedoch die Konsistenz zwischen den XML-Schemas beibehalten, die in der XML-Spalte und dem XML-Typsystem gespeichert sind. Wenn Sie beispielsweise den XML-Schemanamespace aus dem XML-Typsystem ablegen, müssen Sie ihn auch aus der Tabelle ablegen, um Konsistenz zu erhalten.

Siehe auch

Anzeigen einer gespeicherten XML-Schemaauflistung
Vorverarbeitung eines Schemas zum Zusammenführen eingeschlossener Schemas
Anforderungen und Einschränkungen für XML-Schemasammlungen auf dem Server