Construya una aplicación pureXML y JSON, Parte 3: Cree gadgets OpenSocial para pureXML

Defina, implemente y pruebe gadgets OpenSocial que interactúen con JSON Universal Services

Con la tecnología Web 2.0 de gadgets OpenSocial, los desarrolladores pueden incluir fácilmente sus aplicaciones en sitios Web populares como iGoogle, MySpace, Hi5, LinkedIn y otros. En este artículo, investigue los gadgets OpenSocial construyendo de manera práctica una aplicación que potencie la ® capacidad pureXML de DB2®. Éste es el último de una serie de tres artículos que muestra cómo construir una aplicación pureXML cuya interfaz de usuario sea un gadget que pueda ser implementado en cualquier sitio Web que cumpla con OpenSocial. Siga los pasos descriptos en este artículo y construya una interfaz de usuario que almacene y recupere los datos JSON descriptos en el primer artículo a través de los JSON Universal Services creados en el segundo.

Han Nguyen, Staff Software Engineer, IBM  

Photo of Han NguyenHan Nguyen es Software Engineer y se dedica a estándares emergentes enfocados a la Computación Social en una gran variedad de productos y orientaciones de la industria. Anteriormente trabajó en la habilitación de servicios y software para varias tecnologías.



Andy Smith, Advisory Software Engineer, IBM

Photo of Andy SmithAndy Smith es Software Engineer y se dedica a estándares emergentes enfocados en la aplicación de tecnologías de Redes Sociales en una gran variedad de productos y orientaciones de la industria. Anteriormente trabajó en la habilitación de servicios y software para varias tecnologías Web y de portales.



Mark Weitzel, Software Architect, IBM

Photo of Mark WeitzelMark Weitzel es Senior Technical Staff Member de IBM Software Group Emerging Standards and Open Source Team y se dedica a las redes sociales. Anteriormente, Weitzel formaba parte del Tivoli Autonomic Computing Team y era responsable de varias iniciativas de gestión de sistemas de código abierto en Eclipse y Apache.



05-03-2010

Información relacionada con OpenSocial

OpenSocial es una especificación dirigida por la comunidad que define un modelo de componentes basados en el navegador denominados gadgets y una API para acceder a información de perfiles de usuarios, así como también a sus gráficos sociales (que incluyen información como sus amigos y actividades). Las aplicaciones que implementan las API se podrán interoperar con una amplia gama de sitios de redes sociales como iGoogle, MySpace, Yahoo, Orkut, Hi5, LinkedIn y otros. En este artículo, nos referiremos a los gadgets OpenSocial y demostraremos que estos son poderosas fuerzas que lo ayudarán a ampliar el alcance de su aplicación en la Web.

Términos de uso frecuente

  • API: Application programming interface (Interfaz de programación de aplicaciones)
  • CSS: Cascading stylesheets (hojas de estilo en cascada)
  • HTML: HyperText Markup Language (Lenguaje de marcado de hipertexto)
  • HTTP: Hypertext Transfer Protocol (Protocolo de transferencia de hipertexto)
  • JSON: JavaScript Object Notation (Anotación de objetos JavaScript)
  • SOA: Service Oriented Architecture (Arquitectura orientada a servicios)
  • UI: User interface (interfaz de usuario)
  • URL: Uniform Resource Locator (Localizador uniforme de recursos)
  • XML: Extensible Markup Language (Lenguaje de marcado extensible)

¿Qué es un gadget OpenSocial?

  • Un gadget OpenSocial es una presentación reducida de una aplicación Web que implementa un conjunto de API específico. El gadget se describe en un documento XML que cumple con la especificación OpenSocial. Esta definición abarca la interfaz de usuario (HTML, hojas de estilo CSS y JavaScript) para la lógica de negocios y metadatos adicionales como el título, información sobre el autor, etc.
  • Un sitio que implementa la especificación OpenSocial y puede alojar aplicaciones se denomina contenedor OpenSocial. Esto significa que el contenedor logra procesar las definiciones XML de gadgets y proporcionar el HTML correcto al navegador. Es importante aclarar que las definiciones de gadgets no necesariamente deben estar alojadas en el sitio que proporciona el contenedor. Es más, los gadgets generalmente exponen un servicio proveniente de un sitio completamente distinto. El contenedor proporciona mecanismos, como solicitudes HTML firmadas, para brindar un nivel de seguridad que garantice que las llamadas fueron originadas por el gadget en su sitio. Los sitios que son contenedores OpenSocial proporcionan una forma sencilla de agregar un conjunto de servicios provenientes de toda la Web.

