Compartir a través de


Ocultar elementos y atributos mediante sql:hide

Cuando se ejecuta una consulta XPath en un esquema XSD, el documento XML resultante tiene elementos y atributos que se especifican en el esquema. Es posible especificar que algunos elementos y atributos se oculten en el esquema utilizando la anotación sql:hide. Esto resulta muy útil cuando los criterios de selección de la consulta requieren determinados elementos o atributos en el esquema, pero no desea que se devuelvan en el documento XML que se genera.

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

Ejemplos

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

A. Especificar sql:hide en un atributo

El esquema XSD de este ejemplo consta de un elemento <Person.Contact> con los atributos ContactID, FirstName y LastName.

El elemento <Person.Contact> es de tipo complejo y, por lo tanto, se asigna a la tabla del mismo nombre (asignación predeterminada). Todos los atributos del elemento <Person.Contact> son de tipo simple y se asignan a columnas con los mismos nombres de la tabla Person.Contactde la base de datos AdventureWorks. En el esquema, la anotación sql:hide se especifica en el atributo ContactID. Cuando se especifica una consulta XPath en este esquema, ContactID no se devuelve en el documento XML.

<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"  sql:hide="true" /> 
       <xsd:attribute name="FirstName"   type="xsd:string" /> 
       <xsd:attribute name="LastName"    type="xsd:string" /> 
     </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 Hide.xml.

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="Hide.xml">
            /Person.Contact[@ContactID="1"]
        </sql:xpath-query>
    </ROOT>
    

    La ruta de acceso al directorio especificada para el esquema de asignación (Hide.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\Hide.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 4.0.

El conjunto de resultados es:

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <Person.Contact FirstName="Gustavo" LastName="Achong" /> 
 </ROOT>

Cuando se especifica sql:hide en un elemento, el elemento y sus atributos o elementos secundarios no aparecen en el documento XML que se genera. A continuación se muestra otro esquema XSD en el que sql:hide se especifica en el elemento <OD>:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:dt="urn:schemas-microsoft-com:datatypes"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

  <xsd:annotation>
    <xsd:documentation>
      Sales.Customer-Sales.SalesOrderHeader-Sales.SalesOrderDetail Schema
      Copyright 2004 Microsoft. All rights reserved.
    </xsd:documentation>
    <xsd:appinfo>
      <sql:relationship name="CustomerOrder"
         parent="Sales.Customer"
                  parent-key="CustomerID"
                  child-key="CustomerID"
                  child="Sales.SalesOrderHeader" />
       <sql:relationship name="OrderOrderDetails"
                  parent="Sales.SalesOrderHeader"
                  parent-key="SalesOrderID"
                  child-key="SalesOrderID"
                  child="Sales.SalesOrderDetail"/>
    </xsd:appinfo>
  </xsd:annotation>

  <xsd:element name="Customers" sql:relation="Sales.Customer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" 
                     maxOccurs="unbounded" 
                     sql:relationship="CustomerOrder">
          <xsd:complexType>
            <xsd:sequence>
               <xsd:element name="OD" sql:relation="Sales.SalesOrderDetail"                                       maxOccurs="unbounded"                                       sql:relationship="OrderOrderDetails"                                       sql:hide="1">
                  <xsd:complexType>
                    <xsd:attribute name="SalesOrderID" type="xsd:string"/>
                    <xsd:attribute name="ProductID" type="xsd:string"/>
                  </xsd:complexType>
               </xsd:element>
            </xsd:sequence>
          <xsd:attribute name="CustomerID" type="xsd:string"/>
          <xsd:attribute name="OID" sql:field="SalesOrderID" 
                                    type="xsd:string"/>
          <xsd:attribute name="OrderDate" type="xsd:date"/> 
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="CID" sql:field="CustomerID" 
                                type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Cuando se especifica una consulta XPath (por ejemplo /Customers[@CID="1"]) en este esquema, el documento XML que se genera no incluye el elemento <OD> ni sus elementos secundarios, tal y como se muestra en este resultado parcial:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customers CID="1">
    <Order CustomerID="1" OID="43860" OrderDate="2001-08-01" /> 
    <Order CustomerID="1" OID="44501" OrderDate="2001-11-01" /> 
    <Order CustomerID="1" OID="45283" OrderDate="2002-02-01" /> 
    <Order CustomerID="1" OID="46042" OrderDate="2002-05-01" /> 
  </Customers>
</ROOT>