Vergleichen von typisiertem XML mit nicht typisiertem XMLCompare Typed XML to Untyped XML

Sie können Variablen, Parameter und Spalten des xml -Datentyps erstellen.You can create variables, parameters, and columns of the xml type. Optional können Sie eine Auflistung von XML-Schemas mit einer Variablen, einem Parameter oder einer Spalte vom Typ xml verknüpfen.You can optionally associate a collection of XML schemas with a variable, parameter, or column of xml type. In diesem Fall wird die Instanz des xml -Datentyps als typisiertbezeichnet.In this case, the xml data type instance is called typed. Anderenfalls wird die XML-Instanz als nicht typisiertbezeichnet.Otherwise, the XML instance is called untyped.

Wohlgeformtes XML und der xml-DatentypWell-formed XML and the xml Data Type

Der xml -Datentyp implementiert den im ISO-Standard definierten xml -Datentyp.The xml data type implements the ISO standard xml data type. Deshalb ermöglicht er das Speichern sowohl von wohlgeformten XML-Dokumenten der Version 1.0 als auch von so genannten XML-Inhaltsfragmenten mit Textknoten und einer beliebigen Anzahl von Elementen auf der obersten Ebene in einer nicht typisierten XML-Spalte.Therefore, it can store well-formed XML version 1.0 documents and also so-called XML content fragments with text nodes and an arbitrary number of top-level elements in an untyped XML column. Das System überprüft, ob die Daten wohlgeformt sind (wobei es nicht erforderlich ist, dass die Spalte an XML-Schemas gebunden ist) und weist alle Daten zurück, die in diesem erweiterten Sinne nicht wohlgeformt sind.The system checks that the data is well-formed, does not require the column to be bound to XML schemas, and rejects data that is not well-formed in the extended sense. Dies gilt auch für nicht typisierte XML-Variablen und -Parameter.This is true also of untyped XML variables and parameters.

XML-SchemasXML Schemas

Ein XML-Schema stellt Folgendes bereit:An XML schema provides the following:

  • Überprüfungseinschränkungen.Validation constraints. Bei jeder Zuweisung oder Änderung einer typisierten xml-Instanz überprüft SQL Server die Instanz.Whenever a typed xml instance is assigned to or modified, SQL Server validates the instance.

  • Datentypinformationen.Data type information. Schemas stellen Informationen zu den Typen von Attributen und Elementen in der xml -Datentypinstanz bereit.Schemas provide information about the types of attributes and elements in the xml data type instance. Die Typinformationen stellen den in der Instanz enthaltenen Werten genauere operationale Semantik zur Verfügung als dies bei untypisiertem xmlmöglich ist.The type information provides more precise operational semantics to the values contained in the instance than is possible with untyped xml. Dezimale arithmetische Operationen können z. B. für einen Dezimalwert, nicht jedoch für einen Zeichenfolgenwert ausgeführt werden.For example, decimal arithmetic operations can be performed on a decimal value, but not on a string value. Aus diesem Grund ist die Speicherung typisierten XMLs erheblich kompakter als bei nicht typisiertem XML.Because of this, typed XML storage can be made significantly more compact than untyped XML.

Auswählen zwischen typisiertem oder nicht typisiertem XMLChoosing Typed or Untyped XML

