1
Tecnologías Web
Integración de SistemasDiseño e implementación con .NET
Índice de contenidos
Internacionalización
Recursos XML
Model View ControllerPage Controller
Front Controller
2
Internacionalización en ASP.NET 2.0Localización, Internacionalización y Globalización
Definiciones según la LISA (Localization Industry StandardsAssociation, www.lisa.org):
Localización (L10N): proceso que consiste en adaptar un producto para adecuarlo a las necesidades lingüísticas y culturales del país, región o idioma donde se pretenderá comercializar y usar
Traducción de la IU, mensajes de error, documentación, ayuda, etc.
Internacionalización (I18N): es el proceso de diseñar un producto de forma genérica para facilitar el proceso de localización sin necesidad de modificar el componente central
Separar desde un principio el código fuente de la información sobre el idioma y las peculiaridades culturales
Globalización (G11N): consiste en el estudio de los aspectos de mercado que afectan a la comercialización internacional de un producto. Incluye las fases de internacionalización y localización
Marketing, ventas, soporte, etc.
System
System.Data System.Xml
System.Web
GlobalizationDiagnostics
ConfigurationCollections
ResourcesReflection
NetIO
ThreadingText
ServiceProcessSecurity
DesignADO
SQLTypesSQL
XPathXSLT
RuntimeInteropServices
RemotingSerialization
Serialization
Configuration SessionStateCaching Security
ServicesDescriptionDiscoveryProtocols
UIHtmlControlsWebControls
System.Drawing
ImagingDrawing2D
TextPrinting
System.WinFormsDesign ComponentModel
Internacionalización en ASP.NET 2.0.NET Framework Namespace
3
Internacionalización en ASP.NET 2.0Soporte Unicode
El Framework .NET utiliza Unicode como formato de representación de caracteres
En general utiliza UTF-16 (Unicode Transformation Format, 16 bits)
En algunos casos, utiliza UTF-8 internamente
Internacionalización en ASP.NET 2.0El espacio de nombres System.Globalization
Soporte para Globalización de .NET
Contiene clases que definen información relativa a:Idioma (e.g. castellano vs inglés)
País o región (e.g. España vs México)
Calendarios utilizados (e.g. gregoriano)
Modelos de formato para las fechas (e.g. yy/mm/dd vs. dd/mm/yy)
Formato numérico (e.g. 12,000.00 vs 12.000,00)
Moneda (e.g. €)
Etc.
4
Internacionalización en ASP.NET 2.0Estándares y tipos de culturas
Los nombres de culturas siguen el estándar RFC 1766Formato: <codigoidioma2>-<pais/codigoregion2> (e.g. de-DE)
<codigoidioma2>: código de 2 letras minúsculas (ISO 639-1)<pais/codigoregion2>: código de 2 letras mayúsculas (ISO 3166)
La cultura invarianteRaíz de todas las demás culturasÚtil para casos en los que sea necesariorepresentar información de forma independientede culturas específicas (e.g. almacenamientode datos que no se mostrarán directamenteal usuario final)
La cultura neutralIndica el idioma, pero no el país o región (e.g. en)
La cultura específicaIndica tanto el idioma como el país o región(e.g. en-US)
invariante
de
de-AT
de-CH
de-DE
de-LI
de-LU
en
Internacionalización en ASP.NET 2.0La clase System.Globalization.CultureInfo
Proporciona información sobre una cultura concreta (e.g. sistema de escritura, calendario utilizado, etc.)
Acceso a objetos específicos de la cultura, queproporcionan métodos para operaciones comunes (e.g. formateo de fechas)
5
Internacionalización en ASP.NET 2.0La clase System.Globalization.CultureInfo
Propiedades CurrentCulture y CurrentUICultureIdentifican el idioma y la referencia cultural (país o región) de la aplicación (e.g. en-US)
CurrentCulture
Determina los resultados de las funciones que dependen del país o región, como el formato de fecha, número y moneda, etc.Su valor deben ser referencias culturales concretas (e.g. en-US)
CurrentUICulture
Determina el idioma de las cadenas de texto de la IUSu valor puede ser únicamente el código de idioma (e.g. en)
Pueden adoptar valores diferentes
Internacionalización en ASP.NET 2.0Archivos de recursos
Almacenan los diferentes recursos (cadenas de texto, rutas a imágenes, etc.) que se utilizarán en la aplicación según las preferencias de idioma y referencia culturalArchivos XML con extensión .resxPares clave-valor (se puede añadir un comentario)En los nombres de clave no se distingue entre mayúsculas y minúsculasUn archivo diferente por idioma (e.g. en) o por idioma y referencia cultural (e.g. en-GB, en-US)En ASP.NET es posible crear archivos de recursos de diferente ámbito: locales y globales
6
Internacionalización en ASP.NET 2.0Archivos de recursos locales
Archivos de recursos localesOrientados a almacenar recursos de páginas específicas Se almacenan en la(s) carpeta(s) App_LocalResources, que puede(n) existir en cualquier carpeta de la aplicaciónFormato: <NombreWebForm>.aspx.<codigoCultura>.resx
Si no se especifica <codigoCultura>, archivo de recursos por defecto
Ejemplo: el nombre del archivo de recursos locales asociado a una página Page.aspx para la cultura inglés-EE.UU. sería Page.aspx.en-US.resx
Internacionalización en ASP.NET 2.0Creación de archivos de recursos locales
Dos formas de crear archivos de recursos localesAutomática: desde la vista de diseño de un WebForm
Menú Tools > Generate Local Resource (Crea la carpeta App_LocalResources con el archivo de recursos por defecto para el WebForm)
Manual: desde el Solution Explorer, en cualquier carpeta de la aplicación
Creación de la carpeta App_LocalResources: Clic en botón derecho del ratón > Add > Add ASP.Net Folder > App_LocalResources
Creación de archivos de recursos locales en la carpeta App_LocalResources: Add > New Item > Resources File
7
Internacionalización en ASP.NET 2.0Acceso a archivos de recursos locales
Tres formas de acceso a archivos de recursos locales: localización implícita, localización explícita y mediante programación
1. Localización implícitaAtributo especial meta (e.g. meta:resourcekey="Label1")Nomenclatura obligatoria en fichero de recursos: Clave.Propiedad(e.g. Label1.Text)Ejemplo:
En un archivo de recursos locales (Example.aspx.resx)Button1.Text: "OK"Button1.ToolTip: "Confirm your information"
En un WebForm (Example.aspx)<asp:Button ID="Button1" runat="server"Text="DefaultText" meta:resourcekey="Button1" />
Internacionalización en ASP.NET 2.0Acceso a archivos de recursos locales
2. Localización explícitaSe utiliza una expresión de recurso para establecer una propiedad de un control en un recurso concretoFormato de las expresiones de recurso:
<%$ Resources: Class , ResourceID %>donde Class se puede omitir (sólo si el recurso es local)
No es obligatorio utilizar la nomenclatura Clave.Propiedad en el fichero de recursosEjemplo:
En un archivo de recursos locales (Example.aspx.resx)Button1Text: "OK"Button1Tooltip: "Confirm your information"
En un WebForm (Example.aspx)<asp:Button ID="Button1" runat="server"
Text="<%$ Resources: , Button1Text %>"Tooltip="<%$ Resources: , Button1Tooltip %>" />
8
Internacionalización en ASP.NET 2.0Acceso a archivos de recursos locales
3. Mediante programación (Code Behind)Sintaxis:
GetLocalResourceObject("<clave>")
Ejemplo:En un archivo de recursos locales (Example.aspx.resx)Button1.Text: "OK"
En el CodeBehind de un WebForm
Button1.Text = GetLocalResourceObject("Button1.Text").ToString();
Internacionalización en ASP.NET 2.0Archivos de recursos globales
Archivos de recursos globalesOrientados a almacenar recursos presentes en varias páginas del sitio Web (e.g. las cadenas de texto: "Anterior", "Siguiente", "Aceptar", "Cancelar", etc.)Se almacenan en la carpeta App_GlobalResources, que debe ubicarse en el raíz de la aplicación
Formato: <Nombre>.<codigoCultura>.resx
Ejemplos: Resource.en-US.resxResource.es.resxResource.resx (por defecto)
9
Internacionalización en ASP.NET 2.0Creación de archivos de recursos globales
Creación de archivos de recursos globalesNo soportan la creación automáticaComo la creación manual de archivos de recursos locales, pero sólo desde la carpeta raíz de la aplicaciónDesde el Solution Explorer, en la carpeta raíz de la aplicación
Creación de la carpeta App_GlobalResources: Clic en botón derecho del ratón > Add > Add ASP.Net Folder > App_GlobalResourcesCreación de archivos de recursos globales en la carpeta App_GlobalResources: Add > New Item > Resources File
Internacionalización en ASP.NET 2.0Acceso a archivos de recursos globales
Dos formas de acceso a archivos de recursos globales: localización explícita y mediante programación (no accesibles mediante localización implícita)
1. Localización explícita<%$ Resources: Class , ResourceID %>
A diferencia del acceso a rec. locales, Class NO se puede omitir
Ejemplo:En un archivo de recursos globales (Resource.resx)
Button1Text: "OK"Button1Tooltip: "Confirm your information"
En un WebForm (Example.aspx)<asp:Button ID="Button1" runat="server"Text="<%$ Resources:Resource, Button1Text %>"
Tooltip="<%$ Resources:Resource, Button1ToolTip %>" />
10
Internacionalización en ASP.NET 2.0Acceso a archivos de recursos globales
2. Mediante programación (Code Behind)
Sintaxis:Resources.<nombreArchivoRecGlob>.<clave>
Ejemplo:En un archivo de recursos globales (Resource.resx)Button1Text: "OK"
En el CodeBehind de un WebForm
Button1.Text = Resources.Resource.Button1Text;
Internacionalización en ASP.NET 2.0Texto estático
El control <asp:Localize>Adecuado para incluir bloques de texto
Editable en la vista de diseño
No genera código de marcado
Ejemplo (mediante localización implícita)<h3><asp:Localize runat=server ID="LocWelcMess" Text="Welcome"meta:resourcekey="WelcomeMessage"/></h3>
Posible código HTML generado
<h3>Welcome</h3>
11
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
Selección de la cultura utilizada por la aplicación. 3 opciones:
1. En el Web.config<globalization uiCulture="es" culture="es-MX" />
Afecta a todas las páginas del sitio Web
Posibles valores de uiCulture y cultureauto : selección automática según las preferenciasestablecidas en el navegador (e.g. uiCulture="auto")
auto:<cultura> : donde "cultura" indica la preferenciacultural que ASP.NET usará si no puede determinar la culturapreferida por el usuario (e.g. uiCulture="auto:es-ES")
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
2. En el WebForm
En la directiva Page
<%@Page UICulture="es" Culture="es-MX" %>
Afecta a una página concreta
Posibles valores de uiCulture y culture: los mismosque en (1)
12
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
3. En el Code BehindSobreescribiendo (override) el métodoInitializeCulture() de la páginaEstableciendo las propiedades CurrentCulture y CurrentUICulture del thread actual a los valoresdeseados
using System.Globalization;using System.Threading;<<...>>public partial class MainPage : System.Web.UI.Page {
<<...>>protected override void InitializeCulture() {
CultureInfo cultureInfo = new CultureInfo("en-US");Thread.CurrentThread.CurrentCulture = cultureInfo;Thread.CurrentThread.CurrentUICulture = cultureInfo;
}}<<...>>
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
3. En el Code Behind (cont.)Repetir este código en todas las páginas no es una buena soluciónRecomendable utilizar Master Pages
Problema: la página maestra no hereda de System.Web.UI.Page, por lo que no puede sobreescribir su método InitializeCulture()Solución: crear una clase hija de de System.Web.UI.Page, que sobreescriba el método InitializeCulture() y hacer que todas las páginas del sitio Web hereden de ella
13
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
using System.Globalization;using System.Threading; <<...>>namespace MyWebApplication.Codepublic class SpecificPage : Page {
<<...>>protected override void InitializeCulture() {
CultureInfo cultureInfo = new CultureInfo("en-US");Thread.CurrentThread.CurrentCulture = cultureInfo;Thread.CurrentThread.CurrentUICulture = cultureInfo;
}<<...>>
}
-------------------------------------------------------------
namespace MyWebApplication {public partial class MainPage : Code.SpecificPage { <<...>>}
}
Internacionalización en ASP.NET 2.0Selección de la cultura utilizada
De las 3 opciones comentadas, la opción másespecífica tiene prioridad
Code Behind más prioridad que directiva PageDirectiva Page más prioridad que Web.config
14
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
MiniportalLocalizado al inglés y al español (archivos de recursos locales y globales en inglés – por defecto –y en español)
ComportamientoSi el usuario no está autenticado, se utilizan las preferencias culturales establecidas en el navegadorSi el usuario está autenticado, la aplicación debe utilizar las preferencias culturales que el usuario seleccionó en el momento de registrarse (idioma – país)
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Archivos de recursos (inglés – por defecto)
15
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Archivos de recursos (español)
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Register.aspx<%@ Page Language="C#" MasterPageFile="~/Miniportal.Master"
AutoEventWireup="true" Codebehind="Register.aspx.cs" Inherits="Es.UDC.DotNet.MiniPortal.Register" meta:resourcekey="Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder_MenuExplanation"runat="server">-<asp:Localize ID="lclMenuExplanation" runat="server" meta:resourcekey="lclMenuExplanation" />
</asp:Content><asp:Content ID="Content2"
ContentPlaceHolderID="ContentPlaceHolder_MenuLinks" runat="server"></asp:Content><asp:Content ID="Content3"
ContentPlaceHolderID="ContentPlaceHolder_BodyContent"runat="server"><div id="form">
<form id="RegisterForm" method="post" runat="server"><div class="field">
<span class="label">
16
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Register.aspx
<asp:Localize ID="lclUserName" runat="server"meta:resourcekey="lclUserName" /></span><span class="entry">
<asp:TextBox ID="txtLogin" runat="server" Width="100"Columns="16"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvUserName"runat="server" ControlToValidate="txtLogin"Display="Dynamic" Text="<%$ Resources: Common, mandatoryField %>"></asp:RequiredFieldValidator><asp:Label ID="lblLoginError" runat="server"ForeColor="Red" Style="position: relative"Visible="False" meta:resourcekey="lblLoginError"></asp:Label></span>
</div>
<<..>>
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Web.configPor defecto, selección automática de preferencias culturales, según las preferencias establecidas en el navegador Web
<<...>>
<system.web><<...>><globalization culture="auto" uiCulture="auto" /><<...>>
</system.web><<...>>
17
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
SpecificCulturePage.cs: clase hija de de System.Web.UI.Page, que sobreescribe el método InitializeCulture()
<<...>>using System.Threading;using System.Globalization;
namespace Es.UDC.DotNet.MiniPortal.HTTP.Session {
public class SpecificCulturePage : Page {
protected override void InitializeCulture() {
/* If the user is authenticated, the Web application will use the * culture(language-country) which the user selected when he * registered into the application. Otherwise, the cultural * preferences established in the Web browser will be used.*/
if (SessionManager.IsUserAuthenticated(Context)) {
String language = SessionManager.GetUserLanguage(Context);String country = SessionManager.GetUserCountry(Context);String culture = language + "-" + country;CultureInfo cultureInfo;
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
try {
cultureInfo = new CultureInfo(culture);Thread.CurrentThread.CurrentCulture = cultureInfo;
// If the string language-country isn´t a valid culture} catch (ArgumentException) {
cultureInfo = new CultureInfo(language);Thread.CurrentThread.CurrentCulture =
CultureInfo.InvariantCulture;
}
Thread.CurrentThread.CurrentUICulture = cultureInfo;}
}}
}
18
Internacionalización en ASP.NET 2.0Ejemplo - Miniportal
Register.aspx.cs: hereda de SpecificCulturePage.csY por lo tanto, hereda el método InitializeCulture()
<<...>>
namespace Es.UDC.DotNet.MiniPortal {
public partial class Register : SpecificCulturePage {
<<...>>}
}
XML¿Qué es XML?
Meta lenguage basado en tags
Originalmente diseñado para la representaciónde datos estructurados
Representación jeráquica (forma de árbol)Proporciona un contexto a los datos
No son únicamente valores, sino valores con significadoAutodescripción de los datos es posibleIndependiza presentación (HTML) de datos (XML)
Subconjunto de SGMLvs. HTML, que es una implementación de SGML
19
XMLBeneficios
Estándar abierto W3C
Facilita la representación de datos entreentornos heterogénos
Multiplaforma
Favorece un alto grado de interoperatibilidad
Basado en reglas estrictas en lo que respecta aSintaxis
Estructura
XMLComponentes de un documento XML
ElementosCada elemento tiene una etiqueta (tag) de inicio y fin
<TAG_NAME>...</TAG_NAME>
Elementos vacíos permitidos<TAG_NAME/>
AttributosDescriben un elemento
Tipo de Datos, Rango, etc.
Pueden aparecer únicamento dentro de la etiqueta de inicio
Instrucciones de procesadoEspecificación de la codificación (por defecto Unicode)Declaración de Namespace Declaración de Schema
20
XMLComponentes de un documento XML
<?xml version="1.0" ?><?xml-stylesheet type="text/xsl" href="template.xsl"?>
<ROOT><ELEMENT1><SUBELEMENT1 /><SUBELEMENT2 /></ELEMENT1><ELEMENT2></ELEMENT2><ELEMENT3 type="string"> </ELEMENT3><ELEMENT4 type="integer" value="9.3"> </ELEMENT4>
</ROOT>
Prólogo (instrucciones de procesado)ElementosElementos con atributos
XMLSintaxis y estructura: well-formed xml
Debe haber un, y un sólo, elemento raíz
Subelementos deben estar correctamente anidadosEtiqueta debe finalizar dentro de la etiqueta en la que se abrió
<tag1> <tag2>…</tag2> </tag1>
Atributos son opcionalesPueden definirse en un esquema
Valores de los atributos entre " " o ' '
Importante: XML es case-sensitive<tag> y <TAG> no son el mismo elemento
21
XMLSintaxis 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>
XMLIntroducción a los esquemas
Define la sintaxis del documentoTipos de datosValores permitidos
Tipos de esquemasDTD (Document Type Definitions)
No escritos en XMLNo soportan tipos de datos
XSD (XML Schema Definition)Escritos en XMLProporcionan soporte para tipo de datosActualmente recomendado como estándar W3C
22
XMLIntroducción a los esquemas
XML válidoDocumento xml construido conforme a las reglasespecificadas en un esquema
Más restrictivo que un xml well-formed
Esquema defineQué elementos están presentes y en qué orden
Qué atributos están presentes y en qué orden
Restricciones sobre valores
XMLIntroducció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) >
23
XMLIntroducció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>
Acceso a recursos xml
StreamReaderEl recurso XML se procesa como un fichero de texto plano
XmlReaderDiseñado específicamente para recursos XML
Proporciona propiedades y eventos específicos
XmlDocumentRepresentación de un documento XML
Válido para aplicar transformaciones xslt
24
Acceso directo a recursos remotosSystem.Net.HttpWebRequest
Implementa la clase abstracta WebRequest
Encapsula una petición HTTP
Métodos principalesGetResponse(): WebResponse
Obtiene la respuesta proporcionada por el servidor
GetRequestStream(): StreamObtiene un Stream para escribir los datos de la petición
Propiedades principalesRequestURI
Obtiene la URI que originó la petición
ProtocolVersionVersión del protocolo HTTP empleada en la petición
HeadersColección de los encabezados HTTP de la petición
Acceso directo a recursos remotosSystem.Net.HttpWebResponse
Implementa la clase abstracta WebRequest
Encapsula una respuesta HTTP
Objetos HttpWebResponse no deberían crearse directamenteCrearlos por medio de una llamada a WebRequest.GetResponse()
25
Acceso directo a recursos remotosSystem.Net.HttpWebResponse
Métodos principalesGetResponseHeader(string headerName): string
Obtiene el valor de las cabeceras HTTP devueltas con la response
GetResponseStream(): StreamObtiene un Stream para la lectura del cuerpo de la respuesta
Propiedades principalesProtocolVersion
Versión del protocolo HTTP de la respuesta
StatusCodeObtiene el estado de la respuesta
HeadersColección de los encabezados HTTP de la respuesta
Acceso directo a recursos remotosEjemplo
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 serverStreamReader reader = new StreamReader(response.GetResponseStream());
// Read the whole contents and return it as a string result = reader.ReadToEnd();
Console.WriteLine(result);
}
26
XMLXmlReader
Clase abstracta que proporciona acesso a datos XMLforward-only
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
XMLXmlReader
Métodos principalesXmlReader.Create()
Instancia una clase concreta de XmlReaderConfigurable mediante objeto XmlReaderSettings
XmlReader.Read()Avanza posición cursor al siguiente elemento
27
XMLXmlReader
Propiedades principalesName
Nombre del nodo que se está procesando
ValueValor del nodo que se está procesando
NodeTypeTipo de nodo que se está procesandoEnumeración:
XmlNodeType.Element, XmlNodeType.EndElement, XmlNodeType.Text
Procesado de atributosHasAttributesMoveToNextAttribute
XMLAcceso a recursos XML mediante XmlReader
// XmlReader ConfigurationXmlReaderSettings settings = new XmlReaderSettings();settings.IgnoreWhitespace = true;settings.IgnoreComments = false;
// Retrieve XML document from URIXmlReader 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 existConsole.Write("<{0}", xmlReader.Name);
28
XMLAcceso 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:
// Display end of elementConsole.WriteLine("</{0}>", xmlReader.Name);break;
} // switch
} // while
XMLXmlDocument
Implementación de las especificaciones de nivel 1 y 2 del W3C XML Document Object Model (DOM)
Representa documentos XML como objetosTodos los nodos son accesibles en cualquier momento
Proporciona métodos para cambiar, insertar o eliminarnodos
Análago al trabajo con objetos DataAdapter/DataSet en acceso a Base de Datos
29
XMLXmlDocument
Métodos principales
Load(Stream inStream): voidSobrecargado: 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 name): XmlElement
XmlElement xmlElement = xmlDoc.CreateElement("newElementName");XmlText textElement = xmlDoc.CreateTextNode("newElementValue");//Adds the element within root nodexmlDoc.DocumentElement.AppendChild(xmlElement);xmlDoc.LastChild.AppendChild(textElement);
XMLXmlDocument
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);
30
XMLXmlDocument: navegación por los nodos
XPathNavigatorPermite seleccionar un subconjunto a partir de una expresión XPathXmlDocument 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 nodosnavigator.Evaluate("max(//Critic/@points)"));
XMLAcceso 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 resultswhile (iterator.MoveNext())
Console.WriteLine("Value: " + iterator.Current.Value);
}
Ejemplo de Uso: AccessByXmlDocument(url,"//movies/movie/@title");
31
XMLTransformaciones xslt
Fichero .aspx
<asp:Xml ID="aspXML" runat="server"></asp:Xml>
CodeBehind
// Option A : Setup the asp:xml component with local resourcesaspXML.TransformSource = Server.MapPath("Movies.xsl");aspXML.DocumentSource = Server.MapPath("Movies.xml");
// Option B : Setup the asp:xml component with remote xmlaspXML.TransformSource = Server.MapPath("Movies.xsl");
XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(url);aspXML.Document = xmlDoc;
XMLTransformaciones
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
32
XSLComponentes
XSL (eXtensible Stylesheet Language)Conjunto de recomendaciones para la definición del formato de presentación y transformación de documentos XML.
ComponentesXSL Transformations (XSLT)
Lenguaje para la transformación de documentos XMLXML 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/
Transformaciones XSL
Especificación original para XSL:Lenguaje para la expresión de hojas de estilos (stylesheets)
Permite la especificación deEstilosLayoutPaginació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.
33
Transformaciones XSLEstructura
Una hoja de estilo XSLT es un documento XML bien formadoGeneralmente 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 reglasContienen 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
Transformaciones XSLEstructura
PlantillasControlan la salida originada desde cada entrada
Representadas por un elemento xsl:templateAtributo 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>
34
Transformaciones XSLModo 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 plantillaGeneralmente incluye nuevos datos o modificación de los datos XML originales
Transformaciones XSLModo 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 no se especifica, las reglas se aplicarán en el orden en que se encuentren elementos coincidentes durante el acceso al árbol XML
35
<?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">
<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"?>
<p>Book Matched</p>
Transformaciones XSLModo de funcionamiento. Ejemplo
Fichero XML
Hoja de estilos XSLT
Resultado
Transformaciones XSLElemento <xsl:value-of ...>
Obtiene el valor de un elementoTexto incluido en el elemento una vez las etiquetas han sido eliminadasAtributo 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 />
</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>
36
Transformaciones XSLAplicació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>
</xsl:stylesheet>
<html><head><title>BookStore</title>
</head><body><p>The Autobiography of Benjamin Franklin</p><p>Franklin, Benjamin</p>
</body></html>
Transformaciones XSLAplicació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>
37
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 conjuntaEl 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
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>
38
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 salidaIrá 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>
XPathLenguaje empleado para la selección de elementos
Nodos por posición absolutaNodos por posición relativaContenido…
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 salidaSoporta operaciones de comparación, lógicas, etc.
39
XPathUna 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 representarRutas 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
XPathEjemplos
./author
Busca todos los elementos de tipo author dentro del contexto actual
/bookstore
Busca el elemento bookstore a partir de la raíz
//author
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 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
40
Model-View-ControllerSepara la lógica de la interfaz de usuario de la lógica de negocio de una aplicación Web dinámica
Problema:¿Cómo estructurar el controlador de aplicaciones Web complejas de modo que se obtenga reusabilidad y flexibilidady se evite duplicación de código?
Causas:La interfaz de usuario cambia más frecuentemente que la lógica del negocio
La lógica del negocio, combinada con la interfaz de usuario, implica modificar la aplicación como un todo
Aumenta la posibilidad de cometer errores en la lógica del negocioNecesariamente se debe probar toda la aplicación, incluida la lógica del negocio, ante un cambio mínimo en la interfaz del usuario
Model-View-Controller
Causas:La aplicación presenta datos de distinta manera
Distintas vistas de los mismos datos son mostrados al mismo tiempo. Si un usuario realiza cambios en una vista, el sistema debe poder actualizar todas las demás vistas automáticamente
Las habilidades de un diseñador son bastante diferentes a las de un desarrollador
Se mezclan los rolesUna página es desarrollada por una sola persona (pérdida de paralelismo en el proceso de desarrollo)
41
Model-View-ControllerEstructura
Instances
Depends
Updates:Model
:View
:Controller
Model-View-ControllerImplementación
Dos alternativas:Patrón Page Controller:
Alternativa sencilla al Front Controller. Existe un objeto controlador por cada página, a diferencia del FrontController que tiene un único objeto para todas las solicitudes (requests)Suele ser la mejor elección para la mayoría de las aplicaciones. Sólo en aplicaciones complejas es recomendable el uso del FrontController.
Patrón Front Controller: Su uso es apropiado cuando:
La parte relativa al controlador tiene una lógica complejaLas clases que lo implementan son parte de una jerarquía de herencia profundaLa aplicación determina la navegación entre páginas dinámicamente, basándose en reglas configurables
42
Page Controller
Problema:La mayoría de las páginas dinámicas realizan tareas repetitivas
Chequeos de seguridad (usuario autenticado)Extracción de parámetros del requestObtención de datos de la session
Se mezcla la vista con la lógica funcional (e.g. scripted pages)
Solución:Implementar Page Controller
Recibe el requestAccede al modeloRedirecciona el request a la vista para su actualización
Page Controller. Estructura
Una vez recibido el request …Se accede al modelo (en caso de ser necesario)Se redirecciona el request a la vistaLa vista recupera los datos (actualizados) del modeloDevuelve los resultados al usuario final
Genera HTML
Vista
Lógica de la aplicación
Modelo
- Recibe el request HTTP- Accede al modelo y decide la vista
PageController
43
Page Controller
FortalezasSimplicidad
Cada página es gestionada por un controlador específicoSe puede reutilizar un mismo Page Controller desde múltiples páginasEl controlador es el “Code Behind” en ASP.Net
DebilidadesExistencia de un controlador por página
Dependencia del framework webDificulta las pruebas independientes
Front Controller
ProblemaLa lógica común se replica a través de todas las vistas
Es necesario centralizar la lógica común inherente a las vistas para evitar duplicación de código
Los mismos datos del modelo se usan en más de una vista
Se deben reducir las rutinas de recuperación de datos, intentando hacerlas desde un sólo lugar
44
Front Controller
Solución: Implementar Front Controller
Todas las request’s se canalizan a través de un sólo objeto.Recupera los parámetrosTransfiere el control al comando correcto para la ejecución del request
Client Handler
+Execute() : void
«interface»Command
ConcreteCommand1 ConcreteCommand2
Front ControllerComportamiento
client: :handler :command :view
Send (request)
Execute (request)
Transfer (request)
45
Front Controller
FortalezasControl centralizado
Se gestionan todos los request’s desde una sola unidad lógicaNo se multiplica el controlador por vistas (Page Controller)
ConfigurableSolo es necesario configurar un Front Controller para toda la aplicación en el servidor
DebilidadesDeben tenerse en cuenta consideraciones de rendimiento
Puede degradarse rendimiento global
Incremento de la complejidad