Soporte para el tipo de datos XML nativo de DB2 en operaciones de servicios web

Las operaciones de servicios web pueden hacer referencia a columnas de DB2 que utilizan el tipo de datos XML nativo.

En el esquema XML para los mensajes de entrada y salida para la operación, el tipo de datos XML nativo se correlaciona con xsd:anyType.

Si un mensaje XML para un servicio web solicita INSERT o UPDATE, el código de parámetro debe contener un documento XML válido.

Los ejemplos de las dos secciones siguientes realizan operaciones en la tabla CUSTOMER de la base de datos SAMPLE de DB2.

Tabla 1. Columnas de la tabla CUSTOMER
Nombre de columna Tipo de datos
CID BIGINT
INFO XML
HISTORY XML

Utilización del tipo de datos XML nativo de DB2 en sentencias INSERT

El siguiente esquema XML por omisión es para una operación basada en la siguiente sentencia de SQL:

INSERT INTO CUSTOMER (CID, INFO, HISTORY)
  VALUES (:cid, :info, :history)

Las columnas INFO y HISTORY contienen datos XML. Los elementos que representan estas columnas en el esquema aparecen resaltados en negrita:

<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
targetNamespace="urn:example" xmlns:tns="urn:example">
	<xsd:element name="insertCustomer">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="cid" type="xsd:long" nillable="true"></xsd:element>
				<xsd:element name="info" type="xsd:anyType" nillable="true"></xsd:element>
				<xsd:element name="history" type="xsd:anyType" nillable="true"></xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="insertCustomerResponse">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="updateCount" type="xsd:int"></xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

Una solicitud SOAP/HTTP puede ser similar al ejemplo siguiente:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="urn:example">
	<soapenv:Body>
		<q0:insertCustomer>
			<cid>123456</cid>
			<info>
				<customerinfo>
					<name>Amir Malik</name>
					<addr country="United States">
						<street>555 Bailey Ave</street>
						<city>San Jose</city>
						<prov-state>California</prov-state>
						<pcode-zip>95141</pcode-zip>
					</addr>
					<phone type="work">408-555-1358</phone>
				</customerinfo>
			</info>
			<history>
				<customerHistory>
					<numberOrders>12</numberOrders>
					<memberSince>1999</memberSince>
				</customerHistory>
			</history>
		</q0:insertCustomer>
	</soapenv:Body>
</soapenv:Envelope>

Utilización del tipo de datos XML nativo de DB2 en consultas

El siguiente esquema XML por omisión es para una operación basada en la siguiente sentencia de SQL:

SELECT CID, INFO, HISTORY
  FROM CUSTOMER

Como en el ejemplo anterior, las columnas INFO y HISTORY contienen datos XML. Los elementos que representan estas columnas en el esquema aparecen resaltados en negrita:

<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
targetNamespace="urn:example" xmlns:tns="urn:example">
	<xsd:element name="selectCustomer">
		<xsd:complexType></xsd:complexType>
	</xsd:element>
	<xsd:element name="selectCustomerResponse">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element maxOccurs="unbounded" minOccurs="0" name="row">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="CID" type="xsd:long"></xsd:element>
							<xsd:element name="INFO" type="xsd:anyType" nillable="true"></xsd:element>
							<xsd:element name="HISTORY" type="xsd:anyType" nillable="true"></xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

Una respuesta SOAP/HTTP puede ser similar al ejemplo siguiente:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="urn:example">
	<soapenv:Body>
		<q0:selectCustomerResponse>
			<row>
				<cid>123456</cid>
				<info>
					<customerinfo>
						<name>Amir Malik</name>
						<addr country="United States">
							<street>555 Bailey Ave</street>
							<city>San Jose</city>
							<prov-state>California</prov-state>
							<pcode-zip>95141</pcode-zip>
						</addr>
						<phone type="work">408-555-1358</phone>
					</customerinfo>
				</info>
				<history>
					<customerHistory>
						<numberOrders>12</numberOrders>
						<memberSince>1999</memberSince>
					</customerHistory>
				</history>
			</row>
		</q0:selectCustomerResponse>
	</soapenv:Body>
</soapenv:Envelope>

Comentarios