Excluir elementos de esquema del documento XML resultante mediante sql:mapped (SQLXML 4.0)

Cada elemento y atributo del esquema XSD se asigna a una tabla/vista y columna de base de datos debido a la asignación predeterminada. Si desea crear un elemento en el esquema XSD que no se asigne a ninguna tabla (vista) o columna de base de datos y que no aparezca en el XML, puede especificar la anotación sql:mapped.

La anotación sql:mapped es especialmente útil si no se puede modificar el esquema o si se utiliza para validar XML de otros orígenes y, aun así, contiene datos que no están almacenados en su base de datos. La anotación sql:mapped difiere de sql:is-constant en que los elementos y atributos no asignados no aparecen en el documento XML.

La anotación sql:mapped toma un valor booleano (0 = false, 1 = true). Los valores permitidos son 0, 1, true y false.

Ejemplos

Para crear ejemplos funcionales mediante el uso de los ejemplos siguientes, debe cumplir determinados requisitos. Para obtener más información, vea Requisitos para ejecutar los ejemplos de SQLXML.

A. Especificar la anotación sql:mapped

Suponga que tiene un esquema XSD de algún otro origen. Este esquema XSD está compuesto por un elemento <Person.Person> con los atributos BusinessEntityID, FirstName, LastName y HomeAddress.

Para asignar este esquema XSD a la tabla Person.Person de la base de datos AdventureWorks2008R2, se especifica sql:mapped en el atributo HomeAddress porque la tabla Employees no almacena direcciones particulares de los empleados. Por consiguiente, este atributo no se asigna a la base de datos y no se devuelve en el documento XML resultante cuando se especifica una consulta XPath en el esquema de asignación.

Para el resto del esquema se produce una asignación predeterminada. El elemento <Person.Person> se asigna a la tabla Person.Person y todos los atributos se asignan a las columnas del mismo nombre de la tabla Person.Person.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Person">
    <xsd:complexType>
      <xsd:attribute name="BusinessEntityID"   type="xsd:string"/>
      <xsd:attribute name="FirstName"    type="xsd:string" />
      <xsd:attribute name="LastName"     type="xsd:string" />
      <xsd:attribute name="HomeAddress" type="xsd:string" 
                     sql:mapped="false" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Para probar una consulta XPath de ejemplo en el esquema

  1. Copie el código de esquema anterior y péguelo en un archivo de texto. Guarde el archivo como sql-mapped.xml.

  2. Copie la plantilla siguiente y péguela en un archivo de texto. Guarde el archivo como sql-mappedT.xml en el mismo directorio donde guardó sql-mapped.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="sql-mapped.xml">
            /Person.Person[@BusinessEntityID &lt; 10]
        </sql:xpath-query>
    </ROOT>
    

    La ruta de acceso al directorio especificada para el esquema de asignación (MySchema.xml) es relativa al directorio donde se guarda la plantilla. También puede especificarse una ruta de acceso absoluta como, por ejemplo:

    mapping-schema="C:\MyDir\sql-mapped.xml"
    
  3. Cree y use el script de prueba SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar la plantilla.

    Para obtener más información, vea Utilizar ADO para ejecutar consultas SQLXML.

Éste es el conjunto de resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person BusinessEntityID="1" FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person BusinessEntityID="2" FirstName="Catherine" LastName="Abel" /> 
  <Person.Person BusinessEntityID="3" FirstName="Kim" LastName="Abercrombie" /> 
  <Person.Person BusinessEntityID="4" FirstName="Humberto" LastName="Acevedo" /> 
  <Person.Person BusinessEntityID="5" FirstName="Pilar" LastName="Ackerman" /> 
  <Person.Person BusinessEntityID="6" FirstName="Frances" LastName="Adams" /> 
  <Person.Person BusinessEntityID="7" FirstName="Margaret" LastName="Smith" /> 
  <Person.Person BusinessEntityID="8" FirstName="Carla" LastName="Adams" /> 
  <Person.Person BusinessEntityID="9" FirstName="Jay" LastName="Adams" /> 
</ROOT>

Observe que BusinessEntityID, FirstName y LastName están presentes, pero no lo está HomeAddress porque el esquema de asignación especificó 0 para el atributo sql:mapped.