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 (&#60;) y General (&copyright;)
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
&copyright; o &author;
Entidades Character
&#60;
&amp;
&quot;

Documentos relacionados