Está en la página 1de 29

1

XML
Ingeniera del Software de Gestin
Tema 12
DSIC - UPV
2
Objetivos
Conocer las bases del lenguaje XML
Conocer algunas tecnologas relacionadas
2
3
Contenido
Introduccin: motivacin
El lenguaje XML
Validacin de documentos XML
Transformacin de documentos XML
Manipulacin de documentos XML por programa
Ejemplos en C#
Introduccin: motivacin
3
5
Motivacin
Buenas propiedades de un sistema software:
Correccin, eficiencia, mantenibilidad, etc.
Interoperabilidad: Capacidad de un sistema software
para trabajar con otros sistemas software:
Invocar funcionalidad de otro sistema software
(ej. invocar mtodos)
Utilizar resultados producidos por otro sistema
software (ej. ficheros)
Requisito para conseguir sist. soft. interoperables
Deben poder intercambiar informacin entre ellos
6
Motivacin
Ejemplo: Valores burstiles
La Bolsa de Valencia publica diariamente en la web
datos sobre valores, divisas, etc.
Una empresa de importaciones y exportaciones en el
sector del metal utiliza en su trabajo diario:
Valores de empresas nacionales del sector del metal
Tipos de cambio entre monedas (EUR, USD y MXN)
La empresa necesita los datos de la Bolsa, en un
medio digital
4
7
Motivacin
Soluciones:
Una persona introduce los datos manualmente
Inviable!
Un programa extrae los datos de la pgina web
Ineficiente
Inmantenible (si cambia la web hay que reprogramar)
La Bolsa publica los datos
Por ejemplo en ficheros diarios, con algn formato
8
Motivacin
Concepto clave:
Intercambio de datos entre aplicaciones independientes
Otros ejemplos:
Cesin de expedientes mdicos entre hospitales
Integracin de datos de vuelo de distintas compaas
(agencias de viaje)
Bsquedas bibliogrficas en una red de bibliotecas
etc.
5
9
Motivacin
Problema: Cada aplicacin utiliza un formato propio
Existen algunos formatos estndar:
Formatos para documentos: .doc, .sxw, .pdf, .ps, ...
Mezclan presentacin visual y contenido
Formatos para datos: .txt, .csv
Carecen de un mecanismo estndar para indicar la
estructura de los datos
Necesidad de un lenguaje estndar para el
intercambio de datos entre aplicaciones
Si se puede usar para otras cosas, mejor todava
10
Motivacin
Requisitos ideales:
Permite representar cualquier tipo de dato (cadenas,
nmeros, secuencias de bytes, etc.)
Permite guardar datos estructurados
Utiliza un formato sencillo (ej. texto plano) fcilmente
legible y editable:
Por una aplicacin
Por un usuario
6
11
Motivacin
Una solucin estndar: lenguaje XML
El lenguaje XML
7
13
XML
XML: eXtensible Markup Language
Lenguaje para definir documentos XML
14
Ejemplo de documento XML
<?xml version=1.0encoding=ISO-8859-1?>
<infoBolsa>
<infoValor>
<nombre>Metales METALESA</nombre>
<codigo>MTSA</codigo>
<valor>100</valor>
</infoValor>
<infoValor>... </infoValor>
<infoValor>... </infoValor>
<fecha anyo=2006mes=5dia=1hora=9minuto=0/>
</infoBolsa>
8
15
Documento XML
Datos de distintos tipos:
Cadenas, enteros, ...
Es posible guardar secuencias de bytes
Datos organizados jerrquicamente
infoBolsa contiene infoValor, que contiene ...
Fichero en texto plano (ej. datos.xml)
16
Documento XML
Componentes de un documento XML
Cabecera XML:
<?xml version=1.0encoding=ISO-8859-1?>
Elementos: etiqueta +contenido +etiqueta (cierre):
Formas de guardar datos:
Como elementos: <valor>100</valor>
Como atributos: <fecha anyo=2006... />
9
17
Detalles de sintaxis
Un nico elemento raz (ej. infoBolsa)
Puede contener elementos de distintos tipos (ej.
infoValor y fecha)
Los valores de los atributos van entre comillas y
separados por espacios
<fecha anyo=2006mes=5dia=1... />
Etiquetas de apertura y cierre
<fecha anyo=2006... />
<fecha anyo=2006... ></fecha>
Saltos de lnea e ident. opcionales (recomendado!)
Validacin de docs. XML
10
19
XML es eXtensible
Contenido y estructura arbitrarios
<infoBolsa>
<infoValor>
<nombre>...</nombre>
<codigo>...</nombre>
<valor>...</nombre>
</infoValor>
<fecha ... />
</infoBolsa>
<expedientes>
<expediente>
<nombre>...</nombre>
<fechaNac .../>
<numSegSoc>...</numSegSoc>
...
</expediente>
</expedientes>
<biblioteca>
<libro>
<titulo>...</titulo>
<autores>
<autor>
<nombre>...</nombre>
<apellidos>...</apellidos>
</autor>
<autor>
...
</autor>
</autores>
<isbn>...</isbn>
</libro>
<cdrom>
<titulo>...</titulo>
<isbn>...</isbn>
</cdrom>
</biblioteca>
20
Docs. XML bien formados y vlidos
Doc. XML bien formado: sintcticamente correcto
Los elementos tienen apertura y cierre
Los atributos van entre comillas
etc.
Doc. XML vlido: estructuralmente correcto
Todo infoValor est dentro de un infoBolsa
Un expediente solo tiene un fechaNac
En autor, apellidos es opcional
11
21
Docs. XML bien formados y vlidos
Cmo indicar las reglas estructurales?
Existen dos mecanismos estndar:
DTD (Document Type Definition)
XML Schema
22
DTDs
Una DTD contiene la definicin de un tipo de
documentos XML
Conjunto de reglas estructurales que deben cumplir los
documentos XML
Ejemplos:
infoBolsa.dtdpara los XMLs de info. burstil
expMedicos.dtdpara los expedientes mdicos
expAlu.dtdpara los expedientes de alumnos
biblioteca.dtdpara los XMLs de recursos bibliograf.
etc.
12
23
Ejemplo de DTD (infoBolsa.dtd)
<!ELEMENT infoBolsa (infoValor+, fecha)>
<!ELEMENT infoValor (nombre, codigo?, valor)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT codigo (#PCDATA)>
<!ELEMENT valor (#PCDATA)>
<!ELEMENT fecha EMPTY>
<!ATTLIST fecha anyo CDATA #REQUIRED>
<!ATTLIST fecha mes CDATA #REQUIRED>
<!ATTLIST fecha dia CDATA #REQUIRED>
<!ATTLIST fecha hora CDATA #IMPLIED>
<!ATTLIST fecha minuto CDATA #IMPLIED>
24
Ejemplo de DTD
<?xml version=1.0encoding=ISO-8859-1?>
<!DOCTYPE infoBolsa SYSTEM http://www.abc.com/infoBolsa.dtd>
<infoBolsa>
<infoValor>
<nombre>Metales METALESA</nombre>
<codigo>MTSA</codigo>
<valor>100</valor>
</infoValor>
<infoValor>... </infoValor>
<fecha anyo=2006mes=5dia=1hora=9minuto=0/>
</infoBolsa>
13
25
DTDs
Para trabajar con docs. XML, hay que saber:
Cmo comprobar que un doc. XML cumple una DTD
Cmo procesar un doc. XML
Ej. obtener datos para cargarlos en un programa
Programas analizadores (parsers):
Deciden si es un documento bien formado (respecto a
esa DTD)
Ofrecen mecanismos para recuperar los datos
Ej. libreras con clases y mtodos invocables por
nuestros programas
26
Inconvenientes de las DTDs
No son documentos XML!
Requieren parsers especiales
Tipado de datos muy limitado
Ej. No se puede indicar que un atributo es entero
No es posible mezclar en un mismo doc. XML
elementos de distintos orgenes (ej. DTDs)
infoValor en infoBolsa.dtd y libro en biblioteca.dtd
nombre en expMedicos.dtd y expAlu.dtd
14
27
XML Namespaces
Estndar que permite mezclar en un mismo XML
elementos de distintos orgenes
Las etiquetas de los doc. XML pueden agruparse en
espacios de nombres
Igual que en C#las clases se agrupan en paquetes
En un mismo doc. XML puede haber etiquetas que
pertenecen a distintos espacios de nombres
28
XML Namespaces
A cada espacio de nombre se le asigna un prefijo
<bibUPV:nombre>(nombre de un autor)
<bolsa:nombre>(nombre de un valor burstil)
El prefijo se asocia con una URI (Univ. Resource Id.)
Solo sirve como identificador nico conocido
No se hace ninguna comprobacin con la URI
<bibUPV:biblioteca xmlns:bibUPV=http://www.bibupv.es>
<libro>...</libro>
<bibUPV:biblioteca>
15
29
XML Namespaces
<aluUPV:alumno xmlns:aluUPV=http://alumnado.upv.es>
<aluUPV:nombre>
...
</aluUPV:nombre>
<expMedUPV:nombre xmlns:expMedUPV=http://gm.upv.es>
...
</expMedUPV:nombre>
<aluUPV:alumno>
30
XML Schema
Estndar para indicar las reglas estructurales que
deben cumplir los doc. XML
Parecido a las DTDs pero ms potente
Ventajas frente a las DTDs:
Sintaxis XML
Soporte de namespaces
Tipos de datos predefinidos
Tipos de datos definibles por el usuario
16
31
Ejemplo de XML Schema(infoBolsa.xsd)
<?xml version=1.0encoding=ISO-8859-1?>
<xsd:schema
xmlns:xsd=httpd://www.w3.org/2000/08/XMLSchema>
<xsd:element name=infoBolsatype=tipoInfoBolsa/>
<xsd:complexType name=tipoInfoBolsa>
<xsd:sequence>
<xsd:element name=infoValortype=tipoInfoValor
minOccurs=1maxOccurs=unbounded/>
<xsd:element name=fechatype=xsd:date/>
</xsd:sequence>
</xsd:complexType>
32
Ejemplo de XML Schema(infoBolsa.xsd)
<xsd:complexType name=tipoInfoValor>
<xsd:sequence>
<xsd:element name=nombretype=xsd:string/>
<xsd:element name=codigotype=xsd:string/>
<xsd:element name=valortype=xsd:integer/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
17
33
Ejemplo de XML Schema
<?xml version=1.0encoding=ISO-8859-1?>
<infoBolsa xmlns=http://www.abc.com
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://www.abc.cominfoBolsa.xsd>
<infoBolsa>
<infoValor>
<nombre>Metales METALESA</nombre>
<codigo>MTSA</codigo>
<valor>100</valor>
</infoValor>
<infoValor>... </infoValor>
<fecha>2006-05-01 09:00</fecha>
</infoBolsa>
34
XML Schema
Elementos simples
Tipos: string, decimal, integer, boolean, date, time
Valores por defecto, valores fijos
Elementos complejos
Contienen a otros elementos
Secuencias de elementos internos
Seleccin de elementos internos
Atributos (opcionales, obligatorios)
18
35
XML Schema
Restricciones en los valores
Nmero min y max de ocurrencias de un elemento
Conjunto de valores posibles
Rango de valores posibles (ej. [a-z])
Longitud mnima, mxima, exacta
Patrn (mediante una expresin regular)
Muchas opciones ms...
Transformacin de
documentos XML
19
37
Transformacin de docs. XML
Los docs. XML guardan datos...
Interesa transformarlos de alguna manera?
Ej. A partir de infoBolsa_20060421.xmlla Bolsa de
Valencia genera infoBolsa_20060421.htmly lo
cuelga en el servidor web
Ej: Metales METALESArecupera cada doc. XML
diario producido por la Bolsa de Valencia, lo
transforma y lo adjunta a abril2006.xml
Ej: Inversores XYZrecupera el doc. XML y produce
un listado bolsaVLC_20060421.txt
38
Transformacin de docs. XML
Concepto clave: Independencia entre
Contenido (los datos)
Presentacin (cmo se representan los datos)
En HTML (.html)
En texto plano (.txt)
En otro XML (.xml)
etc.
20
39
XSLT
XSLT (XML Stylesheet Language Transformation) es
un estndar para la transformacin de docs. XML
Una hoja XSLT contiene un conjunto de reglas para
transformar elementos, atributos, etc. de un
documento XML fuente
Proceso de transformacin
Entrada: documento XML, hoja XSLT
Salida: doc. en texto plano (.xml, .html, etc.)
40
XSLT (proceso de transformacin)
XML
2
(HTML)
XML
1
XSLT
(XML)
21
Manipulacin de docs.
XML por programa
42
Manipulacin de docs. XML por prog.
Un programa puede utilizar documentos XML
Configuracin de parmetros de la aplicacin
Datos iniciales (carga del sistema)
Resultados del programa
Ej. expediente acadmico de un alumno
Datos de entrada para una determinada funcin
(invocable externamente, por otra aplicacin)
Datos de salida de la funcin
etc.
22
43
Manipulacin de docs. XML por prog.
Alternativa 1: Programar a mano todo el cdigo
necesario para
Leer el fichero
Reconocer las etiquetas, atributos, valores, etc.
Inconvenientes:
Es mucho trabajo, es complicado, etc.
Hay que conocer muy bien la sintaxis XML!
Alternativa 2: Utilizar alguna librera existente
Simplifican la gestin de docs. XML por programa
44
Estndares relevantes
Estndar DOM (http://www.w3.org/DOM)
Conjunto de interfaces y objetos, propuesto por el
W3C para la manipulacin de XML y HTML
Permite representar un XML como un rbol de nodos,
que se almacena en memoria
Estndar SAX (http://www.saxproject.org)
Estndar de facto que ofrece una interfaz para parsear
(leer e interpretar el contenido de) ficheros XML
Orientado a eventos: a medida que el parser va
encontrando marcas, elementos, atributos, etc. invoca
determinadas funciones escritas por el desarrollador
23
45
Estndares relevantes
Hay distintas libreras para los lenguajes de
programacin ms usados, que implementan los
estndares DOM, SAX y XSLT (y otros)
Ejemplo: C#
Namespace System.Xml (y subespacios)
Implementacin de DOM y XSLT
46
Estndares relevantes
Ejemplo: J ava
Paquetes estndar:
java.xml.parsers: Interfaces comunes de parsers XML
org.w3c.dom: Interfaces para parsers DOM
org.xml.sax: Interfaces para parsers SAX
java.xml.transform: Interfaces de procesadores XSLT
Estas interfaces permiten utilizar parsers DOM y SAX
y transformadores XSLT de distintos fabricantes
Todos cumplen las mismas interfaces
24
47
Estndares relevantes
Libreras para J ava
SAX: implementacin del estndar SAX (por el mismo
autor). Existen otras libreras SAX.
DOM4J : Implementacin del estndar DOM
J DOM: Impl. de DOM
Xerces for J ava: Impl. DOM y SAX
Crimson: Impl. DOM y SAX
Xalan para J ava: Impl. de XSLT
48
Estndares relevantes
Libreras para otros lenguajes:
Xerces para C/C++
Xerces para Perl
Xalan para C++
Librera XML para PHP (incluida de serie)
Paquete PyXML para Python
...
25
Ejemplos en C#
50
Ejemplo: Crear un XML con DOM
<infoBolsa>
<infoValor>
<nombre>
Metales METALESA
</nombre>
<codigo>MTSA</codigo>
<valor>100</valor>
<fecha anyo=2006mes=5
dia=1hora=9minuto=0/>
</infoValor>
</infoBolsa>
XMLText valorNombre
Metales METALESA
XMLElement nombre
XMLDocument doc
XMLElement raiz
XMLText valorCodigo
MTSA
XMLElement codigo
XMLText valorValor
100
XMLElement valor
XMLElement fecha
anyo=2006mes=5dia=1
hora=9minuto=0
XMLElement infoValor
26
51
Ejemplo: Crear un XML con DOM
XmlDocument doc =newXmlDocument();
XmlElement raiz =doc.CreateElement("infoBolsa");
doc.AppendChild(raiz);
XmlElement infoValor =doc.CreateElement("infoValor");
raiz.AppendChild(infoValor);
XmlElement nombre =doc.CreateElement("nombre");
XmlText valorNombre =doc.CreateTextNode("Metales
METALESA");
nombre.AppendChild(valorNombre);
infoValor.AppendChild(nombre);
XmlElement codigo =doc.CreateElement("codigo");
XmlText valorCodigo =doc.CreateTextNode("MTSA");
codigo.AppendChild(valorCodigo);
infoValor.AppendChild(codigo);
52
Ejemplo: Crear un XML con DOM
XmlElement valor =doc.CreateElement("valor");
XmlText valorValor =doc.CreateTextNode("100");
valor.AppendChild(valorValor);
infoValor.AppendChild(valor);
XmlElement fecha =doc.CreateElement("fecha");
fecha.SetAttribute("anyo", "2006");
fecha.SetAttribute("mes", "5");
fecha.SetAttribute("dia", "1");
fecha.SetAttribute("hora", "9");
fecha.SetAttribute("minuto", "0");
infoValor.AppendChild(fecha);
doc.Save(@"C:\WINDOWS\Temp\infoBolsa.xml");
Console.WriteLine(doc.InnerXml);
Console.ReadLine();
27
53
Ejemplo: Crear un XML con DOM
Resultado (C:\WINDOWS\Temp\infoBolsa.xml):
<infoBolsa><infoValor><nombre>Metales
METALESA</nombre><codigo>MTSA</codigo
><valor>100</valor><fecha anyo="2006"
mes="5" dia="1" hora="9minuto="0"
/></infoValor></infoBolsa>
54
Ejemplo: Leer un XML con DOM
XmlDocument doc =newXmlDocument();
doc.Load(@"C:\WINDOWS\Temp\infoBolsa.xml");
XmlNode raiz =doc.FirstChild;
Console.WriteLine("Raiz: " +raiz.Name);
XmlNode infoValor =raiz.FirstChild;
Console.WriteLine("Elemento " +infoValor.Name);
XmlNode nombre =infoValor.FirstChild;
Console.WriteLine("Elemento: " +nombre.Name);
XmlNode valorNombre =nombre.FirstChild;
Console.WriteLine(" Valor: " +valorNombre.Value);
XmlNode codigo =nombre.NextSibling;
Console.WriteLine("Elemento: " +codigo.Name);
XmlNode valorCodigo =codigo.FirstChild;
Console.WriteLine(" Valor: " +valorCodigo.Value);
28
55
Ejemplo: Leer un XML con DOM
XmlNode valor =codigo.NextSibling;
Console.WriteLine("Elemento: " +codigo.Name);
XmlNode valorValor =valor.FirstChild;
Console.WriteLine(" Valor: " +valorValor.Value);
XmlNode fecha =valor.NextSibling;
Console.WriteLine("Elemento: " +fecha.Name);
XmlAttributeCollection atributos =fecha.Attributes;
Console.WriteLine(" Fecha: " +
atributos["anyo"].Value +"." +
atributos["mes"].Value +"." +
atributos["dia"].Value);
Console.WriteLine(" Hora: " +
atributos["hora"].Value +":" +
atributos["minuto"].Value);
Console.ReadLine();
56
Ejemplo: Leer un XML con DOM
Resultado (stdout):
Raiz: infoBolsa
Elemento infoValor
Elemento: nombre
Valor: Metales METALESA
Elemento: codigo
Valor: MTSA
Elemento: codigo
Valor: 100
Elemento: fecha
Fecha: 2006.5.1
Hora: 11:15
29
57
Bibliografa
[1] Pgina principal de XML en el W3C:
http://www.w3c.org/XML
[2] Tutorial de XML Schema:
http://www.w3schools.com/schema/default.asp
[3] Comparacin de herramientas XML y tcnicas
asociadas:
http://www.devsphere.com/xml/benchmark/

También podría gustarte