Software y Aplicaciones Web

Blog de desarrollo de software y aplicaciones web

Comentarios Recientes

Comment RSS

MSDN Home Page (Argentina)


C# Corner


AspAlliance.com

Declaración

Las opiniones en este blog se proporcionan "TAL CUAL", sin garantías,  no confieren derechos y no reflejan, necesariamente, la opinión de quienes me contratan.
Algunas cuestiones que se comentan en el blog no son reales, cualquier similitud con alguna persona viva o muerta no es más que una coincidencia, tampoco significa que necesite terapia, soy asi.

© Copyright 2007-2010

Propaganda

Este sitio implementa publicidad basada en intereses
Oct
16.
2009

  El XML Web Server Control

En esta publicación voy a mostrar cómo se puede mostrar documentos XML "transformados" o formateados en una página web, para ello se utiliza el XML Web Server Control.

Este componente que nos facilita el Framework, nos permite mostrar en un área de una página o formulario web el contenido de un documento XML, pero lo más interesante es que se lo puede "procesar", para ello utiliza otro documento (un XSLT Extensible Stylesheet Language Transformation) que no es otra cosa que un documento en XML que indica cómo se debe procesar en este caso "transformar" el documento original.

Esto muy útil cuando la organización para la que desarrollamos una aplicación recibe frecuentemente documentos en formato XML y mediante un hoja de transformación podemos mostrar el contenido del documento.

More...




Categorías: ASP.NET | Programacion | WebSite | XML



Oct
14.
2009

  XML y ADO.NET - parte 2

Vamos a continuar mostrando algo más de la relación que XML tiene con ADO.NET.

En la publicación anterior, mostramos la forma más simple de obtener documentos en formato XML o de enlazar un componente de interfaz de usuario con un documento XML.

Ahora vamos a mostrar las posibilidades que XML nos brinda cuando de relaciones se trata; para ello vamos a volver a utilizar las tablas de otras publicaciones, en este caso utilizaremos Provincias y Departamentos donde sabemos que existe un relación de uno a muchos.

More...




Categorías: ASP.NET | Programacion | WebSite | XML



Oct
13.
2009

  XML y ADO.NET - parte 1

En esta publicación vamos a ver un poquito de la relación que XML tiene con ADO.NET.

XML - Extensible Markup Language, es un estándar cuya historia se remonta a los años setenta, que surge como la necesidad de compartir información en un formato que sea fácil de entender y procesar y particularmente que no dependa de la aplicación o plataforma en la que se procesan los datos. Su nombre lo dice claramente, se trata de un lenguaje de marcas extensible; es un lenguaje porque nos permite comunicarnos, utiliza marcas para indicar los datos que conforman la información que comunicamos y es extensible porque podemos extender el lenguaje a todas nuestras necesidades.

Los componentes léxicos, la sintaxis y semántica de este lenguaje es muy sencilla puden hallar infinidad de información en la red; sugiero que arranquen por el estándar.

Actualmente XML es utilizado absolutamente en todos lados, por supuesto permite el trabajo entre aplicaciones desarrolladas en diferentes plataformas, hasta se puede leer un documento XML con un simple editor de texto; de modo que es indiscutible las ventajas que el lenguaje facilita a los desarrolladores y consecuentemente a las organizaciones.

El Microsoft Framework facilita varias alternativas para trabajar con documentos XML, una de ellas es la posibilidad que los DataSet (representación en memoria de un conjunto de tablas de la base de datos) manipulen información en formato XML.

El siguiente ejercicio nos permite ver como se puede generar información en formato XML, y en el mismo ejercicio veremos cómo podemos utilizar un origen de datos en formato XML.

More...




Categorías: ASP.NET | Programacion | WebSite | XML



May
29.
2008

  Serialization in Framework 2.0 and 3.5

I was asked about serialization so I made a couple of exercises that show how to do it.

One is only for Framework 3.5, it have extensions so you can reference the object as an argument in methods.

The other is for Framework 2.0 (also it run in 3.0 and 3.5), the results are the same.

Both exercises are full documented, so you can try them or simply look the code in above links.




Categorías: ASP.NET | Programacion | XML



May
29.
2008

  Serializacion en el Framework 2.0

Me consultaron cómo hacer para serializar en el Framework 2.0, con algo parecido a lo que publiqué como Serialización en el Framework 3.5.

