Generazione di uno schema XSD inlineGenerate an Inline XSD Schema

In una clausola FOR XML è possibile richiedere che la query restituisca uno schema inline oltre ai risultati della query.In a FOR XML clause, you can request that your query return an inline schema together with the query results. Per ottenere uno schema XDR, utilizzare la parola chiave XMLDATA nella clausola FOR XML.If you want an XDR schema, you use the XMLDATA keyword in the FOR XML clause. Per ottenere uno schema XSD, utilizzare invece la parola chiave XMLSCHEMA.If you want an XSD schema, you use the XMLSCHEMA keyword.

In questo argomento viene descritta la parola chiave XMLSCHEMA e viene illustrata la struttura dello schema XSD risultante.This topic describes the XMLSCHEMA keyword and explains the structure of the resulting inline XSD schema. Di seguito sono illustrate le limitazioni previste per la richiesta di schemi inline:Following are the limitations when you are requesting inline schemas:

  • È possibile specificare la parola chiave XMLSCHEMA unicamente nelle modalità RAW e AUTO e non nella modalità EXPLICIT.You can specify XMLSCHEMA only in RAW and AUTO mode, not in EXPLICIT mode.

  • Se in una query FOR XML annidata è specificata la direttiva TYPE, il risultato della query sarà di tipo xml e verrà considerato come istanza di dati XML non tipizzati.If a nested FOR XML query specifies the TYPE directive, the query result is of xml type, and this result is treated as an instance of untyped XML data. Per altre informazioni, vedere Dati XML (SQL Server).For more information, see XML Data (SQL Server).

    Se si specifica la parola chiave XMLSCHEMA in una query FOR XML, si otterrà sia uno schema che i dati XML, ovvero il risultato della query.When you specify XMLSCHEMA in a FOR XML query, you receive both a schema and XML data, the query result. Ogni elemento di livello principale dei dati fa riferimento allo schema precedente tramite una dichiarazione dello spazio dei nomi predefinito che, a sua volta, fa riferimento allo spazio dei nomi di destinazione dello schema inline.Each top-level element of the data refers to the previous schema by using a default namespace declaration that, in turn, refers to the target namespace of the inline schema.

    Esempio:For example:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">  
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />  
  <xsd:element name="Production.ProductModel">  
    <xsd:complexType>  
      <xsd:attribute name="ProductModelID" type="sqltypes:int" use="required" />  
      <xsd:attribute name="Name" use="required">  
        <xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks2012].[dbo].[Name]">  
          <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">  
            <xsd:maxLength value="50" />  
          </xsd:restriction>  
        </xsd:simpleType>  
      </xsd:attribute>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
<Production.ProductModel xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" ProductModelID="1" Name="Classic Vest" />  

Il risultato include XML Schema e il risultato XML.The result includes XML schema and the XML result. L'elemento di livello principale <ProductModel> nel risultato fa riferimento allo schema tramite la dichiarazione dello spazio dei nomi predefinito, xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1".The <ProductModel> top-level element in the result refers to the schema by using the default namespace declaration, xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" .

La parte del risultato relativa allo schema può contenere più documenti dello schema che descrivono più spazi dei nomi.The schema part of the result may contain multiple schema documents that describe multiple namespaces. Verranno restituiti almeno i due documenti di schema seguenti:At a minimum, the following two schema documents are returned:

  • Un documento di schema per lo spazio dei nomi Sqltypes e per il quale vengono restituiti i tipi SQL di base.One schema document for the Sqltypes namespace, and for which the base SQL types are being returned.

  • Un altro documento di schema che descrive la forma del risultato della query FOR XML.Another schema document that describes the shape of the FOR XML query result.

    Se il risultato della query contiene tipi di dati xml tipizzati, verranno inclusi anche gli schemi associati a tali tipi di dati xml tipizzati.Also, if any typed xml data types are included in the query result, the schemas associated with those typed xml data types are included.

    Lo spazio dei nomi di destinazione del documento di schema che descrive la forma del risultato della query FOR XML contiene una parte fissa e una parte numerica che viene incrementata automaticamente.The target namespace of the schema document that describes the shape of the FOR XML result contains a fixed portion and a numeric portion that increments automatically. Di seguito è illustrato il formato di questo spazio dei nomi, dove n è un numero intero positivo.The format of this namespace is shown in the following where n is a positive integer. Ad esempio, nella query precedente urn:schemas-microsoft-com:sql:SqlRowSet1 rappresenta lo spazio dei nomi di destinazione.For example, in the previous query, urn:schemas-microsoft-com:sql:SqlRowSet1 is the target namespace.

