Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode especificar consultas em um esquema anotado para recuperar dados do banco de dados especificando consultas XPath em um modelo em 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> .
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 para os fragmentos do documento; os modelos fornecem, portanto, uma maneira de especificar um único elemento de nível superior.
Os exemplos neste tópico usam modelos para especificar uma consulta XPath em 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, esse esquema XSD é armazenado no arquivo chamado Schema2.xml. Em seguida, você pode ter uma consulta XPath em relação ao esquema anotado especificado no arquivo de modelo a seguir (Schema2T.xml):
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
Em seguida, você pode 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 embutido
Um esquema anotado pode ser incluído diretamente em um modelo e, em seguida, uma consulta XPath pode ser especificada no modelo em relação ao esquema embutido. O modelo também pode ser um updategram.
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 referenciar o 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 modelo a seguir 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 de consulta> xpath 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> . Usa sql:is-mapping-schema um valor booliano (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 sql:is-mapping-schema anotação pertence ao namespace urn:schemas-microsoft-com:xml-sqldo modelo.
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 mapping-schema atributo 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
mapping-schemaatributo 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 anotação explícitamapping-schema.Especifique o
mapping schemaatributo usando o objeto ADOCommand.
O mapping-schema atributo especificado no <elemento xpath-query> ou <updg:sync> tem a precedência mais alta; o objeto ADO Command tem a menor precedência.
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.