La cuestión es que este framework no soporta extensiones entonces hay que codificar la clase utilitaria de otro modo. A continuación está la clase con los cambios necesarios:

   1:   
   2:  using System;
   3:  using System.IO;
   4:  using System.Xml.Serialization;
   5:   
   6:  namespace Extensions
   7:  {
   8:    /// <summary>
   9:    /// Extensions to serialize and deserialize any objects in C# 2.0 and later
  10:    /// Warning, objects to be serialized need a constructor without parameters
  11:    /// </summary>
  12:    /// <typeparam name="T">Class name</typeparam>
  13:    public static class XmlConvertExtensions<T> where T : class
  14:    {
  15:      /// <summary>
  16:      /// Serialize any object that have a constructor without parameters
  17:      /// </summary>
  18:      /// <param name="obj"></param>
  19:      /// <returns>A string in XML format having all properties and values for the object</returns>
  20:      public static String ToXml(T obj)
  21:      {
  22:        XmlSerializer s = new XmlSerializer(obj.GetType());
  23:        using (StringWriter writer = new StringWriter())
  24:        {
  25:          s.Serialize(writer, obj);
  26:          return writer.ToString();
  27:        }
  28:      }
  29:      /// <summary>
  30:      /// Deserialize a previous serialized object
  31:      /// </summary>
  32:      /// <typeparam name="T">typeof object to deserialize</typeparam>
  33:      /// <param name="data">string in XML format having properties and values for the object</param>
  34:      /// <returns>Reference to the object</returns>
  35:      public static T ConvertTo(string data)
  36:      {
  37:        XmlSerializer s = new XmlSerializer(typeof(T));
  38:        using (StringReader reader = new StringReader(data))
  39:        {
  40:          object obj = s.Deserialize(reader);
  41:          return (T)obj;
  42:        }
  43:      }
  44:    }
  45:  }

Para probar el código, utilice la misma clase Person del ejemplo anterior, y cambién la forma en que se invocan los métodos. El ejemplo de cómo se utiliza es el siguiente:

   1:    void TestUtility()
   2:    {
   3:      Person p = new Person();
   4:   
   5:      p.FirstName = "Julio";
   6:      p.SecondName = "Tentor";
   7:      p.AddChildren("Valeria", "Tentor");
   8:      p.AddChildren("Vanesa", "Tentor");
   9:      p.AddChildren("Demian");
  10:   
  11:      string xml = XmlConvertExtensions<Person>.ToXml(p);
  12:      txtXML.Text = xml;
  13:   
  14:      Person q = XmlConvertExtensions<Person>.ConvertTo(xml);
  15:      txtFirstName.Text = q.FirstName.ToUpper();
  16:      txtSecondName.Text = q.SecondName.ToUpper();
  17:   
  18:      StringBuilder tmp = new StringBuilder();
  19:      foreach (Person i in q.Childrens)
  20:      {
  21:        tmp.AppendLine(i.FirstName.ToUpper() + " " + i.SecondName.ToUpper());
  22:      }
  23:      txtChildrens.Text = tmp.ToString();
  24:   
  25:    }

Observen que ahora hay que invocar los métodos de la clase utilitaria, el resultado es el mismo que en el ejemplo del Framework 3.5.

