Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NET
-1-
Informacin de los autores: Mara Teresa Martn Calvilla Miguel Vaquero Herrero
Este documento puede ser libremente distribuido. <<2005>> Departamento de Informtica y Automtica - Universidad de Salamanca.
Martn y Vaquero
Resumen
Este informe muestra la forma de trabajar con documentos XML desde la plataforma .NET. Para ello, se realiza una introduccin al lenguaje XML con un breve ejemplo. Posteriormente, se describe cmo almacenar el estado de un objeto para comunicrselo a otro mediante el protocolo SOAP y que sea recuperado. Se presentan las clases ms importantes para la manipulacin de documentos XML (lectura y escritura) situadas dentro del espacio de nombres System.Xml que proporciona el framework. Se codifican dos programas ejemplo utilizando el lenguaje C# para ilustrarlo.
Abstract
This report shows the way to work with XML documents from .NET platform. For that, an introduction to XML is given with a simple example. Then, it describes how to store an object and send it to another object with SOAP protocol. The most important classes to work with XML (read and write) which System.Xml frameworks namespace provides are explained. Two C# program samples are attached to show that.
Tabla de Contenidos
1. Introduccin a XML..................................................................... 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. Qu es XML? Breve historia Diferencias con HTML Principales caractersticas Sintaxis de un documento XML Hojas de estilo
4 4 4 5 5 6 7 10 12 14 17 19 20
2. Ejemplo......................................................................................... 8 3. Caractersticas para el uso de XML y C#..................................... 4. Clases en System.Xml.................................................................. 5. Ejemplo: 5.1 5.2 XmlWriter XmlReader
6. Conclusiones................................................................................ 7. Enlaces.................................................................................
Tabla de figuras
Figura 1. Origen de XML Figura 2. Estructura de un DTD .. Figura 3. Anatoma de un mensaje SOAP..
Martn y Vaquero
1. INTRODUCCIN A XML
1.1 Qu es XML? XML (Extensible Markup Language) es un lenguaje de marcado que proporciona un formato para describir datos. Con ello se facilita la realizacin de declaraciones de contenido ms precisas y la obtencin de resultados de bsqueda ms significativos en varias plataformas.
1.2 Breve historia de XML La versin 1.0 del lenguaje XML es una recomendacin del W3C desde Febrero de 1998. Est basado en el estndar SGML (Standard Generalized Markup Language, ISO 8879), que data de 1986, pero que empez a gestarse desde principios de los aros 70. SGML, a su vez, est basado en el GML creado por IBM en 1969. Esto significa que aunque XML pueda parecer moderno, sus conceptos estn ms que asentados y aceptados de forma amplia. Est adems asociado a la recomendacin del W3C DOM (Document Object Model), aprobado tambin en 1998. ste no es ms que un modelo de objetos (en forma de API) que permite acceder a las diferentes partes que pueden componer un documento XML o HTML. Es un modelo independiente de la plataforma y del lenguaje de programacin. El objetivo es que cualquier script pueda ejecutarse de forma ms o menos homognea en cualquier navegador que soporte dicho DOM. SGML proporciona un modo consistente y preciso de aplicar etiquetas para describir las partes que componen un documento, permitiendo adems el intercambio de documentos entre diferentes plataformas. Sin embargo, el problema que se atribuye a SGML es su excesiva dificultad. As que, manteniendo su misma filosofa, de l se deriv XML como subconjunto simplificado, eliminando las partes ms engorrosas y menos tiles. Como su padre, XML es un metalenguaje, es decir, es un lenguaje para definir lenguajes. Los elementos que lo componen pueden dar informacin sobre lo que contienen, no necesariamente sobre su estructura fsica o presentacin, como ocurre en HTML.
5 Programacin Orientada a Objetos
1.3 Diferencias con HTML En una primera aproximacin podemos pensar que mediante XML tambin podemos definir el HTML. La diferencia fundamental entre ellos es que HTML es simplemente un lenguaje, mientras que XML como se ha dicho es un metalenguaje. XML permite la separacin de la presentacin de datos. As, si en HTML se utilizan etiquetas para indicarle al explorador que muestre los datos como negrita o cursiva, en XML se emplean nicamente para describir datos. XML mejora a HTML ya que establece un estndar fijo al que atenerse separando el contenido de la presentacin y se propone como lenguaje de bajo nivel (a nivel de aplicacin, no de programacin) para el intercambio de informacin estructurada entre diferentes plataformas.
1.4 Principales caractersticas de XML Tipos de documentos XML Existen dos tipos de documentos XML: Bien formados: cumplen las especificaciones del lenguaje respecto a las reglas sintcticas sin estar sujetos a unos elementos fijados en un DTD. De hecho, los documentos XML deben tener una estructura jerrquica muy estricta, y los documentos bien formados deben cumplirla. Vlidos: adems de estar bien formados, siguen una estructura y una semntica determinada por un DTD: sus elementos y sobre todo la estructura jerrquica que define el DTD, adems de los atributos, deben ajustarse a lo que el DTD dicte.
Programacin Orientada a Objetos 6
Martn y Vaquero
Qu es un DTD? En la clasificacin anterior se ha hablado de DTD (Document Type Definition) que es una definicin de los elementos que puede incluir un documento XML, de la forma en que deben hacerlo (qu elementos van dentro de otros) y los atributos que se les puede dar. En definitiva, es una especie de definicin de la gramtica del documento. Cuando se procesa cualquier informacin formateada mediante XML, lo primero es comprobar si est bien formada, y luego, si incluye o referencia a un DTD, comprobar que sigue sus reglas gramaticales. De ah, la diferencia entre: 1 Parsers no validadores: procesan documentos XML sin comprobar que siguen las reglas marcadas por un DTD. Slo comprueban que est bien formado. 2 Parsers validadores: comprueban que adems de ser un documento bien
1.5 Sintaxis de un documento XML Antes de empezar con el estudio de las etiquetas, debemos resaltar una serie de aspectos sobre los documentos en XML: diferencian maysculas y minsculas, todos los espacios y retornos de carro se tienen en cuenta, hay ciertos caracteres especiales reservados Su sintaxis es: &nombre. los valores de los atributos de todas las etiquetas deben ir siempre entrecomillados.
Debemos diferenciar entre: Elementos: son las entidades en s, lo que tiene contenido. Hay dos tipos: Vacos: no tienen contenido dentro del documento. Son de la forma: <etiqueta/> No vacos Etiquetas: slo describen a los elementos.
Un documento XML est compuesto por elementos, y en su sintaxis stos se nombran mediante etiquetas. Los elementos de un documento XML pueden a su vez contener subelementos, con la nica restriccin de que toda etiqueta no vaca debe tener una etiqueta de cerrado, de forma que <etiqueta> debe estar seguida de </etiqueta>. De esta manera todos los elementos quedarn perfectamente anidados.
1.6 Hojas de estilo Se usan hojas de estilos, para mostrar los datos en un explorador. Como hemos dicho antes, en XML se separan los datos de la presentacin y el proceso, de forma que es posible mostrar y procesar los datos segn se desee, aplicando distintas aplicaciones y hojas de estilos. Para definir hojas de estilo tenemos el lenguaje XSL (Extensible Stylesheet Language) que es un lenguaje para transformar documentos XML y CSS (Cascading Style Sheets).
Martn y Vaquero
2. EJEMPLO
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <book> <title>Learning to Program the Object-Oriented Way with C#</title> <author>Vinny Cahill & Donal Lafferty</autor> <price>63.95$</price> <publisher>Springer</publisher> <ISBN>1852336021</ISBN> <paperback>608 pages</paperback> </book>
La primera lnea es la forma en la que debe empezar cualquier documento XML en la que indicamos la versin de XML utilizada en el documento, el tipo de codificacin y si va acompaado de un DTD (standalone="no"), o no lo necesita
(standalone="yes"). Si queremos referenciar un DTD dentro de este documento XML podemos: Incluir dentro del documento una referencia al documento DTD en forma de URI (Universal Resource Identifier) mediante la siguiente sintaxis:
<!DOCTYPE book SYSTEM "/DTD/book.dtd">
<book> <title> Learning to Program the ObjectOriented Way with C#</title> <author> Vinny Cahill & Donal Lafferty</autor> <price> 63.95$</price> <publisher> Springer</publisher> <ISBN> 1852336021</ISBN> <paperback> 608 pages</paperback> </book>
Despus de la clusula <!ELEMENT se incluye el nombre del elemento (el que luego se indicara en la etiqueta), y despus si el elemento es no vaco, se indica el contenido que puede tener el elemento: lista de elementos hijos, tipo de contenido, tipo de uso se permite hacer de esos elementos dentro del documento, Si es un elemento vaco, se indica con la palabra EMPTY. Para la definicin de los atributos, se usa la declaracin <!ATTLIST, seguida del nombre de elemento del que estamos declarando los atributos, el nombre del atributo, los posibles valores del atributo, Este ejemplo se puede representar como un rbol de elementos. Existe un elemento raz book, que siempre debe ser nico y que se llamar como el nombre que se ponga en la definicin del <!DOCTYPE si est asociado a un DTD. Y de l descienden las ramas de sus respectivos elementos descendientes o hijos: title, author, price, publisher, ISBN, paperback:
Book
Title
Author
Price
Publisher
ISBN
Paperback
Martn y Vaquero
La informacin procedente de diferentes servicios suele tener formatos totalmente distintos de forma que el intercambio de informacin entre ellos supone un serio problema. Para salvar este contratiempo en .NET se utiliza el lenguaje XML. Toda la informacin que tenga que fluir de un servicio a otro ser descrita con XML con el fin de establecer la correspondencia entre el formato de la informacin de cada servicio y los dems. Adems, la comunicacin entre servicios se realizar utilizando el protocolo SOAP (Simple Object Access Protocol) que, como es de esperar, tambin est basado en XML y que permite invocar mtodos, servicios, componentes y objetos de otros servicios remotos. SOAP proporciona un mecanismo estndar de empaquetar un mensaje. Un mensaje SOAP se compone de un sobre que contiene el cuerpo del mensaje y cualquier informacin de cabecera que se utiliza para describir el mensaje. El siguiente ejemplo muestra como una clase enva a otra el estado de un objeto concreto, en este caso un objeto meeting mediante un mensaje SOAP.
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/> <soap:Header> <!Informacion adicional de cabecera. --> <To>Maite</To> <From>Mika</From> </soap:Header> <soap:Body> <! Mensaje: documento XML. --> <meeting> <date>29 Abril 2005</date> <time>11:30</time> <place>Plaza mayor</place> </meeting>
</soap:Envelope>
Si se quiere escribir una aplicacin, que trabaje con XML, para la plataforma .NET el lenguaje de programacin utilizado ser C# (C sharp) y la forma mas indicada de manipular los documentos XML ser a travs de las clases proporcionadas por el propio framework de .NET debido a su sencillez, su eficiencia y su magnfico soporte de los estndares actuales. Este framework da soporte para lectura y escritura de documentos XML, as como para su transformacin, filtrado, integracin con bases de datos y creacin de servicios Web entre otras tareas ms complejas. Las clases de este framework estn disponibles desde varios los espacios de nombres del sistema. Las clases del ncleo para el trabajo con XML estn disponibles en el espacio de nombres System.Xml.
Espacio de nombres: Del mismo modo que los ficheros se organizan en directorios, los tipos de datos se organizan en espacios de nombres. Por un lado estos espacios permiten tener ms organizados los tipos de datos, lo que facilita su localizacin. Todas las clases ms comnmente usadas en cualquier aplicacin pertenecen al espacio de nombres llamado System, las de acceso a bases de datos en System.Data, las de realizacin de operaciones de entrada/salida en System.IO, las de manipulacin de Documentos XML en System.Xml, etc. Por otro lado, los espacios de nombres tambin permiten poder usar en un mismo programa varias clases con igual nombre si pertenecen a espacios diferentes.
Martn y Vaquero
4. CLASES EN SYSTEM.XML:
XmlReader,
ncleo, todas definen la funcionalidad comn que las clases derivadas de ellas deben soportar.
XmlReader proporciona mtodos para el acceso rpido a datos XML, sin almacenamiento en cach y con desplazamiento solamente adelante. XmlTextReader (clase derivada de XmlReader) proporciona la capacidad de lectura de documentos desde un flujo de texto.
XmlWriter representa un sistema de escritura que proporciona un medio rpido, sin almacenamiento en cach y con desplazamiento slo hacia delante para generar secuencias o archivos con datos XML. XmlTextWriter (derivada de XmlWriter) permite escritura de flujos de texto.
XmlNode proporciona un nodo en un documento XML. XmlNodeReader (clase derivada de XmlReader) soporta lectura de documentos en un rbol DOM (Document Objects Model) en memoria. XmlNodeWriter (derivada de XmlWriter) permite escritura en un rbol DOM en memoria.
XmlElement representa un elemento. La clase XmlElement tiene varios mtodos que le permiten tener acceso a los nodos de atributo
(XmlElement.GetAttribute,XmlElement.SetAttribute, etc.). Adems, se puede llamar a la propiedad XmlElement.Attributes que devuelve una XmlAttributeCollection, que permite tener acceso a los atributos por nombre o por ndice de la coleccin.
13
XmlAttribute representa un atributo. Los valores vlidos y predeterminados del atributo se definen en una DTD o un esquema. AttributeCollection (clase derivada de XmlAttribute) representa una coleccin de atributos a los que se puede obtener acceso por nombre o por ndice.
Todas estas clases y otras muchas estn agrupadas en la biblioteca System.Xml.dll. As pues, si se quieren utilizar las clases del framework de .NET para XML desde C#, se debe importar el espacio de nombres System.Xml con la ayuda de directivas y a la hora de compilar el cdigo, se debe pasar System.Xml.dll como parmetro a csc.exe.
Martn y Vaquero
5. 1. EJEMPLO: WriteXML
Se desea generar el fragmento de cdigo XML anteriormente visto desde una aplicacin escrita en C#:
Cdigo en C# :
namespace WriteXML { using System; using System.Xml; public class BookData { private const string m_strFileName = "c:\\book.xml"; public static void Main() { XmlTextWriter bookWriter = null; bookWriter = new XmlTextWriter (m_strFileName, null); try { bookWriter.Formatting = Formatting.Indented; bookWriter.Indentation= 6; bookWriter.Namespaces = false; bookWriter.WriteStartDocument(); bookWriter.WriteStartElement("", "book", ""); bookWriter.WriteStartElement("", "title", ""); bookWriter.WriteString("Learning to Program the Object-Oriented Way with C#"); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", "author", ""); bookWriter.WriteString("Vinny Cahill & Donal Lafferty "); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " price ", ""); bookWriter.WriteString("63.95"); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " publisher ", ""); bookWriter.WriteString("Springer "); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " ISBN ", ""); bookWriter.WriteString("1852336021"); bookWriter.WriteEndElement(); 15 Programacin Orientada a Objetos
bookWriter.WriteStartElement("", " paperback ",""); bookWriter.WriteString("608 pages "); bookWriter.WriteEndElement(); bookWriter.WriteEndElement(); bookWriter.Flush(); } catch(Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (bookWriter != null) { bookWriter.Close(); } } } } }
Compilacin del cdigo: Ahora solamente se debe guardar el cdigo con extensin .cs, BookXML.cs por ejemplo, y compilar con la siguiente lnea de comandos:
csc /r:System.Xml.dll BookXML.cs
Esto producir el correspondiente fichero BookXML.exe, el cual, al ser ejecutado crear un documento XML llamado book.xml. Estructura del programa: Lo primero que se observa en el cdigo es la utilizacin de los espacios de nombres System y System.Xml que, como se dijo anteriormente, contienen las clases que utilizaremos para crear el documento XML. Si durante la ejecucin del programa no se produce ninguna excepcin, se ejecutarn todas las instrucciones contenidas entre las llaves de la clusula try. Por el contrario, si se produce alguna, se informa por pantalla del suceso. Finalmente se cierra el acceso al objeto BookWriter.
Martn y Vaquero
Manejo de las clases: Se declara la clase BookData con un nico atributo privado de clase string, m_strFileName, y un nico mtodo pblico Main. En ste mtodo se declara un objeto, BookWriter, haciendo uso de la clase XmlTextWriter que proporciona el framework. Se crea un primer elemento BookData que ser el elemento raz que contendr al resto. Se crean los diferentes subelementos y se les asignan los diferentes pares etiquetavalor, bien sea con la informacin del estado de un objeto (conjunto de los valores actuales de sus atributos) o con cualquier otra. De esta forma se puede guardar el estado de un objeto, (tcnica llamada persistencia de los objetos) o bien comunicrselo a otros objetos o incluso otras aplicaciones mediante el envo de un mensaje SOAP.
17
Cdigo en C# :
public static void Main() { XmlTextReader bookReader = null; bookReader = new XmlTextReader (m_strFileName);
while (bookReader.Read()) { if (bookReader.NodeType == XmlNodeType.Element){ if (bookReader.LocalName.Equals("title")){ Console.Write("{0} Book Title: ", bookReader.ReadString()); } if (bookReader.LocalName.Equals("author")) { Console.WriteLine("{0}", Book author: bankReader.ReadString() ); } if (bookReader.LocalName.Equals("price")) Console.WriteLine("{0}", Book price: $ bankReader.ReadString()) } if (bookReader.LocalName.Equals("publisher")) { Console.WriteLine("{0}", Book publisher: bankReader.ReadString()); } if (bookReader.LocalName.Equals("ISBN")) { {
Martn y Vaquero
Compilacin del cdigo: Se compilar el cdigo de la misma manera que el anterior. Se obtendr una salida por pantalla como esta:
Book title: Learning to Programm the Object-Oriented Way with C# Book author: Vinny Cahill & Donal Lafferty Book price: $68.95 Book publisher: Springer Book ISBN: 1852336021 Book paperback: 608 pages
Estructura del programa: Se crea un objeto de la clase XmlTextReader indicando el nombre del fichero que se va a leer: book.xml. Se entra en un bucle de lectura donde se comprueba que cada etiqueta leda corresponde con la informacin esperada para, en caso afirmativo, presentarla por pantalla.
19
6. CONCLUSIONES:
Durante los ltimos aos XML ha tenido un crecimiento exponencial sobre todo si nos basamos en sus apariciones en los medios de comunicacin de todo tipo, menciones en pginas web, soporte software, tutoriales, etc. Este lenguaje junto con el paradigma de orientacin a objetos desde la plataforma .NET son el punto base de las aplicaciones ms actuales. Por ello, es necesario conocerlos y relacionarlos. Gracias al estndar XML se puede guardar el estado de un objeto, o bien comunicrselo a otros. As como que otras aplicaciones puedan crear otros objetos a partir de dicha informacin con la garanta de que van a poder comprenderlo aunque no hayan sido diseados explcitamente para ello. Por tanto, se guardan los datos independientemente de su presentacin en formato XML para que puedan ser utilizados por otros programas.
Martn y Vaquero
7. ENLACES:
Protocolo SOAP: para que sirve, sus ventajas y la estructura de los mensajes: http://www.desarrolloweb.com/articulos/1557.php?manual=54
21