El futuro de XML Ahora ya conoces XML. Es cierto que la estructura es un poco compleja y la DTD tiene varias opciones para definir lo que puede contener el documento. Pero eso no es todo.
Consideremos una industria para la cual el intercambio de datos es importante, como la banca. Los bancos utilizan sistemas de propiedad para realizar un seguimiento interno de las transacciones, pero si utilizan un formato XML común en la Web, deben describir la información de la transacción a otra institución o aplicación (como Quicken o MS Money). Por supuesto, también pueden representar datos en páginas web. Para su información: esta etiqueta no existe. Se llama OFEX, Open Financial Exchange.
En determinadas circunstancias, si IE 4 en una PC encuentra una etiqueta <SOFTPKG>, se iniciará una función para brindarle al usuario la oportunidad de actualizar el software instalado. Si está utilizando Windows 98, es posible que haya visto esta situación, pero no sabía que se trata de una aplicación XML.
Aquí tenemos tres aplicaciones XML que se ven diferentes de las máquinas de sumar, las máquinas de escribir y los lápices que Andy Grove vio en los años 1970. Pero al igual que las aplicaciones que eventualmente aparecieron en las PC, los beneficios de XML se pueden describir de manera general como: "Cuando usas etiquetas legibles por humanos y máquinas para describir tus datos, suceden cosas buenas"
. ? No tengo ni idea. Pero tampoco sé cómo será la próxima generación de programas en mi PC. Siempre que los datos estén etiquetados de esta forma se podrán generar diferentes aplicaciones.
¿Estás empezando a pensar hasta dónde podría expandirse?
Tenemos muchas aplicaciones prácticas de XML de las que hablar y las cubriré en un futuro próximo. Como todos somos usuarios de Internet, el futuro será XSL (lenguaje de estilo extensible).
Lenguaje de estilo extensible).
Por cierto, esta receta es de mi mamá y es excelente. Si estás usando eso, agrega otra media taza de coco rallado.
Escribo esto porque realmente me importa lo que piensas de mí. Mi preocupación es la siguiente: si lees mi introducción a XML y estás listo para comenzar a escribir tus propios documentos XML. Entonces comienza a buscar una DTD ya establecida para representar su información. Encontrará uno, como se muestra a continuación:
<!ATTLIST fn
%attr.lang;
valor CDATA #FIXED "TEXT">
<!ENTITY % attr.img "
img.type CDATA #REQUIRED
img.data ENTITY #REQUIRED">
De buenas a primeras piensas que Jay debe ser un idiota. No dijo nada sobre ATTLIST y ENTITY, sean lo que sean.
Así que hablemos de esto, primero con un poco de paciencia.
Puede que las líneas anteriores no parezcan buenas, pero en realidad no son nada. Se utilizan en DTD para definir atributos y entidades en documentos XML. Cualquiera que sepa HTML lo sabrá muy bien. Los atributos son entradas con etiquetas HTML que describen las etiquetas con mayor precisión. En el <img src="my.gif" height="20" width="20"> que aparece con frecuencia, hay dos atributos: alto y ancho. Como verá más adelante, el uso de atributos en documentos XML es muy similar.
Tampoco hay nada nuevo acerca de las entidades. Si ha usado &, ya conoce los conceptos básicos. Una cadena rodeada por & y punto y coma representa otro carácter o conjunto de caracteres. (Una lista completa de entidades ISO está disponible aquí).
Por supuesto, los atributos y entidades en XML tienen otras funciones. Esto inevitablemente introduce sintaxis, aunque no demasiada. Una vez que sepa esto, trabajar con documentos XML será sencillo.
Recetas simplificadas
Si lees mi introducción a XML, recordarás que los ingredientes de una receta están representados por etiquetas simples, como <item>2 tazas de harina</item>. Después de escribir ese artículo, estaba navegando por la web y encontré otro documento XML sobre recetas. Los elementos de la receta son los siguientes:
<ingrediente cantidad="2" unit="cups">harina</ingrediente>
Este enfoque tiene un beneficio práctico: facilita el control de los datos. Con el primer enfoque, la etiqueta <item> se utiliza para contener una gran cantidad de información diferente. Si quisiera extraer una lista de ingredientes sin las cantidades de cada ingrediente, no lo haría.
Puedo lograr una funcionalidad similar usando la siguiente estructura:
<item>harina
<cantidad>2</cantidad>
<unidades>tazas</unidades>
Esto se puede solucionar, pero hay dos problemas: primero, el elemento item contiene contenido mixto: texto y otras marcas. Rápidamente descubrí que esta estructura debería evitarse siempre que sea posible. La segunda es que los marcadores casi no tienen significado independiente. Es difícil imaginar una situación en la que sólo haya unidades pero no componentes reales. Estos elementos se pueden describir de forma sencilla; prefiero pensar en ellos como propiedades.
Lo primero que hay que tener en cuenta es que los nombres de los atributos, las cantidades y las unidades sólo tienen significado cuando los procesa una aplicación que puede traducirlos.
Se debe indicar al DTD que lo permita antes de incluirlo en un documento válido. Para el elemento ingrediente anterior, solo incluimos el siguiente código en la DTD:
<!ELEMENT ingrediente #PCDATA>
<!ATTLIST cantidad de ingrediente CDATA #REQUIRED>
<!ATTLIST unidades de ingrediente CDATA #REQUIRED>
La primera línea parece familiar: definiciones de elementos estándar que verá en cualquier DTD. Cada línea ATTLIST contiene a su vez la siguiente información:
<!ATTLIST cantidad de ingrediente CDATA #REQUIRED>
Este es el elemento al que se adjunta el atributo.
<!ATTLIST cantidad de ingrediente CDATA #REQUIRED>
El nombre del atributo se define aquí.
<!ATTLIST cantidad de ingrediente CDATA #REQUIRED>
Establezca aquí el tipo de atributo. CDATA significa datos de caracteres. Lo que significa que el procesador puede obtener el texto dentro del atributo.
<!ATTLIST cantidad de ingrediente CDATA #REQUIRED>
La última parte define el valor predeterminado del atributo. Puede utilizar un valor numérico real, como 3. De esta forma, el valor del atributo para la longitud de los espacios en blanco en XML será 3. El valor ingresado anulará el valor predeterminado.
En el ejemplo anterior no establecí una cantidad específica, sino que utilicé la palabra clave XML #REQUIRED. Le dice al procesador que el atributo secundario debe contener un valor. Si está en blanco, el documento no será procesado.
El valor predeterminado tiene dos palabras clave adicionales. El primero es #FIXED: si el valor del atributo sigue siendo el mismo en todo el documento. Supongamos que defino un atributo de etiqueta de imagen y que todas las imágenes tienen el mismo tamaño, como 100*50 píxeles. Puedo definir el atributo de esta manera en la DTD:
<!ATTLIST longitud de la imagen CDATA #FIXED "100 px">
<!ATTLIST ancho de la imagen CDATA #FIXED "50 px">
Otra palabra clave es #IMPLIED, que indica que la propiedad puede contener un valor o estar vacía.
Veamos los tipos de atributos.
Si decide escribir su propia DTD, es posible que desee un libro que explique el XML de todas las combinaciones en una declaración ATTLIST. Pero si toma prestado DTD, es posible que solo conozca CDATA y otros tres atributos.
El primero es el DNI. Requiere que el valor del atributo no se repita en el documento. Cualquiera que haya utilizado una base de datos conoce la necesidad de identificadores únicos. La declaración DTD ATTLIST tiene este aspecto:
<!ATTLIST nombre_elemento nombre_atributo ID #REQUIRED>
Es difícil imaginar el tipo de atributo ID sin el valor predeterminado de #REQUIRED. En ese caso, cualquier ID duplicado o vacío obligará al procesador a devolver un error. El ID debe comenzar con una letra o un guión bajo y no puede contener espacios.
El tipo NMTOKEN también utiliza las reglas de nomenclatura anteriores. Pero se permite la duplicación. Se utiliza como garantía para pasar datos a la aplicación. La mayoría de los lenguajes de programación, incluidos Java y JavaScript, no pueden tener espacios en los nombres de los módulos. En la mayoría de los casos, es mejor asegurarse de que las propiedades cumplan con sus reglas.
Finalmente, existen tipos de enumeración que no requieren palabras clave específicas. En su lugar, utilice el símbolo "|" para encerrar el valor entre paréntesis, por ejemplo:
<!ATTLIST hermano (hermano | hermana) #REQUIRED>
Este enfoque se puede utilizar si hay un número limitado de valores de atributos posibles.
No crees que el curso de hoy sea aburrido, ¡así que sigue leyendo!