El intercambio de Información siempre ha sido un grave problema en sistemas de información debido a la gran gamma de lenguajes, paquetes computacionales y sistemas operativos en existencia; desde el caso más simple como escribir un documento en "x" procesador de palabras que no puede ser abierto en otros ambientes, hasta los requerimientos más exigentes de intercambiar información entre empresas.
Es por esto que en 1986 se adoptó un standard denominado SGML("Standard Generalized Markup Language") para el intercambio de información (ISO-8879), de inicio éste fue adoptado por diversas industrias y empresas que hacían fuerte uso de documentación, sin embargo, la misma flexibilidad de SGML lo hicieron una tecnología compleja y por ende costosa de implementar en diversos proyectos; no fue hasta 1996 que el "World Wide Web Consortium" ( http://www.w3.org ) inicio trabajos sobre XML, un standard más simplificado que SGML que hiciera frente a las demandas de intercambio de información en Internet; la característica primordial que mantiene XML con SGML es que ambos son un lenguaje de marcación , también denominado Meta-Lenguaje.
Un Meta-Lenguaje como su nombre lo implica es un lenguaje describiendo otro lenguaje, en el caso de información :estructuras de datos describiendo otras estructuras de datos, a continuación se ilustra un fragmento de SGML:
<De>servicios@osmosislatina.com <Para>cursos@suempresa.com <Mensaje>Le informo que esta es un estructura de SGML |
De inmediato se pueden notar fragmentos describiendo otros fragmentos, el vocablo <De>
describe servicios@osmosislatina.com
, <Para>
describe cursos@suempresa.com
, y <Mensaje>
describe otras serie de palabras; inclusive cabe mencionarse que HTML siendo un derivado de SGML, utliza este mismo tipo de estructura para delimitar información en diseños de paginas Web.
En lo que concierne a XML, aunque diseñado para simplificar SGML no depende de éste y tiene sus propias especificaciones ( http://www.w3.org/TR/REC-xml ), y desde luego su estructura será explorada a fondo en este curso.
La estructura de un documento/fragmento XML contiene diversas características, que serán ilustradas a continuación :
<?xml version="1.0" encoding="ISO-8859-1"?> |
<catalogo> <producto> <modelo nombre="36345-X"> <disponibilidad lugar="almacén"> Si </disponibilidad> <descripción> 60 Watts Doble Canal </descripción> </modelo> </producto> <producto> <modelo nombre="AFBDFFG-77"> <disponibilidad lugar="piso"> Si </disponibilidad> <descripción> 320 Watts Canal-Sencillo </descripción> </modelo> </producto> </catalogo> |
El primer elemento que inicia con signo de interrogación (?) en XML es conocido como una instrucción de procesamiento ("Processing Instruction"), que como su nombre implica, contiene información acerca de como debe ser procesado el documento. En este caso se esta indicando la versión de XML y el tipo de encoding, ambos atributos son utilizados y críticos al momento de procesar la información incluida en el documento, además de ser obligatorios para conformar una fragmento XML válido.
Implicaciones de EncodingEl concepto de encoding tiene un efecto directo sobre los caracteres especiales que sean definidos en XML, para efectos prácticos, estos caracteres especiales pueden ser considerados todos aquellos que no estén incluidos en un teclado ("keyboard") de computo standard. Para nosotros que empleamos el castellano dichos caracteres serian letras con acentos como : Debido a lo antes mencionado, es recomendable especificar un encoding explicito a todo documento XML para garantizar que dichos caracteres sean procesados correctamente.
El término recomendable es utilizado ya que según la especificación XML todo documento se le asigna un encoding "default" de El encoding tipo |
Posteriormente se inicia con la información que desea ser descrita en XML, através del Tag <catalogo>
se da inicio a la estructura de datos, notará que existe otro elemento </catalogo>
al final del documento, el uso de la diagonal ( /
) al iniciar el Tag indica que el elemento en cuestión se ha terminado; lo anterior ilustra que todo elemento (Tag) en XML se encuentra anidado, esto es, agrupa información en sus definiciones, en el elemento catalogo
se anidan producto
dentro de éste modelo
, el cual a su vez disponibilidad
y descripcion
.
En el caso de los elementos producto
, estos anidan otros tres elementos y ningún tipo de información cruda ("raw"), esto es, directamente entre los Tags de inicio y finalización.
El elemento (Tag) modelo
contiene el atributo nombre
, el uso de atributos generalmente es utilizado cuando el elemento en cuestión incluirá elementos anidados, esto evita la necesidad de declarar información cruda ("raw") en el Tag.El elemento disponiblidad
dentro modelo
define tanto un atributo como información cruda ("raw"), este caso se da cuando se requiere una clara distinción entre cierta información , en este caso el lugar de disponibilidad y su validez. El Tag descripcion
simplemente contiene información cruda ("raw") acerca del producto en cuestión.
Las descripciones anteriores forman la base de XML, sin embargo, existen otras consideraciones especiales que deben ser tomadas en cuenta al formar un documento XML.
La creación de XML puede ser llevada acabo mediante cualquier editor de textos, sin embargo, hoy en día están surgiendo diversos ambientes gráficos que permiten acelerar el desarrollo de XML e integrar diversas funcionalidades como parsers, XSL Engines, "Debuggers" elaborados y otros mecanismos especiales; algunas herramientas de este tipo:
Turbo XML ( http://www.tibco.com/solutions/products/extensibility/turbo_xml.jsp ) .
VisualScript XML ( http://www.smartdraw.com/products/visualscript.htm ) .
Dependiendo del editor de texto o herramienta utilizada para generar el documento XML, su sistema operativo y el encoding declarado dentro del documento pueden existir diversos caracteres especiales que requieren ser utilizados al definir su información, a continuación se mencionan algunos caracteres y su representación dentro de XML.
Carácter | XML | ASCII |
á | á | ALT 160 |
é | é | ALT 130 |
í | í | ALT 161 |
ó | ó | ALT 162 |
ú | ú | ALT 163 |
ñ | ñ | ALT 164 |
Ñ | Ñ | ALT 165 |
à | à | ALT 133 |
è | è | ALT 138 |
ì | ì | ALT 141 |
Carácter | XML | ASCII |
ò | ò | ALT 149 |
ù | ù | ALT 151 |
ç | ç | ALT 135 |
â | â | ALT 131 |
ê | ê | ALT 136 |
î | î | ALT 140 |
ô | ô | ALT 147 |
û | û | ALT 150 |
Ç | Ç | ALT 128 |
© | © | |
® | ® | |
Además de estos caracteres especiales, existen otros que por su uso en XML son considerados reservados, algunos de estos y su representación en XML :
Carácter | XML |
< | < |
> | > |
' | ' |
" | " |
& | & |
Los caracteres anteriores son reservados debido a que al ser procesado un documento XML representan instrucciones especificas, esto ocasionaría que los elementos fueran procesados en lugar de ser representados gráficamente.
Existe una manera de agrupar caracteres reservados para que estos no sean procesados como XML , en otras palabras, que sean interpretados literalmente:
<![CDATA[ Esta es una lista con <<<< FLECHAS >>>> que generaría un """"SIN NUMERO DE ERRORS"""" al ser 'procesada', es preferible agruparla... ]]> |
Utilizando el elemento XML <![CDATA[ ]]>
todo procesador ("Parser") reconoce que la información dentro de éste sea tomada literalmente.
En ocasiones, es conveniente definir anotaciones/comentarios dentro de un documento, esto se lleva acabo mediante los Tags ( <!-- y -->
):
<!-- Este es solo un recordatorio que no será procesado --> |
Otro carácter que puede ser encontrado en un documento XML es la clausura prematura de un Tag.
<reloj tipo="digital"> </reloj> <!-- El Tag puede ser clausurado prematuramente su interpretación es idéntica --> <reloj tipo="digital"/> |
La primera declaración esta escrita de la manera en que típicamente se encuentra en un documento XML, se define el Tag inicial y éste debe ser finalizado con un Tag del mismo nombre con una diagonal ( /
); en aquellas declaraciones en las que no se requiere definir información cruda ("raw") o anidar otros elementos , esto es, directamente entre los Tags de inicio y finalización, se puede utilizar una diagonal ( /
) al final del elemento inicial.
template
, XPath, Condicionales y Ciclos en XSL.