Tecnologías Web Integración de Sistemas Diseño e implementación con.net XML Sintaxis y estructura: well-formed xml <?xml version="1.0"?> <bookstore> <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> <title>the Autobiography of Benjamin Franklin</title> <author> <first-name>benjamin</first-name> <last-name>franklin</last-name> </author> <price>8.99</price> </book> <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2"> <title>the Confidence Man</title> <author> <first-name>herman</first-name> <last-name>melville</last-name> </author> <price>11.99</price> </book> </bookstore> 1
XML Introducción a los esquemas Define la sintaxis del documento Tipos de datos Valores permitidos Tipos de esquemas DTD (Document Type Definitions) No escritos en XML No soportan tipos de datos XSD (XML Schema Definition) Escritos en XML Proporcionan soporte para tipo de datos Actualmente recomendado como estándar W3C XML Introducción a los esquemas XML válido Documento xml construido conforme a las reglas especificadas en un esquema Más restrictivo que un xml well-formed Esquema define Qué elementos están presentes y en qué orden Qué atributos están presentes y en qué orden Restricciones sobre valores 2
XML Introducción a los esquemas: DTD XML document: <CATALOG> <BOOK isbn="34-2343-3434"> <TITLE>All About XML</TITLE> <AUTHOR>John N. Shawn</AUTHOR> </BOOK> </CATALOG> DTD schema: <!ELEMENT CATALOG (BOOK+)> <!ELEMENT BOOK (TITLE, AUTHOR) > <!ATTLIST BOOK ISBN CDATA REQUIRED > <!ELEMENT TITLE (#PCDATA) > <!ELEMENT AUTHOR (#PCDATA) > XML Introducción a los esquemas: XSD <xsd:schema targetnamespace="http://tempuri.org/schema1.xsd" xmlns="http://tempuri.org/schema1.xsd" xmlns:xsd="http://www.w3.org/1999/xmlschema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="book"> <xsd:attribute name="isbn" type="xs:string" /> <xsd:complextype content="elementonly"> <xsd:all> <xsd:element name="title" minoccurs="0" type="xsd:string"/> <xsd:element name="author" minoccurs="0" type="xsd:string"/> </xsd:all> </xsd:complextype> </xsd:element> <xsd:element name="catalog"> <xsd:complextype> <xsd:choice maxoccurs="unbounded"> <xsd:element ref="book"/> </xsd:choice> </xsd:complextype> </xsd:element> </xsd:schema> 3
Acceso a recursos xml StreamReader El recurso XML se procesa como un fichero de texto t plano XmlReader Diseñado específicamente para recursos XML Proporciona propiedades p y eventos específicos XmlDocument Representación de un documento XML Válido para aplicar transformaciones xslt Acceso directo a recursos remotos System.Net.HttpWebRequest Implementa la clase abstracta WebRequest Encapsula una petición HTTP Métodos principales GetResponse(): WebResponse Obtiene la respuesta proporcionada por el servidor GetRequestStream(): Stream Obtiene un Stream para escribir los datos de la petición Propiedades principales RequestURI Obtiene la URI que originó la petición ProtocolVersion Versión del protocolo HTTP empleada en la petición Headers Colección de los encabezados HTTP de la petición 4
Acceso directo a recursos remotos System.Net.HttpWebResponse Implementa la clase abstracta WebRequest Encapsula una respuesta HTTP Objetos HttpWebResponse no deberían crearse directamente Crearlos por medio de una llamada a WebRequest.GetResponse() Acceso directo a recursos remotos System.Net.HttpWebResponse Métodos principales GetResponseHeader(string headername): string Obtiene el valor de las cabeceras HTTP devueltas con la response GetResponseStream(): Stream Obtiene un Stream para la lectura del cuerpo de la respuesta Propiedades principales ProtocolVersion Versión del protocolo HTTP de la respuesta StatusCode Obtiene el estado de la respuesta Headers Colección de los encabezados HTTP de la respuesta 5
Acceso directo a recursos remotos Ejemplo public void GetResourceAsString(string uristring) { } string result = ""; // Create the web request to a Uniform Resource Identifier (URI) Uri addressuri = new Uri(uriString); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(addressURI); // Get response from the specified resource in the request HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Get the response stream to read the body response from server StreamReader reader = new StreamReader(response.GetResponseStream()); // Read the whole contents and return it as a string result = reader.readtoend(); Console.WriteLine(result); XML XmlReader Clase abstracta que proporciona acesso a datos XML forward-onlyonly read-only Lectura datos XML en profundidad (top-down) Acceso en el mismo orden en el que los datos se definen en el fichero XML Análago al trabajo con objetos DataReader en acceso a Base de Datos 6
XML XmlReader Métodos principales XmlReader.Create() Instancia una clase concreta de XmlReader Configurable mediante objeto XmlReaderSettings XmlReader.Read() Avanza posición cursor al siguiente elemento XML XmlReader Propiedades principales Name Nombre del nodo que se está procesando Value Valor del nodo que se está procesando NodeType Tipo de nodo que se está procesando Enumeración: XmlNodeType.Element, XmlNodeType.EndElement, XmlNodeType.Text Procesado de atributos HasAttributes MoveToNextAttribute 7
XML Acceso a recursos XML mediante XmlReader // XmlReader Configuration XmlReaderSettings settings = new XmlReaderSettings(); settings.ignorewhitespace = true; settings.ignorecomments = false; // Retrieve XML document from URI XmlReader xmlreader = XmlReader.Create(uriString, settings); // Read nodes one at a time and process it while (xmlreader.read()) { switch (xmlreader.nodetype) { case XmlNodeType.Element: // Display beginning of element and attributes if exist Console.Write("<{0}", xmlreader.name); XML Acceso a recursos XML mediante XmlReader if (xmlreader.hasattributes) while (xmlreader.movetonextattribute()) Console.Write(" {0}='{1}'", xmlreader.name, xmlreader.value); Console.WriteLine(">"); break; case XmlNodeType.Text: // Display the text in each element. Console.WriteLine(xmlReader.Value); break; case XmlNodeType.EndElement: } // switch } // while // Display end of element Console.WriteLine("</{0}>", xmlreader.name); break; 8
XML XmlDocument Implementación de las especificaciones de nivel 1 y 2 del W3C XML Document Object Model (DOM) Representa documentos XML como objetos Todos los nodos son accesibles en cualquier momento Proporciona métodos para cambiar, insertar o eliminar nodos Análago al trabajo con objetos DataAdapter/DataSet en acceso a Base de Datos XML XmlDocument Métodos principales Load(Stream instream): void Sobrecargado: puede recibir un instream: Stream, filename: string, txtreader: TextReader o reader: XmlReader // Create a new XmlDocument XmlDocument xmldocument = new XmlDocument(); // Load data doc.load(uristring); CreateElement(string t( t name): XmlElement XmlElement xmlelement = xmldoc.createelement("newelementname"); XmlText textelement = xmldoc.createtextnode("newelementvalue"); //Adds the element within root node xmldoc.documentelement.appendchild(xmlelement); xmldoc.lastchild.appendchild(textelement); 9
XML XmlDocument Métodos principales CreateAttribute(string name): XmlAttribute XmlAttribute xmlattribute = xmldocument.createattribute("newattribute"); xmlattribute.value = "newattributevalue"; //Add the new attibutte to the root document. xmldoc.documentelement.setattributenode(xmlattribute); XML XmlDocument: navegación por los nodos XPathNavigator Permite seleccionar un subconjunto a partir de una expresión XPath XmlDocument doc = new XmlDocument(); doc.load("file.xml"); XPathNavigator navigator = doc.createnavigator(); XPathNodeIterator iterator = navigator.select(xpathexpression); while (iterator.movenext ()) { // process selection here with iter.current.value } Permite aplicar una operación a un subconjutno de nodos navigator.evaluate("max(//critic/@points)")); 10
XML Acceso a través del objeto XmlDocument public void AccessByXmlDocument(string url, string xpathexpression) { } // Create a new XmlDocument XmlDocument doc = new XmlDocument(); // Load data doc.load(url); // Get data with XPath XPathNavigator nav = doc.createnavigator(); XPathNodeIterator iterator = nav.select(xpathexpression); // Show results while (iterator.movenext()) Console.WriteLine("Value: " + iterator.current.value); Ejemplo de Uso: AccessByXmlDocument(url,"//movies/movie/@title"); XML Transformaciones xslt Fichero.aspx <asp:xml ID="aspXML" runat="server"></asp:xml> CodeBehind // Option A : Setup the asp:xml component with local resources aspxml.transformsource = Server.MapPath("Movies.xsl"); aspxml.documentsource = Server.MapPath("Movies.xml"); Movies.xml // Option B : Setup the asp:xml component with remote xml aspxml.transformsource = Server.MapPath("Movies.xsl"); XmlDocument xmldoc = new XmlDocument(); xmldoc.load(url); aspxml.document = xmldoc; 11
XML Transformaciones XML: estándar para la transmisión de datos a través de Internet Existe la posibilidad de que distintos servicios empleen esquemas o DTDs diferentes El sistema debe permitir la transformación de los datos XML XSLT (extensible Stylesheet Language Transformations) Describe un lenguaje basado en XML para transformar documentos XML a cualquier otro formato Normalmente se empleará para transformar documentos entre esquemas XML que permitan su procesamiento por distintos sistemas También es ampliamente utilizado para transformar documentos XML en HTML, WML, o cualquier otro formato que facilite su presentación XSL Componentes XSL (extensible Stylesheet Language) Conjunto de recomendaciones para la definición del formato de presentación y transformación de documentos XML. Componentes XSL Transformations (XSLT) Lenguaje para la transformación de documentos XML XML Path Language (XPath) Especificación empleada en XSLT para especificar las partes de un documento XML a las que se aplican las transformaciones XSL Formatting Objects (XSL-FO) Vocabulario XML para especificar la semántica de las transformaciones (caracter, tabla, etc.) Más información en: http://www.w3.org/style/xsl/ 12
Transformaciones XSL Especificación original para XSL: Lenguaje para la expresión de hojas de estilos (stylesheets) Permite la especificación de Estilos Layout Paginación Funcionamiento básico consiste en la transformación de un árbol XML en otro diferente Contiene operadores para la selección de nodos, reordenamiento de nodos, etc. Transformaciones XSL Estructura Una hoja de estilo XSLT es un documento XML bien formado Generalmente con extensión xsl (o xslt) Deben comenzar con una declaración XML: <?xml version="1.0"?> El elemento raíz de la hoja de estilo XSLT es <xsl:stylesheet> Este elemento contendrá a todos los demás, y debe ir precedido por el alias xsl correspondiente al espacio de nombres para hojas de estilo XSLT. Una plantilla xsl está formada por una lista de reglas Contienen un patrón indicando la parte del árbol XML a la que se aplica Contienen una plantilla que produce la salida cuando se cumple el patrón 13
Transformaciones XSL Estructura Plantillas Controlan la salida originada desde cada entrada Representadas por un elemento xsl:template Atributo match especifica un patrón (expresión Xpath) que identifica las entradas a las que se aplica la plantilla Patrón más sencillo es el nombre de un elemento (e.g. BOOK) Ejemplo (Books.xsl): <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="book">book Matched<br/></xsl:template> </xsl:stylesheet> Transformaciones XSL Modo de funcionamiento Pasos seguidos por el procesador XSL para formatear un documento XML Escaneo del documento buscando cada subárbol Comparación de cada subárbol con los patrones especificados en las plantillas Ante una coincidencia, se aplica la regla indicada por la plantilla Ante una coincidencia, se aplica la regla indicada por la plantilla Generalmente incluye nuevos datos o modificación de los datos XML originales 14
Transformaciones XSL Modo de funcionamiento: regla inicial La regla <xsl:template match="/"> se ejecuta cuando se encuentra el elemento raíz del documento XML Dentro de esta regla, se incluyen llamadas a otras reglas definidas en la hoja de estilo <xsl:apply-templates select=" " /> El atributo select tomará como valor el nombre del elemento asociado a la regla que se quiere ejecutar Permite control sobre el orden de ejecución de las reglas Si el atributo select ect no oseespec especifica, ca, las reglas egasseapse aplicarán caá en el orden en que se encuentren elementos coincidentes durante el acceso al árbol XML Transformaciones XSL Modo de funcionamiento. Ejemplo <?xml version="1.0"?> <bookstore> <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> <title>the Autobiography of Benjamin Franklin</title> <author> <first-name>benjamin</first-name> <last-name>franklin</last-name> </author> <price>8.99</price> </book> </bookstore> <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> Fichero XML Hoja de estilos XSLT <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="book"> <p>book matched</p> </xsl:template> </xsl:stylesheet> <?xml version="1.0" encoding="utf-8"?> Resultado <p>book Matched</p> 15
Transformaciones XSL Elemento <xsl:value-of...> Obtiene el valor de un elemento Texto incluido en el elemento una vez las etiquetas han sido eliminadas Atributo select indica mediante una expresión XPath el elemento seleccionado <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:apply-templates l l t /> </xsl:template> <xsl:template match="book"> <p> <xsl:value-of select="title"/> </p> </xsl:template> </xsl:stylesheet> <?xml version="1.0" encoding="utf-8"?> <p>the Autobiography of Benjamin Franklin</p> Transformaciones XSL Aplicación de reglas <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="bookstore"> <html> <head> <title>bookstore</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="book"> <p> <xsl:value-of select="title"/> </p> <xsl:apply-templates select="author"/> </xsl:template> <xsl:template match="author"> <p> <xsl:value-of select="last-name"/>, <xsl:value-of select="first-name"/> </p> </xsl:template> <html> <head> <title>bookstore</title> </head> <body> <p>the Autobiography of Benjamin Franklin</p> <p>franklin, Benjamin</p> </body> </html> </xsl:stylesheet> 16
Transformaciones XSL Aplicación de reglas condicionada: <xsl:if...> <xsl:if> Aplicación de la regla depende de la evaluación del parámetro test No existe apartado else <xsl:template match="book"> <xsl:if test="price<10"> <p> <xsl:value-of select="title"/> </p> </xsl:if> </xsl:template> Transformaciones XSL <xsl:choose>, <xsl:when>, <xsl:otherwise> Amplían las posibilidades del elemento <xsl:if> Permiten indicar qué transformación se debe realizar en el caso de que se cumpla una condición, y en el resto de casos Se utilizan de forma conjunta El elemento xsl:choose contendrá uno o más elementos xsl:when y un elemento xsl:otherwise El elemento xsl:when incluye un atributo test que tomará como valor la expresión que se evaluará Si se cumple, se ejecutará el código escrito entre las etiquetas de inicio y de fin del elemento xsl:when El elemento xsl:otherwise contendrá el código que se ejecutará si no se cumplen las expresiones indicadas en los atributos test de los elementos xsl:when 17
Transformaciones XSL <xsl:choose>, <xsl:when>, <xsl:otherwise> <xsl:choose> <xsl:when test="boolean-expression1"> <!-- template actions="" --> </xsl:when> <xsl:when test="boolean-expression1"> <!-- template actions="" --> </xsl:when> <xsl:otherwise> <!-- template actions="" --> </xsl:otherwise> </xsl:choose> Transformaciones XSL <xsl:element>, <xsl:attribute> <xsl:element> Se utiliza para crear elementos en el documento resultado de la transformación. Es especialmente útil cuando se utiliza XSLT para transformar un documento XML en otro con una estructura diferente (ej. HTML) Irá acompañado por un atributo name Tomará como valor el nombre del elemento que se va a crear <xsl:attribute> Permite crear un atributo en el documento de salida Irá acompañado por un atributo name <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="url"/> </xsl:attribute> <xsl:value-of select="title"/> </xsl:element> <a href="url_value">title value</a> 18
XPath Lenguaje empleado para la selección de elementos Nodos por posición absoluta Nodos por posición relativa Contenido Sintaxis diferente a XML XSLT emplea expresiones XPath para la selección de elementos y mapeo de patrones en el documento de entrada Proporciona una ruta que especifica un conjunto de nodos de salida Soporta operaciones de comparación, lógicas, etc. XPath Una ruta devuelve siempre una secuencia de nodos En el mismo orden en el que se encuentran en el documento original Una ruta consiste en una serie de pasos, separados por / Puede representar Rutas absolutas: /bookstore/movie/director Rutas relativas: movie/director Elementos que forman parte de una ruta / : selecciona el hijo inmediatamente inferior Al inicio del patrón indica la raíz del documento XML //element : selecciona elementos de tipo element en cualquier nivel. : representa el elemento actual.. : representa el padre del nodo actual @ : se emplea para el acceso a los atributos (@attributename) /element[n] : accede al n-ésimo atributo del elemento element 19
XPath Ejemplos./author Busca todos los elementos de tipo author dentro del contexto actual /bookstore //author Busca el elemento bookstore a partir de la raíz Busca todos los elementos author, independientemente de su posición en el documento /book[@type = "novel"] Busca los elementos book en los que el atributo t type tome el valor novel /book[@style = /bookstore/@specialty] Busca todos los elementos book para los que el atributo style sea coincidente con el atributo specialty del elemento bookstore de la raíz del documento 20