Verwenden Sie den nicht typisierten xml -Datentyp in den folgenden Situationen:Use untyped xml data type in the following situations:

  • Sie verfügen über kein Schema für Ihre XML-Daten.You do not have a schema for your XML data.

  • Sie verfügen zwar über Schemas, wollen jedoch die Gültigkeit der Daten nicht durch den Server überprüfen lassen.You have schemas, but you do not want the server to validate the data. Dies ist manchmal der Fall, wenn eine Anwendung eine clientseitige Gültigkeitsprüfung vor dem Speichern der Daten auf dem Server durchführt oder gemäß dem Schema ungültige XML-Daten temporär speichert oder Schemakomponenten verwendet, die vom Server nicht unterstützt werden.This is sometimes the case when an application performs client-side validation before storing the data at the server, or temporarily stores XML data that is invalid according to the schema, or uses schema components that are not supported at the server.

    Verwenden Sie den typisierten xml -Datentyp in den folgenden Situationen:Use typed xml data type in the following situations:

  • Sie verfügen über Schemas für Ihre XML-Daten und wollen, dass der Server anhand der XML-Schemas die Gültigkeit Ihrer XML-Daten überprüft.You have schemas for your XML data and you want the server to validate your XML data according to the XML schemas.

  • Sie möchten Speicherungs- und Abfrageoptimierungen nutzen, die auf den Typinformationen basieren.You want to take advantage of storage and query optimizations based on type information.

  • Sie möchten beim Kompilieren Ihrer Abfragen einen größeren Nutzen aus den Typinformationen ziehen.You want to take better advantage of type information during compilation of your queries.

    Typisierte XML-Spalten, -Parameter und -Variablen können XML-Dokumente oder -Inhalte speichern.Typed XML columns, parameters, and variables can store XML documents or content. Allerdings müssen Sie zum Zeitpunkt der Deklaration durch ein Flag angeben, ob Sie ein Dokument oder einen Inhalt speichern.However, you have to specify with a flag whether you are storing a document or content at the time of declaration. Außerdem müssen Sie die Auflistung der XML-Schemas bereitstellen.Additionally, you have to provide the collection of XML schemas. Geben Sie DOCUMENT an, wenn jede XML-Instanz genau ein Element auf der obersten Ebene aufweist.Specify DOCUMENT if each XML instance has exactly one top-level element. Verwenden Sie ansonsten CONTENT.Otherwise, use CONTENT. Der Abfragecompiler verwendet das DOCUMENT-Flag bei den Typüberprüfungen während der Abfragekompilierung, um Singleton-Elemente auf der obersten Ebene abzuleiten.The query compiler uses the DOCUMENT flag in type checks during query compilation to infer singleton top-level elements.

Erstellen von typisiertem XMLCreating Typed XML

Bevor Sie typisierte xml-Variablen, -Parameter oder -Spalten erstellen können, müssen Sie die XML-Schemaauflistung zuerst mithilfe von CREATE XML SCHEMA COLLECTION (Transact-SQL). erstellen.Before you can create typed xml variables, parameters, or columns, you must first register the XML schema collection by using CREATE XML SCHEMA COLLECTION (Transact-SQL). Anschließend können Sie der XML-Schemaauflistung Variablen, Parameter oder Spalten des xml -Datentyps zuordnen.You can then associate the XML schema collection with variables, parameters, or columns of the xml data type.

Im folgenden Beispiel wird eine zweiteilige Benennungskonvention zum Angeben des Namens der XML-Schemaauflistung verwendet.In the following examples, a two-part naming convention is used for specifying the XML schema collection name. Der erste Teil ist der Schemaname, der zweite Teil der Name der XML-Schemaauflistung.The first part is the schema name, and the second part is the XML schema collection name.

Beispiel: Verknüpfen einer Schemaauflistung mit einer Variablen vom Typ xmlExample: Associating a Schema Collection with an xml Type Variable

Im folgenden Beispiel wird eine Variable vom Typxml erstellt und eine Schemaauflistung mit dieser verknüpft.The following example creates anxml type variable and associates a schema collection with it. Die im Beispiel angegebene Schemaauflistung wurde bereits in die AdventureWorks -Datenbank importiert.The schema collection specified in the example is already imported in the AdventureWorks database.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);   

Beispiel: Angeben eines Schemas für eine Spalte vom Typ xmlExample: Specifying a Schema for an xml Type Column

Im folgenden Beispiel wird eine Tabelle mit einer Spalte vom Typ xml erstellt und ein Schema für die Spalte angegeben:The following example creates a table with an xml type column and specifies a schema for the column:

CREATE TABLE T1(  
 Col1 int,   
 Col2 xml (Production.ProductDescriptionSchemaCollection)) ;  

Beispiel: Übergeben eines Parameters vom Typ xml an eine gespeicherte ProzedurExample: Passing an xml Type Parameter to a Stored Procedure

Im folgenden Beispiel wird ein Parameter vom Typ xml an eine gespeicherte Prozedur übergeben und ein Schema für die Variable angegeben:The following example passes an xml type parameter to a stored procedure and specifies a schema for the variable:

CREATE PROCEDURE SampleProc   
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection)   
AS   
...  