urn:schemas-microsoft-com:sql:SqlRowSetn  

La modifica degli spazi dei nomi di destinazione nel risultato tra un'esecuzione e l'altra non è consigliabile.The change in the target namespaces in the result that occurred from one execution to another may not be desirable. Ad esempio, se si esegue una query sul codice XML risultante, tale modifica richiederà l'aggiornamento della query.For example, if you query the resulting XML, the change in target namespace will require that you update your query. Se nella clausola FOR XML viene aggiunta l'opzione XMLSCHEMA, è possibile specificare facoltativamente uno spazio dei nomi di destinazione.You can optionally specify a target namespace when the XMLSCHEMA option is added in the FOR XML clause. Il codice XML risultante includerà lo spazio dei nomi specificato e rimarrà invariato, indipendentemente dal numero di esecuzioni della query.The resulting XML will include the namespace you provided and will remain the same, regardless of how many times you run the query.

SELECT ProductModelID, Name  
FROM   Production.ProductModel  
WHERE ProductModelID=1  
FOR XML AUTO, XMLSCHEMA ('MyURI')  

Elementi entitàEntity Elements

Prima di fornire informazioni dettagliate sulla struttura dello schema XSD generato per il risultato della query, è necessario descrivere l'elemento entità.In order to discuss the details of the XSD schema structure generated for the query result, the entity element has to first be described

Un elemento entità nel codice XML restituito dalla query FOR XML è un elemento generato da una tabella e non da una colonna.An entity element in the XML data returned by FOR XML query is an element that is generated from a table and not from a column. La query FOR XML seguente, ad esempio, restituisce informazioni relative ai contatti presenti nella tabella Person del database AdventureWorks2012 .For example, the following FOR XML query returns contact information from the Person table in the AdventureWorks2012 database.

SELECT BusinessEntityID, FirstName  
FROM Person.Person  
WHERE BusinessEntityID = 1  
FOR XML AUTO, ELEMENTS  

Risultato:This is the result:

<Person>

<BusinessEntityID>1</BusinessEntityID>

<FirstName>Ken</FirstName>

</Person>

In questo risultato <Person> è l'elemento entità.In this result, <Person> is the entity element. Nel risultato XML possono essere presenti più elementi entità, per ognuno dei quali è disponibile una dichiarazione globale nello schema XSD inline.There can be multiple entity elements in the XML result and each of these has a global declaration in the inline XSD schema. Ad esempio, la query seguente recupera l'intestazione e i dettagli relativi a un ordine di vendita specifico.For example, the following query retrieves sales order header and detail information for a specific order.

SELECT  SalesOrderHeader.SalesOrderID, ProductID, OrderQty  
FROM    Sales.SalesOrderHeader, Sales.SalesOrderDetail  
WHERE   SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID  
AND     SalesOrderHeader.SalesOrderID=5001  
FOR XML AUTO, ELEMENTS, XMLSCHEMA  

Nella query è specificata la direttiva ELEMENTS e pertanto il codice XML risultante è incentrato sugli elementi.Because the query specifies the ELEMENTS directive, the resulting XML is element-centric. Nella query è inoltre specificata la direttiva XMLSCHEMAThe query also specifies the XMLSCHEMA directive. e pertanto viene restituito uno schema XSD inline.Therefore, an inline XSD schema is returned. Risultato:This is the result:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

<xsd:element name="Sales.SalesOrderHeader">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="SalesOrderID" type="sqltypes:int" />

<xsd:element ref="schema:Sales.SalesOrderDetail" minOccurs="0" maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="Sales.SalesOrderDetail">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="ProductID" type="sqltypes:int" />

