XML - Erika Vilches
Transcripción
XML - Erika Vilches
XML M. en C. Erika Vilches Motivación Formatos de archivos existentes con los que un programador debe lidiar: RTF .doc PDF Texto delimitado por Tabs... etc... etc... Una verdadera PESADILLA!!! Razones: Documentación inexistente, incompleta o ERRONEA!!! Convenciones de finalización de línea Pequeñas variantes que llevan a incompatibilidad (Ej: .docx de Office y de NeoOffice) etc... etc... etc... Consecuencia → Los programadores prefieren los formatos más simples que la mente pueda imaginar Texto delimitado por tabs Valores separados por comas Sin embargo... aún estos formatos presentan problemas... Ej: dos tabs consecutivos deben ser intepretados como A) String vacío B) null Las 3 se usan en la práctica!!! C) Igual que un solo tab ← StringTokenizer → BUGS Ejemplo de formatos: Datos de una orden en una tienda electrónica en texto separado por lineas: c32 Chez Fred Birdsong Clock 244 12 USD 21.95 135 Airline Highway Narragansett RI 02882 USD 263.40 7.0 USD 18.44 USPS USD 8.95 USD 290.79 Ejemplo de formatos: Datos de la misma orden en una tienda electrónica en XML: <?xml version="1.0" encoding="ISO-8859-1"?> <Order> <Customer id="c32">Chez Fred</Customer> <Product> <Name>Birdsong Clock</Name> <SKU>244</SKU> <Quantity>12</Quantity> <Price currency="USD">21.95</Price > </Product> <ShipTo> <Street>135 Airline Highway</Street > <City>Narragansett</City> <State>RI</State> <Zip>02882</Zip> </ShipTo> <Subtotal currency='USD'>263.40</Subtotal> <Tax rate="7.0" currency='USD'>18.44</Tax> <Shipping method="USPS" currency='USD'>8.95</Shipping> <Total currency='USD' >290.79</Total> </Order> XML es más robusto, más extensible y es mucho más fácil trabajar con el. Veamos por qué... ¿Qué pasa si cambio el orden de un par de líneas en la orden de texto separado por líneas?... Con suerte alguien se dará cuenta antes de que sea demasiado tarde. Ejemplo de formatos: Datos de la orden en una tienda electrónica en texto separado por lineas con un par de líneas cambiadas: c32 Chez Fred Birdsong Clock 12 244 USD 21.95 135 Airline Highway Narragansett RI 02882 USD 263.40 7.0 USD 18.44 USPS USD 290.79 USD 8.95 Ejemplo de formatos: Datos de la misma orden con los campos cambiados de lugar en una tienda electrónica en XML: <?xml version="1.0" encoding="ISO-8859-1"?> <Order> <Customer id="c32">Chez Fred</Customer> <Product> <Name>Birdsong Clock</Name> <Quantity>12</Quantity> <SKU>244</SKU> <Price currency="USD">21.95</Price > </Product> <ShipTo> <Street>135 Airline Highway</Street > <City>Narragansett</City> <State>RI</State> <Zip>02882</Zip> </ShipTo> <Subtotal currency='USD'>263.40</Subtotal> <Tax rate="7.0" currency='USD'>18.44</Tax> <Total currency='USD' >290.79</Total> <Shipping method="USPS" currency='USD'>8.95</Shipping> </Order> Más ventajas... Facilita el chequeo de restricciones como: Cada orden debe tener dirección de envío La moneda debe ser USD, CAN o GBP El costo total debe ser la suma del precio unitario por el numero de items, el impuesto y el envío. etc... Schema Languages DTD (Document Type Definition) te permite verificar que todos los elementos requeridos estén presentes en el orden requerido con su(s) atributo(s) necesario(s) W3C XML te permite además restringir el contenido de elementos y atributos particulares. Ej: garantizar que el precio total es un numero decimal mayor que 1.00 Schematron (el más poderoso) te permite especificar restricciones multi-elemento. Ej: El precio de venta debe ser menor o igual al precio de venta sugerido. Ventajas Listar todas las restricciones en un documento de forma sencilla Verificar las restricciones sin escribir muchísimo código extra. La validación se convierte en una parte separada, modular y más mantenible. Mas ventajas... Extensibilidad Ej: Supongamos que de repente tenemos una necesidad de añadir un porcentaje de descuento a algunos productos. En XML solo añadimos un elemento extra: <Product> <Name>Birdsong Clock</Name> <Quantity>12</Quantity> <SKU>244</SKU> <Price currency="USD">21.95</Price > <Discount>.10</Discount> </Product> Mucho mas obvio que en el texto separado por líneas, donde: Todo quedaría fuera de orden o... No quedaría cerca del item al que pertenece Suponga que no todas las ordenes tienen descuento... ¿Qué pasaría? ¿Líneas en blanco? Suponga que alguien quiere añadir un mensaje por un regalo que puede contener saltos de linea... Ahora los datos pueden contener el caracter delimitador!!! Lo más sencillo: <GiftMessage> Happy Birthday Monica! Love Always, Tracy </GiftMessage> ¿Qué pasa cuando se ordenan múltiples productos a la vez? ¿ Y si además van a distintas direcciones? Para el texto separado por saltos de línea: Un documento de orden por producto → ¿repites la info del cliente? ¿Como calculas el costo de envío y el costo total? Multiples productos en un documento → ¿Dónde termina uno y empieza el otro? <?xml version="1.0" encoding="ISO-8859-1"?> <Order> <Customer id="c32">Chez Fred</Customer> <Product> <Name>Birdsong Clock</Name> <SKU>244</SKU> <Quantity>12</Quantity> <Price currency="USD">21.95</Price > <ShipTo> <Street>135 Airline Highway</Street > <City>Narragansett</City> <State>RI</State> <Zip>02882</Zip> </ShipTo> </Product> <Product> <Name>Brass Ship's Bell</Name> <SKU>258</SKU> <Quantity>1</Quantity> <Price currency="USD">144.95</Price > <Discount>.10</Discount> <ShipTo> <GiftRecipient>Samuel Johnson</GiftRecipient> <Street>271 Old Homestead Way</Street > <City>Woonsocket</City> <State>RI</State> <Zip>02895</Zip> </ShipTo> <GiftMessage> Happy Father's Day to a great Dad! Love, Sam and Beatrice </GiftMessage> </Product> <Subtotal currency='USD'>393.85</Subtotal> <Tax rate="7.0" currency='USD'>28.20</Tax> <Shipping method="USPS" currency='USD'>8.95</Shipping> <Total currency='USD' >431.00</Total> </Order> Mientras más complejos son los datos, más importante es utilizar un formato jerárquico como XML Lo mejor de todo → No se necesita escribir código para procesar los documentos XML directamente, dejamos ese trabajo pesado a los XML parsers. Trabajo del parser: Sabe leer documentos XML y manejar todo el markup que encuentre Checa que los documentos estén bien formados y sean válidos. El código lee el documento XML a través del API del parser. → ¿Precio total y moneda? El parser nos protege de: Como esta codificado el texto (Unicode, ASCII, Latin-1, SJIS, etc.) Si hay retornos de línea Como se escapan los caracteres especiales como < etc... Introducción a XML ¿Qué es XML? XML es el eXtensible Markup Language Se convirtio en una recomendación del W3C en 1998 Sintáxis basada en tags, parecido a HTML Tu haces tus propios tags (o utilizas un tag ya existente para resolver un problema particular) Base de muchas tecnologías web de siguiente generación XHTML, RSS (Blogs), AJAX, Web Services ¿Qué hace XML? XML se utiliza para estructurar y describir información. Diseñado para ser utilizado con Internet XML puede ser utilizado como una forma de intercambiar datos entre sistemas distintos. Tecnologías relacionadas con XML XPath - eXtensible Path Language - Se utiliza para extraer datos de dentro de un archivo XML - Utiliza una sintaxis de path, similar a la de directorios y archivos, como: “drive:/folder/folder/file” XSLT - eXtensible Stylesheet Language Transformations - Lenguaje de styling que toma un archivo XML y lo “transforma” en algo diferente, como HTML, PDF, ASCII o incluso otro archivo XML XQuery - Utilizado para realizar funciones de query en sobre XML, similar a SQL para las bases de datos. - Superset de XPath, querys muy complejos. XPointer y XLink - Utilizados para crear hyperlinks a archivos XML y puntos arbitrarios dentro de documentos XML - No necesita un ancla Herramientas para trabajar con XML Editores de texto simples - Notepad, TextPad, BBEdit, etc... - Gratis o muy baratos - Simples de utilizar, sin ayudas para editar Adobe Dreamweaver - Buenas caracteristicas de edicion de XML: codigo en colores, autocompletar tags. - Puede checar si un archivo XML esta bien formado y validarlo con un DTD (Document Type Definition) o Schema Altova XMLSpy - Herramienta XML avanzada, para uso profesional - Debuggeo de XSLT y pruebas de expresiones XPath Microsoft Visual Web Developer Express - Gratuito, tiene buenas características para editar XML: completado de tags, codigo de colores, validación en tiempo real. Notepad TextPad - textpad.com (Shareware) Dreamweaver → Validación de documento en Dreamweaver Altova XMLSpy → Validación de documento en XMLSpy Microsoft Visual Web Developer Express ↓ ↓ Validación de documento en Microsoft Visual Web Developer Express Validación de documento en Microsoft Visual Web Developer Express ¿Cómo se utiliza XML? Información en un tarjeta de negocios tradicional: Expresado en XML: Ventajas de XML El contenido es separado de cualquier noción de presentación. La información puede ser leída y entendida fácilmente. Conjuntos de tags que resuelvan problemas específicos pueden ser creados fácilmente. XML es un formato abierto que puede ser procesado por cualquier aplicación que sepa manejar XML, como un browser, procesador de palabras, hoja de cálculo, etc. Desventajas Potenciales de XML XML no es particularmente bueno para manejar cantidades muy grandes de datos (GBs de datos... mejor manejarlos con bases de datos tradicionales). XML puede volverse difícil de leer rápidamente si se incluye mucha información en un solo archivo. Algunos tipos de datos (imágenes, otros datos binarios) que no se representan bien en XML. Rápidamente podemos complicar las cosas si no tenemos un plan de antemano de lo que queremos hacer. Reglas Básicas de XML Sintaxis Correcta de XML TODOS los documentos XML tienen un solo tag raiz. Los documentos XML deben estar “bien formados” - Tags vacíos (que no tienen contenido) pueden cerrarse con /> En vez de <elem></elem> → <elem/> - Los atributos no pueden ser minimizados <element attr> ERROR <element attr=”attr”> - Los valores de los atributos SIEMPRE deben estar entre comillas (sencillas o dobles). <element attr=val> ERROR <element attr=”val”> - Tags deben estar propiamente anidados dentro de otros. <elem1><elem2></elem1></elem2> ERROR <elem1><elem2></elem2></elem1> Contenido de los archivos XML Declaración XML <?xml version=”1.0” encoding=”utf-8” standalone=”yes” ?> - Opcional, sin embargo la W3C alienta a los programadores a utilizarla. Elementos (a veces llamados tags) <element> Atributos <element attr=”value”> Comentarios <!-- Comentario XML --> Character Data Sections - texto del que no quieres que se preocupe el parser <! [ CDATA [Algo de texto y datos]]> Processing Intructions - forma de decirle al parser que haga algo que es una característica específica de ese parser. <?SpellCheckMode mode=”us-english”?> Entity References Character (<) y General (©right;) La Declaración XML <?xml version=”1.0” encoding=”utf-8” standalone=”yes” ?> Opcional, sin embargo W3C recomienda ponerla. - Identifica al archivo como xml - Provee un lugar para la declaración de el encoding y standalone - Debe estar al inicio del archivo (ni siquiera espacios en blanco antes) La declaración de encoding identifica la codificación del documento - Es la forma de decirle al parser qué tipos de caracteres se incluyen en el archivo XML - Se asume UTF-8 si no se especifica otro La declaración de standalone especifica si el documento referencia algún markup externo o no. Elementos (Tags) Deben tener un nombre válido - Pueden empezar con guión bajo (_) o letra, después tener cero o más letras, dígitos, puntos, guiones, o guiones bajos. - No pueden utilizar el string “xml” en ninguna combinación de mayúsculas o minúsculas (como nombre de elemento o como inicio de nombre de un elemento). Nombres válidos: <_Element1> <My.Element> <My.Elem_Name> Nombres inválidos: <1Tag> → No puede iniciar con un numero <#Element> → Caracter inválido <Element&Name> → Caracter inválido <XmL> → XML esta reservado Atributos Se especifican en el tag de inicio de un elemento. Deben empezar con una letra o guión bajo, seguido de cero o más letras, dígitos, guiones bajos, guiones o puntos. Atributos que comiencen con “xml” estan reser vados. Sólo pueden aparecer 1 vez en un elemento <element attr1=”a” attr1=”b”> ERROR Comentarios Utilizados para incluir información para el beneficio de quien lee el archivo. Los comentarios inician con <!-- y terminan con --> Pueden contener cualquier caracter (&, <, etc.) excepto un doble guión. Pueden aparecer en cualquier parte de un archivo XML, siempre que no estén dentro de otro elemento ni antes de la declaración XML <element <!-- comment -->> ERROR <element> <!-- Correcto --> </element> Character Data Sections Se utilizan para contener character data que se desea que sea parte del documento pero que no se desea que el parser trate de parsear. <! [CDATA [aqui algo de texto]]> Típicamente utilizados cuando el character data contiene muchos caracteres como & o <, que de otra forma serían ilegales en XML. No se anidan como los elementos No se puede tener una sección CDATA dentro de otra sección CDATA. Processing Instructions Son instrucciones especiales que sólo son de interés para la aplicación que procesa el XML. <?target instruction ?> El nombre de target “xml” esta reservado Pueden iniciar con una letra o guión bajo, seguido de cero o más letras, dígitos, puntos, guiones o guiones bajos. Ej: Tu parser tiene diferentes modos de spell checking y quieres ser capaz de especificar el modo en el documento: <?SpellCheckMode mode=”us-english”?> Entidades Proveen una forma de ayudar a acortar y modularizar los documentos XML Proveen una forma de incluir caracteres que de otra forma serían ilegales en markup. Entidades Generales - Puedes definir que sean lo que tu quieras y serán reemplazadas por el parser con un string completo ©right; o &author; Entidades Character < & "