Usando esquemas XSD anotados em consultas (SQLXML 4.0)
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 mapping-schema
atributo 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 no comportamento do 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 mapping-schema
atributo .
Quando você especifica um esquema embutido no modelo, a sql:is-mapping-schema
anotação também deve ser especificada no <elemento xsd:schema> . A anotação sql:is-mapping-schema
adota 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 Usando o ADO para executar consultas SQLXML 4.0.
Além de especificar o mapping-schema
atributo no <elemento sql:xpath-query> em um modelo (quando houver uma consulta XPath) ou no <elemento updg:sync> em um updategram, você pode fazer o seguinte:
Especifique o
mapping-schema
atributo no <elemento ROOT> (declaração global) no modelo. Este esquema de mapeamento se torna o esquema padrão que será usado por todos os XPaths e nós de diagrama de atualização que não têm nenhuma anotaçãomapping-schema
explícita.Especificar o atributo
mapping schema
usando o objetoCommand
do ADO.
O mapping-schema
atributo especificado no <elemento xpath-query> ou <updg:sync> tem a precedência mais alta; o objeto ADO Command
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 de 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 de 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.