Valida tus archivos XML 'online'.

Hay dos tipos de documentos XML:
Bien formados
Es un tipo de documento que cumple ciertas normas, tales como incluir información sobre la versión de XML que usa o el juego de caracteres que contiene. También debe de tener un único elemento raíz además de llevar una sintaxis correcta para documentos XML.

Válido
Este tipo, además de estar bien formado, cumple con normas que se especifican dentro de el DTD(Document Type Definition). Para que sea válido debe cumplir con todas esas normas.

Ahora, este servlet que preparé para la clase de Tecnologías para la Web, toma cualquier archivo que elijas y lo sube al servidor para validarlo. Utiliza las librerías de JDOM de las cuales ya les había hablado antes la validación es simple con esta herramienta y el manejo de excepciones, ya que al momento de cargarlo a memoria se le puede especificar que revise o no la validez del documento; La buena forma la revisa al estar leyendo el archivo. En el momento en el que no se cumpla alguno de los parámetros una excepción es lanzada.

Digo que es online ya que está pensado para que trabaje montado en un servidor, sin embargo es posible convertirlo a una aplicación de escritorio.

Las pocas, y de verdad pocas, líneas que tuve que escribir para la validación fueron estas(en las que se pide se construya el archivo y se valide):

JDOM, Fácil manipulacion de XML en Java.

Esta es una biblioteca para Java que facilita el uso y manipulación de documentos XML en memoria y de manera persistente. Similar al DOM del W3C, con la potente diferencia de que este se refuerza con las características de Java.

Me lo presentó el profesor de Tecnologías para la Web.


Del siguiente código XML:
<tienda nombre="tienda para geeks" ubicacion="Tokio, Japon">
  <computadora nombre="iBook" precio="$1200" />
  <historieta nombre="Dragon Ball Volumen 1" precio="$9" />
  <nivel_geek_de_la_tienda precio="sin precio" /> 
</tienda>
Mediante Java y JDOM se puede obtener la información de la siguiente manera:
SAXBuilder builder = new SAXBuilder ();
Document doc = builder.build (new FileInputStream ("foo.xml"));
Element root = doc.getRootElement ();
root.getName ();                            // devuelve "tienda"
root.getAttributeValue ("nombre");          // devuelve "tienda para geeks"
root.getAttributeValue ("ubicacion");       // devuelve "Tokio, Japon"
root.getChildren ();                        // devuelve una java.util.List de objetos que tiene tres Element
Ejemplo extraído de Wikipedia 

JDOM

¡Saludos! @fferegrino :)

Tareas Teóricas de Tecnologías para la Web

Esta noche les traigo mis tareas teóricas de la asignatura Tecnologías para la Web, aclaro que no son nada buenas, aún me falta mucho para aprender a redactar bien pero... ¿qué le vamos a hacer?

Prometo de a poco ir mejorando en la redacción.

Incluídas en el súper paquete:

  1. Conceptos básicos de la web
  2. Historia del internet y la www
  3. Estándares de la web
  4. La Web 2.0
  5. Entornos de desarrollo
  6. Historia y diferencias entre navegadores
  7. Historia de XHTML
  8. Diferencias entre HTML y XHTML

Si las quieren en paquete aquí las dejo:

Tareas teóricas

¡Saludos! @fferegrino :)

Asignar trigger a un UpdatePanel en tiempo de ejecución (C#, ASP)

Supongamos que tenemos el siguiente escenario:
<asp:GridView ID="GridView1" runat="server">
 <Columns>
  <asp:TemplateField HeaderText="Botón">
   <ItemTemplate>
    <asp:ImageButton ID="ImageButton2" runat="server" />
   </ItemTemplate>

El botón ImageButton2 es inaccesible directamente dado que está contenido en un GridView, entonces no lo podríamos añadir como trigger para un UpdatePanel en el código como normalmente se haría:

<asp:AsyncPostBackTrigger ControlID="ImageButton2" EventName="Click" />
Entonces, lo que haremos será añadirlo dinámicamente en tiempo de ejecución.

 Nos valemos del evento OnLoad del control. Para que al momento de cargarse, se asigne como trigger al UpdatePanel en cuestión.

De tal manera el código quedaría así:

ASP:
<asp:GridView ID="GridView1" runat="server">
 <Columns>
  <asp:TemplateField HeaderText="Botón">
   <ItemTemplate>
    <asp:ImageButton ID="ImageButton2" runat="server" OnLoad="ImageButton2_Load" />
   </ItemTemplate>
Y C#:
protected void ImageButton2_Load(object sender, EventArgs e)
{
    ImageButton boton = (ImageButton)sender;
    UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger { ControlID = boton.UniqueID, EventName = "Click" });
}

¡Listo! ahora nuestro ImageButton2 ha quedado registrado como trigger asíncrono para actualizar el UpdatePanel1

¡Saludos!
@fferegrino :)

El sexenio de López Portillo



Interesante documental sobre el sexenio de López Portillo "El Perro" (LOL), memorables las frases que lo hicieron más famoso, entre ellas:
"Soy responsable del timón, pero no de la tormenta" De la clase de Fundamentos Económicos.

Por cierto, preparé un intento de reporte que aquí dejo:
El sexenio de López Portillo

 ¡Saludos! @fferegrino :)

Generador de tablas al estilo Dreamweaver con servlet

De las primeras tareas en ESCOM, clase de Tecnologías para la Web. Basándonos en el generador de tablas de la suite Dreamweaver, se nos quedó de tarea hacer un Servlet que imitara el funcionamiento del mismo. Se puede mejorar la implementación pero últimamente carezco de tiempo :(

 Dejo el proyecto completo(hecho en NetBeans).
Tablas App

 ¡Saludos!

@fferegrino :)

Actividad 1 de ingeniería web.

Como parte del inicio de clases y para ir entrando en calor, en la unidad de aprendizaje Ingeniería Web, nos fue encargado implementar un diagrama de clases en Java. No copié el diagrama (espero tenerlo pronto) pero aquí dejo mi propuesta de solución:

Diagrama de clases ( por @theshiest ) : Diagrama de clases Actividad1.Java

¡Saludos! @fferegrino :)