Compartir vía


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

Se aplica a: SQL Server Azure SQL Database

Al escribir esquemas XSD, puede usar el atributo XSD targetNamespace para especificar un espacio de nombres de destino. En este artículo se describe cómo funcionan los atributos XSD targetNamespace, elementFormDefaulty attributeFormDefault , cómo afectan a la instancia XML generada y cómo se especifican las consultas XPath con espacios de nombres.

Puede usar el xsd:targetNamespace atributo para colocar elementos y atributos del espacio de nombres predeterminado en otro espacio de nombres. 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 usar los elementFormDefault atributos y attributeFormDefault en el <xsd:schema> elemento para especificar globalmente la calificación de los elementos y atributos locales, o puede usar el form atributo para especificar elementos y atributos individuales 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 ejemplos de SQLXML.

A Especificar un espacio de nombres de destino

El siguiente esquema XSD especifica un espacio de nombres de destino mediante el xsd:targetNamespace atributo . El esquema también establece los elementFormDefault valores "unqualified" de atributo y attributeFormDefault en (el valor predeterminado para estos atributos). Se trata de una declaración global y afecta a todos los elementos locales (<Order> en el esquema) y atributos (CustomerID, ContactNamey 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 CustomerType declaraciones de tipo y OrderType son globales y, por lo tanto, se incluyen en el espacio de nombres de destino del esquema. Como resultado, cuando se hace referencia a estos tipos en la declaración de <Customer> elemento y su <Order> elemento secundario, se especifica un prefijo asociado al espacio de nombres de destino.

  • El <Customer> elemento también se incluye 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 (solo 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 asocia un prefijo (y0) a él. El prefijo solo se aplica al <Customer> elemento global. (El elemento es global porque se declara como elemento secundario del <xsd:schema> elemento en el esquema).

El prefijo no se aplica a los elementos y atributos locales porque el valor de elementFormDefault y attributeFormDefault los atributos se establece "unqualified" en en el esquema. El <Order> elemento es local porque su declaración aparece como elemento secundario del <complexType> elemento que define el <CustomerType> elemento. Del mismo modo, los atributos (CustomerID, OrderIDy ContactName) son locales, no globales.

Creación de un ejemplo de trabajo 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 <Customer> elemento para el cliente con un CustomerID de 1. La consulta XPath especifica el prefijo de espacio de nombres para el elemento de la consulta y no para el atributo . (Los atributos locales no están calificados, como se especifica en el esquema).

    La ruta de acceso del directorio especificada para el esquema de asignación (targetNamespace.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\targetNamespace.xml"
    
  3. 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.

Si el esquema especifica elementFormDefault los atributos y attributeFormDefault con el valor "qualified", el documento de instancia tiene todos los elementos y atributos locales calificados. Puede cambiar el esquema anterior para incluir estos atributos en el <xsd:schema> elemento y volver a ejecutar la plantilla. Dado que los atributos ahora también están calificados en la instancia, la consulta XPath cambia para incluir el prefijo del 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>