Creación de un gadget

Esta página ofrece al usuario una facilidad para probar el conjunto básico de funciones proporcionado por Universal Services y muestra los resultados al usuario.

La Figura 1 es una captura de pantalla de la aplicación de prueba de muestra, la cual servirá como plantilla para construir el gadget OpenSocial de muestra. Esta aplicación brinda al usuario las capacidades de UI básicas necesarias para interactuar con Universal Services.

Figura 1. Aplicación de prueba de muestra
Sample test application to capture user inputs with a list of Web services, input, and actions

En primer lugar, crearemos algunas funciones JavaScript para proporcionar las consultas básicas que controlarán las conexiones con los servicios pureXML. Luego, agregaremos la HTML que dará soporte junto con la especificación del gadget. Finalmente, veremos cómo crear e implementar la aplicación.

Funciones JavaScript para conectarse con servicios pureXML

ElListado 1muestra el JavaScript de muestra que se creó para administrar las solicitudes.

Listado 1. Funciones PureJSON JavaScript
var prefs = new gadgets.Prefs(); function
getPrimaryKeys() { var args = {}; doPOST("getPrimaryKeys",args,displayJSONobj); };
function getJSONDocumentByKey(key) { var args = { id: key };
doPOST("getDocumentByKey",args,displayJSONobj); }; function insertJSON(key, data) {
var args = { id: key, doc: data }; doPOST("insert",args,response); }; function
updateJSON(key, data) { var args = { id : key, doc : data };
doPOST("update",args,response); }; function deleteDocument(key) { var args = { id :
key }; doPOST("delete",args,response); }; function
doPOST(command,args,processResponseCallback) { var url = "http://" +
prefs.getString("pureXMLHostAddress") + "/" + prefs.getString("contextRoot") +
"/query/"+command; var params = {}; postdata = gadgets.io.encodeValues(args);
params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
params[gadgets.io.RequestParameters.POST_DATA]= postdata;
gadgets.io.makeRequest(url, processResponseCallback, params); }; function
response(obj) { alert("Gadget implementation responsibility."); }; function
displayJSONobj(obj) { alert("Gadget implementation responsibility."); };

A continuación se detalla el propósito de cada función:

  • getPrimaryKeys expone una solicitud getPrimaryKeys al servicio para recuperar todas las claves primarias de la tabla DB2 y mostrar el resultado usando la función de devolución de llamada displayJSONobj al completarse la transacción.
  • getJSONDocumentByKey usa un valor clave para exponer un getDocumentByKey al servicio y recuperar un único registro JSON cuya clave primaria coincida con el valor de entrada. El resultado se muestra usando la función de devolución de llamada displayJSONobj.
  • insertJSON espera dos parámetros de entrada: el valor clave único de la clave primaria y los datos de la fila en formato JSON. Esta función expone una solicitud al servicio para crear una fila nueva en la tabla DB2 y confirma el estado insert (inserción) cuando la función de devolución de llamada response devuelve la transacción.
  • updateJSON proporciona la capacidad de exponer una solicitud al servicio para actualizar un registro JSON cuya clave primaria coincida con el valor de clave de entrada y los datos actualizados especificados como datos de entrada en formato JSON. Ésta función también invoca a la función de devolución de llamada response para confirmar la actualización cuando se completa la transacción.
  • deleteDocument proporciona la interfaz para exponer una solicitud de eliminación de registro al servicio basándose en la clave primaria de entrada especificada. Este comando también invoca a la función de devolución de llamada response para confirmar la eliminación una vez completada la solicitud.
  • displayJSONobj es una función JavaScript abstracta que proporciona un hook para que los desarrolladores puedan representar de distintas maneras los resultados de la llamada en el navegador.
  • response es una función que administra valores de devolución distintos a JSON. Esta función sigue una estrategia similar a la de displayJSONobj y espera que los desarrolladores invaliden la función con su propia implementación.

La funciones anteriores llaman a la función doPOST para enviar sus solicitudes. La función doPOST espera el comando de consulta de servicio, valores de entrada de consulta y una función de devolución de llamada para procesar el resultado devuelto por los servicios. Esta función usa dichos parámetros de entrada para construir llamadas gadgets.io.makeRequest a los servicios. gadgets.io.makeRequest es una función de los gadgets OpenSocial que proporciona el soporte que permite a los gadgets obtener y publicar datos en sitios de terceros. Su firma es la siguiente: gadgets.io.makeRequest(url, callback, opt_params)

