Crear elementos constantes mediante sql:is-constant (SQLXML 4.0)
Puede usar la anotación sql:is-constant para especificar un elemento de la constante, es decir, un elemento en el esquema XSD que no se asigna a ninguna tabla o columna de base de datos. Esta anotación toma un valor booleano (0=false, 1=true). Los valores permitidos son 0, 1, true y false. La anotación sql:is-constant se puede especificar en un elemento que no tiene ningún atributo. Si se especifica en un elemento con el valor true (o 1), ese elemento no está asignado a la base de datos pero sigue apareciendo en el documento XML.
La anotación sql:is-constant se puede utilizar para:
Agregar un elemento de nivel superior al documento XML. XML requiere un único elemento de nivel superior (root) para el documento.
Crear elementos contenedores, como un elemento <Orders> que contenga todos los pedidos.
La anotación sql:is-constant se puede agregar a un elemento <complexType>.
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:is-constant para agregar un elemento contenedor
En este esquema XSD anotado, <CustomerOrders> se define como un elemento de la constante mediante el atributo sql:is-constant con un valor de 1. Por consiguiente, <CustomerOrders> no está asignado a ninguna tabla o columna de base de datos. Este elemento de la constante presenta de los elementos secundarios <Order>.
Aunque <CustomerOrders> no se asigna a ninguna tabla o columna de base de datos, sigue apareciendo en el documento XML resultante como un elemento contenedor que contiene los elementos secundarios <Order>.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<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" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerOrders" sql:is-constant="1" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Para probar una consulta XPath de ejemplo en el esquema
Copie el código de esquema anterior y péguelo en un archivo de texto. Guarde el archivo como isConstant.xml.
Copie la plantilla siguiente y péguela en un archivo de texto. Guarde el archivo como isConstantT.xml en el mismo directorio donde guardó isConstantT.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="isConstant.xml"> Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
La ruta de acceso al directorio especificada para el esquema de asignación (isConstant.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\isConstant.xml"
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 parciales:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1">
<CustomerOrders>
<Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1" />
<Order SalesOrderID="44501" OrderDate="2001-11-01" CustomerID="1" />
<Order SalesOrderID="45283" OrderDate="2002-02-01" CustomerID="1" />
<Order SalesOrderID="46042" OrderDate="2002-05-01" CustomerID="1" />
...
</CustomerOrders>
</Customer>
</ROOT>