XML-Schemaauflistungen (SQL Server)XML Schema Collections (SQL Server)

Wie im Thema xml (Transact-SQL) beschrieben wird, ermöglicht SQL Server eine systemeigene Speicherung von XML-Daten mithilfe des xml-Datentyps.As described in the topic, xml (Transact-SQL), SQL Server provides native storage of XML data through the xml data type. Optional können Sie über eine XML-Schemaauflistung einer Variablen oder einer Spalte vom xml -Typ XSD-Schemas zuordnen.You can optionally associate XSD schemas with a variable or a column of xml type through an XML schema collection. Die XML-Schemaauflistung speichert die importierten XML-Schemas und wird dann für folgende Zwecke verwendet:The XML schema collection stores the imported XML schemas and is then used to do the following:

  • Überprüfen von XML-InstanzenValidate XML instances

  • Typisierung der in der Datenbank gespeicherten XML-DatenType the XML data as it is stored in the database

    Beachten Sie, dass die XML-Schemaauflistung wie eine Tabelle in der Datenbank eine Metadatenentität ist.Note that the XML schema collection is a metadata entity like a table in the database. Sie können sie erstellen, ändern und löschen.You can create, modify, and drop them. In einer CREATE XML SCHEMA COLLECTION (Transact-SQL) -Anweisung angegebene Schemas werden automatisch in das neu erstellte XML-Schemaauflistungsobjekt importiert.Schemas specified in a CREATE XML SCHEMA COLLECTION (Transact-SQL) statement are automatically imported into the newly created XML schema collection object. 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.You can import additional schemas or schema components into an existing collection object in the database by using the ALTER XML SCHEMA COLLECTION (Transact-SQL) statement.

    Wie im Thema Vergleichen von typisiertem XML mit nicht typisiertem XML beschrieben wird, 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 Instanzendaten benötigten Datentypinformationen bereitstellt.As described in the topic, Typed vs. Untyped XML, the XML stored in a column or variable that a schema is associated with is referred to as typed XML, because the schema provides the necessary data type information for the instance data. SQL Server verwendet diese Typinformationen für die Optimierung des Datenspeichers.SQL Server uses this type information to optimize data storage.

    Das Abfrageverarbeitungsmodul verwendet das Schema außerdem zur Typüberprüfung sowie zur Optimierung der Abfragen und zur Datenänderung.The query-processing engine also uses the schema for type checking and to optimize queries and data modification.

    SQL Server verwendet die zugeordnete XML-Schemaauflistung außerdem im Fall von typisiertem xml, um die XML-Instanz zu überprüfen.Also, SQL Server uses the associated XML schema collection, in the case of typed xml, to validate the XML instance. Wenn die XML-Instanz dem Schema entspricht, lässt die Datenbank das Speichern der Instanz und ihrer Typinformation im System zu.If the XML instance complies with the schema, the database allows the instance to be stored in the system with their type information. Anderenfalls wird die Instanz abgelehnt.Otherwise, it rejects the instance.

    Um ein in der Datenbank gespeichertes Schema abzurufen, können Sie die systeminterne Funktion XML_SCHEMA_NAMESPACE verwenden.You can use the intrinsic function XML_SCHEMA_NAMESPACE to retrieve the schema collection that is stored in the database. Weitere Informationen finden Sie unter Anzeigen einer gespeicherten XML-Schemaauflistung.For more information, see View a Stored XML Schema Collection.

    Die XML-Schemaauflistung können Sie auch verwenden, um XML-Variablen, -Parameter und -Spalten zu typisieren.You can also use the XML schema collection to type XML variables, parameters, and columns.

DDL zum Verwalten von Schemaauflistungen DDL for Managing Schema Collections

