Usando esquemas XSD anotados em consultas (SQLXML 4.0)
Aplica-se a: SQL Server Banco de Dados SQL do Azure
Você pode especificar consultas com relação a um esquema anotado para recuperar dados do banco de dados especificando consultas XPath em um modelo com relação ao esquema XSD.
O <elemento sql:xpath-query> permite que você especifique uma consulta XPath na exibição XML definida pelo esquema anotado. O esquema anotado no qual a consulta XPath deve ser executada é identificado usando o atributo mapping-schema do <elemento sql:xpath-query> .
Os modelos são documentos XML válidos que contêm uma ou mais consultas. As consultas FOR XML e XPath retornam um fragmento de documento. Os modelos atuam como contêineres dos fragmentos de documento; os modelos oferecem uma maneira de especificar um único elemento de nível superior.
Os exemplos deste tópico usam modelos para especificar uma consulta XPath com relação a um esquema anotado para recuperar dados do banco de dados.
Por exemplo, considere este esquema anotado:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Person.Contact" >
<xsd:complexType>
<xsd:attribute name="ContactID" type="xsd:string" />
<xsd:attribute name="FirstName" type="xsd:string" />
<xsd:attribute name="LastName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Para fins de ilustração, este esquema XSD é armazenado em arquivo nomeado Schema2.xml. Você poderá ter uma consulta XPath com relação ao esquema anotado especificado no seguinte arquivo de modelo (Schema2T.xml):
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
Em seguida, você poderá criar e usar o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar a consulta como parte de um arquivo de modelo. Para obter mais informações, consulte Esquemas XDR anotados (preteridos no SQLXML 4.0).
Usando esquemas de mapeamento embutidos
Um esquema anotado pode ser incluído diretamente em um modelo e, em seguida, uma consulta XPath pode ser especificada no modelo com relação ao esquema embutido. O modelo pode também ser um diagrama de atualização.
Um modelo pode incluir vários esquemas embutidos. Para usar um esquema embutido incluído em um modelo, especifique o atributo id com um valor exclusivo no <elemento xsd:schema> e use #idvalue para fazer referência ao esquema embutido. O atributo id é idêntico em comportamento ao sql:id ({urn:schemas-microsoft-com:xml-sql}id) usado em esquemas XDR.
Por exemplo, o seguinte modelo especifica dois esquemas anotados embutidos:
<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema1' sql:is-mapping-schema='1'>
<xsd:element name='Employees' ms:relation='HumanResources.Employee'>
<xsd:complexType>
<xsd:attribute name='LoginID'
type='xsd:string'/>
<xsd:attribute name='Title'
type='xsd:string'/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema2' sql:is-mapping-schema='1'>
<xsd:element name='Contacts' ms:relation='Person.Contact'>
<xsd:complexType>
<xsd:attribute name='ContactID'
type='xsd:string' />
<xsd:attribute name='FirstName'
type='xsd:string' />
<xsd:attribute name='LastName'
type='xsd:string' />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema1'>
/Employees[@LoginID='adventure-works\guy1']
</sql:xpath-query>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema2'>
/Contacts[@ContactID='1']
</sql:xpath-query>
</ROOT>
O modelo também especifica duas consultas XPath. Cada um dos elementos xpath-query> identifica exclusivamente o esquema de mapeamento especificando o atributo mapping-schema.<
Quando você especifica um esquema sequencial no modelo, a anotação sql:is-mapping-schema também deve ser especificada no< elemento xsd:schema>. O sql:is-mapping-schema recebe um valor booleano (0=false, 1=true). Um esquema embutido com sql:is-mapping-schema="1" é tratado como esquema anotado embutido e não é retornado no documento XML.
A anotação sql:is-mapping-schema pertence ao namespace de modelo urn:schemas-microsoft-com:xml-sql.
Para testar este exemplo, salve o modelo (InlineSchemaTemplate.xml) em um diretório local e, em seguida, crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo. Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Além de especificar o atributo mapping-schema no< elemento sql:xpath-query> em um modelo (quando há uma consulta XPath) ou no< elemento updg:sync> em um updategram, você pode fazer o seguinte:
Especifique o atributo mapping-schema no <elemento ROOT> (declaração global) no modelo. Esse esquema de mapeamento se torna o esquema padrão que será usado por todos os nós XPath e updategram que não têm nenhuma anotação explícita de esquema de mapeamento.
Especifique o atributo de esquema de mapeamento usando o objeto Command do ADO.
O atributo mapping-schema especificado no< elemento xpath-query> ou <updg:sync> tem a precedência mais alta; o objeto Command do ADO tem a precedência mais baixa.
Observe que, se você especificar uma consulta XPath em um modelo e não especificar um esquema de mapeamento no qual a consulta XPath é executada, a consulta XPath será tratada como uma consulta do tipo dbobject . Por exemplo, considere este modelo:
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql">
Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>
O modelo especifica uma consulta Xpath, mas não especifica um esquema de mapeamento. Portanto, essa consulta é tratada como uma consulta do tipo dbobject na qual Production.ProductPhoto é o nome da tabela e @ProductPhotoID='100' é um predicado que localiza uma foto do produto com o valor de ID de 100. @LargePhoto é a coluna da qual recuperar o valor.