Acá tienen el WebSite con todo el código SerializationDemo20.zip (4,02 kb .

Espero que les sirva.




Categorías: ASP.NET | Programacion | XML



May
24.
2008

  Serializacion en el Framework 3.5

En el desarrollo de software entendemos por serlialización al proceso por medio del cual se codifica un objeto para ser archivado. Este proceso puede generar un código binario o en XML, particularmente prefiero el último dado que permite que otras aplicaciones manipulen el objeto serializado.

El Microsoft Framework 3.5 facilita las extensiones, lo que nos permite con bastante sencillez realizar esta tarea. En C# 3.0 ToXml Extension Method encontré algo de código que me permitió realizar el siguiente ejercicio.

Lo primero fue codificar una clase utilitaria que me permita serializar y deserializar objetos. En este punto el Framework 3.5 nos permite incluir como parámetro del método una referencia al mismo objeto, en consecuencia este metodo resulta ser una extensión del objeto; es como si el metodo estaría declarado en la definición de la clase. 

   1:   
   2:  using System;
   3:  using System.IO;
   4:  using System.Xml.Serialization;
   5:   
   6:  namespace Extensions
   7:  {
   8:      /// <summary>
   9:      /// Extensions to serialize and deserialize any objects in C# 3.0
  10:      /// Warning, objects to be serialized need a constructor without parameters
  11:      /// 
  12:      /// This only work with C# 3.0, it have the ability to extend types
  13:      /// 
  14:      /// </summary>
  15:      public static class XmlConvertExtensions
  16:      {
  17:          /// <summary>
  18:          /// Serialize any object that have a constructor without parameters
  19:          /// </summary>
  20:          /// <param name="obj"></param>
  21:          /// <returns>A string in XML format having all properties and values for the object</returns>
  22:          public static String ToXml(this object obj)
  23:          {
  24:              XmlSerializer s = new XmlSerializer(obj.GetType());
  25:              using (StringWriter writer = new StringWriter())
  26:              {
  27:                  s.Serialize(writer, obj);
  28:                  return writer.ToString();
  29:              }
  30:          }
  31:          /// <summary>
  32:          /// Deserialize a previous serialized object
  33:          /// </summary>
  34:          /// <typeparam name="T">typeof object to deserialize</typeparam>
  35:          /// <param name="data">string in XML format having properties and values for the object</param>
  36:          /// <returns>Reference to the object</returns>
  37:          public static T ConvertTo<T>(this string data)
  38:          {
  39:              XmlSerializer s = new XmlSerializer(typeof(T));
  40:              using (StringReader reader = new StringReader(data))
  41:              {
  42:                  object obj = s.Deserialize(reader);
  43:                  return (T)obj;
  44:              }
  45:          }
  46:      }
  47:  }

Luego fue necesario escribir una clase que me permita probar los metodos de la clase utilitaria. En este caso se trata de algo muy simple que incorpora una colección de objetos del mismo tipo. Además incorporé un par de metodos para facilitar la incorporación de objetos.

   1:  using System.Collections.Generic;
   2:   
   3:  /// <summary>
   4:  /// Test class for ToXML extension
   5:  /// </summary>
   6:  public class Person
   7:  {
   8:    #region Constructors
   9:   
  10:    /// <summary>
  11:    /// Default constructor, need to serialize objects
  12:    /// </summary>
  13:    public Person()
  14:    {
  15:    }
  16:    public Person(string firstName, string secondName)
  17:    {
  18:      this.firstName = firstName;
  19:      this.secondName = secondName;
  20:    }
  21:    
  22:    #endregion    
  23:   
  24:    #region Fields and Properties
  25:   
  26:    private string firstName;
  27:    public string FirstName
  28:    {
  29:      get
  30:      {
  31:        return firstName;
  32:      }
  33:      set
  34:      {
  35:        firstName = value;
  36:      }
  37:    }
  38:    private string secondName;
  39:    public string SecondName
  40:    {
  41:      get
  42:      {
  43:        return secondName;
  44:      }
  45:      set
  46:      {
  47:        secondName = value;
  48:      }
  49:    }
  50:    private List<Person> childrens;
  51:    public List<Person> Childrens
  52:    {
  53:      get
  54:      {
  55:        if (childrens == null)
  56:        {
  57:          childrens = new List<Person>();
  58:        }
  59:        return childrens;
  60:      }
  61:      set
  62:      {
  63:        childrens = value;
  64:      }
  65:    }
  66:   
  67:    #endregion
  68:   
  69:    #region Methods
  70:   
  71:    /// <summary>
  72:    /// Add a children creating a new Person with parameters
  73:    /// </summary>
  74:    /// <param name="f">first name of the children</param>
  75:    /// <param name="s">second name of the children</param>
  76:    public void AddChildren(string f, string s)
  77:    {
  78:      this.Childrens.Add(new Person(f, s));
  79:    }
  80:    /// <summary>
  81:    /// Add a children creating a new Person with parameters plus current SecondName
  82:    /// </summary>
  83:    /// <param name="f">first name of the children</param>
  84:    public void AddChildren(string f)
  85:    {
  86:      this.Childrens.Add(new Person(f, this.SecondName));
  87:    }
  88:   
  89:    #endregion
  90:   
  91:  }

Finalmente para probar todo esto utilizo un metodo que crea un objeto, lo serializa y luego lo deserializa en otro objeto.

   1:      void TestUtility()
   2:      {
   3:          Person p = new Person();
   4:          
   5:          p.FirstName = "Julio";
   6:          p.SecondName = "Tentor";
   7:          p.AddChildren("Valeria", "Tentor");
   8:          p.AddChildren("Vanesa", "Tentor");
   9:          p.AddChildren("Demian");
  10:   
  11:          string xml = p.ToXml();
  12:          txtXML.Text = xml;
  13:          
  14:          Person q = xml.ConvertTo<Person>();
  15:          txtFirstName.Text = q.FirstName.ToUpper();
  16:          txtSecondName.Text = q.SecondName.ToUpper();
  17:   
  18:          StringBuilder tmp = new StringBuilder();
  19:          foreach(Person i in q.Childrens)
  20:          {
  21:              tmp.AppendLine(i.FirstName.ToUpper() + " " + i.SecondName.ToUpper());
  22:          }
  23:          txtChildrens.Text = tmp.ToString();
  24:      }

El resultado de la serialización es el siguiente:

   1:  <?xml version="1.0" encoding="utf-16"?>
   2:  <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   3:    <FirstName>Julio</FirstName>
   4:    <SecondName>Tentor</SecondName>
   5:    <Childrens>
   6:      <Person>
   7:        <FirstName>Valeria</FirstName>
   8:        <SecondName>Tentor</SecondName>
   9:        <Childrens />
  10:      </Person>
  11:      <Person>
  12:        <FirstName>Vanesa</FirstName>
  13:        <SecondName>Tentor</SecondName>
  14:        <Childrens />
  15:      </Person>
  16:      <Person>
  17:        <FirstName>Demian</FirstName>
  18:        <SecondName>Tentor</SecondName>
  19:        <Childrens />
  20:      </Person>
  21:    </Childrens>
  22:  </Person>

El string que se obtiene al serializar el objeto se puede almacenar en un archivo, o en un campo de una base de datos.

Para finalizar acá tienen el WebSite con todo el código SerializationDemo35.zip (5,06 kb).

Espero que les sirva. 




Categorías: ASP.NET | Programacion | XML



Apr
1.
2008

  XML vs SQL (english)

With XML and object technologies, some people wonder whether the relational model is obsolete.

Many developers looking for greater flexibility feel that their choices are very limited with the relational model.

Some people think that storing everything in XML format bridges the gap between objet-oriented applications and relational databases. However, in many cases people are just reinventing the wheel.

The relational model is limiting, you need constraints to enforce data integrity. In XML data type structure is more relaxed but it exist.

XML schemas are volatile for some business cases, but quite stable for some situations. Not being able to find a structure that suits a business problem dos not mean that such a structure does not exist.

I do not want to think that I am totally against having the support of XML in a relational database.

You should use an XML model if your data is sparse, it means having many unknown values, or if some columns (fields) are not applicable to all rows (records). Solution for this problem is introduce subtypes or implement an open schema in relational environment. A solution that introduces subtypes can lead to many new tables, a solution with relational open shcema can lead to complex, dynamic SQL statements. A solution based on XML could be the easist to implement.

Finally, today we have engines relational databases that allow storing XML data, which allows us to definitively as computer professionals make the best choice when it comes to designing a solution.

Personally I think that stay with engines database that not have this feature, means to stay in the past. We face the development of the Semantic Web and we are preparing for the Web 3.0; engine databases must evolve.



Marcas: ,
Categorías: SQL | XML



Apr
1.
2008

  XML vs SQL (español)

Con XML y la tecnología de objetos, algunos se preguntan si el modelo relacional es obsoleto.

Muchos desarrolladores en la búsqueda de una mayor flexibilidad creen que sus opciones son muy limitadas con el modelo relacional.

Algunos piensan que almacenar todo en formato XML, reduce la diferencia entre las aplicaciones orientadas a objetos y las bases de datos relacionales. Sin embargo en muchos casos solamente están reinventando la rueda.

El modelo relacional es limitante, se necesitan límites para cumplir con la integridad de los datos. En XML, la estructura de datos es más relajada pero existe.

Los esquemas de XML son bastante volátiles para los negocios pero muy estables en otras situaciones. No ser capaz de encontrar una estructura que se adapte a un problema de una empresa, no significa que esa estructura no exista.

No quiero que piensen que estoy totalmente en contra de tener el apoyo de XML dentro de una base de datos relacional.

Debería utilizarse un modelo XML si los datos son escasos, esto es tener muchos valores desconocidos, o columnas (campos) que no son aplicables a todas las filas (registros). La solución para este problema es introducir subtipos o aplicar un esquema abierto en el modelo relacional. Una solución que introduce subtipos puede llevar a tener muchas nuevas tablas, con una solución de esquema abierto en el modelo relacional puede conducir a sentencias SQL dinámicas y complejas. Una solución basada en XML podría ser lo mejor.

Finalmente; hoy tenemos motores de bases de datos relacionales que permiten almacenar datos XML, lo que definitivamente nos permite como profesionales de la informática realizar la mejor elección a la hora de diseñar una solución.

Personalmente considero que permanecer con motores de base de datos que no lo permiten significa permanecer en el pasado. Enfrentamos el desarrollo de la Web Semantica y nos estamos preparando para la Web 3.0 los motores de bases de datos deben evolucionar.



Marcas: ,
Categorías: SQL | XML