<xsd:element name="OrderQty" type="sqltypes:smallint" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Dalla query precedente si noti quanto segue:Note the following from the previous query:

  • Nel risultato <SalesOrderHeader> e <SalesOrderDetail> sono elementi entitàIn the result, <SalesOrderHeader> and <SalesOrderDetail> are entity elements. e pertanto vengono dichiarati a livello globale nello schema.Because of this, they are globally declared in the schema. Ciò significa che la dichiarazione è presente nel livello principale dell'elemento <Schema>.That is, the declaration appears at the top level inside the <Schema> element.

  • <SalesOrderID>, <ProductID> e <OrderQty> non sono elementi entità perché è stato eseguito il mapping a colonne.The <SalesOrderID>, <ProductID>, and <OrderQty> are not entity elements, because they map to columns. I dati di colonna vengono restituiti come elementi nel codice XML e ciò è dovuto alla direttiva ELEMENTS.The column data is returned as elements in the XML, because of the ELEMENTS directive. Per tali elementi viene eseguito il mapping a elementi locali del tipo complesso dell'elemento entità.These are mapped to local elements of the entity element's complex type. Si noti che se non viene specificata la direttiva ELEMENTS, per i valori SalesOrderID, ProductID e OrderQty viene eseguito il mapping ad attributi locali del tipo complesso dell'elemento entità corrispondente.Note that if the ELEMENTS directive is not specified, the SalesOrderID, ProductID and OrderQty values are mapped to local attributes of the corresponding entity element's complex type.

Conflitti dei nomi di attributiAttribute Name Clashes

Le informazioni seguenti si basano sulle tabelle CustOrder e CustOrderDetail :The following discussion is based on the CustOrder and CustOrderDetail tables. Per testare gli esempi seguenti, creare le tabelle e inserire dati di esempio personalizzati:To test the following samples, create these tables and add your own sample data:

CREATE TABLE CustOrder (OrderID int primary key, CustomerID int)  
GO  
CREATE TABLE CustOrderDetail (OrderID int, ProductID int, Qty int)  
GO  

Nelle query FOR XML a volte viene utilizzato lo stesso nome per indicare proprietà o attributi diversi.In FOR XML, the same name is sometimes used to indicate different properties, attributes. Ad esempio, la query in modalità RAW incentrata sugli attributi seguente crea due attributi con lo stesso nome, OrderIDFor example, the following attribute-centric RAW mode query generates two attributes that have the same name, OrderID. e viene quindi generato un errore.This generates an error.

SELECT CustOrder.OrderID,   
       CustOrderDetail.ProductID,   
       CustOrderDetail.OrderID  
FROM   dbo.CustOrder, dbo.CustOrderDetail  
WHERE  CustOrder.OrderID = CustOrderDetail.OrderID  
FOR XML RAW, XMLSCHEMA  

Poiché è tuttavia consentito che due elementi abbiano lo stesso nome, è possibile risolvere il problema aggiungendo la direttiva ELEMENTS:However, because it is acceptable to have two elements that have the same name, you can eliminate the problem by adding the ELEMENTS directive:

SELECT CustOrder.OrderID,  
       CustOrderDetail.ProductID,   
       CustOrderDetail.OrderID  
from   dbo.CustOrder, dbo.CustOrderDetail  
where  CustOrder.OrderID = CustOrderDetail.OrderID  
FOR XML RAW, XMLSCHEMA, ELEMENTS  

Di seguito è riportato il risultato.This is the result. Si noti che nello schema XSD inline, l'elemento OrderID è definito due volte.Note in the inline XSD schema, the OrderID element is defined two times. Per una dichiarazione minOccurs è impostato su 0 e corrisponde all'elemento OrderID della tabella CustOrderDetail e la seconda dichiarazione esegue il mapping alla colonna chiave primaria OrderID della tabella CustOrder , nella quale minOccurs è 1 per impostazione predefinita.One of the declarations has minOccurs set to 0, corresponding to the OrderID from the CustOrderDetail table, and the second one maps to the OrderID primary key column of the CustOrder table where minOccurs is 1 by default.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="OrderID" type="sqltypes:int" />

<xsd:element name="ProductID" type="sqltypes:int" minOccurs="0" />

<xsd:element name="OrderID" type="sqltypes:int" minOccurs="0" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Conflitti dei nomi di elementiElement Name Clashes

