Tema6 Lenguajes de Marcas ASIR
Tema6 Lenguajes de Marcas ASIR
Tema6 Lenguajes de Marcas ASIR
Contenidos:
1. Introducción a XML
2. Estructura jerárquica
3. Documento XML
4. Elementos y atributos
5. Espacio de nombres
6. Verificar un documento XML. DTD.
7. Verificar un documento XML. XML Schemas
8. Acceso a la información de un archivo XML. XPath y XQuery
9. Presentación y transformación de documentos XML. XSL
10. Resumen.
Actividad.
XML nos va a permitir almacenar información y organizarla, … piensa una estructura para la siguientes cajas
¿Cuál pondrías tú dentro de otra o al lado? ¿y cómo? ☺
1. Introducción a XML
XML es el acrónimo del inglés eXtensible Markup Language o lenguaje extensible de marcas, utilizado para
almacenar datos en forma legible. Deriva del lenguaje SGML. Se ha estandarizado, convirtiéndose en uno de los
formatos más utilizados para intercambio de información
XML es un metalenguaje con el que se pueden definir lenguajes de marcado particulares adaptados a necesidades
concretas y determinadas. Es decir, no tiene un conjunto fijo de etiquetas, como ocurría con HTML, sino que los
desarrolladores pueden definir sus propias etiquetas, según sus necesidades.
XML no se centra sólo en Internet, sino que se usa también como lenguaje para el intercambio de información
estructurada entre diferentes aplicaciones y plataformas. Se puede utilizar para intercambiar información entre bases
de datos, aplicaciones ofimáticas e incluso entre distintos sistemas operativos.
El documento .xml, por sí mismo no es visible en el navegador, ya que es un documento que almacena datos, no
los presenta por pantalla. Para poder visualizar los datos de un documento .xml, existen varias formas que se
verán más adelante.
2. Estructura jerárquica:
El documento XML, se organiza de forma jerárquica. Existe un elemento raíz y de él salen “ramas”. La estructura
se asemeja a un árbol invertido. Es más, al documento XML, también se le conoce como árbol XML y suele tener
una extensión .xml.
Dentro del arbol se habla de nodo raíz, descendientes, ascendientes, hermanos, hijos, padres… etc
A los nodos que tienen hijos, se les denomina nodos intermedios o ramas, a los que no tienen hijos, finales u
hojas.
Hay que tener en cuenta que el lenguaje XML es case sensitive, es decir, distingue entre mayúsculas y
minúsculas. No es la misma etiqueta <nombre> que <Nombre>.
Ejemplo:
Para explicar los distintos elementos y apartados que podemos encontrar en un documento XML, vamos a
estudiarlos a través de un ejemplo:
1. La primera línea que debe tener todo documeto XML es la instrucción de procesamiento incluída en la
primera línea del ejemplo. Las instrucciones de procesamiento empiezan por los símbolos <? y terminan
por los símbolos ?>
Ésta en concreto, sirve para indicar al procesador de XML, que el documento está en formato .XML
2. La segunda línea indica el fichero DTD que utiliza. El DTD es un archivo en que se describe la estructura
del documento XML (qué etiquetas se pueden utilizar, qué atributos, en qué orden, …). Es decir, un conjunto
de normas que se tienen que cumplir para que se considere válido. Más adelante veremos la diferencia
entre un documento válido y bien formado.
Un documento válido es aquel que cumple las normas establecidas en el DTD, que no es lo mismo que
un documento bien formado, que es aquel que cumple las reglas establecidas por el W3C para los
documentos XML.
Existe otra técnica para valorar el documento que son los esquemas XML los esquemas XML. (schema). Al
igual que las DTDs, los schemas describen el contenido y la estructura de la información, pero de una forma
más precisa.
3. Esta línea es un comentario. Como se puede observar, tiene exactamente la misma forma que los
comentarios de HTML.
4. XML no es un lenguaje para mostrar elementos, sino de almacenamiento. Para poder mostrarlos podemos
utilizar hojas de estilos, tal y como se utilizaban en HTML, como se define en la línea 4.
5. Es el elemento raíz, a partir de él cuelgan los demás. Todos los elementos están contenidos dentro de esta
etiqueta.
6. Elemento no raíz.
7. Atributo
8. Cierre de elemento no raíz.
9. Cierra de elemento raíz.
4. Elementos y atributos:
Los elementos son las unidades que queremos describir; aquello que tiene un contenido.
Las etiquetas sirven para describir a los elementos. Son como las etiquetas de HTML, aunque el nombre de la
etiqueta, o sea, el elemento no está predefinido, lo crea el desarrollador de la página XML, según sus
necesidades.
El dato es el contenido encerrado entre las etiquetas de apertura y cierre, en este 54569895Z.
Tipos de elementos
• Elemento raíz, contiene a todos los demás. También es denominado elemento documento. Se abre al pricipio
del documento, antes de cualquier otro elemento, y se cierra en la última línea.
• Elementos con contenido. Son los más corrientes y como se ha dicho anteriormente, la unidad básica de los
documentos HTML.
Dentro del contenido del dato podemos encontrar caracteres de escape, como el salto de línea (\n), tabulador
(\t), espacio (\s), retorno de carro (\r) , etc.
También hay que tener en cuenta, que dentro de las etiquetas, en el contenido, los espacios “cuentan”, por lo
tanto no es igual el valor.
En el texto, también nos podemos encontrar con caracteres especiales que utilizábamos en HTML
& &
< <
> >
" “
• Elementos sin contenido. No tiene etiqueta de cierre, se cierra en la misma etiqueta de inicio. Estos tipos de
elementos pueden contener atributos.
Ejemplo: <br/>
Nombres para los elementos.
Actividad
• <año nacimiento>
Verdadero Falso
• <movil/fijo>
Verdadero Falso
• <año_nacimiento>
Verdadero Falso
• <1erPuesto>
Verdadero Falso
• <alumn@>
Verdadero Falso
• <Correo_Electronico>
Verdadero Falso
1-falso ,2-falso , 3-verdadero, 4-falso, 5-falso, 6-falso
Soluciones:
Actividad
Crea un documento XML que almacene información de una biblioteca. Los datos almacenados de cada libro serán
Nombre, Autor y Fecha de publicación
Solución
Esta es una posible solución. Las soluciones dependerán de los libros almacenados.
Actividad
Realizar un documento XML que contenga información de 4 asignaturas (nombre, profesor, clase, ciclo).
Atributos
Los atributos son una manera de incorporar propiedades a los elementos de un documento.
Todos los valores de los atributos deben ir entre comillas. Si hay más de un elemento en la misma etiqueta, el
orden en que aparezcan no es relevante. No se debe utilizar un atributo para contener información que puede ser
a su vez dividida.
Actividad
Modifica el fichero de biblioteca para que añada al título los atributos “tipo de encuadernación” que podrá tener los
valores pasta_dura o pasta_blanda y el idioma
Añade también un nuevo campo “fecha de préstamo” que tendrá los atributos día, mes y año.
Solución
El resultado en el navegador será
5. Espacio de nombres
Los espacios de nombres también conocidos como name spaces, permiten dar un nombre único a cada elemento,
indexándolos según el nombre del vocabulario adecuado. Además, están asociados a una URI que los identifica de
forma unívoca.
<prefijo:nombre_etiqueta> </prefijo:nombre_etiqueta>
Antes de poder utilizar un prefijo de un espacio de nombres, para resolver la ambigüedad de dos o más etiquetas,
es necesario declarar el espacio de nombres.
Su sintaxis es la siguiente:
<conexion>://<direccionservidor>/<apartado1>/<apartado2>/...
Ejemplo:
Supongamos que queremos combinar estos dos documentos xml en uno sólo. Tendremos que especificar
espacios de nombres para evitar la ambigüedad del elemento carta.
6. Verificar un documento XML. DTD
El DTD (Document Type Definition – Definición de Tipo de Documento) indican los elementos que aparecen en el
documento .xml, el orden, si son optativos, u obligatorios, los atributos, etc.
Como dijimos anteriormente, no es lo mismo un documento bien formado que un documento válido
Los documentos DTD, pueden aparecer de forma interna, dentro del documento .xml, o de forma externa en ficheros
de extensión .dtd
Ejemplo:
Si tenemos un documento, cuyo elemento raíz es <curso>, para definir en el .xml
- De forma interna:
Elementos
Los elementos que contendrá el documento XML se definen con la sintaxis siguiente:
El nombre del elemento tiene que ser el mismo que el correspondiente del documento XML.
Ejemplo:
Ejemplo:
Puede ser, “lo que sea”, ANY, que indica que será un texto y que no se aplicarán sobre él ninguna comprobación
sintáctica. Poco utilizado y no es muy apropiado. No se debe utilizar en la versión definitiva del DTD.
Si el contenido del elemento está constituido por otros elementos, se deben escribir sus nombres separados por
comas (,)
Actividad
Solución
Para definir un elemento, además de añadir los elementos que lo constituyen hay que añadir su cardinalidad, es
decir, el número de veces que aparecerán.
Ejemplo:
<!ELEMENT productos (producto+)>
Este elemento muestra el resultado de un partido de futbol. Sólo hay un posible resultado o 1 o x o
2.
En el ejercicio muestra un título debe aparecer una vez, una fecha que puede aparecer o no, 1 o n
párrafos, (pero al menos uno), y esta estructura de párrafos y gráfico se puede repetir 0 a n veces.
Actividad
Crea un XML que almacene datos de profesores, donde se recoja para cada uno su nombre o apodo y la materia
que imparte.
Solución
Según el DTD interno, el elemento profesores está compuesto por 0 o más elementos profesor, que cada elemento
profesor está formado por dos elementos (nombre y materia) o (apodo y materia), nombre, apodo y materia son
terminales y no están compuestos por otros elementos.
Atributos
Un atributo permite añadir información adicional a los elementos de un documento. La principal diferencia con los
elementos, es que los atributos no pueden tener subatributos.
Donde elemento será el nombre del elemento, atributo el nombre del atributo .
▪ Un valor textual entre comillas, que será el valor por defecto del atributo.
▪ #IMPLIED, que indica que el atributo es opcional y no se le asigna ningún valor por defecto.
▪ #REQUIRED, que indica que el atributo es obligatorio, pero no se le asigna un valor por defecto.
▪ #FIXED, indica que el atributo es obligatorio y se le asigna un valor por defecto que además es el único
valor que puede tener el atributo.
Ejemplo:
Actividad
Crea el DTD para el siguiente archivo XML
Solución
Entidades generales:
Una entidad es una representación de un carácter o conjuntos de caracteres, que siempre va precedida
de &, y cerrada con punto y coma (;). Nos permiten definir constantes en un archivo XML.
Para poner un ejemplo de una unidad en html, € es la entidad del símbolo €
Al procesar el documento XML, el intérprete sustituye la entidad por el valor que tiene asignado en el
DTD.
Actividad:
Para los siguientes ejercicios, debes leer el DTD, comprobar el XML, e indicar cuál es el problema del XML
respecto al DTD. Luego debes indicar qué cambios habría que hacer en el DTD para que estuviese correcto
el código XML original.
Comprobar la sintaxis y validar un archivo XML con un DTD
Para comprobar si el documento XML se adapta al DTD, podemos utilizar distintas herramientas. En concreto, en
la herramienta Notepad++ existe un plugin para realizar esta función.
Para comprobar si el documento está bien formado. Es decir, si su sintaxis es correcta, lo haremos desplegando el
plugin instalado.
Por ejemplo, la herramienta XML Copy Editor es software libre y permite saber si está bien formado el
documento. Se puede descargar de http://xml-copy-editor.sourceforge.net/
También existen sitios webs online para poder validar los documentos XML como
https://www.xmlvalidation.com
7. Verificar un documento XML. Schemas XML
Una hoja. Hasta ahora hemos visto que podemos validar un fichero XML con un DTD, pero este tipo de
validación tiene ciertas limitaciones, ¿qué ocurre cuando los valores de los elementos y atributos de dicho XML
tiene que tener un tipo de dato deteterminado, tener ciertos valores o cumplir restricciones que no se pueden
reflejar en un archivo DTD? En ese caso se utilizan schemas XML.
Los XML schemas son ficheros de texto plano con la extensión .xsd
• Permiten definir el tipo de datos de los elementos: (integer, decimal, string, date, …)
• El schema tiene una estructura XML. Su extensión es .xsd. y se puede validar igual que el xml a diferencia
del DTD que no es posible validarlo con las herramientas vistas.
• Permite definir tipos de datos y crear restricciones de los tipos de datos generales (facetas)
Para relacionar un XML con un scherma, tendremos que añadir en el elemento raíz del mismo un enlace
a dicho documento de extensión .xsd
En el documento xsd tendremos que añadir la línea que define el esquema de la siguiente forma con
Componenetes de un Schema
Elementos
Los elementos se declaran con xs:element y hay que indicar los tipos de cada elemento:
Para indicar un tipo simple (básico), usamos xs:simpleType. Los más comunes son string para texto, integer para
números sin decimales, decimal para números con decimales, date para fecha…Para ver todos los tipos de datos
simples consulta el enlace:
https://msdn.microsoft.com/es-es/library/cc498790(v=vs.71).aspx
Cuando un elemento está compuesto por otros elementos, además de indicar que es un tipo complejo, dentro de la
etiqueta complexType, hay que especificar la secuencia de elementos que lo componen con xs:sequence.
El orden ha de ser el mismo que en el xml.
Ejemplo:
Si pueden aparecer unos elementos u otros (o exclusiva) utilizamos xs:choice
Para realizar agrupaciones, de elementos y de atributos para hacer referencia a ellas utilizamos xs:group
Si un tipo de dato xs:complexType mezcla texto con elementos tiene que contener el atributo mixed con valor true.
xs:all. Indica que no importa el orden de los elementos, pero sólo pueden aparecer una vez.
Actividad:
Facetas
Si queremos restringir los valores de un tipo básico usamos facetas con xs:restriction. Algunas de las restricciones
más usadas son:
(max/min)(In/Ex)clusive. Límites superiores/inferiores del tipo de datos. Cuando son Inclusive el valor que se
determine es parte del conjunto de valores válidos para el dato, mientras que cuando se utiliza Exclusive, el valor
dado no pertenece al conjunto de valores válidos.
Ejemplo:
Ejemplo:
Actividad:
Solución
En los ejercicios anteriores hemos ido definiendo los tipos a la vez que los elementos.
Esto puede ser complejo si hay gran cantidad de elementos anidados.
En estos casos, para dar claridad al código, se pueden definir los tipos y luego a la hora de crear el elemento,
utilizar un tipo ya definido.
Ejemplo:
A la hora de definir elementos anidados, podemos definir elementos más simples y luego hacer referencia a ellos.
Ejemplo:
Cardinalidad y ocurrencia de elementos.
Cuando definimos un elemento en un esquema, podemos indicar el número de veces que puede aparecer.
• minOcurrs= Número mínimo de veces que puede aparecer un elemento. Si el valor es 0, el elemento será
opcional y puede no aparecer.
• maxOcurrs= Número veces máximo que puede aparecer un elemento (unbounded) significa que no hay
límite.
• fixed= Valor fijo para el elemento.
• default =Valor por defecto del elemento.
Ejemplo.
En el ejercicio anterior el elemento libro sólo puede aparecer una vez en el XML, si intentamos añadir otro elemento
libro el parser del XML nos dará un error.
Para que pueda aparecer todas las veces que queramos, en el xsd debemos definir el elemento libro de la siguiente
manera:
Actividad:
Crea un xsd para este fichero xml teniendo en cuenta que, publicación sólo puede tener 4 dígitos y que el rango
de año de publicación va desde 1900 a 2017
Solución
Atributos
Actividad:
Para incorporar cierta documentación al esquema (quién es el autor, limitaciones de derechos de autor, utilidad del
esquema, etc.), en lugar de usar los comentarios, XML Schema tiene definido un elemento xs:annotation. Este
elemento a su vez puede contener una combinación de otros dos que son:
o xs:documentation, además de contener información del esquema puede contener elementos XML bien
estructurados.
También permite determinar el idioma del documento mediante el atributo xml:lang y es usado para generar
una ayuda contextual para cada elemento declarado en el esquema.
o xs:appinfo, se diferencia muy poco del elemento anterior, aunque lo que se pretendió inicialmente era que
xs:documentation fuese legible para los usuarios y que xs:appinfo guardase información para los programas
de software.
Para validar un schema, lo podemos hacer directamente con el editor como por ejemplo el Notepad++
O también podemos validarlo de forma online por ejemplo:
8. Acceso a la información de un archivo XML. XPath y XQuery
XPATH
XPath es un estándar de W3C, que nos permite acceder a partes de un documento XML basándonos en las
relaciones de parentesco entre los nodos del documento.
Una expresión XPath es una cadena de texto que representa un recorrido en el árbol del documento. Las
expresiones más sencillas se parecen a las rutas de los archivos de sistemas operativos.
Al Evaluar una expresión XPath se busca si hay nodos en el documento que se ajusten al recorrido indicado en la
expresión. El resultado de la búsqueda son todos los nodos que se adaptan a la expresión.
XPATH
En XPath no sólo los elementos son nodos, en realidad existen los siguientes tipos de nodos:
La ruta de localización del nodo raíz del documento, es la barra diagonal “/”.
Localización de atributos, para referirnos a ellos en XPath, se utiliza el símbolo “@” seguido del nombre del
atributo deseado.
Ejemplo
Solución
El resultado son dos nodos de nombre autor con valor “María Gripe” y “Carlos Ruíz Zafón”
El acceso a los atributos se realiza siempre con el carácter @
En el ejemplo de la biblioteca, para acceder a las fechas de préstamo de los libros lo haríamos:
/biblioteca/libro/fechaprestamo/@dia
• /: si está al principio de la expresión, indica el nodo raíz, si no, indica "hijo". Debe ir seguida del nombre de
un elemento.
• . : Nodo de contexto
Mediante las rutas de localización se pueden seleccionar varios nodos a la vez, pero el uso de predicados permite
seleccionar un nodo que cumple ciertas características.
Ejemplo:
/receta/ingredientes/ingrediente[@codigo=“1”]/nombre
En este caso se está indicando al intérprete que escoja, dentro de un fichero XML de recetas, el nombre del
ingrediente cuyo código tiene el valor “1”.
Actividad:
Para el siguiente documento XML escribe las expresiones XPath correspondientes para:
1. Nombres y apellidos de los contactos de la agenda.
2. Nombre e identificador de cada contacto.
3. Datos del contacto con identificador "p02".
4. Nombre del penúltimo contacto de la agenda.
5. Número de usuarios en la agenda que se llaman Roberto
Solución
1. //nombre | //apellidos
2. /agenda/persona/identificadores/nombre | /agenda/persona/@id
3. /agenda/persona[@id="p02"]/*/*
4. /agenda/persona[last()-1]/identificadores/nombre
5. count(/agenda/persona/identificadores[nombre="Roberto"])
XQUERY
XQuery es un lenguaje de consulta que permite extraer y procesar información almacenada en formato XML.
XQuery es a XML lo mismo que SQL es a las bases de datos relacionales. Cada consulta es una expresión que es
evaluada y devuelve un resultado.
XQuery ha sido construído sobre la base de Xpath
Las consultas XQuery pueden estar formadas por hasta cinco tipos de cláusulas diferentes, siguen la norma FLWER
(que se pronuncia "flower").
• FOR: asocia una o más variables con cada nodo que encuentre en la colección de datos.
◼ Funciones de cadenas de texto :concat(), String length(),startswith(), upper case(), lower case(),
En nuestro documento XML de la biblioteca, ejecutar la sentencia de consulta de los libros que se editaron después
del año 2000.
Existen distintas herramientas para realizar consultas XQuery. Algunas herramientas son comerciales como
Oxygen XML editor o Altova aunque ambas tienen versiones de prueba de 30 días.
También existen herramientas online como http://www.xpathtester.com/xquery donde podremos realizar consultas
XQuery desde el navegador.
9. Presentación y transformación de documentos XML. XSL
Una hoja de estilo XSL se compone de dos partes: las plantillas (que indican los elementos XML que se deben
seleccionar) y las acciones (describen qué es lo que hay que hacer con los elementos seleccionados con la plantilla).
<xsl:template match=’elemento_sel’>acción</xsl:template>
Aquí, elemento_sel es el elemento que se selecciona para llevar a cabo la acción sobre el. Por ejemplo:
<xsl:template match=’nombre’>acción</xsl:template>
Una hoja de estilo XSL se podría definir como una serie de reglas que determinan cómo va a ocurrir la
transformación entre un documento XML de entrada y un documento XML de salida. Cada regla se compone de
un patrón (pattern) y una acción o plantilla (template).
De este modo, cada regla afecta a uno o varios elementos del documento XML. El efecto de las reglas es recursivo,
para que un elemento situado dentro de otro elemento pueda ser también transformado.
Ejemplo:
discos.xml
discos.xsl
El resultado será la siguiente:
Ejemplo:
discos.xml
discos3.xsl
Ejecución del ejercicio en el navegador:
La estructura xsl:for-each select se utiliza para hacer tantas repeticiones como etiquetas disco tengamos. En este
ejemplo, como tenemos 2 discos diferentes, saldrá por pantalla la información relativa a dichas 2 discos.
Orden xsl:sort
Podemos mostrar el contenido que nos interese del documento xml, y podemos mostrar dicha salida
ordenada por distintos campos, utilizando el comando .
Ejemplo:
En el anterior ejercicio se puede mostrar una salida por de publicación del disco, utilizando el comando
sort.
También puede hacerse por orden descendente:
Orden xsl:if
El condicional if, nos ayuda a mostrar el contenido del xml, si se cumple la condición establecida:
Ejemplo: Con el fichero de XML, de discos, sólo se mostrará los títulos de los discos de U2.
Actividad:
o Crea un fichero con la siguiente estuctura en XML, para almacenar la información necesaria para crear la
siguiente imagen:
b)Realizar la DTD correspondiente a dicho fichero.
c) Realizar el documento centro.xsl para mostrar la información del documento centro.xml por
pantalla con la forma:
En este tema hemos trabajado el lenguaje de marcas XML, y hemos visto la diferencia entre un documento válido
y bien formado.
Hemos definido los elementos que componen un fichero .XML, y creado ficheros DTD, para anexarlos y validar los
XML así como Schemas.
Para acceder al información de un documento XML hemos visto los estándares Xpath y XQuery, y con XLS,
hemos mostrado el contenido de XML, por pantalla, y hemos conseguido filtrar la información que nos interesaba y
ordenarla de forma ascendente o descendente.