1.21k likes | 1.34k Views
XML, Distribución y Componentes Tema 1 – Procesamiento XML en .NET http://paginaspersonales.deusto.es/dipina/MasterISW/. Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.es/dipina (Personal) http://www.morelab.deusto.es (Research Group)
E N D
XML, Distribución y ComponentesTema 1 – Procesamiento XML en .NEThttp://paginaspersonales.deusto.es/dipina/MasterISW/ Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.es/dipina (Personal) http://www.morelab.deusto.es (Research Group) http://www.smartlab.deusto.es (Research Lab) http://www.ctme.deusto.es (Cátedra de Telefónica Móviles) http://www.tecnologico.deusto.es (Tecnológico-Fundación Deusto)
Temario • Procesamiento XML en .NET (21 y 22 Febrero) • Estándar .NET [XML.NET] • Soporte XML [XML-SAX, XML-DOM, Validación] • XSL [XPath, XSLT, Scripts, Objetos de extensión] • Aplicaciones distribuidas (23 Febrero, 5 Marzo) • XML/SOAP • .NET Remoting • Mensajería • Componentes .NET (6 y 7 Marzo) • Metadatos y Reflexion • Componentes .NET y Enterprise Services • Complementos • Interoperabilidad COM y P/Invoke • COM+ y MTS • MSMQ (colas de mensajes) • Microsoft Communication Foundation (Indigo)
Contenidos Parte XML • XML • DTD • Schema • XML Parsing • SAX API • DOM API • XSLT • XSLT Scripts • XSLT Object Extensions
¿Qué es XML? • eXtensible Mark-up Language. • Es un metalenguaje que permite diseñar otros lenguajes (WML, MathML, XHTML,..). • Cualquiera puede desarrollar su propio lenguaje de etiquetas adecuado al tipo de aplicación que más le convenga. • En realidad hay muchas tecnologías basadas en XML (XPath, XLink, XPointer, XSL, ...). • XML 1.0 Specificationhttp://www.w3.org/TR/REC-xml
HTML y XML • 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 una aplicación de XML
XML describe estructura y semántica <?xml version=”1.0”> <!DOCTYPE comedor SYSTEM “comedor.dtd”> <comedor> <fabricante>Ipiña Altzariak</fabricante> <mesa tipo="redonda" madera="arce"> <precio>€400</precio> </mesa> <silla madera="arce"> <cantidad>2</cantidad> <calidad>excelente</calidad> <cojin incluido="sí"> <color>azul</color> </cojin> <precio>€200</precio> </silla> </comedor>
HTML describe formato <html> <head><title>Comedor</title></head> <body> <h1>Comedor</h1> <p>Fabricante: Ipiña Altzariak</p> <ul> <li><b>Mesa redonda de madera de arce</b></li> <li><b>Dos sillas de madera de arce</b>, de excelente calidad, con un cojín azul cada una.</li> <li><b>3 sillas de madera de roble</b>.</li> </ul> </body> </html>
Ventajas XML • Una de las mayores utilidades de XML es poder etiquetar los datos con su significado (self-describing data). • Permite la estructuración de la información. • Ello lleva el tratamiento automático de la información a límites insospechados. • XML es la base de la nueva generación de aplicaciones web intercambio de datos
Usos XML • Sitios web • Permite separar contenido y presentación • Comunicación <-> intercambio datos • Servicios web • Como configuración de programas • Deployment descriptos en servidores J2EE • Ant make system
Componentes documento XML • Los documentos XML constan de: • Instrucciones de procesamiento (processing instructions – PI) • Declaraciones de tipo de documento • Comentarios • Elementos • Referencias a entidades • Secciones CDATA
Instrucciones de procesamiento • Las PI son instrucciones para el procesador del documento XML. • Siempre hay al menos una PI, que pertenece al prólogo del documento: <?xml version="1.0"?> <saludo> Hola, mundo! </saludo> • Algunos navegadores interpretan la siguiente instrucción de procesamiento para indicar que el documento debería ser procesado mediante una hoja de estilo Guitars.xsl antes de ser visualizado: <?xml-stylesheet type="text/xsl" href="Guitars.xsl"?>
Comentarios en XML • Los comentarios no se procesan. • Tienen la siguiente sintaxis: <!-- Esto es un comentario -->
Elementos y atributos en XML • Los elementos son los que aportan estructura semántica al documento. • Se delimitan por etiquetas de apertura, cierre y etiquetas sin elementos interiores (etiquetas vacías). • Las etiquetas de apertura y las vacías suelen venir acompañadas de atributos, que parametrizan el elemento. • El valor de los atributos siempre se encierra entre comillas, dobles o simples. <saludo tipo="coloquial">Hola</saludo>
Elementos vs. Atributos • Demasiados atributos hacen que los documentos XML se puedan leer difícilmente. • No se puede indicar estructura de documento mediante atributos <CUSTOMER LAST_NAME="Smith" FIRST_NAME="Sam" DATE="October 15, 2001" PURCHASE="Tomatoes" PRICE=“€1.25" NUMBER="8" />
Elementos vs. Atributos (cont) <CUSTOMER> <NAME> <LAST_NAME>Smith</LAST_NAME> <FIRST_NAME>Sam</FIRST_NAME> </NAME> <DATE>October 15, 2001</DATE> <ORDERS> <ITEM> <PRODUCT>Tomatoes</PRODUCT> <NUMBER>8</NUMBER> <PRICE>$1.25</PRICE> </ITEM> </ORDERS> </CUSTOMER>
Referencias a entidades • Las referencias a entidades sirven para insertar un determinado contenido definido previamente. <!ENTITY Empresa “Universidad de Deusto”> <pie>Creado por &Empresa;</pie>
Códigos de escape • Existen 5 referencias a entidades predefinidas: • & el carácter & • < el carácter < • > el carácter > • ' el carácter ' • " el caracter " • Se incluyen los caracteres del juego ISO 10646. • ‘ • ⼱
Secciones CDATA • Las secciones CDATA (character data) contienen texto que no debe ser procesado. • Se tratan como una secuencia de caracteres sin estructura. <![CDATA[<saludo>Hola, mundo!</saludo>]]>
Gramáticas en XML • La gramática que restringe los elementos válidos dentro de un nuevo derivado de XML puede expresarse en forma de: • DTD (Document Type Definitions) o • Esquemas XML
Document Type Definitions (DTDs) • Especifican la estructura y sintaxis de un documento XML • Labgroups.dtd <!ELEMENT lab_group (student_name)*> <!ELEMENT student_name (#PCDATA)> <!ATTLIST student_name dni ID #REQUIRED tutor IDREF #IMPLIED>
Document Type Definitions (cont) <?xml version="1.0"?> <!DOCTYPE mensaje SYSTEM “labgroups.dtd"> <lab_group> <student_name dni=“44670523"> Josu Artaza </student_name> <student_name dni=“44543211"> Nuria Buruaga </student_name> <student_name dni=“23554521" tutor=“33456211"> Inga Dorsman </student_name> </lab_group>
XML Schemas • Los DTD no son muy potentes para definir gramáticas. • Otra forma de hacerlo es con Esquemas XML basados en el propio XML y que soporta más tipos de datos.
Ejemplo Schema • DTD : <!ELEMENT text (#PCDATA | emph | name)*> <!ATTLIST text timestamp NMTOKEN #REQUIRED> • XML Schema: <xsd:element name="text"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="emph"/> <xsd:element ref="name"/> </xsd:sequence> <xsd:attribute name="timestamp" type="xsd:date" use="required"/> </xsd:complexType> </xsd:element>
Ejemplo Schema (cont) • XML Document: <?xml version="1.0"?> <text timestamp="08:45:00.000">The deadline of <name>Distributed.NET assigment</name> is <emph>December 22nd 2005</emph>. </text>
What is an XML Schema? • Extraído de: http://www.w3schools.com/schema/default.asp • The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD. • An XML Schema: • defines elements that can appear in a document • defines attributes that can appear in a document • defines which elements are child elements • defines the order of child elements • defines the number of child elements • defines whether an element is empty or can include text • defines data types for elements and attributes • defines default and fixed values for elements and attributes
XML Schemas are the Successors of DTDs • We think that very soon XML Schemas will be used in most Web applications as a replacement for DTDs. Here are some reasons: • XML Schemas are extensible to future additions • XML Schemas are richer and more powerful than DTDs • XML Schemas are written in XML • XML Schemas support data types • XML Schemas support namespaces
Ejemplo XML y DTD • Ejemplo XML: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd/note.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • Ejemplo DTD: <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
Ejemplo XML y Schema • Ejemplo XML: <?xml version="1.0"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • Ejemplo DTD: <?xml version="1.0"?> <xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema targetNamespace=http://www.w3schools.com xmlns=http://www.w3schools.com elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Elementos Simples <xs:element name="xxx" type="yyy"/> • donde xxx es el nombre del elemento e yyy el tipo, siendo los más comunes: • xs:string • xs:decimal • xs:integer • xs:boolean • xs:date • xs:time • Ejemplos: <lastname>Refsnes</lastname> <age>36</age> <dateborn>1970-03-27</dateborn>
Atributos y Restricciones en Elementos • Ejemplo atributos: <lastname lang="EN">Smith</lastname> <xs:attribute name="lang" type="xs:string"/> • Ejemplo restricciones sobre un elemento: <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element>
XML bien formado y/o XML válido • Hay dos tipos de documentos XML: • Bien formados: son aquellos que cumplen las reglas sintácticas de XML • Válidos: son aquellos que, además de ser bien formados, siguen las reglas de una gramática (definida en un DTD o XML Schema)
Reglas para que un documento esté bien formado • Para que un documento esté bien formado: • Debe tener un prólogo • Debe tener una etiqueta raíz • Las etiquetas se hallan correctamente anidadas • Se usan caracteres válidos y bien aplicados • Los valores de los atributos vienen encerrados entre comillas • ...
Reglas para que un documento sea válido • Para que un documento sea válido debe declarar el DTD o XML Schema contra el cual debe validarse. • Se hace mediante DOCTYPE, pudiendo ser los DTD públicos o de sistema. <!DOCTYPE saludo SYSTEM “saludo.dtd”> <!DOCTYPE saludo PUBLIC “-//Saludos//DTD Lenguaje de saludos//ES” “http://www.deusto.es/dtds/saludo.dtd”> • También se puede insertar el DTD entero en ese punto, en lugar de referenciar al fichero.
XML Namespaces • El estándar XML también define los espacios de nombres (XML Namespaces). • Permiten que un mismo documento XML tenga etiquetas de diferentes lenguajes (definidas en diferentes gramáticas DTD). • Así es posible mezclar más información en los documentos, por ejemplo, añadir información semántica a un documento XHTML.
Ejemplo XML Namespaces <?xml version="1.0"?> <!DOCTYPE mensaje SYSTEM "mensaje.dtd"> <mensaje> <remite> <dir:direccion xmlns:dir=“http://www.deusto.es/direccion”> <dir:calle>Avda. Universidades</dir:calle> <dir:localidad cp=“40007”>Bilbao</dir:localidad> </dir:direccion> <nombre>Diego Ipiña</nombre> <email>dipina@eside.deusto.es</email> </remite> <!-- Resto del mensaje XML... --> </mensaje>
Lenguajes basados en XML • Chemical Markup Language (CML) • Mathematical Markup Language (MathML) • Channel Definition Format (CDF) • Synchronized Multimedia Integration Language (SMIL) • XHTML • Scalable Vector Graphics (SVG) • SOAP y WSDL • VoiceML • Wireless Markup Language (WML) • RSS (Rich Site Summary)
Herramientas de XML • Editores • http://www.xmlcooktop.com/ gratis • XML Spy, www.xmlspy.com • XML parsers • Lee un documento XML • Verifica que XML está bien formado • Verifican que XML es válido • expat, parser written in C by James Clark (www.jclark.com) • Lark, written in Java (www.textuality.com/Lark/) • Apache Jakarta Xerces (www.apache.org) • .NET FCL System.Xml • XML Validators • Verifican que XML es válido • XML.com's Validator based on Lark (xml.com)
¿Por qué usar XML? • Un documento XML puede ser fácilmente procesado y sus datos manipulados • Existen APIs para procesar esos documentos en Java, C, C#, C++, Perl.. (y por supuesto Python) • XML define datos portables al igual que Java define código portable
XML Parsing (cont) • SAX • Define interfaz dirigido por eventos (event-driven) para el procesamiento de un documento XML • Definido por David Megginson y lista correo XML-DEV: http://www.megginson.com/SAX • DOM • Provee una representación de un documento XML en forma de un árbol • Carga todo el documento XML en memoria • http://www.w3.org/DOM
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.
System.XML • Este espacio de nombres comprende todas las clases necesarias para manejar documentos XML. • Permite leer o parsear un documento, así como escribir un documento XML. • Para ello necesitaremos conocer previamente la estructura de un documento XML.
System.XML • Este espacio de nombres provee soporte para los estándares de procesamiento XML: • XML 1.0 - http://www.w3.org/TR/1998/REC-xml-19980210 - including DTD support. • XML Namespaces - http://www.w3.org/TR/REC-xml-names/ - both stream level and DOM. • XSD Schemas - http://www.w3.org/2001/XMLSchema • XPath expressions - http://www.w3.org/TR/xpath • XSLT transformations - http://www.w3.org/TR/xslt • DOM Level 1 Core - http://www.w3.org/TR/REC-DOM-Level-1/ • DOM Level 2 Core - http://www.w3.org/TR/DOM-Level-2/
Un poco de XML • Lenguaje mundial de facto para intercambio de datos • XML no tiene tanto éxito porque es un gran lenguaje, sino porque las herramientas disponibles para leer, escribir y manipular XML son muy comunes • Casi todos los parseadores de XML implementan una de dos APIs: • DOM: lee un documento en memoria y lo carga en un árbol • SAX: API basada en eventos
Ejemplo DOM en .NET <?xml version=“1.0”?> <Guitars> <Guitar Image=“MySG.jpeg”> <Make>Gibson</Make> <Model>SG</Model> <Year>1977</Year> <Color>Tobacco Sunburst</Color> <Neck>Rosewood</Neck> </Guitar> <Guitar Image=“MyStrat.jpeg”> <Make>Fender</Make> <Model>Stratocaster</Model> <Year>1990</Year> <Color>Black</Color> <Neck>Maple</Neck> </Guitar> </Guitars>
Ejemplo DOM en .NET 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"].InnerText, node["Model"].InnerText); } } }
XmlDocument • Interfaz programática para documentos XML que conforman con la especificación DOM • Método Load(nombre-doc) procesa el documento y construye un árbol del mismo • Una llamada exitosa es normalmente seguida de invocación a propiedad DocumentElement • Para saber si tiene hijos usar propiedad HasChildNodes • Propiedad ChildNodes devuelve los hijos de un nodo • Todo hijo es un XMLNode que puede ser del tipo Element, Text, Attribute, etc.
XmlTextReader • Frente al estándar SAX, .NET ofrece XmlTextReader • Está basado en streams como SAX y es por tanto más eficiente con el uso de memoria que DOM • Usa un mecanismo pull para examinar XML en vez de push como SAX
Ejemplo XmlTextReader I • Lee un fichero XML y visualiza todos sus nodos <?xml version="1.0"?> <!-- This is a sample XML document --> <!DOCTYPE Items [<!ENTITY number "123">]> <Items> <Item>Test with an entity: &number;</Item> <Item>test with a child element <more/> stuff</Item> <Item>test with a CDATA section <![CDATA[<456>]]> def</Item> <Item>Test with an char entity: A</Item> <!-- Fourteen chars in this element.--> <Item>1234567890ABCD</Item> </Items>