Confronto dati XML tipizzati con dati XML non tipizzatiCompare Typed XML to Untyped XML

È possibile creare variabili, parametri e colonne di tipo xml .You can create variables, parameters, and columns of the xml type. È inoltre possibile associare una raccolta XML Schema a una variabile, un parametro o una colonna di tipo xml .You can optionally associate a collection of XML schemas with a variable, parameter, or column of xml type. In questo caso, l'istanza del tipo di dati xml viene definita tipizzata.In this case, the xml data type instance is called typed. In caso contrario, l'istanza XML è definita non tipizzata.Otherwise, the XML instance is called untyped.

Tipi di dati XML corretti e xmlWell-formed XML and the xml Data Type

Il tipo di dati xml usa il tipo di dati standard ISO xml .The xml data type implements the ISO standard xml data type. Ciò consente pertanto l'archiviazione in una colonna XML non tipizzata di documenti di formato XML 1.0 corretto e frammenti di contenuto XML, con nodi di testo e un numero arbitrario di elementi di livello principale.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. Il sistema verifica che il formato dei dati sia corretto, non richiede che la colonna sia associata a XML Schema e rifiuta i dati con formato non corretto in senso esteso.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. Questo vale anche per le variabili e i parametri XML non tipizzati.This is true also of untyped XML variables and parameters.

XML SchemaXML Schemas

XML Schema fornisce quanto segue:An XML schema provides the following:

  • Vincoli di convalida.Validation constraints. Ogni volta che un'istanza xml tipizzata viene assegnata o modificata, tale istanza viene convalidata da SQL Server.Whenever a typed xml instance is assigned to or modified, SQL Server validates the instance.

  • Informazioni sui tipi di dati.Data type information. Gli schemi offrono informazioni sui tipi di attributi e di elementi presenti nell'istanza del tipo di dati xml .Schemas provide information about the types of attributes and elements in the xml data type instance. Le informazioni sul tipo offrono una semantica operativa più precisa ai valori contenuti nell'istanza rispetto a quanto sia possibile con xmlnon tipizzato.The type information provides more precise operational semantics to the values contained in the instance than is possible with untyped xml. ad esempio è possibile eseguire le operazioni aritmetiche decimali su un valore decimale, ma non su un valore stringa.For example, decimal arithmetic operations can be performed on a decimal value, but not on a string value. Per questo motivo, i tipi di dati XML archiviati possono essere estremamente più compatti rispetto ai dati XML non tipizzati.Because of this, typed XML storage can be made significantly more compact than untyped XML.

Scelta tra dati XML tipizzati o non tipizzatiChoosing Typed or Untyped XML

Usare il tipo di dati xml non tipizzato nelle situazioni seguenti:Use untyped xml data type in the following situations:

  • Non è disponibile uno schema per i dati XML.You do not have a schema for your XML data.

  • Gli schemi sono disponibili ma non si desidera che i dati vengano convalidati dal server.You have schemas, but you do not want the server to validate the data. Questo avviene talvolta quando un'applicazione esegue una convalida sul lato client prima di archiviare i dati sul server, archivia temporaneamente dati XML non validi in base allo schema oppure utilizza componenti di schema non supportati dal server.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.

    Usare il tipo di dati xml tipizzato nelle situazioni seguenti:Use typed xml data type in the following situations:

  • Gli schemi per i dati XML sono disponibili e si desidera che i dati XML vengano convalidati dal server in base a XML Schema.You have schemas for your XML data and you want the server to validate your XML data according to the XML schemas.

  • Si desidera avvalersi delle ottimizzazioni query e dell'archiviazione basandosi sulle informazioni sui tipi.You want to take advantage of storage and query optimizations based on type information.

  • Si desidera avvalersi delle informazioni sui tipi durante la compilazione delle query.You want to take better advantage of type information during compilation of your queries.

    Nelle colonne, nelle variabili e nei parametri XML tipizzati è possibile archiviare documenti o contenuto XML.Typed XML columns, parameters, and variables can store XML documents or content. Nella dichiarazione è tuttavia necessario specificare, tramite un flag, se si desidera archiviare un documento o del contenuto.However, you have to specify with a flag whether you are storing a document or content at the time of declaration. È inoltre necessario fornire la raccolta XML Schema.Additionally, you have to provide the collection of XML schemas. Specificare DOCUMENT se ogni istanza XML include esattamente un elemento di livello principale,Specify DOCUMENT if each XML instance has exactly one top-level element. CONTENT in caso contrario.Otherwise, use CONTENT. Nella verifica dei tipi eseguita durante la compilazione delle query il compilatore utilizza il flag DOCUMENT per derivare gli elementi singleton di livello principale.The query compiler uses the DOCUMENT flag in type checks during query compilation to infer singleton top-level elements.