Sie können XML-Schemaauflistungen in der Datenbank erstellen und Variablen und Spalten des xml -Typs zuordnen.You can create XML schema collections in the database and associate them with variables and columns of xml type. SQL ServerSQL Server bietet die folgenden DDL-Anweisungen zum Verwalten von Schemaauflistungen:To manage schema collections in the database, SQL ServerSQL Server provides the following DDL statements:

  • CREATE XML SCHEMA COLLECTION (Transact-SQL) Importiert die Schemakomponenten in eine Datenbank.CREATE XML SCHEMA COLLECTION (Transact-SQL) Imports schema components into a database.

  • ALTER XML SCHEMA COLLECTION (Transact-SQL) Ändert die Schemakomponenten in einer vorhandenen XML-Schemaauflistung.ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifies the schema components in an existing XML schema collection.

  • DROP XML SCHEMA COLLECTION (Transact-SQL) Löscht eine gesamte XML-Schemaauflistung und alle zugehörigen Komponenten.DROP XML SCHEMA COLLECTION (Transact-SQL) Deletes a complete XML schema collection and all its components.

    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.To use an XML schema collection and the schemas it contains, you must first create the collection and the schemas by using the CREATE XML SCHEMA COLLECTION statement. Nach dem Erstellen der Schemaauflistung können Sie Variablen und Spalten vom Typ xml erstellen und diese der Schemaauflistung zuordnen.After the schema collection is created, you can then create variables and columns of xml type and associate the schema collection with them. Beachten Sie, dass nach dem Erstellen der Schemaauflistung verschiedene Schemakomponenten in den Metadaten gespeichert werden.Note that after a schema collection is created, various schema components are stored in the metadata. 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.You can also use the ALTER XML SCHEMA COLLECTION to add more components to the existing schemas or add new schemas to an existing collection.

    Zum Löschen der Schemaauflistung verwenden Sie die DROP XML SCHEMA COLLECTION-Anweisung.To drop the schema collection, use the DROP XML SCHEMA COLLECTION statement. Diese Anweisung löscht alle in der Auflistung enthaltenen Schemas und entfernt das Auflistungsobjekt.This drops all schemas that are contained in the collection and removes the collection object. Beachten Sie, dass zum Löschen einer Schemaauflistung zuerst die unter DROP XML SCHEMA COLLECTION (Transact-SQL) beschriebenen Bedingungen erfüllt sein müssen.Note that before you can drop a schema collection, the conditions described in DROP XML SCHEMA COLLECTION (Transact-SQL)must be met.

Grundlegendes zu Schemakomponenten Understanding Schema Components

Wenn Sie die CREATE XML SCHEMA COLLECTION-Anweisung verwenden, werden verschiedene Schemakomponenten in die Datenbank importiert.When you use the CREATE XML SCHEMA COLLECTION statement, various schema components are imported into the database. Zu den Schemakomponenten gehören Schemaelemente, -attribute und -typdefinitionen.Schema components include schema elements, attributes, and type definitions. Wenn Sie die DROP XML SCHEMA COLLECTION-Anweisung verwenden, wird die komplette Schemaauflistung entfernt.When you use the DROP XML SCHEMA COLLECTION statement, you remove the complete collection.

CREATE XML SCHEMA COLLECTION speichert die Schemakomponenten in verschiedenen Systemtabellen.CREATE XML SCHEMA COLLECTION saves the schema components into various system tables.

Angenommen, das folgende Schema liegt vor:For example, consider the following 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 obige Schema zeigt die verschiedenen Attributtypen von Komponenten, die in der Datenbank gespeichert werden können.The previous schema shows the different types of components that can be stored in the database. Hierzu zählen SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateund ShippedDate.These include SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, and ShippedDate.

KomponentenkategorienComponent Categories

Die in der Datenbank gespeicherten Schemakomponenten fallen in folgende Kategorien:The Schema components stored in the database fall into the following categories:

  • ELEMENTELEMENT

  • ATTRIBUTEATTRIBUTE

  • TYPE (für einfache oder komplexe Typen)TYPE (for simple or complex types)

  • ATTRIBUTEGROUPATTRIBUTEGROUP

  • MODELGROUPMODELGROUP

    Beispiel:For example:

  • SomeAttribute ist eine ATTRIBUTE-Komponente.SomeAttribute is an ATTRIBUTE component.

  • SomeType, OrderTypeund CustomerType sind TYPE-Komponenten.SomeType, OrderType, and CustomerType are TYPE components.

  • Customer ist eine ELEMENT-Komponente.Customer is an ELEMENT component.

    Wenn Sie ein Schema in die Datenbank importieren, wird von SQL ServerSQL Server nicht das Schema als solches gespeichert.When you import a schema into the database, SQL ServerSQL Server does not store the schema itself. SQL ServerSQL Server speichert stattdessen die verschiedenen Einzelkomponenten.Instead, SQL ServerSQL Server stores the various individual components. Das <Schema>-Tag wird demnach nicht gespeichert, es werden nur die darin definierten Komponenten aufbewahrt.That is, the <Schema> tag is not stored, only the components that are defined within it are preserved. Nicht alle Schemaelemente werden erhalten.All schema elements are not preserved. Wenn das <Schema>-Tag 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.If the <Schema> tag contains attributes that specify default behavior of its components, these attributes are moved to the schema components within it during the import process, as shown in the following table.