Beachten Sie hinsichtlich der XML-Schemaauflistung Folgendes:Note the following about the XML schema collection:

  • Eine XML-Schemaauflistung ist nur in der Datenbank verfügbar, in der sie mit Erstellen einer XML-Schemaauflistungregistriert wurde.An XML schema collection is available only in the database in which it was registered by using Creating an XML Schema Collection.

  • Wenn Sie die Umwandlung aus einer Zeichenfolge in einen typisierten xml -Datentyp vornehmen, führt die Analyse außerdem die Überprüfung und Typisierung basierend auf den XML-Schemanamespaces in der angegebenen Auflistung aus.If you cast from a string to a typed xml data type, the parsing also performs validation and typing, based on the XML schema namespaces in the collection specified.

  • Sie können einen typisierten xml -Datentyp in einen nicht typisierten xml -Datentyp umwandeln und umgekehrt.You can cast from a typed xml data type to an untyped xml data type, and vice versa.

    Weitere Informationen zu anderen Methoden zum Generieren von XML in SQL Server finden Sie unter Erstellen von Instanzen der XML-Daten.For more information about other ways to generate XML in SQL Server, see Create Instances of XML Data. Nachdem das XML generiert wurde, kann es einer Variablen vom Datentyp xml zugewiesen oder in Spalten vom Typ xml für die weitere Verarbeitung gespeichert werden.After XML is generated, it can be assigned either to an xml data type variable or stored in xml type columns for additional processing.

    In der Datentyphierarchie nimmt der xml -Datentyp einen Platz unter sql_variant und benutzerdefinierten Typen ein, steht jedoch über allen integrierten Typen.In the data type hierarchy, the xml data type appears below sql_variant and user-defined types, but above any of the built-in types.

Beispiel: Angeben von Facets zum Einschränken einer typisierten xml-SpalteExample: Specifying Facets to Constrain a Typed xml Column

Typisierte xml -Spalten können so eingeschränkt werden, dass nur einzelne Elemente der obersten Ebene für jede darin gespeicherte Instanz zulässig sind.For typed xml columns, you can constrain the column to allow only single, top-level elements for each instance stored in it. Sie geben zu diesem Zweck beim Erstellen der Tabelle den optionalen DOCUMENT -Facet an, wie das folgende Beispiel zeigt:You do this by specifying the optional DOCUMENT facet when a table is created, as shown in the following example:

CREATE TABLE T(Col1 xml   
   (DOCUMENT Production.ProductDescriptionSchemaCollection));  
GO  
DROP TABLE T;  
GO  

Standardmäßig werden Instanzen, die in der typisierten xml -Spalte gespeichert werden, als XML-Inhalt und nicht als XML-Dokumente gespeichert.By default, instances stored in the typed xml column are stored as XML content and not as XML documents. Folgendes wird auf diese Weise ermöglicht:This allows for the following:

  • Null oder zahlreiche Elemente der obersten EbeneZero or many top-level elements

  • Textknoten in Elementen der obersten EbeneText nodes in top-level elements

    Sie können dieses Verhalten auch explizit festlegen, indem Sie, wie im folgenden Beispiel dargestellt, das CONTENT -Facet hinzufügen:You can also explicitly specify this behavior by adding CONTENT facet, as shown in the following example:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));  
GO -- Default  

Beachten Sie, dass Sie die optionalen DOCUMENT/CONTENT-Facets immer angeben können, wenn Sie den xml -Typ definieren (typisiertes xml).Note that you can specify the optional DOCUMENT/CONTENT facets anywhere you define xml type (typed xml). Wenn Sie eine typisierte xml -Variable erstellen, können Sie z.B. das DOCUMENT/CONTENT-Facet, wie im folgenden Beispiel gezeigt, hinzufügen:For example, when you create a typed xml variable, you can add the DOCUMENT/CONTENT facet, as shown in the following:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);  

Dokumenttypdefinition (DTD)Document Type Definition (DTD)

Die Spalten, Variablen und Parameter des xml -Datentyps können mithilfe eines XML-Schemas typisiert werden, jedoch nicht mithilfe von DTD.The xml data type columns, variables, and parameters can be typed by using XML schema, but not by using DTD. Allerdings kann Inline-DTD sowohl für nicht typisiertes als auch für typisiertes XML verwendet werden, um Standardwerte bereitzustellen und um Entitätsverweise durch ihre erweiterte Form zu ersetzen.However, inline DTD can be used for both untyped and typed XML to supply default values and to replace entity references with their expanded form.

Mithilfe von Drittanbieter-Tools können Sie DTDs in XML-Schemadokumente konvertieren und die XML-Schemas in die Datenbank laden.You can convert DTDs to XML schema documents by using third-party tools, and load the XML schemas into the database.

Aktualisieren von typisiertem XML aus SQL Server 2005Upgrading Typed XML from SQL Server 2005