Creazione di dati XML tipizzatiCreating Typed XML

Prima di creare variabili, parametri o colonne di tipo xml tipizzato, è necessario registrare la raccolta XML Schema usando CREATE XML SCHEMA COLLECTION (Transact-SQL).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). È quindi possibile associare la raccolta XML Schema alle variabili, ai parametri o alle colonne del tipo di dati xml.You can then associate the XML schema collection with variables, parameters, or columns of the xml data type.

Negli esempi seguenti, per specificare il nome della raccolta XML Schema viene utilizzata una convenzione di denominazione in due parti.In the following examples, a two-part naming convention is used for specifying the XML schema collection name. La prima parte è il nome dello schema e la seconda parte è il nome della raccolta XML Schema.The first part is the schema name, and the second part is the XML schema collection name.

Esempio: associazione di una raccolta di schemi a una variabile di tipo xmlExample: Associating a Schema Collection with an xml Type Variable

L'esempio seguente crea una variabile di tipoxml alla quale viene associata una raccolta di schemi.The following example creates anxml type variable and associates a schema collection with it. La raccolta di schemi specificata è già stata importata nel database AdventureWorks .The schema collection specified in the example is already imported in the AdventureWorks database.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);   

Esempio: specifica di uno schema per una colonna di tipo xmlExample: Specifying a Schema for an xml Type Column

L'esempio seguente crea una tabella con una colonna di tipo xml e specifica uno schema per la colonna: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)) ;  

Esempio: passaggio di un parametro di tipo xml a una stored procedureExample: Passing an xml Type Parameter to a Stored Procedure

L'esempio seguente passa un parametro di tipo xml a una stored procedure e specifica uno schema per la variabile: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   
...  

Per la raccolta XML Schema, si noti quanto segue:Note the following about the XML schema collection:

  • Una raccolta XML Schema è disponibile solo nel database in cui è stata registrata tramite CREATE XML SCHEMA COLLECTION.An XML schema collection is available only in the database in which it was registered by using Creating an XML Schema Collection.

  • Se si esegue il cast da una stringa a un tipo di dati xml tipizzato, durante l'analisi vengono inoltre eseguite la convalida e la tipizzazione, in base agli spazi dei nomi XML Schema della raccolta specificata.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.

  • È possibile eseguire il cast da un tipo di dati xml tipizzato a un tipo di dati xml non tipizzato e viceversa.You can cast from a typed xml data type to an untyped xml data type, and vice versa.

    Per altre informazioni sugli altri modi disponibili per generare codice XML in SQL Server, vedere Creare istanze di dati XML.For more information about other ways to generate XML in SQL Server, see Create Instances of XML Data. Dopo avere generato il codice XML, è possibile assegnarlo a una variabile con tipo di dati xml o archiviarlo in colonne di tipo xml per elaborazioni successive.After XML is generated, it can be assigned either to an xml data type variable or stored in xml type columns for additional processing.

    Nella gerarchia dei tipi di dati, il tipo di dati xml è visualizzato sotto al tipo sql_variant e ai tipi definiti dall'utente, ma sopra ai tipi predefiniti.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.

Esempio: specifica di facet per vincolare una colonna xml tipizzataExample: Specifying Facets to Constrain a Typed xml Column

È possibile vincolare le colonne xml tipizzate in modo tale che in ogni istanza archiviata in tali colonne siano consentiti solo elementi principali singoli.For typed xml columns, you can constrain the column to allow only single, top-level elements for each instance stored in it. A tale scopo, è possibile specificare il facet facoltativo DOCUMENT durante la creazione di una tabella, come illustrato nell'esempio seguente: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  

Per impostazione predefinita, le istanze archiviate nella colonna xml tipizzata sono archiviate come contenuto XML e non come documenti XML.By default, instances stored in the typed xml column are stored as XML content and not as XML documents. Ciò consente quanto segue:This allows for the following:

  • Zero elementi principali oppure nessunoZero or many top-level elements

  • Nodi di testo negli elementi principaliText nodes in top-level elements

    È inoltre possibile specificare in modo esplicito questo comportamento aggiungendo il facet CONTENT , come illustrato nell'esempio seguente: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  