AttributnameAttribute name VerhaltenBehavior
attributeFormDefaultattributeFormDefault 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.The form attribute applied to all attribute declarations in the schema where it is not already present and the value is set to the value of the attributeFormDefault attribute.
elementFormDefaultelementFormDefault 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.The form attribute applied to all element declarations in the schema where it is not already present and the value is set to the value of the elementFormDefault attribute.
blockDefaultblockDefault 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.The block attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the blockDefault attribute.
finalDefaultfinalDefault 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.The final attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the finalDefault attribute.
targetNamespacetargetNamespace Zum Zielnamespace gehörende Informationen zu den Komponenten werden in den Metadaten gespeichert.Information about the components that belong to the target namespace is stored in the metadata.

Berechtigungen für eine XML-Schemaauflistung Permissions on an XML Schema Collection

Sie müssen über die entsprechenden Berechtigungen verfügen, um die folgenden Aufgaben durchführen zu können:You must have the necessary permissions to do the following:

  • Erstellen/Laden der XML-SchemaauflistungCreate/load the XML schema collection

  • Ändern der XML-SchemaauflistungModify the XML schema collection

  • Löschen der XML-SchemaauflistungDrop the XML schema collection

  • Verwenden der XML-Schemaauflistung zum Typisieren von Spalten, Variablen und Parametern vom Typ xml oder Verwenden der Schemaauflistung in Tabellen- oder SpalteneinschränkungenUse the XML schema collection to type xml type columns, variables, and parameters, or use it in table or column constraints

    Das SQL Server-Sicherheitsmodell lässt die CONTROL-Berechtigung für jedes Objekt zu.The SQL Server security model allows CONTROL permission on every object. Der Empfänger dieser Berechtigung erhält alle anderen Berechtigungen für das Objekt.The grantee of this permission obtains all other permissions on the object. Der Besitzer des Objekts verfügt ebenfalls über alle Berechtigungen für das Objekt.The owner of the object also has all the permissions on the object.

    Der Besitzer und der Empfänger der CONTROL-Berechtigung für ein Objekt können beliebige Berechtigungen für das Objekt erteilen.The owner and the grantee of the CONTROL permission on an object can grant any permission on the object. 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.A user who is not the owner and does not have CONTROL permission can still grant permission on an object when WITH GRANT OPTION is specified. 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.For example, assume User A has REFERENCES permission on XML schema collection S, through WITH GRANT OPTION, but no other permissions on S. User A could grant User B REFERENCES permission on schema collection S.

    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.The security model also allows permissions to create and use XML schema collections or transfer ownership from one user to another. In den folgenden Themen werden die Berechtigungen für XML-Schemaauflistungen beschrieben.The following topics describe the XML schema collection permissions.

  • Erteilen von Berechtigungen für eine XML-SchemaauflistungGrant Permissions on an XML Schema Collection

    Dieses Thema erläutert das Erteilen von Berechtigungen zum Erstellen von XML-Schemaauflistungen sowie das Erteilen von Berechtigungen für ein XML-Schemaauflistungsobjekt.This topic discussess how to grant permissions to create an XML schema collection and how to grant permissions on an XML schema collection object.

  • Aufheben der Berechtigungen für eine XML-SchemaauflistungRevoke Permissions on an XML Schema Collection

    Dieses Thema erläutert das Aufheben von Berechtigungen zum Verhindern der Erstellung einer XML-Schemaauflistung sowie das Aufheben von Berechtigungen für ein XML-Schemaauflistungsobjekt.This topic discusses how revoking permissions can be used to prevent the creation of an XML schema collection and how to revoke permissions on an XML schema collection object.

  • Verweigern von Berechtigungen für eine XML-SchemaauflistungDeny Permissions on an XML Schema Collection

    Dieses Thema erläutert das Verweigern von Berechtigungen zum Erstellen einer XML-Schemaauflistung sowie das Verweigern von Berechtigungen für ein XML-Schemaauflistungsobjekt.This topic discusses how to deny permissions to create an XML schema collection and deny permission on an XML schema collection object.

Abrufen von Informationen zu XML-Schemas und -Schemaauflistungen Getting Information about XML Schemas and Schema Collections

XML-Schemaauflistungen sind in der Katalogsicht sys.xml_schema_collections aufgeführt.XML schema collections are enumerated in the catalog view, sys.xml_schema_collections. Die XML-Schemaauflistung "sys" wird durch das System definiert.The XML schema collection "sys" is defined by the system. Sie enthält die vordefinierten Namespaces, die in allen benutzerdefinierten XML-Schemaauflistungen verwendet werden können, ohne dass sie explizit geladen werden müssen.It contains the predefined namespaces that can be used in all user-defined XML schema collections without having to load them explicitly. Diese Auflistung enthält die Namespaces für xml, xs, xsi, fn und xdt.This list contains the namespaces for xml, xs, xsi, fn, and xdt. Zwei weitere Katalogsichten sind sys.xml_schema_namespaces, die alle Namespaces innerhalb jeder Schemaauflistung aufführt, und sys.xml_components, die alle XML-Schemakomponenten innerhalb jedes XML-Schemas aufführt.Two other catalog views are sys.xml_schema_namespaces, which enumerates all namespaces within each XML schema collection, and sys.xml_components, which enumerates all XML schema components within each XML schema.