SQL Server 2008SQL Server 2008 wurde die XML-Schemaunterstützung erweitert, beispielsweise um die Unterstützung für die lax-Überprüfung, verbesserte Behundlung von Instanzdaten des Typs xs:date, xs:time und xs:dateTime instance data, und added support for list und union types. made several extensions to the XML Schema support, including support for lax validation, improved handling of xs:date, xs:time and xs:dateTime instance data, and added support for list and union types. In den meisten Fällen beeinflussen die Änderungen die Aktualisierung nicht.In most cases the changes do not affect the upgrade experience. Wenn Sie jedoch eine XML-Schemaauflistung in SQL Server 2005SQL Server 2005 verwendeten, die Werte des Typs xs:date, xs:timeoder xs:dateTime (oder einen Untertyp davon) zuließ, dann werden die folgenden Aktualisierungsschritte ausgeführt, wenn Sie die SQL Server 2005SQL Server 2005 -Datenbank an eine spätere Version von SQL ServerSQL Serveranfügen:However if you used an XML Schema collection in SQL Server 2005SQL Server 2005 that allowed values of type xs:date, xs:time, or xs:dateTime (or any subtype) then the following upgrade steps occur when you attach your SQL Server 2005SQL Server 2005 database to a later version of SQL ServerSQL Server:

  1. Für jede XML-Spalte, die mit einer XML-Schemaauflistung typisiert ist, die Elemente oder Attribute vom Typ xs:anyType, xs:anySimpleType, xs:date oder eines Untertyps davon, xs:time oder eines Untertyps davon oder xs:dateTime oder eines Untertyps davon enthält bzw. Elemente oder Attribute vom Typ union oder list sind, die einen dieser Typen enthalten, wird folgender Vorgang ausgeführt:For every XML column, that is typed with an XML Schema Collection that contains elements or attributes that are typed as either xs:anyType, xs:anySimpleType, xs:date or any of its subtypes, xs:time or any subtype thereof, or xs:dateTime or any of its subtypes, or are union or list types containing any of these types the following occurs:

    1. Alle XML-Indizes der Spalte werden deaktiviert.All XML indices on the column will be disabled.

    2. Alle SQL Server 2005SQL Server 2005 -Werte werden weiterhin in der Z-Zeitzone dargestellt, weil sie in die Z-Zeitzone normalisiert wurden.All SQL Server 2005SQL Server 2005 values will continue to be represented in the Z timezone, because they have been normalized to the Z timezone.

    3. Alle Werte des Typs xs:date oder xs:dateTime , die kleiner sind als der 1. Januar im Jahr 1, führen zu einem Laufzeitfehler, wenn der Index erneut erstellt wird oder wenn eine XQuery-Anweisung oder eine XML-DML-Anweisung für den XML-Datentyp ausgeführt wird, der diesen Wert enthält.Any xs:date or xs:dateTime values that are smaller than January 1st of year 1 will lead to a runtime error when the index gets rebuild or an XQuery or XML-DML statements gets executed against the XML data type containing that value.

  2. Alle negativen Jahresangaben in xs:date - oder xs:dateTime -Facets oder in Standardwerten einer XML-Schemaauflistung werden automatisch durch den kleinsten für den Basistyp xs:date oder xs:dateTime zulässigen Wert ersetzt (beispielsweise 0001-01-01T00:00:00.0000000Z für xs:dateTime).Any negative years in xs:date or xs:dateTime facets or default values in an XML Schema collection will automatically be updated to the smallest value allowed by the base xs:date or xs:dateTime type (e.g., 0001-01-01T00:00:00.0000000Z for xs:dateTime).

    Beachten Sie, dass Sie den gesamten XML-Datentyp weiterhin mit einer einfachen SQL-SELECT-Anweisung abrufen können, selbst wenn er negative Jahresangaben enthält.Note that you can still use a simple SQL select statement to retrieve the whole XML data type, even if it contains negative years. Es wird empfohlen, dass Sie die negativen Jahresangaben durch eine Jahresangabe ersetzen, die im neuen unterstützten Bereich liegt, oder den Typ des Elements oder Attributs in xs:stringändern.It is recommended that you replace negative years with a year within the newly supported range or change the type of the element or attribute to xs:string.

Siehe auchSee Also

Erstellen von Instanzen der XML-Daten Create Instances of XML Data
xml-Datentypmethoden xml Data Type Methods
XML DML (Data Modification Language) XML Data Modification Language (XML DML)
XML-Daten (SQL Server) XML Data (SQL Server)