Nelle query FOR XML è possibile utilizzare lo stesso nome per indicare due sottoelementi.In FOR XML, the same name can be used to indicate two subelements. Ad esempio, la query seguente recupera i valori ListPrice e DealerPrice dei prodotti, ma specifica lo stesso alias per le due colonne, ovvero Price.For example, the following query retrieves ListPrice and DealerPrice values of products, but the query specifies the same alias, Price, for these two columns. Nel set di righe risultante saranno pertanto presenti due colonne con lo stesso nome.Therefore, the resulting rowset will have two columns with same name.

Caso 1: Entrambi i sottoelementi sono colonne non chiave dello stesso tipo e possono essere NULLCase 1: Both subelements are nonkey columns of the same type and can be NULL

Nella query seguente, entrambi i sottoelementi sono colonne non chiave dello stesso tipo e possono essere NULL.In the following query, both subelements are nonkey columns of the same type and can be NULL.

DROP TABLE T  
go  
CREATE TABLE T (ProductID int primary key, ListPrice money, DealerPrice money)  
go  
INSERT INTO T values (1, 1.25, null)  
go  

SELECT ProductID, ListPrice Price, DealerPrice Price  
FROM   T  
for    XML RAW, ELEMENTS, XMLSCHEMA  

Di seguito è riportato il codice XML generato,This is the corresponding XML generated. nel quale è visualizzata solo una frazione dello schema XSD inline:Only a fraction of the inline XSD is shown:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="ProductID" type="sqltypes:int" />

<xsd:element name="Price" type="sqltypes:money" minOccurs="0" maxOccurs="2" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<ProductID>1</ProductID>

<Price>1.2500</Price>

</row>

Nello schema XSD si noti quanto segue:Note the following in the inline XSD schema:

  • ListPrice e DealerPrice sono dello stesso tipo, money ed entrambi possono essere NULL nella tabella.Both the ListPrice and DealerPrice are of the same type, money, and both can be NULL in the table. Dato che non possono essere restituiti nel codice XML risultante, nella dichiarazione del tipo complesso dell'elemento <row> esiste pertanto un solo elemento figlio <Price> con minOccurs=0 e maxOccurs=2.Therefore, because they may not be returned in the resulting XML, there is only one <Price> child element in the complex type declaration of the <row> element that has minOccurs=0 and maxOccurs=2.

  • Poiché il valore DealerPrice è NULL nella tabella, nel risultato viene restituito solo ListPrice come elemento <Price>.In the result, because the DealerPrice value is NULL in the table, only ListPrice is returned as a <Price> element. Se si aggiunge il parametro XSINIL alla direttiva ELEMENTS, si otterranno entrambi gli elementi con il valore xsi:nil impostato su TRUE per l'elemento <Price> corrispondente a DealerPrice.If you add the XSINIL parameter to the ELEMENTS directive, you will receive both of the elements that have the xsi:nil value set to TRUE for the<Price> element that corresponds to DealerPrice. Si otterranno inoltre due elementi figlio <Price> nella definizione del tipo complesso <row> dello schema XSD inline, con l'attributo nillable impostato su TRUE per entrambi.You will also receive two <Price> child elements in the <row> complex type definition in the inline XSD schema with the nillable attribute set to TRUE for both. Di seguito è riportato un frammento che rappresenta un risultato parziale:This fragment is a partial result:

    <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

    <xsd:element name="row">

    <xsd:complexType>

    <xsd:sequence>

    <xsd:element name="ProductID" type="sqltypes:int" nillable="1" />

    <xsd:element name="Price" type="sqltypes:money" nillable="1" />

    <xsd:element name="Price" type="sqltypes:money" nillable="1" />

    </xsd:sequence>

    </xsd:complexType>

    </xsd:element>

    </xsd:schema>

    <row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <ProductID>1</ProductID>

    <Price>1.2500</Price>

    <Price xsi:nil="true" />

    </row>

Caso 2: Una colonna chiave e una colonna non chiave dello stesso tipoCase 2: One key and one nonkey column of the same type

La query seguente illustra una colonna chiave e una colonna non chiave dello stesso tipo.The following query illustrates one key and one nonkey column of the same type.

CREATE TABLE T (Col1 int primary key, Col2 int, Col3 nvarchar(20))  
go  
INSERT INTO T VALUES (1, 1, 'test')  
go   

