Lenguaje XML/Texto completo
Prólogo
XML es un metalenguaje extensible de etiquetas desarrollado por el W3C. Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos. Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades.
Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG y MathML.
Introducción
Antes de empezar este curso, es muy recomendable familiarizarse con el entorno del lenguaje, presentando algunos conceptos básicos que nos ayudarán a comprender mejor XML.
Documento válido
Un documento válido es aquel que cumple y se ajusta a las declaraciones de una DTD establecida. No es obligatorio poseer una DTD, en este caso no se habla de un documento inválido.
Documento bien-formado
ES aquel que respeta la sintaxis del lenguaje XML. Los documentos que no están bien-formados no pueden ser leídos por las aplicaciones.
Toma de contacto
Este es un pequeño ejemplo de un documento XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
<nombre>Alondra</nombre>
<apellido>Jiménez Frías</apellido>
<tel clase="casa">123 45 67</tel>
<sexo valor="f"/>
<direccion>
<numero>1600</numero>
<calle>Amphitheatre Parkway</calle>
<ciudad>Mountain View</ciudad>
<estado>CA</estado>
<cp>94043</cp>
<pais>Estados Unidos</país>
</dirección>
</contacto>
El ejemplo anterior podría ser una tarjeta de contacto. Como se puede ver, tiene varios elementos: etiquetas, atributos, un prólogo, etc.
Para empezar, el elemento <contacto>
contiene a todos los demás elementos. El elemento <nombre>
contiene texto. El elemento <tel>
también, pero además contiene un atributo (clase
), el cual contiene un valor (casa
). Si vamos más abajo, también veremos un elemento vacío (<sexo>
), el cual contiene un atributo (valor
). Por último, vemos al elemento <dirección>
, el cual no contiene texto como los demás elementos, sino que contiene otros elementos.
Como se puede ver, un documento XML tiene varios tipos de elementos (y más que no vimos aquí). Éstos se irán viendo conforme se vayan avanzando en las lecciones de este wikilibro.
Normas básicas
Para crear un documento XML bien-formado, se deben de respetar algunas normas básicas de la sintaxis de este lenguaje:
Estructura jerárquica de los elementos
Esta es la más importante: dado que XML es para estructurar datos, todos los elementos deben de estar dentro de otro elemento definido, por ello, un elemento debe estar correctamente incluido dentro de otro de manera jerárquica. Si esto no es así, la jerarquía se rompe y el documento no estará bien-formado. Por ejemplo, esto es correcto:
<páginas><url>google.com</url><title>google</title></páginas>
No así esto:
<páginas><url>google.com<title></url>google</title></páginas>
Elemento raíz
En los documentos XML, debe de haber un solo elemento raíz. Esto quiere decir que solo debe haber un elemento que contenga a todos los demás. Este elemento debe llamarse según lo hayamos especificado es la declaración DTD. Por ejemplo, este código sería válido:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
<nombre>Alondra</nombre>
<apellido>Jiménez Frías</apellido>
<tel clase="casa">123 45 67</tel>
<sexo valor="f"/>
</contacto>
Pero este no:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE SYSTEM contacto>
<contacto>
<nombre>Alondra</nombre>
<apellido>Jiménez Frías</apellido>
<tel clase="casa">123 45 67</tel>
<sexo valor="f"/>
</contacto>
<contacto>
<nombre>Omar</nombre>
<apellido>Altonar Gamas</apellido>
<tel clase="casa">987 65 43</tel>
<sexo valor="m"/>
</contacto>
Nombre de etiqueta
Cuando se crea un elemento en XML, este debe de llevar un nombre. Según la especificación 1.0, los nombres deben de cumplir las siguientes características:
- Los nombres deben empiezan una letra o uno o más signos de puntuación.
- Pueden contener —pero no necesariamente empezar con ello— letras, números, guiones, rayas, dos puntos o puntos.
- Los nombres que empiezan con la cadena "xml", en ninguna de sus variantes mayúsculas y minúsculas, no se pueden utilizar para nombrar un elemento, ya que estos se reservan para la estandarización de esta o de futuras versiones de XML.
- Los demás caracteres, como espacios en blanco, no se pueden usar.
Por ejemplo, estos nombres son válidos:
<elemento>
<etiqueta1>
<mi-etiqueta>
Pero no estos:
<etiqueta nueva>
<2periodo>
Comillas en los atributos
Todos los valores de los atributos deben de estar encerrados entre comillas simples () o dobles (""). En otros lenguajes de marcado, como HTML, se tolera el no encerrar un atributo entre comillas, en XML no. Por ejemplo, esto es válido:
<sexo valor="m"/>
Pero no esto:
<sexo valor=m/>
Espacios en blanco
XML permite utilizar un grupo de caracteres conocidos como «espacios en blanco» para separar los elementos, y permitir una mejor legibilidad del código. En general son ignorados, aunque no dentro de un elemento de texto o mixto. Estos caracteres son los siguientes:
Caracter | Código Unicode |
---|---|
Espacios | U+032 |
Tabuladores | U+009 |
Retornos de carro | U+013 |
Saltos de línea | U+010 |
Espacios de nombre
Espacios en blanco
Elementos del lenguaje
Introducción
XML define varios tipos de elementos para ser utilizados. Cada elemento tiene una función, y puede contener otros tipos de elementos, dependiendo del tipo de elemneto en cuestión. Todos los elementos se definen en una DTD, donde se ajustarán las reglas de aparición y número.
Prólogo
El prólogo es la parte más importante de un documento XML. Es lo que le dice al programa (y a nosotros), que el documento es un documento XML. A continuación veremos la estructura de un prólogo.
Declaración XML
La declaración XML es la cadena que va al principio de un documento XML, y define la versión de XML usada, la codificación de caracteres, y opcionalmente, una declaración de documento autónomo. No es obligatorio usar la etiqueta, pero si se incluye, se debe de incluir el atributo version, que especifica la versión de XML. Por ahora solo hay una, la 1.0.
Si se quiere incluir la codificación de caracteres, se hace con el atributo encoding, que debe ir después del atributo version.
Standalone
Por último, aunque no es común, se puede incluir un tercer atributo, standalone, que indica si un documento es autónomo, es decir, si depende de algún documento o DTD. Puede tomar los valores "yes" y "no".
Declaración de tipo de documento
La declaración de tipo de documento va seguida de la declaración XML, y es la responsable de definir una DTD contra la cual se validará el documento. Aunque no es obligatoria, es muy recomendable usarla para definir la estructura del documento.
Ejemplo
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE MENSAJE SYSTEM "mensaje.dtd">
En este ejemplo la primera línea es la declaración XML. Nos dice que se está usando la versión 1.0, con la codificación de caracteres UTF-8, y que es un documento autónomo.
La segunda línea, la declaración de tipo de documento, nos indica que se está usando la DTD "mensaje.dtd", que proveerá el sistema.
Elementos
Atributos
Comentarios
Secciones CDATA
Definición de tipo de documento
- Introducción
- Declaración de tipo de documento
- Elementos
- Atributos
- Entidades
- Notaciones
- Secciones condicionales
- Espacios de nombre
Introducción
Una definición de tipo de documento, o DTD (siglas en inglés de Document Type Definition) sirve para declarar la estructura de un documento SGML o XML, elemento por elemento. Esta información se usa para validar un documento XML o SGML. Un documento XML es válido cuando no incumple ninguna de las normas establecidas en su DTD.
Las DTDs nos ayudan a usar una misma estructura para muchos documentos. Esta se puede incluir en un fichero aparte, de modo que en nuestros documentos solo debemos añadir una línea para hacer referencia a la DTD.
Aparte de las DTDs, existen otros métodos que también permiten validar documentos XML, como por ejemplo XML Schema o RELAX NG, aunque son menos utilizadas y conocidas.
La W3C provee la especificación de XML y DTD en la página http://www.w3.org/TR/xml/, y es el sitio donde recomendamos se consulten dudas, ya que ésta es la referencia oficial del lenguaje XML (y DTD).
Declaración de tipo de documento
Las DTDs pueden ser incluidas en un documento XML directamente, o a través de una referencia. Ahora bien, en ambos casos hay que escribir una declaración DOCTYPE (Document Type Declaration, en español Declaración de Tipo de Documento) para asociar una DTD al documento XML. Un archivo DTD puede ser asociado a miles de documentos XML, y de la misma forma, un solo documento XML puede tener asociados varias DTDs.
DTDs internas
Las DTDs asociadas dentro del mismo documento XML solo funcionan dentro de ese documento XML. Es como si incluyeramos código CSS dentro de un documento HTML mediante la etiqueta <style>. Tienen la siguiente sintaxis:
<!DOCTYPE elemento-raíz [
declaraciones
]>
donde elemento-raíz
es el nombre que identifica al tipo de documento, y que también es el nombre que llevará la etiqueta raíz de nuestro XML. Y declaraciones
son las declaraciones a incluir. Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE marcadores [
<!ELEMENT marcadores (pagina)*>
<!ELEMENT pagina (nombre, descripcion, url)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT url (#PCDATA)>
]>
<marcadores>
<pagina>
<nombre>Wikilibros</nombre>
<descripcion>Libros libres para un mundo libre.</descripcion>
<url>http://www.wikilibros.org/</url>
</pagina>
<pagina>
<nombre>Wikipedia</nombre>
<descripcion>La enciclopedia libre.</descripcion>
<url>http://www.wikipedia.org/</url>
</pagina>
<pagina>
<nombre>Wikicionario</nombre>
<descripcion>El diccionario libre.</descripcion>
<url>http://www.wiktionary.org/</url>
</pagina>
</marcadores>
- REDIRECCIÓN[[]]== DTDs externas ==
Las DTDs asociadas mediante una referencia en el documento XML pueden ser enlazadas a tantos documentos como se quiera. Es como si incluyeramos código CSS dentro de un documento HTML mediante la etiqueta <link>. Tienen la siguiente sintaxis:
<!DOCTYPE elemento-raiz SYSTEM "ubicación-dtd">
donde elemento-raíz
es el nombre que identifica al tipo de documento, y que también es el nombre que llevará la etiqueta raíz de nuestro XML. Y ubicación-dtd
es la ruta absoluta al documento XML. Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE marcadores SYSTEM "http://example.com/dtd/marcadores.dtd">
<marcadores>
<pagina>
<nombre>Wikilibros</nombre>
<descripcion>Libros libres para un mundo libre.</descripcion>
<url>http://www.wikilibros.org/</url>
</pagina>
<pagina>
<nombre>Wikipedia</nombre>
<descripcion>La enciclopedia libre.</descripcion>
<url>http://www.wikipedia.org/</url>
</pagina>
<pagina>
<nombre>Wikicionario</nombre>
<descripcion>El diccionario libre.</descripcion>
<url>http://www.wiktionary.org/</url>
</pagina>
</marcadores>
y marcadores.dtd
tendría la siguiente estructura:
<!ELEMENT marcadores (pagina)*>
<!ELEMENT pagina (nombre, descripcion, url)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT url (#PCDATA)>
Elementos
Atributos
Entidades
Notaciones
Secciones condicionales
Lenguaje XML/Definición de tipo de documento/Secciones condicionales
Estilos
Introducción
Las hojas de estilo CSS se desarrollaron para utilizarse junto con el lenguaje de marcas HTML, pero un documento XML también puede hacer referencia a una hoja de estilo CSS y visualizarse en el navegador.
Las hojas de estilo pueden ser añadidas con la instrucción de procesamiento <?xml-stylesheet ?>
. Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="stylesheet.css"?>
<libro>
<titulo>La iportancia de llamarse Ernesto</titulo>
<autor>Oscar Wilde</autor>
<fechaPublicacion año="1895"/>
</libro>
Podemos agregar atributos a esta instrucción para modificar su comportamiento. Por ejemplo, el atributo title, que nos sirve para identificar varias hajas de estilo de un documento. Ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="stylesheet.css"?>
<?xml-stylesheet href="stylesheet2.css" title="Blanco y negro"?>
<?xml-stylesheet href="stylesheet3.css" title="Móvil"?>
<libro>
<titulo>La iportancia de llamarse Ernesto</titulo>
<autor>Oscar Wilde</autor>
<fechaPublicacion año="1895"/>
</libro>
Con ese código, podemos seleccionar qué hoja de estilo queremos visualizar en el dispositivo usado, por ejemplo, en el navegador web.
CSS
XSL
DOM
Introducción
El DOM, o Document Object Model (Modelo de Objeto de Documento), es una interfaz que nos permite representar cualquier documento HTML o XML, siguiendo una estructura jerárquica. Nosotros utilizaremos el DOM en diferentes lenguajes de programación para acceder a cualquier elemento de un documento fácilmente.
DOM en Java
DOM en Visual Basic
DOM en Python
DOM en PHP
DOM en JavaScript
Edición de XML
Editores de texto
Parsers
Existen muchos analizadores sintácticos (parsers en inglés) usados para validar documentos XML.
Uno de los más usados es xmllint, su sintaxis básica es:
xmllint --schema schema.xsd xml.xml
En el caso que se quiera validar un XML con un schema XML
Bibliotecas
Aplicaciones prácticas
Aplicaciones prácticas
Introducción
XML, al ser un metalenguaje para describir etiquetas, es usado como base para muchos otros lenguajes de marcado. Muchos de ellos son conocidos, otros no tanto, pero todos ellos heredan las caracteríssticas de XML. Aquí veremos algunos de ellos.
XHTML
MathML
SVG
RSS
Sitemaps
Conclusión
Creando un lenguaje propio
¿Y ahora qué?
Autores
Enlaces