Los parámetros son:

  • url - Cadena que contiene la URL del sitio al que se desea enviar la solicitud. Observe que, para construir la URL, la función doPOST recupera dos cadenas del objeto prefsusando el método getString (los parámetros, pureXMLHostAddress y contextRoot se refieren a nombres de elementos de la definición de gadgets; este tema se desarrollará en la próxima sección.) Estas dos cadenas están concatenadas con /query/ y el comando (insert, getDocumentByKey, update, delete, etc). Por ejemplo, si la función insertJSON() invoca a doPOST, la URL será:
    http://xmlim.watson.ibm.com:9080/JSONUniversalServices/query/insert
  • callback - Referencia a una función que se llamará al volver la solicitud. Por ejemplo, response es una función de devolución de llamada que muestra el estado de una transacción y displayJSONobj es una función de devolución de llamada que muestra el objeto JSON devuelto o un mensaje si el objeto está vacío.
  • opt_params - Objeto JavaScript que contiene parámetros adicionales de la llamada (el método HTTP y los datos POST). Se establecerá el método HTTP de la solicitud como gadgets.io.MethodType.POST para indicar que se trata de un método POST. También se transmitirán los datos post en el objeto postdata (especificado como objeto que contiene pares clave/valor usando gadgets.io.encodeValues() para dar formato a la entrada args).

Guarde elListado 1 con el nombre PureJSON.js. En el próximo paso, construiremos la definición del gadget y cargaremos este archivo.

Definición de gadget OpenSocial

Ahora que ya contamos con el JavaScript necesario, crearemos una definición de gadget.

Creación de un XML de definición de gadget

Crearemos una definición de gadget simple. El Listado 2 muestra la definición de gadget de muestra. Cada definición de gadget se encuentra dentro de una etiqueta <Module>. <ModulePrefs> define la información y la características básicas del gadget.

Listado 2. Definición XML de gadget OpenSocial
<?xml version="1.0"
encoding="UTF-8"?> <Module> <ModulePrefs
title="Universal Services"> <Require feature="opensocial-0.8"/>
<Require feature="dynamic-height"/> <Require
feature="minimessage"/> </ModulePrefs> <UserPref
name="pureXMLHostAddress" display_name="PureXML Host Address"
default_value="xmlim.watson.ibm.com:9080"/> <UserPref
name="contextRoot" display_name="Context Root"
default_value="JSONUniversalServices"/> <Content type="html">
<![CDATA[ <!-- Note: We will add more code and expand this section
later --> ]]> </Content> </Module>

Lo primero que se observa en la definición de gadget es el atributo <title> dentro del elemento <ModulePrefs>. Aquí puede especificar atributos que definan información del gadget como el título, el autor, un correo electrónico, etc. A fines de demostración, usaremos únicamente el atributo title. No obstante, debe tomarse en cuenta que algunos contenedores requieren que se proporcionen ciertos atributos para la implementación en vivo. Para obtener información acerca de este tema, consulte la documentación del desarrollador de plataformas.

También proporcionaremos características requeridas por el gadget. El gadget de muestra cargará las siguientes características:

  • opensocial-0.8 - Este gadget usa la versión 0.8 de API de implementación y, por lo tanto, sólo puede ser implementado en contenedores que soporten la especificación OpenSocial v0.8.
  • dynamic-height - Mediante esta característica, el desarrollador de gadgets tiene la habilidad de ajustar el largo del gadget conforme se agreguen o eliminen contenidos. Esta característica se invoca al mostrar o eliminar los mensajes de transacción DB2 en el gadget.
  • minimessage - Esta característica proporciona un conjunto de API para crear mensajes y mostrarlos a los usuarios dentro del gadget. En el ejemplo, se usó minimessage para crear mensajes de estado de transacción DB2.

También se definió un conjunto de preferencias de usuario (<UserPref>) para establecer dinámicamente el punto final de pureXML Universal Service y la ruta de contexto de la aplicación en la que se implementará el gadget. Los elementos <UserPref> definidos se exponen en la interfaz del gadget como datos de entrada del usuario en la representación del gadget. Así, el usuario puede editar y modificar estas configuraciones de acuerdo con las necesidades. Observe que el atributo name de los elementos <UserPref> coincide con los nombres usados en la función JavaScript doPOST del Listado 1 para obtener las cadenas usadas para construir la URL de punto final.

