Compartir a través de


Especificar un espacio de nombres de destino mediante el atributo targetNamespace (SQLXML 4.0)

Al crear esquemas XSD, puede utilizar el atributo de XSD targetNamespace para especificar un espacio de nombres de destino. En este tema se describe cómo funcionan los atributos targetNamespace, elementFormDefault y attributeFormDefault de XDS, cómo afectan estos atributos a la instancia XML que se genera y cómo se especifican consultas XPath con espacios de nombres.

Puede utilizar el atributo xsd:targetNamespace para colocar elementos y atributos del espacio de nombres predeterminado en un espacio de nombres diferente. También puede especificar si los elementos y los atributos del esquema declarados localmente deben estar certificados por un espacio de nombres, ya sea explícitamente mediante un prefijo o implícitamente de forma predeterminada. Puede utilizar los atributos elementFormDefault y attributeFormDefault del elemento <xsd:schema> para especificar globalmente la certificación de elementos y atributos locales, o puede utilizar el atributo form para especificar cada elemento y atributo por separado.

Ejemplos

Para crear muestras 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 un espacio de nombres de destino

El siguiente esquema XSD especifica un espacio de nombres de destino mediante el atributo xsd:targetNamespace. El esquema establece también los valores de atributo attributeFormDefault y elementFormDefault en "unqualified" (el valor predeterminado de estos atributos). Esta es una declaración global y afecta a todos los elementos (<Order> en el esquema) y atributos locales (CustomerID, ContactName y OrderID en el esquema).

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
            xmlns:CO="urn:MyNamespace" 
            targetNamespace="urn:MyNamespace" >
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustOrders"
          parent="Sales.Customer"
          parent-key="CustomerID"
          child="Sales.SalesOrderHeader"
          child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>
  
  <xsd:element name="Customer" 
               sql:relation="Sales.Customer" 
               type="CO:CustomerType" />
 
  <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="Order" 
                     sql:relation="Sales.SalesOrderHeader"
                     sql:relationship="CustOrders"
                     type="CO:OrderType" />
     </xsd:sequence>
        <xsd:attribute name="CustomerID"   type="xsd:string" /> 
        <xsd:attribute name="SalesPersonID"  type="xsd:string" />
  </xsd:complexType>
  <xsd:complexType name="OrderType" >
     <xsd:attribute name="SalesOrderID" type="xsd:integer" />
     <xsd:attribute name="CustomerID" type="xsd:string" />
  </xsd:complexType>
</xsd:schema>

En el esquema:

  • Las declaraciones de tipos OrderType y CustomerType son globales y, por tanto, están incluidas en el espacio de nombres de destino del esquema. Por consiguiente, cuando se hace referencia a estos tipos en la declaración del elemento <Customer> y de su elemento secundario <Order>, se especifica un prefijo asociado al espacio de nombres de destino.

  • El elemento <Customer> se incluye también en el espacio de nombres de destino del esquema porque es un elemento global del esquema.

Ejecute la siguiente consulta XPath en el esquema:

(/CO:Customer[@CustomerID=1) 

La consulta XPath genera este documento de instancia (sólo se muestran algunos pedidos):

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <y0:Customer xmlns:y0="urn:MyNamespace" 
      CustomerID="ALFKI" ContactName="Maria Anders">
        <Order CustomerID="ALFKI" OrderID="10643" /> 
        <Order CustomerID="ALFKI" OrderID="10692" /> 
        ...
  </y0:Customer>
  </ROOT>

Este documento de instancia define el espacio de nombres urn:MyNamespace y le asocia un prefijo (y0). El prefijo sólo se aplica al elemento global <Client>. (El elemento es global porque se declara como elemento secundario del elemento <xsd:schema> en el esquema).

El prefijo no se aplica a los elementos y atributos locales porque el valor de los atributos elementFormDefault y attributeFormDefault está establecido en "unqualified" en el esquema. Observe que el elemento <Order> es local porque su declaración aparece como un elemento secundario del elemento <complexType> que define el elemento <CustomerType>. Asimismo, los atributos (CustomerID, OrderID y ContactName) son locales y no globales.

Para crear un ejemplo funcional de este esquema

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

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="targetNamespace.xml"
                       xmlns:CO="urn:MyNamespace" >
        /CO:Customer[@CustomerID=1]
      </sql:xpath-query>
    </ROOT>
    

    La consulta XPath de la plantilla devuelve el elemento <Customer> para el cliente con un CustomerID de 1. Observe que la consulta XPath especifica el prefijo de espacio de nombres del elemento en la consulta y no del atributo. (Los atributos locales, tal y como se especifican en el esquema, no se certifican).

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

    mapping-schema="C:\MyDir\targetNamepsace.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.

Si el esquema especifica los atributos elementFormDefault y attributeFormDefault con el valor "qualified", el documento de instancia tendrá todos los elementos y atributos locales certificados. Puede cambiar el esquema anterior para incluir estos atributos en el elemento <xsd:schema> y ejecutar de nuevo la plantilla. Como los atributos están ahora certificados en la instancia, la consulta XPath cambiará e incluirá el prefijo de espacio de nombres.

Esta es la consulta XPath modificada:

/CO:Customer[@CO:CustomerID=1]

Este el documento XML devuelto:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
   <y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
      <Order SalesOrderID="43860" CustomerID="1" /> 
      <Order SalesOrderID="44501" CustomerID="1" /> 
      <Order SalesOrderID="45283" CustomerID="1" /> 
      <Order SalesOrderID="46042" CustomerID="1" /> 
   </y0:Customer>
</ROOT>