Si noti che è possibile specificare i facet facoltativi DOCUMENT/CONTENT in qualsiasi posizione in cui viene definito il tipo xml (xml tipizzato).Note that you can specify the optional DOCUMENT/CONTENT facets anywhere you define xml type (typed xml). Ad esempio, quando si crea una variabile xml tipizzata, è possibile aggiungere il facet DOCUMENT/CONTENT, come illustrato nell'esempio seguente: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);  

Definizione del tipo di documento (DTD, Document Type Definition)Document Type Definition (DTD)

Le colonne, le variabili e i parametri con tipo di dati xml possono essere tipizzati tramite XML Schema, ma non tramite una definizione DTD.The xml data type columns, variables, and parameters can be typed by using XML schema, but not by using DTD. Sia per i tipi di dati XML tipizzati che non tipizzati, è tuttavia possibile utilizzare DTD inline per specificare valori predefiniti e sostituire i riferimenti alle entità con le corrispondenti forme espanse.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.

È possibile convertire DTD in documenti di XML Schema tramite strumenti di terze parti e caricare XML Schema nel database.You can convert DTDs to XML schema documents by using third-party tools, and load the XML schemas into the database.

Aggiornamento di dati XML tipizzati da SQL Server 2005Upgrading Typed XML from SQL Server 2005

SQL Server 2008SQL Server 2008 include diverse estensioni per il supporto di XML Schema, compreso il supporto per la convalida di tipo lax, la gestione migliorata dei dati delle istanze xs:date, xs:time e xs:dateTime e il supporto aggiunto per i tipi elenco e unione. 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. Nella maggior parte dei casi le modifiche non influiscono sull'esperienza dell'aggiornamento.In most cases the changes do not affect the upgrade experience. Se tuttavia è stata utilizzata una raccolta XML Schema in SQL Server 2005SQL Server 2005 che consentiva valori di tipo xs:date, xs:timeo xs:dateTime (o qualsiasi sottotipo), quando si collega il database SQL Server 2005SQL Server 2005 a una versione successiva di SQL ServerSQL Serversi verificano i seguenti passaggi di aggiornamento: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. Per ogni colonna XML, tipizzata con una raccolta XML Schema che contiene elementi o attributi tipizzati come xs:anyType, xs:anySimpleType, xs:date o uno qualsiasi dei sottotipi, xs:time o uno qualsiasi dei suoi sottotipi oppure xs:dateTime o uno qualsiasi dei suoi sottotipi o i tipi unione ed elenco che contengono uno di questi tipi, si verifica quanto riportato di seguito: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. Tutti gli indici XML nella colonna saranno disabilitati.All XML indices on the column will be disabled.

    2. Tutti i valori SQL Server 2005SQL Server 2005 continueranno a essere rappresentati nel fuso orario Z, perché sono stati normalizzati al fuso orario Z.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. Qualsiasi valore xs:date o xs:dateTime precedente al 1° gennaio dell'anno 1 determinerà un errore di runtime quando l'indice viene ricompilato oppure viene eseguita un'istruzione XQuery o SML-DML rispetto al tipo di dati XML contenente quel valore.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. Ogni anno negativo nei facet xs:date o xs:dateTime o nei valori predefiniti in una raccolta XML Schema sarà aggiornato automaticamente al valore più piccolo consentito dal tipo di base xs:date o xs:dateTime (ad esempio, 0001-01-01T00: 00:00.0000000 Z per 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).

    Si noti che ancora è possibile utilizzare una semplice istruzione Select di SQL per recuperare il tipo di dati XML intero, anche se contiene anni negativi.Note that you can still use a simple SQL select statement to retrieve the whole XML data type, even if it contains negative years. Si consiglia di sostituire gli anni negativi con un anno all'interno del nuovo intervallo supportato o modificare il tipo dell'elemento o dell'attributo in xs:string.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.

Vedere ancheSee Also

Creare istanze di dati XML Create Instances of XML Data
Metodi con tipo di dati XML xml Data Type Methods
Linguaggio XML di manipolazione dei dati (XML DML) XML Data Modification Language (XML DML)
Dati XML (SQL Server) XML Data (SQL Server)