XML es un lenguaje de marcado que permite definir nuevos lenguajes y estructurar documentos. Los documentos XML incluyen elementos anidados con etiquetas, atributos y comentarios. Los documentos deben seguir una gramática definida en un DTD que declara los elementos y atributos permitidos.
1. Programación lenguaje XML
¿Qué es XML?
Es un subconjunto de SGML (Standard GeneralizedMarkupLanguage) pero mucho más simple
pudiéndose definir como un metalenguaje es decir, puede ser usado para definir nuevos
metalenguajes como “X HTML”.
Extensiones de ficheros:
- .XML
- .DTD: Contiene la definición de las características de los elementos que se van a
mostrar en los ficheros XML.
- Hojas de estilo:
o .CSS
o .XSL
La sintaxis XML:
<?xmlversion="1.0" encoding="UTF-8"?>
<A>
<B>Entre dos etiquetas</B>
<C>Sin etiqueta de cierre.
</A>
Ejemplo 1:
<?xmlversion="1.0" encoding="UTF-8"?>/*Prólogo*/
<elementoraiz>
<elemento1>
<elemento11 atributo=”contenido del atributo”>
<elemento111>Contenido del elemento 111</elemento111>
<elemento112>“ “ “ 112</elemento112>
</elemento11>
</elemento1>
<elemento2> Contenido del elemento 2 </elemento2>
</elementoraiz>
2. Programación lenguaje XML
Prólogo:
Se denomina a la primera línea del documento XML. Podemos incluir:
- Tipo de caracteres
o “ISO-8859-I”
o “UTF-8”
- Versión
- Standalone=”no”: El documento depende de un documento diferente que especifique
la gramática que le describe el DTD.
- Doctype: Sirve para asociar el documento XML al DTD.
- XML stylesheet: Para asociar una hoja de estilo al documento.
Elementos:
Constituye la arquitectura en árbol de un documento XML. Los elementos se encuentran en el
interior de las etiquetas y el valor es el que se encuentra entre la etiqueta de apertura y la de
cierre.
Existen elementos vacíos que se representan de dos formas:
- <nombredelelemento></nombredelelemento> (El elemento no tiene valor, no tiene
contenido)
- <nombreelemento />
Es obligatorio que exista un elemento raíz que englobará todo el contenido.
Construcción de nombres de elementos:
Se distingue entre mayúsculas y minúsculas en este lenguaje, ejemplo: <libro></Libro> sería
incorrecto.
Caracteres permitidos:
- Alfabeto A-Z y acentuadas.
- Números
- Guiones y guión bajo
- Símbolos : y .
Primer carácter del nombre de elemento:
Carácter alfabético, “:” o “-“
<PrimerAlumno>
<primer_alumno>
Estos dos son correctos.
<primer alumno>
<1Alumno>
Estos son incorrectos.
3. Programación lenguaje XML
Atributos:
Son informaciones asociadas a los elementos, dentro de la etiqueta de apertura del elemento.
Ejemplo:
<elemento atributo=”valorAtributo”> Valor del elemento </elemento>
<telefono tipo=”movil” >123456789</telefono>
Los atributos pueden ser de dos tipos (debemos distinguir entre el valor del atributo y el
nombre del atributo, el nombre del atributo no puede incluir ningún elemento de los
siguientes):
- Literales: Se encuentran entre comillas “movil" ‘movil’, podemos poner comillas
dentro de otras pero siempre debe ser la contraria a la de apertura y cierre, es decir:
‘valor “tipo” ‘ ó “valor ‘tipo’ “.
- Constantes: " &, ' < >
Ejemplo: atributo= “valor'valor”
Comentarios:
<!—Contenido del comentario -->
4. Programación lenguaje XML
Hojas de estilo en XML:
Para poder mostrar el contenido de un fichero XML necesita tener asociada una hoja de estilo.
En el fichero se hace referencia a la hoja u hojas de estilo con esta etiqueta:
<?xml-stylesheethref=”nombrehoja.css”?>
<?xml-stylesheethref=”otraHoja.css”?>
<htmlxmls=”http://www.w3.org/1999/xhtml”>
<head>
</head>
<body>
</body>
</html>
Podemos incluir hojas de estilo en “head” para las etiquetas html o estilos internos con la
etiqueta Style.
Para hacer la shojas de estilo en XML disponemos de:
Atributo “Display”:
Esta etiqueta permite tratar a los elementos como un bloque , a una tabla, etc.
Si aplicamos display a un elemento que tiene descendientes o subelementos, también
desaparecen por completo todos ellos.
Propiedades:
- Display:none; (No genera ninguna caja, no ocupa sitio.)
- Display: Block; (Trata como un bloque, haciendo un salto de línea)
- Display: inline; (hace que el elemento sea lineal)
- Display: inline-block; (crea cajas que son de bloques de línea simultáneamente, es
decir, la caja se comporta como si fuera un bloque pero con respecto a los elementos
que la rodean se comporta como una caja en línea)
- Display: list-item; (indica el icono de lista que va a tener por defecto cada una de esas
líneas, implica salto de linea)
Atributo counter-reset:
Libros{counter-reset: contador;}
Autor:before { content:
counter(contador[, AaIi/lower-alpha/…]) “.” ; <libros>
counterincrement:contador;}; <libro>
5. Programación lenguaje XML
<autor1> </libro>
<titulo1> <libros>
Añade los elementos de lista que indicamos en el atributo counter al contenido. En caso de no
indicar después de “contador” si queremos que sea una letra o número romano, por defecto
será un número: counter(contador). Para poner, por ejemplo, números romanos:
counter(contador, i )“.”, donde el resultado sería i.Autor. El punto entrecomillado es opcional,
si se desea que salga un punto posterior a la numeración o elemento de viñeta. No implica
salto de línea a diferencia del list-item.
Con el ejemplo de arriba el resultado sería:
1.Autor libro1
6. Programación lenguaje XML
Declaraciones DTD:
Estos son los elementos que hay que declarar en un elemento DTD
- Entidad: es un nombre al que se le asigna un valor.
<!DOCTYPE…… [
<!ENTITYnombreEntidad “luis”>
Sentencia XML:
<nombre>&valor;</nombre>
- Elementos: el nombre del elemento que aparece en el xml.
<!DOCTYPE ejemplo [
<! ELEMENT nombreElemento (contenido)>]
Hay cuatro opciones:
o Empty: es un elemento vació dentro del no puede haber nada.
Ejemplo:
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (empty)>
]>
<elementoRaiz>
<nombreElemento></nombreElemento>
</elementoRaiz>
o #PCDATA: solo puede contener texto no otros elementos. Suele usarse para
los atributos.
Ejemplo:
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (#pcdata)>
]>
<elementoRaiz>
<nombreElemento>Hola</nombreElemento>
</elementoRaiz>
7. Programación lenguaje XML
o ANY: puede contener cualquier cosa. No se suele utilizar, ya que es
conveniente estructurar adecuadamente nuestros documentos XML.
Ejemplo:
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (any)>
]>
<elementoRaiz>
<nombreElemento>(pueden estar vacíos o contener información)</nombreElemento>
</elementoRaiz>
o Expresiones mas complejas: En ellas puede aparecer una coma y esta significa
que obligatoriamente tiene que contener dos elementos separados por una
coma y en ese mismo orden.
Ejemplo:
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a,b)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
<a>hola</a>
<b/>
</nombreElemento>
</elementoRaiz>
o Símbolos de las expresiones complejas: Significa que el elemento contiene
solo uno de los dos.
Símbolo | :
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a|b)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
8. Programación lenguaje XML
<a>hola</a>
(<b/> no puede estar, ya que solo puede indicarse a ó b)
</nombreElemento>
</elementoRaiz>
Símbolo ? : Indica que hay posibilidad de que aparezca o no un
elemento una sola vez.
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a,b?)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
<a>hola</a>
<b/>
</nombreElemento>
</elementoRaiz>
Símbolo * :El elemento puede aparecer o no las veces que sean
necesarias.
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a,b*)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
<a>hola</a>
<b/>
<b/>
<b/>
</nombreElemento>
</elementoRaiz>
Símbolo + :Debe aparecer una vez obligatoriamente, pero puede
aparecer más veces si es necesario.
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a,b+)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
<a>hola</a>
<b/>
<b/>
</nombreElemento>
</elementoRaiz>
Símbolo () :Permite combinar todos los anteriores, uno dentro de otro.
<!DOCTYPEelementoRaiz [
<! ELEMENT nombreElemento (a, (a|,b)+)>
9. Programación lenguaje XML
<!ELEMENT a (#PCDATA)>
<!ELEMENT b EMPTY>
]>
<elementoRaiz>
<nombreElemento>
<a>hola</a>
<a>hola</a>
<a>hola</a>
<b/>
</nombreElemento>
</elementoRaiz>
Declaración de elementos en caso de querer sacar cualquier dato que incluya ciertos
elementos:
<!ELEMENT nombre ((#PCDATA|elemento1|elemento2)*)>
Declaración de atributos en la DTD:
<!DOCTYPEraiz [
<!ELEMENTraiz … >
<!ATTLIST … >
<!ENTITY (nombre a elegir) SYSTEM “(RUTA)”…> Nombres de constantes, textos, imágenes
PARA IMÁGENES O TEXTO
<!ENTITYmiEmpresa “Moliner”>
…
<empresa>&miEmpresa</empresa>Esto mostraría: Moliner
ATTLIST puede declararse de dos maneras:
- Cuando elemento tiene más de un atributo:
<!ATTLISTnombreElementonombreAtributoTipoAtributoValorInicialAtributo>
<teléfono atributo1=”valor1” atributo2=”valor2”> contenido </teléfono>
Podemos declarar los atributos uno a uno:
<!ATTLIST teléfono atributo1 CDATA #REQUIRED>
<!ATTLIST teléfono atributo2 CDATA #IMPLIED>
O podemos declarar todos los atributos de una vez:
<!ATTLIST teléfono
atributo1 CDATA #REQUIRED
atributo2 CDATA #IMPLIED>
Valores del tipo atributo:
10. Programación lenguaje XML
CDATA: Contiene cualquier carácter.
NMTOKEN: Puede contener solo letras, dígitos y los caracteres (. - _ : ).
Ejemplo: color=”azul-marino”
NMTOKENS: Similar al anterior pero con espacio en blanco.
Ejemplo: color=”azul marino”
Valores (valor1 | valor 2 | …): Indica qué valores tendrá el atributo, solo los que indica.
ID: Su valor debe ser único, no puede haber dos con el mismo valor ni puede empezar por
números.
IDREF: El valor que va a contener ese atributo tiene que ser un valor declarado antes en un ID.
<!ATTLIST libro código ID #REQUIRED>
<!ATTLIST préstamo libroprestado IDREF #REQUIRED>
<libro código=”C1”> … </libro>
<préstamolibroprestado=”C1”> … </préstamo>
IDREFS: Igual que el anterior pero puede hacer referencia a más de un ID, el contenido es un
conjunto de valores separados por espacios que deben coincidir con el valor del atributo ID de
otros elementos.
Valores iniciales de los atributos:
#REQUIRED: El atributo tiene que aparecer obligatoriamente, aunque esté vacío su contenido.
<libro código=””> … </libro>
#IMPLIED: El atributo no es obligatorio que aparezca, aunque puede aparecer con valor vacío.
#FIXED valor: Es un valor fijo, se indicara a continuación, y si se aplica un valor distinto a ese
atributo dará un error.
Valor: Tiene ese valor de forma predeterminada pero se podrá cambiar después al declararlo.
<Ejemplo color=”amarillo”></ejemplo>
Entidades:
Podemos asignar un valor constante a una entidad para trabajar con ello posteriormente sin
necesidad de indicar el valor de la entidad, solo su nombre.
<!DOCTYP raíz [
<!ENTITY pi “3.1416…”>
…