En cuarto lugar, se encuentra la sección de contenidos <Content>. Ésta define el tipo de contenido del gadget como HTML. En la sección CDATA (datos de carácteres), se define el contenido del gadget en sí, se crea una tabla HTML para capturar entradas de usuario y se combinan minimessage, preferencias de usuario y funciones JavaScript para obtener un gadget en ejecución. Extenderemos esta sección en el próximo paso creando un cliente que se conecte con los servicios pureXML.

Agregado de contenido al gadget

Dentro de la sección CDATA de la definición del gadget descripta en el paso anterior, agregue la tabla HTML de muestra y funciones JavaScript para capturar entradas y acciones de usuarios.

Primero, agregue la hoja de estilo usada en la tabla HTML que muestra el Listado 3.

Listado 3. Hoja de estilo usada en la tabla
<style type="text/css">
table.layout {border:0; width:50%;} td.green {background-color:#BFFF80;
font-family:sans-serif, verdana;} td.white {background-color:#FFFFFF;
font-family:sans-serif, verdana;} th.green {background-color:#BFFF80;
font-family:sans-serif, verdana;} th.white {background-color:#FFFFFF;
font-family:sans-serif, verdana;} td.row-bright{background-color:#FFFFBF;
font-family:sans-serif, verdana; text-align:center;} td.row-dark
{background-color:#FFFF8C; font-family:sans-serif, verdana; text-align:center;}
tr.row-bright {background-color:#FFFFBF; font-family:sans-serif, verdana;}
tr.row-dark {background-color:#FFFF8C; font-family:sans-serif, verdana;} tr.empty
{background-color:#FFFFFF; height: 10px;} tr.empty-small {background-color:#FFFFFF;
height: 5px;} </style>

En segundo lugar, incluya el archivo JavaScript PureJSON.js del Listado 1. Cuando el gadget esté cargado, PureJSON.js se incluirá en la página y, de esta manera, todas las funciones de solicitud POST estarán disponibles para las acciones de tabla HTML.

Listado 4. Carga del archivo JavaScript
<script type="text/javascript"
src="./PureJSON.js"></script>

En tercer lugar, agregue otra etiqueta <script> como muestra el Listado 5. Cada función JavaScript coincidirá con una acción de usuario declarada en la tabla HTML (a definir en la próxima sección) y llamará a una de las funciones definidas en PureJSON.js del Listado 1. Al cargar este bloque de código, se creará un objeto minimessage usando new gadgets.MiniMessage(_MODULE_ID_). Se llama a la función gadgets.util.registerOnLoadHandler(gadgets.window.adjustHeight) (al final de la etiqueta) para registrar el gadget en el contenedor OpenSocial y se le indica modificar el marco para colocar el contenido del gadget en el tiempo de representación. Dentro de esta etiqueta de script, también invalidaremos las funciones response y displayJSONobj para mostrar los resultados de consultas a los usuarios.

Listado 5. Agregado de funciones al gadget
<script type="text/javascript"
src="./PureJSON.js"></script> <script
type="text/javascript"> var msg = new gadgets.MiniMessage(__MODULE_ID__);
function displayJSONobj(obj) { var str = "The returned record is empty, it might not
exist"; if(obj.text!=""){ str = obj.text; } msg.createDismissibleMessage(str);
gadgets.window.adjustHeight(); }; function callGetJSONDoc() {
getJSONDocumentByKey(document.getElementById("key1").value); }; function
getJSONDocumentByKeyReturn(obj) { var str = obj.text;
msg.createDismissibleMessage(str); gadgets.window.adjustHeight(); }; function
callInsertJSON() { insertJSON(document.getElementById("key2").value,
document.getElementById("document1").value); }; function callUpdateJSON() {
updateJSON(document.getElementById("key3").value,
document.getElementById("document2").value); }; function callDeleteDoc() {
deleteDocument(document.getElementById("key4").value); }; function response(obj) {
var str = gadgets.json.parse(gadgets.util.unescapeString(obj.text));
if(str.updateCount == 1){ var successMsg = msg.createDismissibleMessage( "Received
returned code = 1. Transaction successful!"); successMsg.style.color = "green"; }
else { var failMsg = msg.createDismissibleMessage( "Did not receive returned code =
1. Transaction may have failed!"); failMsg.style.color = "red"; }
gadgets.window.adjustHeight(); };
gadgets.util.registerOnLoadHandler(gadgets.window.adjustHeight);
</script>

Finalmente, agregue la tabla HTML para capturar las entradas y acciones de usuarios. El Listado 6 muestra el código HTML. Guarde la definición de gadget con el nombre JSONclient.xml. La Figura 1 es una captura de pantalla de la tabla ya representada.

Listado 6. Tabla HTML
<table class="layout" cellspacing="2">
<tr> <th class="green">Web Service</th>
<th class="green" colspan="2">Input</th> <th
class="green">Action</th> </tr> <tr
class="row-bright"> <td>getPrimaryKeys</td>
<td colspan="2" align="center">none</td> <td
align="center"> <input type="submit" value="Invoke"
onClick="getPrimaryKeys()"/> </td> </tr>
<tr class="row-dark" >
<td>getJSONDocumentByKey</td> <td
align="right">ID:</td> <td
align="center"><input type="text" id="key1" size="40"
/></td> <td align="center"> <input
type="submit" value="Invoke" onClick="callGetJSONDoc()"/> </td>
</tr> <tr class="row-bright"> <td
rowspan="2">insertJSON</td> <td
align="right">ID:</td> <td
align="center"><input type="text" id="key2" size="40"
/></td> <td align="center" rowspan="2">
<input type="submit" value="Invoke" onClick="callInsertJSON()"/>
</td> </tr> <tr class="row-bright">
<td align="right">Document:</td> <td
align="center"> <textarea id="document1" cols="30" rows="5"
></textarea> </td> </tr> <tr
class="row-dark" > <td
rowspan="2">updateJSON</td> <td
align="right">ID:</td> <td
align="center"><input type="text" id="key3" size="40"
/></td> <td rowspan="2" align="center">
<input type="submit" value="Invoke" onClick="callUpdateJSON()"/>
</td> </tr> <tr class="row-dark">
<td align="right">Document:</td> <td
align="center"> <textarea id="document2" cols="30" rows="5"
></textarea> </td> </tr> <tr
class="row-bright"> <td>deleteDocument</td>
<td align="right">ID:</td> <td
align="center"><input type="text" id="key4" size="40"
/></td> <td align="center"> <input
type="submit" value="Invoke" onClick="callDeleteDoc()"/> </td>
</tr> </table>

Implementación y prueba

Ahora implementaremos el gadget y luego lo probaremos.

Implementación del gadget

Para probar la nueva aplicación de prueba de Universal Services, simplemente implemente PureJSON.js y JSONclient.xml en un servidor HTTP. Siempre que los archivos estén disponibles a través de una URL, el contenedor OpenSocial logrará recuperar la especificación del gadget y representar el contenido adecuadamente. Los servidores OpenSocial ofrecen una serie de opciones tanto para implementación local, disponibles a través de proyectos de código abierto, como para plataformas externamente alojadas. Para simplificar, implementaremos este gadget de muestra en el espacio aislado de iGoogle, el cual porporcionará el contenedor OpenSocial.

  1. Inicie sesión en http://www.google.com/ig/sandbox
  2. Luego de haber iniciado sesión, navegue al vínculoAdd stuff(Agregar elementos) en la esquina superior derecha de la página. Se abrirá un vínculo que lo llevará a una página que proporciona capacidades de búsqueda para gadgets registrados existentes. Ver la Figura 2. Tenga en cuenta que la URL debe ser accesible desde Internet. Por ejemplo, si usted está ejecutando con un firewall, es posible que su implementación no funcione porque el contenedor OpenSocial (en este caso, iGoogle) no logre cargarla y procesarla (Ver una versión ampliada de la Figura 2.
    Figura 2. Agregado de aplicaciones en el espacio aislado de iGoogle
    Screen capture of the iGoogle sandbox where you can add applications
  3. A continuación, debemos agregar el gadget nuevo a través de la URL. En la navegación izquierda, verá el vínculo Add feed or gadget (Agregar fuente o gadget). Este vínculo abre un diálogo en el que deberá ingresar la URL completa de JSONclient.xml. Ver la Figura 3.
    Figura 3. Agregado de un gadget OpenSocial en el espacio aislado de iGoogle
    Screen capture of the field to add an OpenSocial gadget to the iGoogle sandbox
  4. Ahora vuelva a la página principal de iGoogle y verá el gadget recién agregado en la página.

Prueba del gadget

La Figura 4 muestra el gadget representado en iGoogle.

Figura 4. Gadget representado en iGoogle
Screen capture of the gadget undergoing test after deployment
  1. Para editar la configuración del gadget, seleccione el ícono triangular, el cual desplegará la lista de opciones. Seleccione Edit settings (Editar configuración).
  2. Actualice la dirección de host pureXML y la ruta raíz de contexto para que señalen a sus Universal Services.
  3. En el campo getJSONDocumentByKey, ingrese una clave de documento para recuperar un registro JSON, luego haga clic en Invoke (Invocar). Para probar las otras transacciones, repita este paso.
  4. Minimessage muestra el resultado. Para eliminar los mensajes, seleccione la x que se encuentra al final de la fila.

Conclusión

En este artículo, proporcionamos un conjunto de códigos de muestra que logran migrar la tradicional aplicación Web de prueba a una aplicación configurable y portable que puede implementarse rápidamente en una serie de plataformas en la Web. Si bien la aplicación en sí es relativamente simple, ésta es una referencia que puede usarse para montar y crear rápidamente prototipos de aplicaciones nuevas. El cliente del gadget OpenSocial proporciona a los usuarios una forma práctica de conectarse dinámicamente con cualquier pureXML Universal Services mediante el soporte de UserPrefs. Con makeRequest de POST, los desarrolladores de gadgets logran crear consultas fácilmente conectándose con los servicios para realizar sus transacciones de bases de datos. Los consumidores de gadgets pueden agregar el gadget a cualquier contenedor OpenSocial independientemente de dónde esté implementado y alojado físicamente, lo cual evita que los consumidores deban realizar la gestión de contenidos e infraestructura.


Descargas

DescripciónNombretamaño
JavaScript POST request functionsPureJSON.js.zip1KB
OpenSocial gadget definition XMLJSONclient.xml.zip2KB

Recursos

Aprender

  • Build a pureXML and JSON application, Part 1: Store and query JSON with DB2 pureXML (Nuno Job, Susan Malaika, and Michael Schenke; developerWorks, octubre de 2009): lea el primer artículo de esta serie y comience a beneficiarse con los objetos persistentes JSON con conservación del estado en las distintas sesiones. Almacene, gestione y consulte JSON con DB2 pureXML y obtenga un mapeo simple de JSON a XML. (Parte 1 de una serie de tres partes).
  • Build a pureXML and JSON application, Part 2: Create Universal Services for pureXML that expose JSON (Faton (Tony) Avdiu, Susan Malaika, and Michael Schenke; developerWorks, octubre de 2009): siguiendo los pasos detallados en este artículo, logrará exponer los datos JSON descriptos en el primer artículo de la serie a través de JSON Universal Services. (Parte 2 de una serie de tres partes).
  • Comunidad OpenSocial: Encuentre vínculos a artículos, tutoriales y la especificación técnica y aprenda a incrustrar API OpenSocial dentro de una red social para acceder a datos sociales o compartirlos en la Web.
  • Consulte la Guía de desarrollo de espacio aislado de iGoogle: Obtenga información detallada sobre soporte OpenSocial y desarrollo e implementación de aplicaciones en este entorno.
  • Apache Shindig: Investigue este contenedor OpenSocial para alojar rápidamente aplicaciones OpenSocial con código para representar gadgets, autorice solicitudes y administre solicitudes REST y RPC. Esta comunidad de código abierto se encuentra desarrollando una implementación de referencia para la especificación e implantación de OpenSocial en este entorno.
  • Certificación XML de IBM: Sepa cómo obtener la certificación IBM-Certified Developer en XML y en tecnologías relacionadas.
  • Biblioteca técnica de XML: Visite la Zona XML en developerWorks y consulte una amplia gama de artículos técnicos y consejos, tutoriales, estándares e IBM Redbooks
  • Eventos técnicos y transmisiones por Internet de developerWorks: Manténgase al día en temas de tecnología con estas sesiones.
  • Podcasts developerWorks: Escuche interesantes entrevistas y conversaciones dirigidas a desarrolladores de software.

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt, SOA y servicios web
ArticleID=480598
ArticleTitle=Construya una aplicación pureXML y JSON, Parte 3: Cree gadgets OpenSocial para pureXML
publish-date=03052010