La query seguente alla tabella T specifica lo stesso alias per Col1 e Col2, dove Col1 è una chiave primaria e non può essere Null e Col2 può essere Null.The following query against table T specifies the same alias for Col1 and Col2, where Col1 is a primary key and cannot be null, and Col2 can be null. Vengono pertanto generati due elementi di pari livello che sono figli dell'elemento <row>.This generates two sibling elements that are children of the <row> element.

SELECT Col1 as Col, Col2 as Col, Col3  
FROM T  
FOR XML RAW, ELEMENTS, XMLSCHEMA  

Di seguito è riportato il risultato.This is the result. nel quale è visualizzato solo un frammento dello schema XSD inline.Only a fragment of the inline XSD schema is shown.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Col" type="sqltypes:int" />

<xsd:element name="Col" type="sqltypes:int" minOccurs="0" />

<xsd:element name="Col3" minOccurs="0">

<xsd:simpleType>

<xsd:restriction base="sqltypes:nvarchar"

sqltypes:localeId="1033"

sqltypes:sqlCompareOptions="IgnoreCase

IgnoreKanaType IgnoreWidth"

sqltypes:sqlSortId="52">

<xsd:maxLength value="20" />

</xsd:restriction>

</xsd:simpleType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<Col>1</Col>

<Col>1</Col>

<Col3>test</Col3>

</row>

Si noti che per l'elemento <Col> dello schema XSD inline, minOccurs è impostato su 0.Note in the inline XSD schema that the <Col> element corresponding to the Col2 has minOccurs set to 0.

Caso 3: Entrambi gli elementi sono di tipo diverso e le colonne corrispondenti possono essere NULLCase 3: Both elements of different types and corresponding columns can be NULL

La query seguente viene eseguita sulla tabella di esempio illustrata nel caso 2:The following query is specified against the sample table shown in case 2:

SELECT Col1, Col2 as Col, Col3 as Col  
FROM T  
FOR XML RAW, ELEMENTS, XMLSCHEMA  

Nella query seguente, a Col2 e Col3 sono assegnati gli stessi alias.In the following query, Col2 and Col3 are given the same aliases. Nel risultato vengono pertanto generati due elementi di pari livello con lo stesso nome ed entrambi figli dell'elemento <raw>.This generates two sibling elements that have the same name and that are both children of the <raw> element in the result. Entrambe le colonne sono di tipo diverso e possono essere NULL.Both of these columns are of different types and both can be NULL. Di seguito è riportato il risultato.This is the result. nel quale è visualizzato solo uno schema XSD inline parziale.Only partial inline XSD schema is shown.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:simpleType name="Col1">

<xsd:restriction base="sqltypes:int" />

</xsd:simpleType>

<xsd:simpleType name="Col2">

<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033"

sqltypes:sqlCompareOptions="IgnoreCase

IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

<xsd:maxLength value="20" />

</xsd:restriction>

</xsd:simpleType>

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Col1" type="sqltypes:int" />

<xsd:element name="Col" minOccurs="0" maxOccurs="2" type="xsd:anySimpleType" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<Col1>1</Col1>

<Col xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:type="Col1">1</Col>

<Col xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:type="Col2">test</Col>

</row>

Nello schema XSD si noti quanto segue:Note the following in the inline XSD schema:

  • Col2 e Col3 possono entrambe essere NULL e pertanto nella dichiarazione dell'elemento <Col> è specificato che minOccurs è 0 e maxOccurs è 2.Because both Col2 and Col3 can be NULL, the <Col> element declaration specifies the minOccurs as 0 and maxOccurs as 2.

  • Poiché gli elementi <Col> sono di pari livello, nello schema è presente una singola dichiarazione di elemento.Because both the <Col> elements are siblings, there is one element declaration in the schema. Inoltre, dato che entrambi gli elementi sono anche di tipo diverso, benché di tipo semplice, il tipo dell'elemento nello schema è xsd:anySimpleType.Also, because both of the elements are also of different types, though both are simple types, the type of the element in the schema is xsd:anySimpleType. Nel risultato, ogni tipo di istanza è identificato dall'attributo xsi:type.In the result, each instance type is identified by the xsi:type attribute.

  • Nel risultato, ogni istanza dell'elemento <Col> fa riferimento al proprio tipo di istanza con l'attributo xsi:type.In the result, every instance of the <Col> element refers to its instance type by using the xsi:type attribute.