Compartilhar via


Exemplo: Solicitando esquemas como resultados com as opções XMLDATA e XMLSCHEMA

A consulta a seguir retorna o esquema XML-DATA que descreve a estrutura do documento.

Exemplo

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, XMLDATA ;
GO

Este é o resultado:

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data"

xmlns:dt="urn:schemas-microsoft-com:datatypes">

<ElementType name="row" content="empty" model="closed">

<AttributeType name="ProductModelID" dt:type="i4" />

<AttributeType name="Name" dt:type="string" />

<attribute type="ProductModelID" />

<attribute type="Name" />

</ElementType>

</Schema>

<row xmlns="x-schema:#Schema1" ProductModelID="122" Name="All-Purpose Bike Stand" />

<row xmlns="x-schema:#Schema1" ProductModelID="119" Name="Bike Wash" />

ObservaçãoObservação

O <Schema> é declarado como um namespace. Para evitar colisões de namespace quando vários esquemas XML-Data são solicitados em diferentes consultas FOR XML, o identificador do namespace, Schema1 neste exemplo, é alterado a cada execução da consulta. O identificador de namespace é composto de Scheman em que n é um inteiro.

Especificando a opção XMLSCHEMA, é possível solicitar o esquema XSD para o resultado.

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, XMLSCHEMA ;
GO

Este é o resultado:

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

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

<xsd:element name="row">

<xsd:complexType>

<xsd:attribute name="ProductModelID" type="sqltypes:int" use="required" />

<xsd:attribute name="Name" use="required">

<xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks2008R2].[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>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" ProductModelID="122" Name="All-Purpose Bike Stand" />

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" ProductModelID="119" Name="Bike Wash" />

É possível especificar o URI do namespace de destino como um argumento opcional para XMLSCHEMA em FOR XML. Isso retorna o namespace de destino especificado no esquema. Esse namespace de destino permanece o mesmo sempre que você executa a consulta. Por exemplo, a seguinte versão modificada da consulta anterior inclui o URI do namespace, 'urn:example.com', como um argumento.

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, XMLSCHEMA ('urn:example.com') ;
GO

Este é o resultado:

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

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

<xsd:element name="row">

<xsd:complexType>

<xsd:attribute name="ProductModelID" type="sqltypes:int" use="required" />

<xsd:attribute name="Name" use="required">

<xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks2008R2].[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>

<row xmlns="urn:example.com" ProductModelID="122" Name="All-Purpose Bike Stand" />

<row xmlns="urn:example.com" ProductModelID="119" Name="Bike Wash" />

Consulte também

Referência