Compartir a través de


Crear atributos válidos de tipo ID, IDREF e IDREFS mediante sql:id-prefix (esquema de XDR)

Nota importanteImportante

Este tema se incluye como referencia para las aplicaciones heredadas. No se llevará a cabo ningún trabajo de desarrollo de esta característica en el futuro. Evite usarla en nuevos trabajos de desarrollo. En su lugar, use esquemas XSD anotados para crear vistas XML. Para obtener más información, vea Introducción a los esquemas XSD anotados (SQLXML 4.0). Puede convertir los esquemas XDR anotados existentes en esquemas XSD. Para obtener más información, vea Convertir esquemas XDR anotados en esquemas XSD equivalentes (SQLXML 4.0).

Es posible especificar que un atributo sea un atributo de tipo ID. Los atributos especificados como IDREF o IDREFS pueden usarse para hacer referencia a los atributos de tipo ID, habilitando así los vínculos intradocumento.

ID, IDREF e IDREFS corresponden a relaciones de clave principal/clave externa (PK/FK) de la base de datos, con algunas diferencias. En el documento XML, los valores de los atributos de tipo ID deben ser distintos. Si tiene atributos CustomerID y SalesOrderID en un documento XML, estos valores deben ser distintos. Sin embargo, en una base de datos, las columnas CustomerID y SalesOrderID pueden tener los mismos valores (por ejemplo, CustomerID = 1 y OrderID = 1 es válido en la base de datos).

Para que los atributos ID, IDREFS e IDREF sean válidos:

  • El valor de ID debe ser único dentro del documento XML.

  • Para cada atributo IDREF e IDREFS, los valores de ID a los que se haga referencia deben estar en el documento XML.

  • El valor de un ID, IDREF e IDREFS debe tener una denominación de símbolo (token) (por ejemplo, el valor entero 101 no puede ser un valor de ID).

  • Los atributos de tipo ID, IDREFS e IDREF no pueden asignarse a columnas de tipo text, ntext o image ni a cualquier otro tipo de datos binarios (por ejemplo, timestamp).

Si un documento XML contiene varios Id., se especifica la anotación sql:id-prefix para asegurarse de que los valores son únicos. . La anotación The sql:id-prefix también se utiliza para crear símbolos (token) con nombre a partir de números. El valor especificado para sql:id-prefix debe ser un carácter de nombre válido.

El atributo sql:id-prefix antepone a los valores de ID, IDREF e IDREFS una cadena, haciéndolos así únicos. No se realiza ninguna comprobación para asegurarse de la validez de los prefijos y la singularidad de los valores de ID, IDREF o IDREFS.

El atributo sql:id-prefix se omite en los atributos que no son de tipo ID, IDREF o IDREFS.

[!NOTA]

Cada valor de los atributos ID, IDREF e IDREFS se limita a 4.000 caracteres, incluido el prefijo (si se especifica).

Examples

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 sql:id-prefix para un atributo de tipo ID

En este esquema XDR, los atributos CustomerID y SalesOrderID se declaran como tipo ID. Para asegurarse de que los ID son únicos y válidos, se especifica la anotación sql:id-prefix para estos atributos:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" dt:type="id" />
    <attribute type="CustomerID" />
    <AttributeType name="OrderList" dt:type="idrefs"
                                 sql:id-prefix="Ord-" />
    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
        <sql:relationship
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader"
                foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
        <sql:relationship key-relation="Sales.SalesOrderHeader"
                          key="SalesOrderID"
                          foreign-relation="Sales.Customer"
                          foreign-key="SalesOrderID" />
    </element>
  </ElementType>
</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 sqlPrefix-Xdr.xml.

  2. Copie la plantilla siguiente y péguela en un archivo de texto. Guarde el archivo como sqlPrefix-XdrT.xml en el mismo directorio donde guardó sqlPrefix-Xdr.xml. La consulta XPath de la plantilla devuelve los subelementos <Customer> y <Order> cuyo CustomerID es 1.

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

    La ruta de acceso al directorio especificada para el esquema de asignación (sqlPrefix-Xdr.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\sqlPrefix-Xdr.xml"
    
  3. Cree y use el script de prueba de 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">
  <Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>

Vea también

Referencia