Compartir a través de


Usar esquemas XSD anotados en consultas (SQLXML 4.0)

Se aplica a: SQL ServerAzure SQL Database

Puede especificar consultas en un esquema anotado para recuperar datos de la base de datos especificando consultas XPath en una plantilla en el esquema XSD.

El <elemento sql:xpath-query> permite especificar una consulta XPath en la vista XML definida por el esquema anotado. El esquema anotado con el que se va a ejecutar la consulta XPath se identifica mediante el atributo mapping-schema del< elemento sql:xpath-query>.

Las plantillas son documentos XML válidos que contienen una o varias consultas. Las consultas FOR XML y XPath devuelven un fragmento de documento. Las plantillas actúan como contenedores para los fragmentos de documento; de esta forma, las plantillas proporcionan un modo de especificar un elemento único de nivel superior.

En los ejemplos de este tema se usan plantillas para especificar una consulta XPath en un esquema anotado con objeto de recuperar datos de la base de datos.

Por ejemplo, fíjese 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>  

Con fines meramente ilustrativos, este esquema XSD se almacena en un archivo denominado Schema2.xml. A continuación, podría incluir una consulta XPath en el esquema anotado especificado en el siguiente archivo de plantilla (Schema2T.xml):

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"  
     >  
          Person.Contact[@ContactID="1"]  
</sql:xpath-query>  

Después, puede crear y usar el script de prueba SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar la consulta como parte de un archivo de plantilla. Para obtener más información, vea Esquemas XDR anotados (en desuso en SQLXML 4.0).

Usar esquemas de asignación insertados

Un esquema anotado puede incluirse directamente en una plantilla y, después, puede especificarse una consulta XPath en la plantilla en el esquema insertado. La plantilla también puede ser un diagrama de actualización.

Una plantilla puede incluir varios esquemas insertados. Para usar un esquema insertado que se incluye en una plantilla, especifique el atributo id con un valor único en el <elemento xsd:schema> y, a continuación, use #idvalue para hacer referencia al esquema insertado. El atributo id es idéntico en comportamiento a sql:id ({urn:schemas-microsoft-com:xml-sql}id) que se usa en esquemas XDR.

Por ejemplo, la plantilla siguiente especifica dos esquemas anotados insertados:

<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>  

La plantilla también especifica dos consultas XPath. Cada uno de los elementos xpath-query> identifica de forma única el esquema de asignación especificando el atributo mapping-schema.<

Al especificar un esquema insertado en la plantilla, también se debe especificar la anotación sql:is-mapping-schema en el <elemento xsd:schema> . Sql :is-mapping-schema toma un valor booleano (0=false, 1=true). Un esquema insertado con sql:is-mapping-schema="1" se trata como esquema anotado insertado y no se devuelve en el documento XML.

La anotación sql:is-mapping-schema pertenece al espacio de nombres de plantilla urn:schemas-microsoft-com:xml-sql.

Para probar este ejemplo, guarde la plantilla (InlineSchemaTemplate.xml) en un directorio local y, a continuación, cree y use el script de prueba SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar la plantilla. Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

Además de especificar el atributo mapping-schema en el <elemento sql:xpath-query> de una plantilla (cuando hay una consulta XPath) o en< el elemento updg:sync> en un diagrama de actualización, puede hacer lo siguiente:

  • Especifique el atributo mapping-schema en el <elemento ROOT> (declaración global) de la plantilla. A continuación, este esquema de asignación se convierte en el esquema predeterminado que usarán todos los nodos XPath y updategram que no tengan ninguna anotación de esquema de asignación explícita.

  • Especifique el atributo de esquema de asignación mediante el objeto Command de ADO.

El atributo mapping-schema especificado en el <elemento xpath-query> o< updg:sync> tiene la prioridad más alta; el objeto Command de ADO tiene la prioridad más baja.

Tenga en cuenta que si especifica una consulta XPath en una plantilla y no especifica un esquema de asignación con el que se ejecuta la consulta XPath, la consulta XPath se trata como una consulta de tipo dbobject . Por ejemplo, fíjese en esta plantilla:

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">  
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto  
</sql:xpath-query>  

La plantilla especifica una consulta XPath, pero no especifica ningún esquema de asignación. Por lo tanto, esta consulta se trata como una consulta de tipo dbobject en la que Production.ProductPhoto es el nombre de la tabla y @ProductPhotoID="100" es un predicado que encuentra una foto de producto con el valor de id. de 100. @LargePhoto es la columna de la que se va a recuperar el valor.