Title: XML y Servicios Web
1XML y Servicios Web
- Miguel Ángel Ramos Barroso
2- Jiuston güi haf a problem
3Pensemos en
- Sistema de control aéreo internacional
- Aviones o aeronaves que cambian constantemente,
torres de control, tripulación y pasajeros hablan
y hacen cosas distintas en distintos idiomas,
etc., - La comunicación entre la tripulación, los aviones
y torres de control debe ser la misma. - Hay un gran tamaño (muchos aviones y sitios) y
mucha heterogeneidad (pobres/ricos, idiomas,
tamaños, ) - Solucionan el problema de la transmisión usando
la radio con VHF en un frecuencia. (HTTP) - Todos usan el idioma ingles. (XML)
4Que es XML?
- XML EXtensible Markup Language
- XML es un lenguaje de etiquetas como HTML
- XML fue diseñado para describir y contener datos
- Las etiquetas XML no son predefinidas.
- !Te las puedes inventar! Como las respuestas de
los exámenes! - XML utiliza Document Type Definition (DTD) o un
esquema XML para describir los datos. - XML junto a DTD o a un esquema XML es totalmente
descriptivo por si mismo.
5Vivan las siglas!
- SGML (Standard Generalized Markup Language)
- HTML es una aplicación de SGML
- XML es subconjunto más fácil de usar de SGML
- XHTML es el HTML de XML
6XML se puede usar para intercambiar y guardar
Datos
- Los sistemas y las bases de datos contienen datos
en formatos incompatibles. - Una de las tareas que mas consumen tiempo a los
desarrolladores ha sido intercambiar datos entre
tales sistemas sobre el Internet. - Convertir los datos a XML puede reducir esta
complejidad y crear datos que pueden leerse por
diversos tipos de aplicaciones.
7Estructura
Directiva
Comentario
lt?xml version1.0 encodingutf-8?gt lt!-
Ejemplo de comentario --gt ltLibrosgt ltPedido
descuentonogt ltidarticulogt12345lt/idarticulogt
ltTitulogtEl Quijotelt/nombregt
lt/Pedidogt lt/Librosgt
Etiqueta
Atributo
Etiqueta
Texto contenido
8Ejemplo XML
- lt?xml version"1.0" encoding"ISO-8859-1"?gt
- ltcataloggt
- ltcdgt
- lttitlegtEmpire Burlesquelt/titlegt
- ltartistgtBob Dylanlt/artistgt
- ltcountrygtUSAlt/countrygt
- ltcompanygtColumbialt/companygt
- ltpricegt10.90lt/pricegt
- ltyeargt1985lt/yeargt
- lt/cdgt . . .
- lt/cataloggt
Vinculo
9Pero cómo lo puedorepresentar?
Usando XSL (Extensible Stylesheet Language,
"lenguaje extensible de hojas de estilo"). Es
una familia de lenguajes basados en el estándar
XML que permite describir cómo la información
contenida en un documento XML cualquiera debe ser
transformada o formateada para su presentación en
un medio específico.
10La familia? Bien gracias
- XSLT (siglas de Extensible Stylesheet Language
Transformations, lenguaje de hojas extensibles de
transformación), que permite convertir documentos
XML de una sintaxis a otra (por ejemplo, de un
XML a otro o a un documento HTML). - XSL-FO (lenguaje de hojas extensibles de formateo
de objetos), que permite especificar el formato
visual con el cual se quiere presentar un
documento XML, es usado principalmente para
generar documentos PDF. - XPath, o XML Path Language, es una sintaxis (no
basada en XML) para acceder o referirse a
porciones de un documento XML. - Estas tres especificaciones son recomendaciones
oficiales del W3C.
11Transformaciones XSLT
- XSLT también puede agregar nuevas etiquetas o
remover algunas en el archivo resultante. Es
posible reposicionar y ordenar los elementos, así
como tomar decisiones acerca de los elementos a
desplegar y mas. - Una manera común de describir el proceso de la
transformación es decir que XSLT transforma un
árbol de la fuente de XML en un árbol del
resultado de XML.
12Creando una hoja de estilo XSLT
- lt?xml version"1.0" encoding"ISO-8859-1"?gt
- ltxslstylesheet version"1.0
- xmlnsxsl"http//www.w3.org/1999/XSL/Transform"gt
- ltxsltemplate match"/"gt
- lthtmlgt
- ltbodygt
- lth2gtMy CD Collectionlt/h2gt
- lttable border"1"gt
- lttr bgcolor"9acd32"gt
- ltth align"left"gtTitlelt/thgt
- ltth align"left"gtArtistlt/thgt
- lt/trgt
- ltxslfor-each select"catalog/cd"gt
- lttrgt
- lttdgtltxslvalue-of select"title"/gtlt/tdgt
- lttdgtltxslvalue-of select"artist"/gtlt/tdgt
- lt/trgt
- lt/xslfor-eachgt
- lt/tablegt
13Cómo funciona?
- Durante el proceso de transformación, XSLT
utiliza XPath para definir partes del documento
fuente que encajan dentro de una o mas plantillas
predefinidas. - Por cada coincidencia, XSLT transformará esta
parte del documento fuente para generar el
documento resultante. - La porción del documento fuente que no encaja con
la plantilla permanecerá sin modificación alguna
en el documento resultante.
14Combinando La Hoja de estilo XSLT con el
Documento XML
- lt?xml version"1.0" encoding"ISO-8859-1"?gt
- lt?xml-stylesheet type"text/xsl"
href"cdcatalog.xsl"?gt - ltcataloggt
- ltcdgt
- lttitlegtEmpire Burlesquelt/titlegt
- ltartistgtBob Dylanlt/artistgt
- ltcountrygtUSAlt/countrygt
- ltcompanygtColumbialt/companygt
- ltpricegt10.90lt/pricegt
- ltyeargt1985lt/yeargt
- lt/cdgt
- .
- .
- .
- lt/cataloggt
15ltxsltemplategt
- Cada etiqueta ltxsltemplategt contiene reglas por
aplicar a ciertos elementos de un nodo. - El atributo match es utilizado para asociar la
plantilla con un elemento XML. - El atributo match también puede utilizarse para
aplicarse a una rama completa del documento XML
(Por ejemplo match"/" define a todo el
documento). - ltxsltemplate match"/"gt
16ltxslvalue-ofgt
- La etiqueta ltxslvalue-ofgt se utiliza para
seleccionar el valor de una etiqueta XML y
agregarlo al archivo de salida de la
transformacion. - El valor del atributo select contiene una
expresión XPath. Esta trabaja como la navegación
de un sistema de ficheros donde una diagonal
vertical delantera (/) selecciona subdirectorios. - ltxslvalue-of select"catalog/cd/title"/ gt
17ltxslfor-eachgt
- La etiqueta XSL ltxslfor-eachgt se utiliza para
seleccionar todos los elementos XML del nodo
especificado. - El valor del atributo select contiene una
expresión XPath. Esta trabaja como la navegación
de un sistema de ficheros donde una diagonal
vertical delantera (/) selecciona subdirectorios.
- ltxslfor-each select"catalog/cd"gt
18ltxslsortgt
- Para mostrar el archivo XML como un archivo XHTML
y ordenarlo al mismo tiempo, simplemente agrege
el elemento sort dentro de la estructura for-each
element en el archivo XSL - No es posible ver esto en IE 5, porque el
namespace http//www.w3.org/TR/WD-xsl no
comprende el elemento ltxslsortgt. - ltxslfor-each select"catalog/cd"gt
- ltxslsort select"artist"/gt
19ltxslifgt
- ltxslfor-each select"catalog/cd"gt
- ltxslif test"price gt 10"gt
- lttrgt
- lttdgtltxslvalue-of select"title"/gtlt/tdgt
- lttdgtltxslvalue-of select"artist"/gtlt/tdgt
- lt/trgt
- lt/xslifgt
- lt/xslfor-eachgt
20ltxslchoosegt
- ltxslfor-each select"catalog/cd"gt
- lttrgt
- lttdgtltxslvalue-of select"title"/gtlt/tdgt
- ltxslchoosegt
- ltxslwhen test"price gt 10"gt
- lttd bgcolor"ff00ff"gt
- ltxslvalue-of select"artist"/gtlt/tdgt
- lt/xslwhengt
- ltxslotherwisegt
- lttdgtltxslvalue-of
select"artist"/gtlt/tdgt - lt/xslotherwisegt
- lt/xslchoosegt
- lt/trgt
- lt/xslfor-eachgt
21NET Framework
22Biblioteca XML en .NET
- El espacio de nombres System.Xml ofrece una
variedad de clases para leer y escribir
documentos XML - La clase XmlDocument implementa DOM
- Para un procesamiento orientado al stream se
puede usar XmlTextReader o XmlValidatingReader - XmlTextWriter simplifica el proceso de creación
de documentos XML.
23XMLDocument
- La clase XMLDocument es compatible con la
especificación DOM Level 2 Core - ?? Representa a un documento como un árbol de
nodos que tiene por raíz el - elemento raíz del documento XML.
- ?? Cada nodo es una instancia de XmlNode, que
expone métodos y propiedades - para navegar árboles DOM, leer y escribir
contenido de nodos, añadir y borrar - nodos, etc.
- ?? Un ejemplo sencillo de su uso sería
- XmlDocument doc new XmlDocument ()
- doc.Load ("Guitars.xml")
- ?? El atributo DocumentElement devuelve un
XmlNode que hace referencia a la - raíz del documento, que es el punto de comienzo
al navegar de arriba a abajo el - árbol DOM
- ?? La combinación de los atributos HasChildNodes
y ChildNodes hace posible - un enfoque recursivo para iterar sobre los nodos
de un árbol - ?? La invocación a ChildNodes no devuelve
atributos XML, sin embargo, su - propiedad Attributes lo hace.
- ?? Las propiedades NodeType, Name, y Value de un
XmlNode exponen su tipo, - nombre, y valor del correspondiente nodo
- ?? En atributos usa la propiedad LocalName para
devolver nombres sin prefijos.
24XMLDocument
- Para acceder a nodos particulares puedes hacer
uso de las - propiedades de un XmlDocument GetElementsByTagName
, - SelectNodes, y SelectSingleNode
- ?? XmlDocument puede también utilizarse para
escribir - documentos Xml
- ?? La clase XmlDataDocument ofrece un mecanismo
para tratar - datos relacionales como datos XML. Puedes crear
un - XmlDataDocument alrededor de un DataSet del
siguiente modo - DataSet ds new DataSet ()
- // TODO Initialize the DataSet with a database
- query
- XmlDataDocument doc new XmlDataDocument (ds)
25- using System
- using System.Xml
- class MyApp
-
- static void Main ()
-
- XmlDocument doc new XmlDocument ()
- doc.Load ("Guitars.xml")
- XmlNodeList nodes doc.GetElementsByTagName
("Guitar") - foreach (XmlNode node in nodes)
- Console.WriteLine ("0 1", node"Make".InnerTe
xt, - node"Model".InnerText)
-
- // Visualiza el contenido de todo el árbol
- OutputNode (doc.DocumentElement)
-
26- public static void OutputNode (XmlNode node)
-
- Console.WriteLine ("Type0\tName1\tValue2"
, - node.NodeType, node.Name, node.Value)
- if (node.Attributes ! null)
-
- foreach (XmlAttribute attr in node.Attributes)
- Console.WriteLine("Type0\tName1\tValue2",
- attr.NodeType, attr.Name, attr.Value)
-
- if (node.HasChildNodes)
-
- XmlNodeList children node.ChildNodes
- foreach (XmlNode child in children)
- OutputNode (child)
-
-
-
27XmlTextReader
XmlTextReader read new XmlTextReader(new
StringReader(requestXml)) while(read.Read())
if(read.LocalName idarticulo)
Console.WriteLine(read.ReadString())
28XMLTextReader
- La clase System.Xml.XmlTextReader ofrece una
interfaz rápida, hacia adelante, de sólo - lectura de documentos XML.
- ?? XmlValidatingReader permite efectuar una
validación de un documento Xml - ?? Es orientada al stream como SAX
- ?? Es más eficiente en consumo de memoria que
XmlDocument, - XmlTextReader reader null
- ...
- reader new XmlTextReader ("Guitars.xml")
- reader.WhitespaceHandling WhitespaceHandling.Non
e - while (reader.Read ())
-
- Console.WriteLine ("Type0\tName1\tValue2"
, reader.NodeType, - reader.Name, reader.Value)
- if (reader.AttributeCount gt 0)
-
- while (reader.MoveToNextAttribute())
-
- Console.WriteLine ("Type0\tName1\tValue2"
, - reader.NodeType, reader.Name, reader.Value)
29XMLTextReader
- La clase XmlTextWriter se puede utilizar para
generar documentos - Xml desde cero.
- XmlTextWriter writer null
- ...
- writer new XmlTextWriter ("Guitars.xml",
- System.Text.Encoding.Unicode)
- writer.Formatting Formatting.Indented
- writer.WriteStartDocument ()
- writer.WriteStartElement ("Guitars")
- writer.WriteStartElement ("Guitar")
- writer.WriteAttributeString ("Image",
"MySG.jpeg") - writer.WriteElementString ("Make", "Gibson")
- writer.WriteElementString ("Model", "SG")
- writer.WriteElementString ("Year", "1977")
- writer.WriteElementString ("Color", "Tobacco
Sunburst") - writer.WriteElementString ("Neck", "Rosewood")
- writer.WriteEndElement ()
- writer.WriteEndElement ()
30XML. Introducción
Procesar XML Secuencialmente
- XPath
- Permite aplicar filtros
Operador
Ejemplo
Existencia de hijos
Empleado Salario / Nombre
Valor de los hijos
Empleado Salario gt 25000
Presencia de atributos
Empleado _at_ID
Valor de atributos
Empleado _at_ID 1234
31XML. Introducción
Procesar XML Secuencialmente
- Xpath
- Permite realizar queries sobre un documento XML,
aplicando filtros. - Ej. /Pedido/idarticulo
- Ej. Pedido idarticulo gt "100"
32System.Xml.XPath
- Las clases principales de este espacio de nombres
son - ?? XPathDocument, representa documentos XML que
quieren ser consultados - mediante XPath
- ?? XPathNavigator, provee un mecanismo para
ejecutar consultas XPath - ?? XPathNodeIterator, que representa conjuntos de
nodos generados por - consultas XPath y permite iterar sobre ellos
- ?? XPathNavigator provee 5 métodos para ejecutar
consultas XPath. - ?? Los más importantes son
- ?? Evaluate executa cualquier expresión XPath,
devolviendo un Object que puede - ser un string, un float, un boolean o un
XPathNodeIterator - ?? Select trabaja exclusivamente con expresiones
que devuelven conjuntos de - nodos y es un vehículo ideal para evaluar
location paths. Siempre devuelve un - XPathNodeIterator
- ?? XPathNodeIterator es una clase simple que
puedes utilizar para - iterar por los elementos devueltos en un node
set. La propiedad Count - devuelve cuántos nodos han sido devueltos
- ?? Console.WriteLine ("Select returned 0
nodes", - iterator.Count)
- ?? El método MoveNext te permite iterar por el
conjunto de nodos. Mientras
33XPath
- Ejemplo XPath
- using System
- using System.Xml.XPath
- class MyApp
-
- static void Main ()
-
- XPathDocument doc new XPathDocument
("Guitars.xml") - XPathNavigator nav doc.CreateNavigator ()
- XPathNodeIterator iterator nav.Select
("/Guitars/Guitar") - while (iterator.MoveNext ())
-
- XPathNodeIterator it iterator.Current.Select
("Make") - it.MoveNext ()
- string make it.Current.Value
- it iterator.Current.Select ("Model")
- it.MoveNext ()
- string model it.Current.Value
- Console.WriteLine ("0 1", make, model)
34XslTransForm
- using System
- using System.Xml.XPath
- using System.Xml.Xsl
- class MyApp
-
- static void Main (string args)
-
- if (args.Length lt 2)
- Console.WriteLine ("Syntax TRANSFORM xmldoc
xsldoc") - return
-
- try
- XPathDocument doc new XPathDocument (args0)
- XslTransform xsl new XslTransform ()
- xsl.Load (args1)
- xsl.Transform (doc, null, Console.Out)
-
- catch (Exception ex)
- Console.WriteLine (ex.Message)
35(No Transcript)
36Servicios Web
37Servicios Web XMLLa pila básica de protocolos
Publicar, buscar servicios UDDI
Descripción de servicios WSDL
Interacción de servicios SOAP
Formato de datos universal XML
Comunicaciones ubicuas Internet
38Servicios Web Generación .NET
- XML Web Service Incluye
- Seguridad Basada Mensaje
- Lógica Aplicación (Lógica Servicio)
- XML Data Marshalling
- Administración flujo procesos
- Descubrir Servicios
- UDDI
- DISCO
- WSDL
- WS-Inspection
Contrato
- Interfaces Publicos
- SOAP
- XML
Internet
Message
Desarrolla Solución (Diseño)
Consumir Servicio (Ejecuta)
39SOAPEjemplo
POST /webservice3/service1.asmx HTTP/1.1 Host
localhost Content-Type text/xml
charsetutf-8 Content-Length length SOAPAction
"http//mycompany.com/webservices/Multiplicar" lt?
xml version"1.0" encoding"utf-8"?gt ltsoapEnvelop
e xmlnsxsihttp//www.w3.org/2001/XMLSchema-insta
nce xmlnsxsd"http//www.w3.org/2001/XMLSchema"
xmlnssoap"http//schemas.xmlsoap.org/soap/envel
ope/"gt ltsoapHeadergt lt/soapHeadergt
ltsoapBodygt ltMultiplicar xmlns"http//mycompa
ny.com/webservices/"gt ltn1gt2lt/n1gt
ltn2gt3lt/n2gt lt/Multiplicargt
lt/soapBodygt lt/soapEnvelopegt
HTTP/1.1 200 OK Content-Type text/xml
charsetutf-8 Content-Length length lt?xml
version"1.0" encoding"utf-8"?gt ltsoapEnvelope
xmlnsxsihttp//www.w3.org/2001/XMLSchema-instanc
e xmlnsxsdhttp//www.w3.org/2001/XMLSchema xmlns
soap"http//schemas.xmlsoap.org/soap/envelope/"gt
ltsoapBodygt ltMultiplicarResponse
xmlns"http//mycompany.com/webservices/"gt
ltMultiplicarResultgtintlt/MultiplicarResultgt
lt/MultiplicarResponsegt lt/soapBodygt lt/soapEnvel
opegt
40WSDLEjemplo
lttypesgt ltsschema elementFormDefault"qualifi
ed" targetNamespace"http//mycompany.com/w
ebservices/"gt ltselement name"Multiplicar"gt
ltscomplexTypegt ltssequencegt
ltselement minOccurs"1" maxOccurs"1"
name"n1" type"sint" /gt ltselement
minOccurs"1" maxOccurs"1" name"n2"
type"sint" /gt lt/ssequencegt
lt/scomplexTypegt lt/selementgt
ltselement name"MultiplicarResponse"gt
ltscomplexTypegt ltssequencegt
ltselement minOccurs"1" maxOccurs"1"
name"MultiplicarResult"
type"sint" /gt lt/ssequencegt
lt/scomplexTypegt lt/selementgt
ltselement name"int" type"sint" /gt
lt/sschemagt lt/typesgt
lt?xml version"1.0" encoding"utf-8"?gt ltdefinition
sgt lttypesgt lt/typesgt ltmessagegt
lt/messagegt ltportTypegt lt/portType
ltbindinggt lt/bindinggt ltservicegt
lt/servicegt lt/definitionsgt
ltmessage name"MultiplicarSoapIn"gt ltpart
name"parameters" element"s0Multiplicar" /gt
lt/messagegt ltmessage name"MultiplicarSoapOut"gt
ltpart name"parameters" element"s0Multiplicar
Response" /gt lt/messagegt
ltbinding name"Service1Soap"
type"s0Service1Soap"gt ltsoapbinding
transport"http//schemas.xmlsoap.org/soap/http
style"document" /gt ltoperation
name"Multiplicar"gt ltsoapoperation
soapAction"http//mycompany.com/webservices/Mult
iplicar style"document" /gt
ltinputgt ltsoapbody use"literal" /gt
lt/inputgt ltoutputgt ltsoapbody
use"literal" /gt lt/outputgt
lt/operationgt lt/bindinggt
ltportType name"Service1Soap"gt ltoperation
name"Multiplicar"gt ltinput
message"s0MultiplicarSoapIn" /gt ltoutput
message"s0MultiplicarSoapOut" /gt
lt/operationgt lt/portTypegt
ltservice name"Service1"gt ltport
name"Service1Soap" binding"s0Service1Soap"gt
ltsoapaddress location"http//localhost/webser
vice3/service1.asmx" /gt lt/portgt lt/servicegt
41XML y los servicios web
- Mensajes de invocación/respuesta del servicio
- SOAP - Simple Object Access Protocol
- Descripción del servicio (interfaz)
- WSDL - Web Services Description Language
- Directorio de servicios
- UDDI - Universal Description, Discovery and
Integration
42Por qué los servicios web se basan en
documentos XML?
lt?xml version"1.0" encoding"iso-8859-1"
?gtltSOAP-ENVEnvelope gt ltSOAP-ENVBody
gt ltVerPrecioProducto gt ltcodigogtGRP0112lt/codi
gogt lt/VerPrecioProductogt lt/SOAP-ENVBodygtlt/SOA
P-ENVEnvelopegt
Llamada a un servicio web(SOAP)
lt?xml version"1.0" encoding"iso-8859-1"
?gtltSOAP-ENVEnvelope gt ltSOAP-ENVBody
gt ltVerPrecioProductoRespuesta gt ltprecio
divisaeurogt62800lt/preciogt lt/VerPrecioProducto
Respuestagt lt/SOAP-ENVBodygtlt/SOAP-ENVEnvelopegt
Respuesta del servicio(SOAP)