Die integrierte Funktion XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, ergibt eine xml -Datentypinstanz.The built-in function XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, yields an xml data type instance.. Diese Instanz enthält XML-Schemafragmente für Schemas, die in einer XML-Schemaauflistung enthalten sind, mit Ausnahme der vordefinierten XML-Schemas.This instance contains XML schema fragments for schemas that are contained in an XML schema collection, except the predefined XML schemas.

Es gibt folgende Möglichkeiten, um den Inhalt einer XML-Schemaauflistung aufzuführen:You can enumerate the contents of an XML schema collection in the following ways:

  • Schreiben Sie Transact-SQL-Abfragen zur jeweiligen Katalogsicht für XML-Schemaauflistungen.Write Transact-SQL queries on the appropriate catalog views for XML schema collections.

  • Verwenden Sie die integrierte Funktion XML_SCHEMA_NAMESPACE().Use the built-in function XML_SCHEMA_NAMESPACE(). Auf das Ergebnis dieser Funktion können Sie die xml -Datentypmethoden anwenden.You can apply xml data type methods on the output of this function. Allerdings können Sie dabei die zugrunde liegenden XML-Schemas nicht ändern.However, you cannot modify the underlying XML schemas.

    Diese Möglichkeiten werden in den folgenden Beispielen veranschaulicht.These are illustrated in the following examples.

Beispiel: Aufführen der XML-Namespaces in einer XML-SchemaauflistungExample: Enumerate the XML Namespaces in an XML Schema Collection

Verwenden Sie die folgende Abfrage für die XML-Schemaauflistung "myCollection":Use the following query for the XML schema collection "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: Aufführen des Inhalts einer XML-SchemaauflistungExample: Enumerate the Contents of an XML Schema Collection

Mit der folgenden Anweisung wird der Inhalt der XML-Schemaauflistung "myCollection" innerhalb des relationalen Schemas dbo aufgeführt.The following statement enumerates the contents of the XML schema collection "myCollection" within the relational schema, dbo.

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.Individual XML schemas within the collection can be obtained as xml data type instances by specifying the target namespace as the third argument to XML_SCHEMA_NAMESPACE(). Dies wird im folgenden Beispiel gezeigt.This is shown in the following example.

Beispiel: Ausgeben eines angegebenen Schemas für eine XML-SchemaauflistungExample: Output a Specified Schema from an XML Schema Collection

Mit der folgenden Anweisung wird das XML-Schema mit dem Zielnamespace "http://www.microsoft.com/books" aus der XML-Schemaauflistung "myCollection" innerhalb dem relationalen Schema dbo ausgegeben.The following statement outputs the XML schema with the target namespace "http://www.microsoft.com/books" from the XML schema collection "myCollection" within the relational schema, dbo.

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

Abfragen von XML-SchemasQuerying XML Schemas

Es gibt folgende Möglichkeiten, um XML-Schemas, die Sie in XML-Schemaauflistungen geladen haben, abzufragen:You can query XML schemas that you have loaded into XML schema collections in the following ways:

  • Schreiben Sie Transact-SQL-Abfragen zu Katalogsichten für XML-Schemaauflistungen.Write Transact-SQL queries on catalog views for XML schema namespaces.

  • 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.Create a table that contains an xml data type column to store your XML schemas and also load them into the XML type system. Sie können dann diese XML-Spalte abfragen, indem Sie xml -Datentypmethoden verwenden.You can query the XML column by using the xml data type methods. Für diese Spalte können Sie auch einen XML-Index erstellen.Also, you can build an XML index on this column. Allerdings muss die Anwendung für diese Vorgehensweise die Konsistenz zwischen den in der XML-Spalte gespeicherten XML-Schemas und dem XML-Typsystem beibehalten.However, with this approach, the application must maintain consistency between the XML schemas stored in the XML column and the XML type system. 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.For example, if you drop the XML schema namespace from the XML type system, you also have to drop it from the table in order to preserve consistency.

Siehe auchSee Also

Anzeigen einer gespeicherten XML-Schemaauflistung View a Stored XML Schema Collection
Vorverarbeiten eines Schemas zum Zusammenführen eingeschlossener Schemas Preprocess a Schema to Merge Included Schemas
Anforderungen und Einschränkungen für XML-Schemaauflistungen auf dem Server Requirements and Limitations for XML Schema Collections on the Server