Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
© Iñaki Martín
CAPÍTULO 1.1
HTML INICIAL
Guión de curso – HTML- CSS- JS
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
1.1 HTML - Conceptos iniciales Elementos HTML: Resumen
© Iñaki Martín
Guión de curso – HTML- CSS- JS
1.1 HTML - Conceptos iniciales Elementos semánticos HTML5: Resumen
© Iñaki Martín
Guión de curso – HTML- CSS- JS
1.1 HTML - Conceptos iniciales Elementos HTML: Resumen
PAR ATRIBUTO/VALOR
ELEMENTO HTML
1.1 HTML - Conceptos iniciales Contenedores
ELEMENTOS Y ETIQUETAS
• Un elemento HTML se define mediante una etiqueta inicial. Si el elemento contiene otro contenido, termina con una
etiqueta de cierre, donde el nombre del elemento está precedido por una barra diagonal:
© Iñaki Martín
Aquí <p> .... </p> es un elemento HTML, <h1> ... </h1> es otro elemento HTML.
<div> ... </div>
Mientras que <p> y </p> son las etiquetas con las que construyo el elemento
<h1> .. </h1>
Con otro ejemplo, <p> es la etiqueta de inicio de un párrafo y </p> es la etiqueta de
<p> .. </p>
cierre del mismo párrafo, pero <p> Este es el párrafo </p> es un elemento de párrafo.
• Hay algunos elementos HTML que no necesitan cerrarse, solo tienen etiqueta inicial, como <img>, <br>, <hr>,
etc. Estos se conocen como elementos vacíos (ver explicación detallada más adelante)
ATRIBUTOS
• Un elemento HTML puede tener uno o varios atributos, dentro de la etiqueta de inicio. Cada atributo se define
Guión de curso – HTML- CSS- JS
por un par de valores atributo/valor, asignando el segundo en el primero. El valor siempre es una cadena (entre
comillas simples o dobles)
<div id="inicio" class="cabecera" > ... </div>
ELEMENTOS ANIDADOS
<!DOCTYPE html>
<html lang="en-US">
• En HTML esta permitido (y abundantemente <head>
usado) tener elementos HTML anidados (unos <title>Titulo de mi pagina</title>
</head>
dentro de otros) <body>
<div>
• El único problema es siempre recordar cerrar <p>Esto es un <u>parrafo</u> </p>
</div>
los elementos (si hay que cerrarlos), y en el </body>
orden correcto </html>
1.1 HTML - Conceptos iniciales Contenedores
ELEMENTOS CON CONTENIDO, ELEMENTOS VOID y OPCIONALES
Las etiquetas de HTML pueden tener varios formatos, según el elemento que se trate:
© Iñaki Martín
• Etiquetas OPCIONALES, esto es, que pueden ponerse o no, y aun siendo aconsejables, no es obligatorio
Los elementos que tienen etiqueta de inicio opcional (esto es, que pueden no existir) son:
- body, head, html, body
Los elementos que tienen etiqueta de cierre opcional son:
- body, colgroup, dd, dt, head, html, li, option, p, tbody, td, tfoot, th, thead, tr
• Contenedores de BLOQUE
- Se inician en una linea nueva
- Cogen todo el ancho que tengan disponible. Ejemplo:
- <div>
- <h1> .. <h6>
- <p>
- <form>
• Contenedores de LINEA
Guión de curso – HTML- CSS- JS
SPAN y DIV
• Es habitual confundir el uso de span y div. Con lo antedicho, los div (tambien se llaman vulgarmente
capas) son apropiados para agrupar elementos (incluso es recomendable su uso), y los span se suele
usar para aplicar estilos.
1.1 HTML - Conceptos iniciales Esquema inicial
ESQUEMA GENERAL
<!DOCTYPE html> <!-- Define que es un documento HTML -->
<html lang="en-US"> <!-- tag inicial de una pagina HTML -->
<head> <!-- Head contiene meta-information del fichero -->
© Iñaki Martín
<div>PRIMER DIV</div>
<p>Esto es un paragraph.</p>
<p id="p1">
Esto es un paragraph con etiquetas indentadas
</p>
1.1 HTML - Conceptos iniciales Atributos más habituales
ATRIBUTOS MAS HABITUALES (PARA CASI TODA ETIQUETA)
Estos atributos son comunes a casi todos los elementos HTML
Etiqueta Atributo Acción
© Iñaki Martín
EM texto enfatizado
MARK texto marcado
SMALL mas pequeño
DEL texto borrado
INS texto insertado
SUB texto subíndice
SUP texto superíndice
Q añade comillas
A
A TARGET Indica en donde se va a abrir el nuevo enlace. Valores posibles:
“_blank" Enlace se abre en nueva pagina
"_self" Enlace se abre en la misma pagina o tab
"_parent" Enlace se abre en la ventana padre
"_top" Enlace se abre a pagina completa
"nombref" Enlace se abre en el frame nombref
A DOWNLOAD Se usa sin valor, e indica que el elemento debe descargarse
Enlaces de descarga
Opcionalmente una etiqueta "a" tambien puedo DESCARGAR un contenido (imagen, url, etc)
<a href="/images/imagen2.jpg" download>Descarga aqui esta imagen</a>
IMG SRC Identifica el nombre de la imagen. Puede ser una URI o tener path
IMG ALT Texto que se muestra si no se puede cargar la imagen
IMG STYLE Estilo css aplicable a la imagen. Puede contener multiples atributos
IMG WIDTH y HEIGHT Alto y ancho. Preferible usar style
IMG USEMAP Identifica el mapa de areas que se aplica a esta imagen (ver MAP)
<img src="unaimagen.png"
alt="Imagen no se ha podido cargar"
style="width:128px;height:128px;"
width="128"
Guión de curso – HTML- CSS- JS
height="128">
MAP NAME Identifica el nombre del mapa de areas. Debe ser el mismo que se usa
en el atributo USEMAP de la imagen sobre la que se aplica este mapa
AREA SHAPE INdica que tipo de imagen tiene un area: “rect”, “circle”, "poly"
AREA COORDS Coordenadas que identifican el area. Cada forma que tenga el area
necesitia mas o menso coordenadas, y con diferente significado.
<img src="planetas.png"
usemap="#planetamap"
style=“width:145px;height:126px;">
<map name="planetamap">
<area shape="rect"
coords="0,0,82,126"
alt="Sol"
Guión de curso – HTML- CSS- JS
href=“sol.htm">
<area shape="circle"
coords="90,58,3"
alt="Mercurio"
href=“mercurio.htm">
<area shape="poly"
coords="124,58,8,3,11,12"
alt="Venus"
href="venus.htm">
</map>
1.1 HTML - Conceptos iniciales Etiqueta TABLE
TABLE (ETIQUETA)
Crea un tabla, y define sus filas y columnas
Etiqueta Atributo Acción
© Iñaki Martín
<table style="width:100%">
<caption>Titulo de la tabla</caption>
<tr>
<th>NOMBRE</th>
Guión de curso – HTML- CSS- JS
<th>EDAD</th>
</tr>
<tr>
<td>Ana</td>
<td>50</td>
</tr>
<tr>
<td>Petra</td>
<td>94</td>
</tr>
<tr>
<td colspan="2">dos celdas unidas</td>
</tr>
</table>
1.1 HTML - Conceptos iniciales Etiquetas UL y OL
UL (ETIQUETA)
Crea un lista, con viñetas no ordenadas (que el identificador no pone orden, son puntos, guiones, etc)
Etiqueta Atributo Acción
© Iñaki Martín
OL (ETIQUETA)
Crea un lista, con viñetas ordenadas (que el identificador pone orden, son numeros, letras, etc)
Guión de curso – HTML- CSS- JS
<ol type="1">
<li>Pera</li>
<li>Uva</li>
<li>Manzana</li>
</ol>
1.1 HTML - Conceptos iniciales Etiqueta IFRAME
IFRAME (ETIQUETA)
Permite mostrar una parte de una web dentro de la web actual
Etiqueta Atributo Acción
© Iñaki Martín
<iframe src="nuevaURL"></iframe>
<iframe src="demo_iframe.htm"
height="200"
width="300"
style="border:2px solid grey;">
</iframe>
๏ HTML5 incluye nuevos elementos semánticos, que valen para definir zonas o partes de una pagina web.
© Iñaki Martín
</section>
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
Iñaki Martín
CAPÍTULO 1.2
FORMULARIOS HTML
©
Temario de curso HTML - CSS - JS
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
Temario de curso HTML - CSS - JS © Iñaki Martín
</head>
<body>
<form action="http://www.otrapagina.es" method="get">
Nombre: <input type = "text" name = "campo_nombre" value="(escriba aqui su nombre)" size="60"/> <br>
Seleccione:<br>
<input type = "radio" name = "opcionesradio" > Mayor de edad<br>
<input type = "radio" name = "opcionesradio" checked> Menor de edad<br>
Temario de curso HTML - CSS - JS
Seleccione:<br>
Seleccione:<br>
<select name = "listadesplegable" multiple>
<option value = "campo_Empadronado" selected>Empadronado</option><br>
<option value = "campo_Visitante habitual">Visitante habitual</option><br>
<option value = "campo_Turista">Turista</option><br>
<option value = "campo_Desplazado">Desplazado</option><br>
</select><br>
Sube una foto de tu ordenador<input type = "file" name = "fileupload" accept = "image/*" /><br>
<input type="submit" name="boton_final" value="PULSA AQUI Y VERAS QUE SORPRESA"><br><br>
</form>
</body>
</html>
1.2 HTML - Formularios Etiqueta FORM (Formularios) 4
FORM (ETIQUETA)
• Con la etiqueta FORM se define un formulario.
• Un formulario es una colección de elementos que sirven para preguntar al usuario por información. Esta información se
recopila, se agrupa y se pueden “enviar” a un servidor web, o a otro programa, o en general, a alguna entidad diferente.
Iñaki Martín
Parte 1
de este
tema Etiqueta SELECT “password” “date”
Etiqueta TEXTAREA “radio” “datetime-local”
Etiqueta BUTTON “submit” “email”
Temario de curso HTML - CSS - JS
INPUT (ETIQUETA)
Con la etiqueta INPUT se pueden crear elementos que solicitan informacion al usuario
El tipo de informacion depende de su atributo type y el valor que tenga
Etiqueta Atributo Valor Acción
Iñaki Martín
RESET Eso muestra un boton RESET, que lo que hace es borrar todos los
datos del form
El "value" aqui es el texto que aparece en el boton
<input type="reset" value="borrar todo">
1.2 HTML - Formularios Etiqueta INPUT 6
IMAGE Casi igual que un type BUTTON, pero con aspecto de imagen
El atributo "src" indica de donde se extrae la imagen
<input type="image" src="caja.png" onclick="alert('Hola!')" >
TIME Muestra un boton para elegir una hora y minutos, que dependiento
del navegador, puede mostrar
un cuadro de dialogo para elegirlos.
<input type="time" name="hora" >
WEEK Parecido a MONTH, solo que aqui pide una semana y un año
<input type="week" name=“unafecha">br>
SELECT (ETIQUETA)
Etiqueta Atributo Acción
SELECT Usado para crear listas desplegables
El texto de cada opcion va dentro de un par de etiquetas <option>
Iñaki Martín
OPTION SELECTED Contiene cada una de las opciones de una lista desplegable
Si una lleva el atributo "selected" (sin valor) sale seleccinado
por defecto
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat" selected>Fiat</option>
©
<option value="audi">Audi</option>
</select>
Temario de curso HTML - CSS - JS
TEXTAREA (ETIQUETA)
Etiqueta Atributo Acción
TEXTAREA Caja de texto multilinea que permite texto amplios. Si no caben los
textos en la caja inicilamente mostrada, se permite escribir
mostrando barras de desplazamiento.
<textarea name="mensaje">
Escriba aqui en el mensaje que desee.
</textarea>
TEXTAREA ROWS, COLS ROWS Indica el numero de filas que muestra inicialmente la caja
COLS Indica el ancho (en numero de caracteres) que muestra la caja
<textarea name="mansaje" rows="10" cols="30">
Escriba aqui en el mensaje que desee.
</textarea>
1.2 HTML - Formularios Etiquetas BUTTON y DATALIST 10
BUTTON (ETIQUETA)
Etiqueta Atributo Acción
BUTTON Practicamente identico a un input con type="button", solo que el
texto a mostrar está entre etiquetas "button" (mas facil para darle
estilo)
Iñaki Martín
DATALIST (ETIQUETA)
Etiqueta Atributo Acción
Temario de curso HTML - CSS - JS
INPUT LIST Valor que indica que DATALIST ha de usarse para filtrarse cuando el
usuario busque un valor
1.2 HTML - Formularios Etiqueta FIELDSET y LABEL 11
FIELDSET (ETIQUETA)
Etiqueta Atributo Acción
FIELDSET Actua como contenedor. Muestra su contenido enmarcado en un cuadro
<fieldset>
Iñaki Martín
LABEL (ETIQUETA)
Etiqueta Atributo Acción
LABEL FOR Aplica un texto a un componente, de modo que si se pincha en la
etiqueta es como si se hubiera pinchado en el componente (por
ejemplo, para option button)
Para asociarse al componente, ha de tener un atributo "for" que ha
de ser igual al atributo “id" del elemento con el que se enlaza
<label for="idDia">Dia</label>
<input type="radio" name="fase" id="idDia" value="dedia"><br>
SIZE Indica el tamaño (en chars) del campo a editar (aunque se puedan escribir
mas chars en el)
<input type="text" name="nombre" value="Luis" size="30">
MAXLENGTH Indica el tamaño máximo (en chars) que admite el campo a editar
<input type="text" name="nombre" value=“Luis" maxlength="20">
1.2 HTML - Formularios ATRIBUTOS COMUNES 13
MULTIPLE El usuario puede introducir mas de una valor para el elemento pedido
Funciona con estos input-types: email y file
©
PLACEHOLDER Muestra una "pista" sobre lo que debe llevar el campo. El texto indicado
en PLACEHOLDER se muestra en el campo del formulario, hasta que el
usuario escribe en el campo, momento en el que se borra.
Funciona con estos input-types: text, search, url, tel, email, y
password.
<input type="text" name="nombre" placeholder="(escriba aqui su nombre)”>
PATTERN Especifica una expresion regular que se usa como patron para validar el
valor del elemento.
Funciona con estos input-types: text, search, url, tel, email, y
password.
Consejo: Usar el atributo TITLE para ayudar al usuario con las reglas
que ha de cumplir
Cod.Provincia: <input type="text"
name="prefijoprovincia"
pattern="[A-Za-z]{3}"
title="Escriba solo tres letras">
1.2 HTML - Formularios ATRIBUTOS COMUNES 14
AUTOFOCUS Indica que este elemento sera el que obtenga el foco al cargar la
pagina
<input type="text" name="nombre" value="Luis" maxlength="20" autofocus>
©
FORMMETHOD Para usar junto a casos como el de FORMACTION, donde hay difeerntes botones con diferentes
FORMNOVALIDATE destino de envio, existen otros atributos como :
FORMTARGET FORMMETHOD permite aplicar diferentes metodos de envio para cada medio de envio
FORMNOVALIDATE permite que alguno de los modos de envijo no valide los datos al enviarlos
FORMTARGET permite definir ubicaciones para el nuevo destino (_blank, _self, etc)
1.2 HTML - Formularios ATRIBUTOS DE FORM 15
<form action="otrapagina.html">...</form>
<form action="/action_page.php">...</form>
METHOD METHOD indica qué metodo http (GET o POST) se usa en al enviar el form.
©
Truco: Se puede tener autocomplete "on" para el form, y "off" para algun campo, o al reves
Aviso: Algunos navegadores activan o desactivan el autocompletado de modo global
1.2 HTML - Formularios ATRIBUTOS DE FORM 16
<input type="submit">
</form>
ACCEPT- Especifica el juego de caracteres con el que son enviados los datos del
CHARSET formulario.
Valores normales: UTF-8 - Codificacio Unicodem, ISO-8859-1 -
Codificación de alfabetao latino
<form action="/action_page.php" accept-charset=“UTF-8”>
E-mail: <input type="email" name="user_email">
<input type="submit">
</form>
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
Iñaki Martín
CAPÍTULO 1.3
EJEMPLOS HTML-CSS
©
Temario de curso HTML - CSS - JS
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
Temario de curso HTML - CSS - JS © Iñaki Martín
<body>
<header>
<nav>
<h2>Un menu encima de una imagen</h2>
<div class="contenedor_menu">
<a href="inicio.html">Ayuda</a>
<a href="inicio.html">Alumnos</a>
<a href="inicio.html">Cursos</a>
<a href="inicio.html">Información</a>
Iñaki Martín
<a href="inicio.html">Inicio</a>
</div>
</nav>
</header>
...
nav {
/* SI USAMOS UNA IMAGEN */
background-image: url("cabecera.jpg");
/* SI USAMOS UN FONDO LISO DE COLOR */
/* background-color: #3eade8; */
©
/* Asi ponemos la imagen DE FONDO, cubre todo el header y su contenido, no es un elemento más dentro del header*/
background-size: cover;
/* relacion de tamaño de imagen sobre el fondo. Con un 50% de ancho, mete DOS VECES la imagen, salvo poner luego no-repeat */
background-repeat: no-repeat;
/* si la relacion de tamaño es menor que el tamaño del header, que no repita la imagen*/
background-position: center center;
.contenedor_menu {
/* position:absolute significa que un elemento se coloca con referencia absoluta en relación con el antepasado más cercano
que tiene position:absolute o bien position:relative." */
/* Asi pues con position:absolute se permite "el uso top, right, bottom, left" de modo absoluto sobre su contenedor */
/* En este caso, este contenedor contiene el menu, y se posiciona de modo absoluto sobre si padre, el nav, con lo que siempre
podemos asignarlo a cualquier esquina del nav (segun los extremos con valor 0 que usemos) */
position: absolute;
/* Este margen desplaza algo el menu de la esquina en la que lo estemos poniendo */
margin: 20px;
/* Esto indica que se coloque pegado a la parte de abajo de su contenedor */
bottom: 0;
/* Esto indica que se coloque pegado a la parte derecha de su contenedor */
right: 0;
}
(continua) ➡
1.3 Ejemplos Hmtl-Css Ejercicios: Un menu superior encima de la cabecera (imagen o color) 4
/* ******************** MENU */
(continuación)
nav div a {
/* Para ir colocando cada elemento del menu encadenados a la derecha */
Iñaki Martín
float: right;
/* Para separar un elemento del menu del otro */
margin-left: 6px;
/* Establece el ancho y alto de la caja del menu, esto es, en este caso, del elemento a */
padding: 5px 10px 5px 10px;
/* Color de fondo */
background-color: rgb(1, 1, 1);
/* Color de texto */
color: rgb(170, 219, 238);
/* Para hacer que los enlaces del menu no esten subrayados */
text-decoration: none;
©
/* para hacer que el fondo de cada elemento del menu camie de color al pasar el raton por encima */
nav div a:hover {
/* Color de texto */
color: rgb(12, 12, 11);
/* Texto en negrita */
font-weight: bold;
/* Color de fondo */
background-color: rgb(170, 192, 245);
}
1.3 Ejemplos Hmtl-Css Ejercicios: Un div con bordes parciales..... 5
width: 200px;
otro.... Hecho. height: 200px;
border-top: 20px solid red;
position: relative;
border-radius: 10%;
}
©
.divconbordeparcial:after {
content: "";
background: red;
Temario de curso HTML - CSS - JS
.divconbordeparcialderecho:after {
content: "";
background: red;
position: absolute;
bottom: 60%;
left: 90%;
height: 40%;
width: 20px;
}
.imageninterior{
width: 80%;
higth:80%;
padding: 20px;
}
1.3 Ejemplos Hmtl-Css Ejercicios: Un div compuesto por diversas columnas 6
Iñaki Martín
<div class="cuerpocentral">
<div class="articulo">
<img src="apps.png" hspace="5" vspace="5" />
<p>Lorem ipsum dolor sit amet, consectetur adipiscingelit, sed do eiusmod tempor incididunt ut labore et
</p>
</div>
©
<div class="articulo">
<img class="add.ico" hspace="5" vspace="5">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
</p>
</div>
Temario de curso HTML - CSS - JS
<div class="articulo">
<img class="abaco.png" hspace="5" vspace="5">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
</p>
</div>
<div class="div_vacio_con_clear"></div>
</div>
.articulo {
width: 28%; Mucho cuidado con este valor: el ancho total de
float: left; todos los articulos, más los padding y margins
background-color: darkslategray; Este es el elemento que hace que cada uno se no puede superar el 99% del tamaño de div
margin:5px;
border-radius: 5%;
alinee a la izquierda del anterior, pues nada uno va contenedor, o hay un salto de línea. Aquí hay 3
padding: 5px; "flotando" (subiendo y colocándose) a la izquierda de articulos, y aunque cada uno podría ocupar un
} su contenedor, y uno al lado del anterior 33% el realidad ha de ser menos.
.articulo img{
float: left;
} Al igual que los articulos, aquí indicamos que la imagen se coloque a la izquierda y flotando , de modo
que lo siguiente se coloque pegado a su derecha, y de este modo, el texto rodea la imagen
.div_vacio_con_clear{
clear: both;
} Muy importante. Si no existe, el contenedor "cuerpocentral" se colapsa y no toma la altura necesaria (pues contiene únicamente
elementos float). Si queremos que el borde rojo abarque todos los artículos, necesitamos esta div vacío con un clear
1.3 Ejemplos Hmtl-Css Ejercicios: Como tener dos botones en un mismo formulario 7
๏ Dado que una etiqueta form no puede tener dentro otra etiqueta form... ¿cómo poner dos botones en un mismo form?
1 Solución 1 ( llamando al mismo destino)
<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />
๏ Usar dos submit que tengan distinto value
Iñaki Martín
๏ Usando button con el nuevo atributo HTM5 llamado formaction, indicando un action distinto a cada botón :
<button type="submit" name="camper" formaction="formindb_hoh_1.php">Camper</button>
<button type="submit" name="camper" formaction="formindb_hoh_2.php">Medical</button>
1.3 Ejemplos Hmtl-Css Ejercicios: UNA WEB RESPONSIBE BASICA 8
<head>
<title>ejemplos</title>
Iñaki Martín
<body>
<div class="fila" id="cabecera">
<nav>
<img src="imagenes/logo.png" alt="imagen" id="imglogo">
<div class="contenedor_menu">
<div class="cajamenu1">
©
<p>BLOG</p>
</div>
<div class="cajamenu3">
<img src="imagenes/about.png" alt="imagen">
<p>ABOUT US</p>
</div>
<div class="cajamenu4">
<img src="imagenes/home.png" alt="imagen">
<p>HOME</p>
</div>
</div>
</nav>
</div>
tempor incidunt ut labore et Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod
tempor incidunt ut labore etLorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod
tempor incidunt ut labore et
id est</p>
<img src="imagenes/more.png" alt="imagen" class="imagen_articulo_inferior">
</div>
</div>
</div>
<div id="pie">
<span> HOME </span>
<span> ABOUT US </span>
<span> BLOG </span>
<span> CONTACT </span>
</div>
</body>
</html>
Temario de curso HTML - CSS - JS © Iñaki Martín
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
Iñaki Martín
CONCEPTOS INICIALES
Temario de curso Lenguajes de Marcas
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
Temario de curso Lenguajes de Marcas © Iñaki Martín
element element div p Selection todos los elementos de un tipo dentro de otro tipo (todo los <p> dentro de un
<div> )
element>element div > p Selection todos los elementos de un tipo hijos directos de otro tipo (todo los <p> hijos
Temario de curso Lenguajes de Marcas
:in-range input:in-range Selects <input> elements with a value within a specified range
:invalid input:invalid Selects all <input> elements with an invalid value
:last-child p:last-child Selects every <p> elements that is the last child of its parent
Temario de curso Lenguajes de Marcas
:last-of-type p:last-of-type Selects every <p> element that is the last <p> element of its parent
:link a:link Selects all unvisited links
:not(selector) :not(p) Selects every element that is not a <p> element
:nth-child(n) p:nth-child(2) Selects every <p> element that is the second child of its parent
:nth-last-child(n) p:nth-last-child(2) Selects every <p> element that is the second child of its parent, counting from the last child
:nth-last-of-type(n) p:nth-last-of-type(2) Selects every <p> element that is the second <p> element of its parent, counting from the last child
:nth-of-type(n) p:nth-of-type(2) Selects every <p> element that is the second <p> element of its parent
:only-of-type p:only-of-type Selects every <p> element that is the only <p> element of its parent
:only-child p:only-child Selects every <p> element that is the only child of its parent
:optional input:optional Selects <input> elements with no "required" attribute
:out-of-range input:out-of-range Selects <input> elements with a value outside a specified range
:required input:required Selects <input> elements with a "required" attribute specified
:root root Selects the document's root element
:target #news:target Selects the current active #news element (clicked on a URL containing that anchor name)
:valid input:valid Selects all <input> elements with a valid value
:visited a:visited Selects all visited links
2.1 CSS - Inicio RESUMEN: SELECTORES DE PSEUDO-ELEMENTOS 6
ESTRUCTURA BASICA
• Los estilos se crean para aplicarse a algun elemento HTML (a un <P>, a un <DIV>, a todos los <TABLE>, etc…)
• Al crearse un estilo, se le da un nombre, que se llama SELECTOR. Su contenido se escribe entre llaves ({ }) y todo el se
llama DECLARACION.
Iñaki Martín
• SELECTOR: El selector es el elemento HTML que vamos a seleccionar del documento para aplicarle un estilo
concreto. Por ejemplo, un elemento como <p>. El selector hace la selección de a qué elementos
vamos a aplicar las reglas
• PROPIEDAD: La propiedad es una de las características que se puede aplicar a un elemento (color, borde, …)
• VALOR: Cada propiedad CSS tiene una serie de valores concretos, con los que tendrá uno u otro
comportamiento. El valor puede ser un valor especifico o un IDENTIFICADOR (una palabra que
tiene ya un valor predefinido)
CODIFICACION
• Para asegurar el uso de caracteres no estandar ascii, se puede definir qué codificacion de caracteres usar añadiendo al
principio del fichero css la instruccion:
Iñaki Martín
@CHARSET "UTF-8";
©
COMENTARIOS
Temario de curso Lenguajes de Marcas
</head>
<body> .selector1 {
<div class="selector1"> esto sale en rojo</div> color: red;
</body> }
El contenido del css se escribe dentro del HEAD entre etiquetas STYLE
EL ANTIGUO
<head>
Temario de curso Lenguajes de Marcas
FICHERO MYSTYLE.CSS
<style> SE ESCRIBE DENTRO DEL
.selector1 { HTML
color: red;
}
</style>
SELECTOR DE ID
</head>
<body>
<div class="selector1"> esto sale en rojo</div>
</body>
• CSS EN LINEA, SE ESCRIBE UN ESTILO PARA UN ELEMENTO HTML ,DENTRO DE LA ETIQUETA HTML
El estilo se aplica dentro de un atributo STYLE en la etiqueta deseada
<head>
</head>
<body>
<div style="color: red;"> esto sale en rojo</div>
</body>
2.1 CSS - Inicio PRIORIDAD CSS 10
PRIORIDAD en CSS
• En lo que respecta a donde se han declarado los elementos, la prioridad es:
1. Primero se aplican los estilos de los ficheros externos.
Iñaki Martín
2. Segundo se aplican los estilo de la cabecera de la página, machacando los anteriores si hay conflicto
3. Tercero se aplica el estilo que se pueda haber aplicado a un elemento concreto
• En lo que respecta a que hoja de estilo usar, hay que tener en cuenta que, además de la hoja de estilos que
©
✦ la hoja de estilos del navegador, o dispositivo en el que se muestra la página. Los navegadores aplican por
defecto unos estilos básicos al cargar la página (tipo de letra, alineación, etc.). No son los mismos en todos
los navegadores, y a veces son la causa de que una página no se vea igual en todos los navegadores.
✦ En segundo lugar está el estilo del usuario. Cada usuario puede crear una hoja de estilos para aplicarla a
todas las páginas que visite con su navegador. Esta opción suele ser útil para personas discapacitadas.
Éstas paginas se aplican automáticamente al cargarse la página, y quedan por defecto en caso de que el
diseñador no haya aplicado ningún estilo.
La prioridad en estos casos es:
1. Primero se aplica la hoja del navegador,
2. Segundo la hoja del usuario, machacando los estilos aplicados antes si hay conflicto
3. Tercero, la hoja del diseñador.
2.1 CSS - Inicio SELECTORES BASICOS (I) 11
color: red;
}
• #X : Selector de ID
Selecciona: Todo elemento con id=“X” (Afecta al elemento HTML con un atributo ID igual al selector.)
©
Recordar que según la especificación HTML de W3C, el atributo id asigna un valor único a un elemento de la página, esto
es, no debería haber dos elementos con el mismo id en la pagina, y en este caso, este selector solo devolvería un valor
color: red;
}
Por supuesto, todos los selectores se pueden componer de elementos simples…. o compuestos
#area1 a { /* todos los elementos <a> que esten dentro de un DIV=“area1” */
©
color: red;
}
Temario de curso Lenguajes de Marcas
• Cuando el valor de un atributo es un valor que pueda medirse, tamaño normalmente, pueden usarse diferentes medidas.
• Evidentemente, siempre es preferible usar medidas relativas a absolutas. El mas usado es px
Iñaki Martín
UNIDADES ABSOLUTAS
• in, pulgadas ("inches", en inglés). Una pulgada equivale a 2.54 centímetros.
• cm, centímetros.
• mm, milímetros.
• pt, puntos. Un punto equivale a 1 pulgada/72, es decir, unos 0.35 milímetros.
• pc, picas. Una pica equivale a 12 puntos, es decir, unos 4.23 milímetros.
©
UNIDADES RELATIVAS
• em, (no confundir con la etiqueta <em> de HTML), es un valor relativo respecto
Temario de curso Lenguajes de Marcas
EL BOX MODEL
• Todos los elementos que se “pintan” en HTML se consideran que son como cajas
• En CSS, se llama BOX MODEL para definir las capas que tiene cada caja (en consecusncia, las capas de cada elemento)
Iñaki Martín
<!DOCTYPE html>
<html>
<head>
<style>
div {
©
background-color: lightgrey;
width: 300px;
border: 25px solid green;
padding: 25px;
Temario de curso Lenguajes de Marcas
margin: 23px;
}
</style>
</head>
<body>
<div>EJEMPLO DE CONTENIDO (EN ESTE CASO UN TEXTO) CON SUS DIVERSAS “CAPAS”</div>
</body>
</html>
Margen top (abajo se llama bottom)
Border top (abajo se llama bottom)
Padding top (abajo se llama bottom)
Contenido
p {
color: green; /* Color de texto, formato valor */
Iñaki Martín
p {
direction: ltr; /* Escribe el texto "Left To Right" */
Iñaki Martín
}
2.1 CSS - Inicio ATRIBUTOS: TAMAÑO, MARGIN Y PADDING 17
ATRIBUTOS DE TAMAÑO
• height y width se usan para dar tamaño a un elemento.
NOTA : Recordar que al definir alto y ancho de un elemento, realmente es el ancho y alto del CONTINENTE del elemento.
Iñaki Martín
Para calcular el tamaño completo de un elemento hay que añadir el PADDING, BORDER Y MARGINS
p {
height: 200px; /* Ancho del contenido */
width: 50%; /* Alto del contenido */
width: auto; /* Ancho calculado por al navegador */
max-width: 500px; /* Ancho máximo de un elemento, prevalece sobre width */
©
max-heigth: 20%;
min-width: 500px; /* Ancho mínimo de un elemento, prevalece sobre width */
min-heigth: 20%;
Temario de curso Lenguajes de Marcas
p {
color: green; /* Color de texto, formato valor */
Iñaki Martín
Se pueden aplicar varios valores a la vez a una misma propiedad, lo que se llama SHORTHAND
background: #ff0000 url("paper.gif") no-repeat right top;
}
2.1 CSS - Inicio ATRIBUTOS: BORDER 19
ATRIBUTOS DE BORDE
• Muchas de las propiedades peden tener cuatro valores diferentes para top border, right border, bottom border y left border
p {
border-style: dotted; /* borde de puntos */
Iñaki Martín
border-bottom-style: solid; /* borde solido, solo el de abajo. Idem right, left, top*/
border-color: red;
border-color: red green blue yellow; /* todos a la vez, como shorthand, T,R,B,L*/
OUTLINE no es lo mismo que BORDER. OUTLINE es la linea que esta fuera de BORDER
outline-style: dotted;
outline-color: red;
outline-width: thick;
outline-offset: 15px; /* Distancia entre border y outline*/
}
2.1 CSS - Inicio ATRIBUTOS: POSITION 20
Se permite cambiar todas las propiedades de font de golpe. Se ha de seguir este estricto orden:
font: font-style font-variant font-weight font-size/line-height font-family;
}
๏ El selector @font-face permite especificar fuentes online, que no necesariamente esten instalads en el ordenador que
ejecuta el navegador
@font-face {
font-family: <un-nombre-que-damos-a-la-fuente-remota>;
src:<origen-de-donde-cargar-la-fuente-remota> ;
font-weight:<peso>;
font-style: <estilo>;
}
2.1 CSS - Inicio ATRIBUTOS: POSITION 21
ATRIBUTOS DE POSICIÓN
๏ Con position referencia a como, y donde, se colocan globalmente los elementos
p{
Iñaki Martín
position: absolute; /* Se ubican segun la posicion (el top, right, bottom, y left) que
tenga su elemento contenedor */
ATRIBUTOS DE OVERFLOW
ATRIBUTOS DE LINK
• Como los enlaces pueden tener diferentes “estados”, se pueden usar diversos estilos para cada estado:
a:link { /* link aun sin visitar (no se ha pinchado en el) */
Iñaki Martín
color: red;
}
ATRIBUTOS DE TABLAS
Podemos aplicar un estilo especifico a filas o columnas de una tabla, pero entonces la tabla necesita tener un ID
Temario de curso Lenguajes de Marcas
/* Un estilo especial para las tr (filas) pares (tabla debe tener id t01) */
table#t01 tr:nth-child(even) {
background-color: #eee;
}
/* Un estilo especial para las tr (filas) impares (tabla debe tener id t01) */
table#t01 tr:nth-child(odd) {
background-color: #fff;
}
SELECTORES AVANZADOS
• : Selector de TODO ELEMENTO
Selecciona: Todos los elementos (Afecta a TODOS los elementos html) A veces se usa (no correctamente) para poner a
cero el margin y padding. .
Iñaki Martín
• X + Z : Selector ADYACENTE
Selecciona: Todos los elementos de tipo Z que esten inmediatamente seguidos de un elemento de tipo X
ul + p { /* cambia el fondo de la primera etiqueta <p> que se encuentre tras un ul, solo de la
primera que encuentre, no de las demas */
background-color: black;
}
background-color: black;
}
©
Selecciona: Todos los elementos de tipo X que tengan expresamente definido el atributo Z, y este tenga el valor V
a[href="http://www.jyoc.com"] { /* cambia el fondo de todo enlace <a> cuyo href sea
"http://www.jyoc.com" */
color: #1f6b23;
}
• X [ Z * =“V” ] : Selector DE ATRIBUTOS CON VALOR POR EXPRESION REGULAR (varios casos diferentes)
Selecciona caso X [ Z * =“V” ] : Todos los elementos de tipo X que tengan expresamente definido el atributo Z, y este
contenga en alguna parte de su valor la cadena V
a[href *=“jyoc”] { /* cambia el fondo de todo enlace <a> cuyo href contenga el texto “joyc” */
/* usar a[href ^=“jyoc”] para buscar lo que “empiece por” */
color: #1f6b23; /* usar a[href $=“.com”] para buscar lo que “acabe por” */
}
2.1 CSS - Inicio SELECTORES AVANZADOS 27
Una pseudoclase se usa para definir un estado especial de un elemento. Por ejemplo, actuar
cuando un usuario pasa el mouse sobre un elemento o actuar sobre un enlace visitado o
Iñaki Martín
elemento::pseudoelemento { estilos }
color: red;
}
.cosa::after { /* inserta algún contenido después del contenido del elemento indicado */
content: url(cajon.png);
}
p::before { /* inserta algún contenido antes del contenido del elemento indicado */
content: url(cajon.png);
}
HERENCIA EN CSS
• Las etiquetas HTML pueden “anidarse”, unas dentro de otras, dejando unas etiquetas padres de
otras hijas (o abuelos y nietas … y así…):
Iñaki Martín
• Herencia CSS es la característica de que muchas de las propiedades de estilo de los elementos
padre son heredadas por los elementos hijo, pero no al revés.
• La tipografía base se establece en el elemento <body>.
• No todas las características son heredables: por ejemplo border, para evitar que se fuera
©
duplicando los bordes en cada hijo, o el tamaño de una tipografía si se fija como porcentaje,
para evitar que cada hijo fuera reduciéndose o aumentando el tamaño.
Temario de curso Lenguajes de Marcas
• Todo tendrá la misma fuente, jirafa se mostrará en negrita, elefante se mostrará en itálica pero
también en negrita porque em está dentro de strong.
• Decimos entonces que em desciende de strong que es su etiqueta padre (parent) y a su vez,
todas descienden de p que sería el abuelo.
2.1 CSS - Inicio HERENCIA CSS 31
• Si se aplica un estilo como este a las etiquetas p, saldrá todo de color rojo:
<p>
león p {color: red;}
<strong>jirafa <em>elefante</em></strong>
Iñaki Martín
vemos que cambia elefante, pero perro no cambia, pues la regla dice que sólo será negro el
contenido de una etiqueta em que esté dentro de strong. Todos los selectores que estén
anidados dentro de otros heredarán los valores de propiedades asignados al selector exterior,
salvo que se modifiquen de otra manera.
• Recordar que el selector “strong em” es un selector descendente, que implica a todos los em
dentro de un strong
2.1 CSS - Inicio HERENCIA CSS 32
un texto
• A la etiqueta se le asignan dos atributos, id y class, en uno para que el párrafo sea azul y en el
otro que sea rojo ¿De que color se verá el texto?…. Rojo
©
¿Importa el orden en que está escrito? No, sea como sea que lo escribamos, siempre será rojo
porque un atributo id es más importante que un atributo class. Los selectores tienen un orden
Temario de curso Lenguajes de Marcas
de prioridades, que se calcula con un complejo cálculo aritmético, pero que casi siempre este
(de la mayor a la menor prioridad):
1. lo que está definido en la etiqueta en el atributo style
2. lo que está definido con un atributo id
3. lo que está definido con un atributo class
4. lo que está definido con un selector genérico (una etiqueta)
<style>
<p>esto se verá rojo porque TODOS los parrafos son rojos</p> p {color: red;}
<p class="verde">pero esto se verá verde</p> p.verde {color: green;}
<p style="color: blue;”>este texto se verá de color azul</ </style>
p>
• Otro ejemplo ocurre con definiciones más complejas como las listas; por ejemplo, si queremos
resaltar un ítem:
<ul id="milista">
<li class="resaltado">primer item de una lista</li>
Iñaki Martín
• la definición antedicha no funciona, porque lo que dice ul#demo li es más poderoso que lo que
©
dice la clase .resaltado (un id prevalece sobre un class). Para solucionarlo podríamos hacer
esto:
Temario de curso Lenguajes de Marcas
MODIFICADOR !IMPORTANT
• La herencia y la jerarquía tiene una excepción. El uso del modificador !important en una
determinada regla hace que ésta se salte la cadena de prioridades y que se aplique de forma
prioritaria. Se emplea al final de una propiedad CSS, así:
<p class="claseColorVerde claseColorRojo”>
… contenido ... <style>
</p> .claseColorVerde {color: green !important;}
.claseColorRojo {color: red;}
</style>
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
© Iñaki Martín
CAPÍTULO 2.2 -
CSS AVANZADO
Guión de curso – HTML-CSS-JS
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
Guión de curso – HTML-CSS-JS © Iñaki Martín
Gráficos Básicos
.rectangulo { .rombo {
width: 140px; width: 100px;
height: 70px; height: 100px;
background: #428bca; border: 3px solid #555;
} background: #428bca;
-webkit-transform: rotate(45deg) skew(15deg, 15deg);
-moz-transform: rotate(45deg) skew(15deg, 15deg);
-ms-transform: rotate(45deg) skew(15deg, 15deg);
-o-transform: rotate(45deg) skew(15deg, 15deg);
transform: rotate(45deg) skew(15deg, 15deg);
}
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT
© Iñaki Martín
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
1
3.1 JavaScript - Inicio Introduccion
INTRODUCCION
• Javascript es un lenguaje de programación orientado a definir el comportamiento de los elementos de una pagina web
• El codigo Javascript normalmente se escribe en la propia pagina HTML, encerrado entre estas etiquetas
© Iñaki Martín
<script type=“text/javascript">
……
</script>
2
3.1 JavaScript - Inicio Tipos de datos
Tipos de datos
function tiposdedatos(){
// tipos de datos principales
© Iñaki Martín
// tipos primitivos:
var num = 16; // Numero
var cad = "hola"; // Cadenas (String)
var bo = false ; // boolean
var y; // undefined (no tiene tipo definido)
var w = null; // null (para objetos sin referencia)
// tipos complejos
var ob = {dni:"23224232", letra:"e"}; // Objecto
var fu = function unafuncion(){} // Function
3
3.1 JavaScript - Inicio Operadores
Operadores matemáticos, lógicos y de comparación
<script>
function operadores() {
© Iñaki Martín
a=3;
re = (a==3)
• Los comentarios multilieas se// comparacion de valor, resultado TRUE
escriben encerradas las lineas entre /* y */
re = (a=="3") // comparacion de valor, resultado TRUE
re /*
= (a===3) // comparacion de valor y tipo, resultado TRUE
re = (a==="3") //decomparacion de valor y tipo, resultado FALSE
Comentario
varias lineas
*/
re = (a!=2) // comparacion de valor, resultado TRUE
re = (a!==3) // comparacion de valor y tipo, resultado FALSE
re = (a==="3") // comparacion de valor y tipo, resultado TRUE
• Para declarar una funcion, se escribe el nombre, seguido de paréntesis con o sin parámetros, y el resto del código entre
llaves.
• Pueden tener o no parametros. Si los tienen, solo definir el identificador (variable) que recibe el valor
• Puede devolver o no un valor, si lo devuelve, es con la instruccion RETURN seguido del valor a devolver
<script>
function unaFuncion( par1 , par2 ) {
var res = sumar(par1, par2)
document.getElementById("demo").innerHTML = “Nuevo valor:"+res;
}
Guión de curso – HTML-CSS-JS
function sumar(1,b){
return a+b;
}
</script>
<body>
<p id=“demo">ESte texto cambia al pulsar el boton </p>
<button type="button" onclick=“unaFuncion(3,5)" >Pulsame y cambiaré</button>
</body>
5
3.1 JavaScript - Inicio Funciones (II)
• En Javascript se puede acceder tanto a la ejecucion de una funcion, como a la definición de la funcion
• Si quiero acceder a la fucion (a ejecutar la función) la invoco con parentesis (y sus parametros si los hubiera)
• Si quiero obtener la definición de la funcion, la invoco SIN parentesis
© Iñaki Martín
<script>
function otraFuncion() {
document.getElementById("demo1").innerHTML = sumar(2,6);
document.getElementById("demo2").innerHTML = sumar;
}
function sumar(a,b){
return a+b;
}
</script>
<body>
Resultado del primer párrafo:
Guión de curso – HTML-CSS-JS
6
3.1 JavaScript - Inicio Variables en JS
Ambito de variables
<script>
// Esta es una variable GLOBAL pues esta fuera de una funcion:
var varglobal1 = 123;
© Iñaki Martín
function leer() {
// Esta es una variable LOCAL pues esta declarada dentro de una funcion:
var varlocal1 = 942;
1.- Escribir el código Javascript en un fichero externo, y añadir la referencia al fichero en el HTML:
© Iñaki Martín
<script src=“miScript1.js”></script>
2.- Escribir el código Javascript dentro del HTML, en un script interno (normalmente dentro del HEAD)
<script type="text/javascript">
// Aqui pueden ir las funciones y codigo js a usar en esta pagina
</script>
Se pueden escribir tantos scripts como se desee
3.- Escribir el código Javascript en un script, pero en cualquier parte del HTML
Guión de curso – HTML-CSS-JS
4.- Escribir el código Javascript dentro de un elemento especifico del HTML ( en un evento p.e.)
<button type="button"
id="boton1"
onclick="document.getElementById('boton1').innerHTML = Date()">
Haz click en mi y veras la hora
8
3.1 JavaScript - Inicio Acciones primarias JS
Identificar un elemento HTML (getElementByID , getElementByName)
Podemos identificar un elemento HTML por su atributo ID
document.getElementById("demo");
© Iñaki Martín
</button>
o usando DOCUMENT.WRITE, que escribe un texo en la parte del html donde se ejecute
<script>
document.write(5 + 6);
// CUIDADO: Si se ejecuta un document.write() cuando TODA la pagina html ya se ha
// cargado, se BORRA TODA ELLA antes de escribir el contenido del document.write()
</script>
10
3.1 JavaScript - Inicio Strings (I)
Strings
function stringsatope() {
var a = "hola";
© Iñaki Martín
var b = 'hola';
var c = "Me llamo 'Pepe'";
var d = "Me llamo \”Pepe\"";
var f = "Buenos dias para todos";
x = f.search("[oa]"); // Idem INDEXOF solo que admite tambien buscar por una
// expresion regular (x es 4, busca una "o" o una "a")
x = f.substring(1,4); // SUBSTRING devuelve la subcadena desde la posicion del 1er param
// (inclusive) hasta el segungo param (exclusive) (x vale "uen")
x = f.substring(10); // Si solo hay un paramtro SUBSTRING devuelve desde ahi al final
// (x vale "s para todos")
x = f.slice(-10); // SLICE es igual que SUBSTRING, solo que acepta que el primer
// parametro sea negativo, y para la posicion inicial se cuenta
// el comienzo desde el fin de la cadena (x vale "para todos")
x = f.substr(4,5); // SUBSTR es igual que SUBSTRING con dos parametros, siendo el
// segundo el tamaño de la subcadena (x vale "os di")
}
11
3.1 JavaScript - Inicio Strings (II)
function stringsatope() {
var a = "hola";
var f = "Buenos dias para todos";
x = f.replace("a","xx"); // REPLACE sustituye la primera aparicion del 1er parámetro
// por el 2do parámetro (x es "Buenos dixxs para todos")
© Iñaki Martín
13
3.1 JavaScript - Inicio Fechas
function fechasATope() {
// Para construir una fecha específica, hay varias opciones (meses van de 0 a 11):
x = new Date(year, month, day, hours, minutes, seconds, milliseconds);
x = new Date(year, month, day);
x = new Date("2017-07-25");
x = new Date(milliseconds); // Milisegundos desde 1-1-70
14
3.1 JavaScript - Inicio Arrays
function arraysATope() {
// Nota: en todos los ejemplos se supone que el array aCoches no se esta cambiando
15
3.1 JavaScript - Inicio Arrays (Métodos I)
// Este array se supone inalterable para todos los ejemplos siguientes
var aCoches = ["Opel", "Volvo", "BMW"];
Metodo Descripción
© Iñaki Martín
UNSHIFT Añade un nuevo primer elemento al array (moviendo el resto hacia adelante)
Devuelve el valor nuevo tamaño del array
var t = aCoches.unshift("Seat") // (t es 4 y el array queda ["Seat", "Opel",
Volvo", "BMW"]
SPLICE Añade elementos al array.
El 1er parametro es la posicion de insercion de los nuevos elementos.
El 2do parametro es cuantos elementos, desde la insercion, se borran.
El 3er parametro (y siguientes) son los elementos a insertar (son todos
opcionales)
aCoches.splice(2, 0, "Audi", "Skoda");
Se puede usar SPLICE para eliminar completamente elementos de un array;
aCoches.splice(1,2);
CONCAT Une varios arrays
aCoches.concat(["Bentley", “Rolls"]);
// (aCoches queda [ "Opel", Volvo", “BMW","Bentley", “Rolls"]
16
3.1 JavaScript - Inicio Arrays (Métodos II)
// Este array se supone inalterable para todos los ejemplos siguientes
var nombres = [“Juan”, “Ana”, “Pedro”];
var datos = [101,7, 2, 70];
Metodo Descripción
© Iñaki Martín
Explicacion: sort ordena los elementos del array por pares, esperando un valor negativo, cero
o positivo. Si es positivo, intercambia los valores. Con la función anonima, cambiamos el
comportamiento estandar de comparacion de SORT, que ahora compara los pares del array como si
fueran los parametros a y b, y hacemos que nuestra funcion devuelva un valor positivo o
negativo según nuestro criterio.
Este mismo criterio se puede usar para ordenar objetos, aplicando operaciones con sus
Guión de curso – HTML-CSS-JS
propiedades de modo que nos de un valor positivo o negativo según nuestro deseo.
SLICE Crea un nuevo array con una seccion del array objeto actual
El 1er parametro es el elemento inicial a extraer
El 2do parametro es el elemento final (excluido) a extraer. Es opcional, si no
se indica, se coge hasta fin de array
var t = aCoches.slice(1,2); // t vale los elementos 2so y 3ro de aCoches
17
3.1 JavaScript - Inicio Instrucciones de Control (IF - SWITCH)
function instrucionesDeControl() {
// IF - ELSE IF - ELSE
// Advertir que:
© Iñaki Martín
// SWITCH
// Advertir que:
// - Default no ha de ser la ultima instruccion
// - Los case no pueden repsetirse, pero pueden tener cualquier orden
Guión de curso – HTML-CSS-JS
18
3.1 JavaScript - Inicio Instrucciones de Repetición (WHILE - FOR)
function instrucionesDeRepeticion() {
// WHILE
var i=0;
© Iñaki Martín
function conversionesATope() {
var x = 9.656;
var t = x.toFixed(2); // t es "9.66" (coge 2 decimales)
var t = x.toPrecision(2); // t es "9.7" (coge un total de dos digitos)
g = new Date();
var d = Number(g) // d es 1404553245671
var d = g.getTime() // d es 1404553245671
20
3.1 JavaScript - Inicio Errores (TRY - CATCH)
function erroresATope() {
try {
© Iñaki Martín
// La propiedad name del objero err creado tiene estos posibles valores.
// EvalError Se produjo un error al ejecutar la funcion eval()
// RangeError Un número ha salido fuera de su rango valido ("out of range")
// ReferenceError Se ha pedido una referencia erronea de una objeto
// SyntaxError Error sintactico
Guión de curso – HTML-CSS-JS
21
3.1 JavaScript - Inicio Eventos HTML y JS
Eventos
• Un evento es algo que o bien el usuario, o bien el navegador, “hacen”
• Cuando ocurre un evento, se puede definique que se ejecute un determinado codigo javascript
© Iñaki Martín
• Ejemplos de eventos:
- Una pagina ha terminado de cargarse
- El texto de un elemento html ha cambiado
- El usuario ha pinchado en un boton…
• El modelo normal de aplicar un codigo a un evento de un elemento HTML es :
<elemento evento="codigojavascript">
<button id ="pru"
onclick="document.getElementById('pru').innerHTML = Date()”>
Son las…
Guión de curso – HTML-CSS-JS
</button>
// igual que antes, pero usando this, ya que se hace referencia al propio elemento
<button onclick="this.innerHTML = Date()”>Son las…</button>
if (document.getElementById('m2').checked) {
v = parseInt(document.getElementById('m2').value);
precio = precio + v;
}
if (document.getElementById('m3').checked) {
v = parseInt(document.getElementById('m3').value);
precio = precio + v;
}
// ---- Ver si un elemento se ha elegido en un CHECK BOX:
if (document.getElementById('doblequeso').checked) {
precio = precio + parseInt(document.getElementById('doblequeso').value);
}
// ---- ponemos el precio en el paragraph necesario:
document.getElementById("par1").innerHTML = "Precio : " + precio;
}
</script>
</head>
23
3.1 JavaScript - Inicio Validacion de formulario HTML con JS (I)
<body>
BODY con HTML
</form>
</body>
</html>
24
3.1 JavaScript - Inicio Redirecciones con JS (I)
<html>
<head>
</head>
<body>
EJEMPLO 1: REDIRECCION CON UN ENLACE HTML<br>
© Iñaki Martín
EJEMPLO 2: REDIRECCION DESDE UNA FUNCION JAVASCRIPT LLAMADA CON UN BOTON HTML<br>
<p>Pincha en el enlace e iras a la portada de El Pais</p>
<form>
<input type="button" value="Redireccion 2" onclick="Redireccion2();" />
</form>
<script type="text/javascript">
function Redireccion2() {
window.location = "http://www.elpais.com/";
// CUIDADO QUE NO FUNCIONA poniendo window.location = "www.lavanguardia.com";
// Pues te envia a la pagina http://localhost:8383/ProyectoEjemplo/www.elpais.com
// Esto es, estas añadiendo una rama a tu propio dominio
}
Guión de curso – HTML-CSS-JS
</script>
#reloj { width: 150px; height: 30px; padding: 5px 10px; border: 1px solid black;
font: bold 1.5em dotum, "lucida sans", arial; text-align: center;
float: right; margin: 1em 3em 1em 1em; }
</style>
<script>
function actual() {
fecha=new Date(); //Actualizar fecha.
hora=fecha.getHours(); //hora actual
minuto=fecha.getMinutes(); //minuto actual
segundo=fecha.getSeconds(); //segundo actual
if (hora<10) { //dos cifras para la hora
hora="0"+hora;
}
if (minuto<10) { //dos cifras para el minuto
minuto="0"+minuto;
}
if (segundo<10) { //dos cifras para el segundo
Guión de curso – HTML-CSS-JS
segundo="0"+segundo;
}
//devolver los datos:
mireloj = hora+" : "+minuto+" : "+segundo;
return mireloj;
}
EVENTOS DE TECLADO
==========================================================================================
onkeydown The event occurs when the user is pressing a key
onkeypress The event occurs when the user presses a key
onkeyup The event occurs when the user releases a key
Guión de curso – HTML-CSS-JS
28
3.1 JavaScript - Inicio APENDICE 1: EVENTOS HTML (II)
EVENTOS DE FORMULARIO
==========================================================================================
onblur The event occurs when an element loses focus
onchange The event occurs when the content of a form element, the selection,
© Iñaki Martín
or the checked state have changed (for <input>, <keygen>, <select>, and <textarea>)
onfocus The event occurs when an element gets focus
onfocusin The event occurs when an element is about to get focus
onfocusout The event occurs when an element is about to lose focus
oninput The event occurs when an element gets user input
oninvalid The event occurs when an element is invalid
onreset The event occurs when a form is reset
onsearch The user writes something in a search field (for <input="search">)
onselect The event occurs after the user selects some text (for <input> and <textarea>)
onsubmit The event occurs when a form is submitted
ondragend The event occurs when the user has finished dragging an element
ondragenter The event occurs when the dragged element enters the drop target
ondragleave The event occurs when the dragged element leaves the drop target
ondragover The event occurs when the dragged element is over the drop target
ondragstart The event occurs when the user starts to drag an element
ondrop The event occurs when the dragged element is dropped on the drop target
EVENTOS DE PORTAPAPELES
==========================================================================================
oncopy The event occurs when the user copies the content of an element
oncut The event occurs when the user cuts the content of an element
onpaste The event occurs when the user pastes some content in an element
EVENTOS DE IMPRESION
==========================================================================================
onafterprint A page has started printing, or if the print dialogue box has been closed
onbeforeprint A page is about to be printed
29
3.1 JavaScript - Inicio APENDICE 1: EVENTOS HTML (III)
EVENDOS MULTIMEDIA
==========================================================================================
onabort The event occurs when the loading of a media is aborted
oncanplay The browser can start playing the media (when it has buffered enough to begin)
oncanplaythrough The browser can play through the media without stopping for buffering
© Iñaki Martín
ondurationchange The event occurs when the duration of the media is changed
onemptied The event occurs when something bad happens and the media file is
suddenly unavailable (like unexpectedly disconnects)
onended The media has reach the end (useful for messages like "thanks for listening")
onerror The event occurs when an error occurred during the loading of a media file
onloadeddata The event occurs when media data is loaded
onloadedmetadata The event occurs when meta data (like dimensions and duration) are loaded
onloadstart The event occurs when the browser starts looking for the specified media
onpause The media is paused either by the user or programmatically
onplay The event occurs when the media has been started or is no longer paused
onplaying The media is playing after having been paused or stopped for buffering
onprogress The browser is in the process of getting the media data (downloading the media)
onratechange The event occurs when the playing speed of the media is changed
onseeked The user is finished moving/skipping to a new position in the media
Guión de curso – HTML-CSS-JS
EVENTOS DE ANIMACION
==========================================================================================
animationend The event occurs when a CSS animation has completed
animationiteration The event occurs when a CSS animation is repeated
animationstart The event occurs when a CSS animation has started
30
3.1 JavaScript - Inicio APENDICE 1: EVENTOS HTML (IV)
EVENTOS DE TRANSICIONES
==========================================================================================
transitionend The event occurs when a CSS transition has completed
EVENTOS DE SERVIDOR
© Iñaki Martín
==========================================================================================
onerror The event occurs when an error occurs with the event source
onmessage The event occurs when a message is received through the event source
onopen The event occurs when a connection with the event source is opened
EVENTOS MISCELANEO
==========================================================================================
onmessage The event occurs when a message is received through or fom an object
(WebSocket, Web Worker, Event Source or a child frame or a parent window)
ononline The event occurs when the browser starts to work online
onoffline The event occurs when the browser starts to work offline
onpopstate The event occurs when the window's history changes
onshow The event occurs when a <menu> element is shown as a context menu
onstorage The event occurs when a Web Storage area is updated
Guión de curso – HTML-CSS-JS
ontoggle The event occurs when the user opens or closes the <details> element
onwheel The event occurs when the mouse wheel rolls up or down over an element
31
4.1 - XML 1
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 4.1
©Iñaki Martín
XML INICIAL.
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
4.1 - XML Introduccion XML 2
HISTORIA DE XML
๏ Desde siempre ha sido necesario intercambiar informacion entre diferentes ordenadores, o dentro del
mismo ordenador, entre diferentes sistemas o programas.
๏ Cuando un programa envia información a otro programa, ambos han de saber que formato tiene esa
información
©Iñaki Martín
๏ Con la proliferación de la comunicaciones por internet, se hizo mucho más grande el problema de que todos
los ordenadores o sistemas conocieran el formato de cada uno de los ficheros que compartían informacion.
๏ Ya antes de intenet, por los años 1970, IBM creo un lenguaje llamado GML (Generalized Markup Language),
que surgió por la necesidad de almacenar grandes cantidades de información y compartirla en otros SO y
plataformas.
๏ Este lenguaje gustó a la ISO, por lo que trabajaron para normalizarlo, creando SGML (Standard Generalized
©Iñaki Martín
Markup Language) en 1986. Ya no era un lenguaje solo para IBM, sino un intento de adaptarse a un gran
abanico de problemas y sistemas.
๏ En el año 1989 se creó la web, y junto con ella el lenguaje HTML. Este lenguaje se definió en el marco de
SGML. Los navegadores web sin embargo no crean validaciones de la informacion que reciben en el código
Temario de curso hTML-Css-Js-XML
HTML, así las páginas web son caóticas y no estan obligadas a cumplir con una sintaxis, lo que hace a las
páginas más frágiles y a los navegadores más complejos.
๏ La principal limitación del HTML es que cada documento pertenece a un vocabulario fijo, establecido por
el DTD (document type definition, que es quien da una descripción de estructura y sintaxis de un documento)
o por un XSD (otro descriptor más avanzado, que describiremos tambien mas adelante). Es imposible para
un intérprete (por ejemplo un navegador) analizar el documento sin tener conocimiento de su gramática (del
DTD o XSD). Por ejemplo, el navegador sabe que antes de una etiqueta <div> debe haberse cerrado
cualquier <p> previamente abierto.
๏ Los navegadores resolvieron esto adaptandose para resolver cada uno sus problemas (scripts, javascripts,
Active X, HTML dinámico…) en vez de incluir un analizador genérico
๏ XML surge entonces como ese modelo genérico que permita un estandar único para la comunicación entre
sistemas, sin las limitaciones que existían.
4.1 - XML Que es XML 4
PROBLEMAS DE HTML
๏ HTML:
- HTML carece de un chequeo sintáctico. Páginas conerroressonmostradasenlosnavegadores.
- HTML carece de estructura.
©Iñaki Martín
QUE ES XML
<Libro>
y cierre. <Titulo>La vida es sueño</Titulo>
<Autor>Calderon de la Barca</Autor>
๏ Distinción entre mayúsculas/minúsculas. </Libro>
</Libros>
PROLOGO
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- Encoding: indica cómo se codificó el documento, y no es obligatoria (por defecto UTF-8). Se debe utilizar si se
desea usar otros juegos de caracteres.
- Standalone: “yes” indica que el documento no va acompañado de DTD ni de XML Schema; “no” indica que
requiere una DTD o XML Schema. No es un atributo obligatorio.
Temario de curso hTML-Css-Js-XML
4.1 - XML Elementos de un XML: DTD y XSD 8
DOCTYPE
<!DOCTYPE MiDTD SYSTEM “C:\MiDTD.dtd”>
๏ DOCTYPE : Indica la referencia (path o URI) a la DTD, así como el nombre (MiDTD) del elemento raíz de la
misma.
๏ La DTD podría ir incorporada en el propio documento XML, sin requerir otro fichero aparte.
©Iñaki Martín
SCHEMA
<?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
๏ Si se dedice exponer el formato del XML en un XSD, la referencia al fichero XSD se incluye como se indica
en la linea del elemento note.
๏ Como se ve más adelante, los XSD son mas complejos y mas efectivos que los DTD
4.1 - XML Elementos de un XML: Etiquetas 9
ETIQUETAS
<Titulo> </Titulo>
๏ En un XML la información está estructurada y se compone de partes bien definidas, y que esas partes se
©Iñaki Martín
ELEMENTO
- Apóstrofe: ‘
- Comilla: “
๏ Estos caracteres prohibidos se pueden incluir reemplazando los elementos por entidades o se incluyen en
secciones CDATA.
4.1 - XML Elementos de un XML: Atributos 11
ATRIBUTOS
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Libros>
<Libro Precio="1.12 euros" Editorial="Santillana">
<Titulo>Don Quijote de la Mancha</Titulo>
<Autor>Miguel de Cervantes</Autor>
</Libro>
<Libro Precio="658 euros" Editorial="Anaya">
©Iñaki Martín
๏ A cada elemento se le puede añadir informacion asociada al mismo, por medio de atributos
๏ Un atributo se define por el par nombre=valor asociada con el elemento. Precio="1.12 euros” en el ejemplo
Temario de curso hTML-Css-Js-XML
REFERENCIAS A CARACTERES
๏ Permiten incluir cualquier carácter dentro de un documento XML que no sea directamente reconocible.
๏ Basado en el conjunto de caracteres ISO/IEC 10646 (http://xml.coverpages.org/xml- ISOents.txt).
๏ Se pueden usar dos formatos:
- &#valor; donde valor es el numero del caracter a representar, en formato de numero en decimal
Temario de curso hTML-Css-Js-XML
- &#xvalor; donde valor es el numero del caracter a representar, en formato de numero en hexadecimal
๏ No olvidar que acaba en dos puntos (;)
4.2 - DTD 1
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 4.2
©Iñaki Martín
XML Y DTD.
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
4.2 - DTD Reglas generales 2
DTD
๏ DTD ( Document Type Definition ) define la gramática a seguir en el documento XML para que éste sea
considerado como válido.
๏ Para conectar (hacer referencia) un DTD y un XML, puede hacerse internamente o externamente al XML
©Iñaki Martín
fichero formato.dtd
<!ELEMENT RaizLibros (Libro+)>
<!ELEMENT Libro (Titulo, Autor)>
<!ELEMENT Titulo (#PCDATA)> XML
<!ELEMENT Autor (#PCDATA)>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE RaizLibros PUBLIC
Temario de curso hTML-Css-Js-XML
‣ Se pueden combinar DTD externa y con reglas internas a la vez, con una mezcla en las declaraciones:
- con DTD privada: <!DOCTYPE elemento-raíz SYSTEM "URI" [ declaraciones ] >
- con DTD pública: <!DOCTYPE elemento-raíz PUBLIC "identificador-público" "URI" [ declaraciones ]>
4.2 - DTD Reglas generales 4
RAIZ
๏ Todo DTD debe tener uno y sólo un elemento raíz (también conocido como elemento documento).
๏ Este elemento raíz debe coincidir con el nombre que aparece a continuación del DOCTYPE en el XML que
valida:
<!DOCTYPE RaizLibros SYSTEM “C:\MiDTD.dtd”>
©Iñaki Martín
ESTRUCTURA
๏ Por tanto, un documento XML será válido si –además de no tener errores de sintaxis– cumple lo indicado en las
declaraciones de elementos, atributos, entidades y notaciones, de la DTD a la que esté asociado.
4.2 - DTD Reglas generales 5
ELEMENTOS
๏ A partir del elemento raíz, pueden opcionalmente colgar (de forma jerárquica) otros elementos.
๏ Posible contenido de cada elemento:
‣ #PCDATA: El elemento contiene texto.
<!ELEMENT Titulo (#PCDATA)> <Titulo>Don Quijote de la Mancha</Titulo>
©Iñaki Martín
‣ Otros elementos: Un elemento puede contener uno o más elementos hijos en una una secuencia indicada:
<!ELEMENT Libro (Titulo, Autor)>
Temario de curso hTML-Css-Js-XML
✦ * El elemento secundario se puede dar cero o más veces dentro del elemento principal.
<!ELEMENT Contacto (email*) >
✦ ? Indica que el elemento secundario se puede dar cero o una vez dentro del elemento principal.
<!ELEMENT Contacto (dni?) >
✦ , Indica una secuencia de elementos secundarios. Todos deben ser incluidos y en ese mismo orden.
<!ELEMENT Libro (Titulo, Autor)>
✦ | Indica una secuencia de elementos secundarios. Solo uno de los indicados debe ser incluido.
<!ELEMENT Editorial (Editor | Corrector)>
4.2 - DTD Reglas generales 6
‣ ANY: El elemento puede almacenar texto (PCDATA) y/o cualquier elemento declarado en la DTD (no se
pueden incluir elementos que no esten en la DTD). Se pueden usar en cualquier orden, las veces que se
quiera.
<!ELEMENT Titulo (#PCDATA)> <Descriptor>
<!ELEMENT Autor (#PCDATA)> Texto libre
<!ELEMENT Descriptor ANY > <Autor>Asimov</Autor>
<Autor>Pohl</Autor>
©Iñaki Martín
Mas texto
<Titulo>Fuera de linea</Titulo>
<Autor>Bradbury</Autor>
</Descriptor>
‣ Mixto: el elemento puede incluir secuencias de caracteres opcionalmente mezcladas con elementos hijos.
Temario de curso hTML-Css-Js-XML
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 4.3
©Iñaki Martín
XML SCHEMAS.
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
4.3 - XSD (SCHEMAS) Introduccion
RESUMEN: XSDXML
- ELEMENTOS SIMPLES 2
<xs:element name="complexion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value=“4”/>
<xs:minLength value=“4”/>
<xs:maxLength value=“20”/>
Temario de curso hTML-Css-Js-XML
<xs:whiteSpace value=“collapse"/>
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="idioma">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="ENG"/>
<xs:enumeration value="FRA"/>
<xs:enumeration value="ESP"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="edad">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:maxExclusive value=“5"/>
<xs:maxInclusive value=“5"/>
<xs:minExclusive value=“5"/>
<xs:minInclusive value=“5"/>
<xs:fractionDigits value=“3"/>
<xs:totalDigits value=“4”/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
4.3 - XSD (SCHEMAS) Introduccion
RESUMEN: XSDXML
- ELEMENTOS COMPLEJOS 3
gente.xsd
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.prueba.es/persona" targetNamespace="http://www.prueba.es/persona"
©Iñaki Martín
elementFormDefault="qualified" elementFormDefault="qualified"
attributeFormDefault="qualified"> attributeFormDefault="qualified">
</xs:schema>
4.3 - XSD (SCHEMAS) Introduccion XML 4
Acciones de un XSD
๏ Un XML Schema (denominado normalmente XSD, por XML Schema Definition) define:
‣ los elementos que pueden aparecer en un documentos
‣ atributos que pueden aparecer en un documento
‣ qué elementos son elementos hijos
©Iñaki Martín
RAIZ
๏ Debe tener un único elemento raíz (elemento documento) .
๏ Se trata del elemento <xs:schema > (éste en el ejemplo):
XSD
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.unaurldepega.com"
©Iñaki Martín
elementFormDefault="qualified">
. . . . .
</xs:schema>
xmlns
Temario de curso hTML-Css-Js-XML
Para establecer cual es el prefijo a usar con un determinado espacio de nombres, se usa :
xmlns: prefijo= “nombreDelEspacioDeNombres”.
‣ xmlns (xmlns = XML NameSpace): identifica el espacio de nombres al que pertenecen los componentes
incluidos en el esquema, asignandoles opcionalmente un prefijo (que suele ser “xs” o “xsd”)
‣ Asi pues, esa sentencia indica que los elementos y tipos de datos utilizados en el esquema (palabras como
sequence, attribute, element, occurs …) provienen del espacio de nombres
“http://www.w3.org/2001/XMLSchema”, al que se le asigna el prefijo “xs”.
‣ Por eso, las etiquetas de XSD más adelante usadas tienen el fomato <xs:tipoetiqueta …./>
4.3 - XSD (SCHEMAS) Raiz de un Schema (II) 7
targetNamespace
๏ Además, podemos hacer que el esquema que estamos creando (nuestro esquema, el que se construye con ese
documento) tenga asociado un espacio de nombres propio (target namespace).
๏ Para ello se puede utilizar el atributo targetNamespace del elemento “schema”:
targetNamespace="http://www.unaurldepega.com"
©Iñaki Martín
que crea un espacio de nombres propio, al que pertenecen los elementos que se definen en el esquema.
Es costumbre usar un formato de URl como nombre del espacio de nombres. No quiere decir que exista en esa dirección de internet, sino que
simplemente se le da un nombre como si fuera una web, indicando e identificando a "nuestra empresa".
elementFormDefault - attributeFormDefault
Temario de curso hTML-Css-Js-XML
๏ También se puede especificar si los elementos y los atributos declarados en nuestro target namespace
deben estar certificados por un espacio de nombres, cuando se utilicen en un documento XML
La certificación se puede hacer bien explícitamente mediante un prefijo o implícitamente de forma predeterminada.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Temario de curso hTML-Css-Js-XML
๏ Ahora, con este namespace xsi , se puede utilizar los atributos “noNameSpaceLoction” y “schemaLocation”,
que nos permiten asociar un documento XML con XSD
‣ noNamespaceSchemaLocation: Identifica un XSD que no tiene un espacio de nombres de
destino (que no incluye el atributo “targetNamespace”) y lo asocia al documento XML actual.
XML
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.prueba.es/esquema1 apuntes.xsd">
Temario de curso hTML-Css-Js-XML
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="apuntes.xsd">
4.3 - XSD (SCHEMAS) Referenciar de un Schema (III) 10
elementFormDefault="qualified"
attributeFormDefault="qualified">
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type=“xs:string” minOccurs=“0” maxOccurs="unbounded"/>
<xs:element name="direccion" type=“xs:string” minOccurs=“0” maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Temario de curso hTML-Css-Js-XML
</xs:element>
</xs:schema>
‣ Luego, aqui está el documento XML, al que se le indica que aplique el XSD anterior:
XML
๏ Un elemento complejo
Temario de curso hTML-Css-Js-XML
๏ Un elemento atributo
‣ es realmente un elemento simple, pero especial pues siempre ha de estar dentro de un elemento complejo
‣ no puede tener otros elementos ni atributos
‣ puede tener restricciones.
4.3 - XSD (SCHEMAS) Elementos simples 12
ELEMENTOS SIMPLES
๏ Un elemento simple sólo puede contener texto, pero se pueden añadir restricciones (facets) a los tipos de
datos, para limitar así su contenido o la forma de este, y tambien puede tener valores por defecto.
๏ La sintaxis de un elemento simple es: <xs:element name="xxx" type="yyy" defecto />
xxx es el nombre del elemento e yyy es el tipo de dato del elemento, y defecto es una de las reglas default o fixed, que se indican en esta página
©Iñaki Martín
‣ xs:integer XML
‣ xs:boolean <nombre>Jana</nombre>
Temario de curso hTML-Css-Js-XML
<edad>36</edad>
‣ xs:date <fechanacimiento>1970-03-27</fechanacimiento>
‣ xs:ID En un anexo al final de este capitulo se exponen todos los tipos de elementos disponibles para un XSD
‣ Con default se puede tener un valor XSD Ejemplo de valor por defecto
por defecto. Ese valor se asigna si <xs:element name=“color” type=“xs:string" default=“ROJO”/>
luego no se especifica otro valor XML
<color></color>
‣ Con fixed se puede dar un valor fijo XSD Ejemplo de valor fijo
para un elemento, que no se pude luego <xs:element name=“color” type=“xs:string" fixed =“ROJO”/>
modificar
XML
<color>ROJO</color>
4.3 - XSD (SCHEMAS) Restricciones XSD (I) 13
RESTRICCIONES XSD
๏ Una restricción se aplica a un elemento (o a un atributo) y se denomina Facet .
๏ Sirve para acotar los posibles valores del elemento (o atributo).
๏ Para definir una restricción hay que crear un nuevo tipo de dato llamado simpleType usando <xs:simpleType>
que contiene:
‣ un tipo “básico” de dato (el nuevo tipo se basa en un string, int, date…)
©Iñaki Martín
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value=“4”/>
<xs:maxLength value=“20”/>
</xs:restriction>
</xs:simpleType>
4.3 - XSD (SCHEMAS) Restricciones XSD (II) 14
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value=“4”/>
<xs:maxLength value=“20”/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Temario de curso hTML-Css-Js-XML
<xs:simpleType name="tipoIdioma">
<xs:restriction base="xs:string">
<xs:minLength value=“4”/>
<xs:maxLength value=“20”/>
</xs:restriction>
</xs:simpleType>
๏ En el resto del manual usaremos ya solamente la definición de tipo fuera del element, por ser mas elegante y funcional
4.3 - XSD (SCHEMAS) Restricciones XSD (III) 15
TIPOS DE RESTRICCIONES
๏ A continuación describimos los tipos de restricciones mas utilizados
Restricción ENUMERATION
©Iñaki Martín
๏ Una restricción enumeration indica los únicos valores posibles que puede tomar un elemento (o atributo)
๏ Cada posible valor es una enumeration, descrita asi:
๏ Ejemplo de uso <xs:enumeration value="ENG"/>
Temario de curso hTML-Css-Js-XML
XSD
XSD Ejemplo de restriccion enumerartion XML
<xs:element name=“Idioma" type=“tIdioma" /> <idioma>FRA</idioma>
<xs:simpleType name="tIdioma">
<xs:restriction base="xs:string">
<xs:enumeration value="ENG"/>
<xs:enumeration value="FRA"/>
<xs:enumeration value="ESP"/>
</xs:restriction>
</xs:simpleType>
4.3 - XSD (SCHEMAS) Restricciones XSD (IV) 16
Restricción LENGTH
๏ Una restricción length indica restricciones de tamaño de un elemento: tamaño exacto, máximo o mínimo
๏ Los 3 posibles usos, explicados con ejemplo:
<xs:length value=“5"/> -> solo valen elementos con justamente 5 caracteres
<xs:minLength value=“4”/> -> solo valen elementos con un minimo de 4 caracteres
<xs:maxLength value=“9”/> -> solo valen elementos con un máximo de 9 caracteres
©Iñaki Martín
๏ Los dos últimos se pueden usar conjuntamente, como en este ejemplo; XSD
<xs:element name=“contraseña">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value=“4”/>
<xs:maxLength value=“20”/>
Temario de curso hTML-Css-Js-XML
</xs:restriction>
</xs:simpleType>
</xs:element>
Restricciones NUMÉRICAS
๏ Existen una serie de restricciones que afectan a la naturaleza numérica del valor. Son;
<xs:maxExclusive value=“5"/> -> el elemento ha de ser menor de 5
<xs:maxInclusive value=“5"/> -> el valor máximo del elemento es 5
<xs:minExclusive value=“5"/> -> el elemento ha de ser mayor de 5
""" -> el valor minimo del elemento es 5
Restricción PATTERN
๏ Una restricción pattern se usa para limitar el contenido de un elemento XML, que solo pueda tener una serie
de números o letras y en cierto orden o forma
<xs:pattern value="[a-z]"/>
๏ El patrón que se usa dentro de value es una expresión regular, o una declaración de elementos
©Iñaki Martín
La definición y uso de expresiones regulares no se expone en este curso, se supone conocido por el alumno. En el curso de Java se incluye un capítulo completo para tratar este tema
XSD
<xs:element name="solunaletra">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
Temario de curso hTML-Css-Js-XML
</xs:restriction>
</xs:simpleType>
</xs:element>
๏ Ejemplos de patrones:
<xs:pattern value=“[A-Z][A-Z][A-Z]"/> -> se permiten 3 letras mayusculas
<xs:pattern value="[xyz]"/> -> se permite una sola letra, y ha de ser una x, y o z
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> -> se permite un máximo de cinco dígitos entre ‘0’ y ‘9’
<xs:pattern value="([a-z])*"/> -> se permite una letra minúscula 0 o más veces
<xs:pattern value="([a-z][A-Z])+"/> -> se permite una letra minuscula seguida de una mayuscula,
todo ello repetido 1 o mas veces
<xs:pattern value="[a-zA-Z0-9]{8}"/> -> se permiten exactamente ocho caracteres, que pueden ser
letras minúsculas, mayúsculas o un dígito del 0 al 9:
Restricción WHITESPACE
๏ Una restricción whitespace indica cómo se han de tratar los “caracteres tipo blanco” cuando se valide un
documento xml.
๏ Los “caracteres tipo blanco” son los espacios, los tabuladores, los saltos de linea y avances de linea
๏ Los 3 posibles valores que puede tomar son estos, explicados con ejemplo:
©Iñaki Martín
<xs:whiteSpace value=“preserve"/> -> el procesador xml NO eliminará ningún espacio en blanco, TAB, CR o LF
<xs:whiteSpace value=“replace"/> -> el procesador xml eliminará todos los TAB, CR o LF, convirtiendolos
todos en simples espacios
<xs:whiteSpace value=“collapse"/> -> el procesador xml eliminará todos los espacios en blanco agrupados
Temario de curso hTML-Css-Js-XML
que encuentre, los TAB, CR o LF, y los espacios por delante y detras
del valor, convirtiendolos todos en simples espacios
XSD
XSD Ejemplo de restriccion whiteSpace XML
XML
‣ Elementos que contienen otros elementos y texto. <carta>
Temario de curso hTML-Css-Js-XML
Estimado Sr.
<nombre>Juan García</nombre>.
Su pedido
<pedidoid>1032</pedidoid>
será enviado el
<fechaenv>2007-03-25</fechaenv>.
</carta>
XML
‣ Elementos vacíos. <producto />
Normalmente contrendrán atributos, pues si no, <producto pid=“1345"/>
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type=“xs:string"/>
<xs:element name="edad" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Temario de curso hTML-Css-Js-XML
2.- Creando el complexType fuera del element, dandole un nombre, e indicando al element que ese es su tipo:
<!-- el elemento siguiente se cierra en si mismo -->
<xs:element name=“Idioma" type=“empleado" />
<xs:complexType name=“empleado">
<xs:sequence>
<xs:element name="nombre" type=“xs:string"/>
<xs:element name="edad" type="xs:int"/>
</xs:sequence>
</xs:complexType>
Ahora que se ha creado un tipo complejo, se puede aplicar a muchos más elementos en el futuro, como si fuera un
tipo de dato normal, pues así ya queda predefinido en el sistema
<xs:element name="empleado" type="empleado"/>
<xs:element name="empleadoFijo" type="empleado"/>
<xs:element name="empleadoEntrante" type="empleado"/>
4.3 - XSD (SCHEMAS) Elementos complejos en XSD (III) 21
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
Temario de curso hTML-Css-Js-XML
<xs:complexType name="TipoPersona">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>
</xs:sequence>
</xs:complexType>
4.3 - XSD (SCHEMAS) Elementos complejos en XSD (IV) 22
๏ Se debe usar alguna etiqueta de tipo "indicadores de elementos complejos" (ver más adelante), como por ejemplo
la etiqueta <xs:sequence>, y además, se usa el atributo mixed=“true” en la etiqueta complexType para indicar
que además puede tener texto
<xs:element name="carta">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="pedidoid" type="xs:int"/>
<xs:element name="fechaenv" type="xs:date"/>
Temario de curso hTML-Css-Js-XML
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Elemento complejo con texto y elementos -->
<carta>
Estimado Sr.
<nombre>Juan García</nombre>.
elemento complejo con elementos internos, Su pedido
fuera del element XSD <pedidoid>1032</pedidoid>
será enviado el
<xs:element name="carta" type=“TipoCarta"/> <fechaenv>2007-03-25</fechaenv>.
XSD </carta>
<xs:complexType name="TipoCarta" mixed="true">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="pedidoid" type=“xs:int"/>
<xs:element name="fechaenv" type="xs:date"/>
</xs:sequence>
</xs:complexType>
4.3 - XSD (SCHEMAS) Elementos complejos en XSD (II) 23
๏ Normalmente son con atributos, pues si no, se podría tratar mejor como un elemento simple:
elemento complejo vacio, con atributos,
dentro del element
XSD
<xs:element name="producto">
©Iñaki Martín
<xs:complexType>
<xs:attribute name="Id" type=“xs:int"/>
</xs:complexType>
</xs:element>
<!-- Elemento complejo vacio -->
<producto Id=“1345"/> XML
<xs:complexType name="TipoProd">
<xs:attribute name="Id" type=“xs:int"/>
</xs:complexType>
4.3 - XSD (SCHEMAS) Elementos complejos en XSD (V) 24
ELEMENTOS ATRIBUTOS
๏ Un atributo se trata realmente de un elemento simple , pero ha de estar dentro de un elemento complejo, que será
el elemento que contiene el atributo. Esto es, un elemento simple no puede tener atributos; si un elemento simple
tiene atributos, ha de convertirse en complejo, y declarar dentro el atributo
๏ Un atributo sólo puede contener texto. No puede contener ni elementos ni atributos.
๏ La sintaxis de un atributo es: <xs:attribute name="xxx" type="yyy"/> (xxx es el nombre del atributo e yyy es el tipo de dato del atributo)
©Iñaki Martín
XML
Temario de curso hTML-Css-Js-XML
๏ El contenido de un elemento complejo se identifica a través de varios elementos, indicadores de la naturaleza del
contenido
๏ Vamos a ver en este curso a continuación estos "indicadores"
©Iñaki Martín
minOccurs
<xs:complexType>
<!-- Elemento complejo con sequence -->
<xs:sequence>
<carta>
<xs:element name="nombre" type="xs:string"/>
<nombre>Juan García</nombre>
<xs:element name="pedidoid" type="xs:int"/>
<pedidoid>1032</pedidoid>
</xs:sequence>
</carta>
</xs:complexType>
</xs:element>
Temario de curso hTML-Css-Js-XML
➡ con la etiqueta <xs:all> se indica que han de salir todos los elementos, una vez cada uno, pero en el
orden que se quiera
<xs:element name="carta">
<xs:complexType mixed="true">
<!-- Elemento complejo con all -->
<xs:all>
<carta>
<xs:element name="nombre" type="xs:string"/>
<apellidos>Puertas</apellidos>
<xs:element name="apellidos" type=“xs:string"/>
<nombre>Juan</nombre>
</xs:all>
</carta>
</xs:complexType>
</xs:element>
➡ con la etiqueta <xs:choice> se indica que han de salir uno de los elementos y sólo uno
<xs:element name="carta">
<xs:complexType> <!-- Elemento complejo con choice -->
<xs:choice> <carta>
<xs:element name=“dni" type="xs:string"/> <pasaporte>103223422R</pasaporte>
<xs:element name=“pasaporte" type=“xs:string"/> </carta>
</xs:choice>
</xs:complexType>
</xs:element>
4.3 - XSD (SCHEMAS) Indicadores de elementos complejos (III) 27
<xs:element name="carta">
<!-- Elemento complejo con maxOccurs -->
<xs:complexType>
<carta>
<xs:sequence>
<nombre>Juan García</nombre>
<xs:element name="nombre" type="xs:string"/>
<pedidoid>1032</pedidoid>
<xs:element name="pedidoid" type=“xs:int" maxOccurs=“6”/>
<pedidoid>1039</pedidoid>
</xs:sequence>
<pedidoid>1044</pedidoid>
</xs:complexType>
</carta>
</xs:element>
Temario de curso hTML-Css-Js-XML
➡ el atributo “minOccurs” indica el numero mínimo de veces que se debe dar el elemento
<xs:element name="carta">
<xs:complexType> <!-- Elemento complejo con minOccurs -->
<xs:sequence> <carta>
<xs:element name="nombre" type="xs:string"/> <nombre>Juan García</nombre>
<xs:element name="pedidoid" type=“xs:int" minOccurs=“1”/> <pedidoid>1032</pedidoid>
</xs:sequence> <pedidoid>1039</pedidoid>
</xs:complexType> </carta>
</xs:element>
4.3 - XSD (SCHEMAS) Indicadores de elementos complejos (IV) 28
2. una etiqueta
<xs:group ref=“nombregrupo"/>
con el nombre del grupo, para añadir el grupo a un elemento complejo.
Este grupo va como cualquier otro elemento, dentro de un complexType, encerrando una sequence
Temario de curso hTML-Css-Js-XML
(o un all o un choice)
<xs:group name="GrupoPersonas">
<xs:sequence>
<xs:element name=“nombre" type="xs:string"/>
<!-- Elemento con grupo elementos -->
<xs:element name="apellidos" type="xs:string"/> <persona>
<xs:element name="fechanac" type="xs:date"/> <nombre>Juan</nombre>
</xs:sequence> <apellidos>Shaftner</pedidoid>
</xs:group> <fechanac>10/12/2000</pedidoid>
<pais>Suiza</pedidoid>
</persona>
<xs:element name="persona" type="InfoPersona"/>
<xs:complexType name="InfoPersona">
<xs:sequence>
<xs:group ref="GrupoPersonas"/>
<xs:element name="pais" type="xs:string"/>
</xs:sequence>
</xs:complexType>
4.3 - XSD (SCHEMAS) Indicadores de elementos complejos (V) 29
2. una etiqueta
<xs:attributeGroup ref=“nombregrupo"/>
con el nombre del grupo, para añadir el grupo es un elemento complejo.
Este grupo va como cualquier otro atributo, dentro de un complexType:
Temario de curso hTML-Css-Js-XML
<xs:attributeGroup name="GrupoAtrPersonas">
<xs:attribute name="nombre" type="xs:string"/>
<xs:attribute name="apellidos" type="xs:string"/>
<xs:attribute name="fechanac" type="xs:date"/> <!-- Elemento con grupo atributos —>
</xs:attributeGroup> <persona nombre="Juan"
apellidos="Perez"
<xs:element name="persona"> fechanac=“22/11/2016">
</persona>
<xs:complexType>
<xs:attributeGroup ref="GrupoAtrPersonas"/>
</xs:complexType>
</xs:element>
4.3 - XSD (SCHEMAS) Indicadores de elementos complejos (VI) 30
๏ Con la etiqueta <xs:any> se indica en que parte del documento XML pueden aparecer elementos que no esten
validados ni descritos en el actual XSD
<xs:element name="persona">
<xs:complexType>
<xs:sequence> <!-- Elemento complejo con sequence -->
©Iñaki Martín
๏ Como se ve en el ejemplo, tras el elemento dni, se pueden añadir mas elementos. En este caso, ademas se ha
añadido una restriccion
๏ <xs:any> se puede usar con una serie de atributos, que restringen algo el alcance de añadir cosas no validadas:
‣ minOccurs y maxOccurs permiten indicar cuantos elementos indefinidos pueden añadirse en ese punto.
‣ namespace obliga a que el elemento indefinido pertenezca a un determinado namespace. Se puede añadir una
lista de namespaces separados por espacios.
‣ processContents dice al parseador XML como debe tratar los elementos desconocidos y añadidos. Valores :
- Skip - no se realiza ninguna validación, pero los elementos deben estar al menos bien formados como XML
- Lax - si hay un esquema XSD para poder procesar el elemento, usarlo con el, si no hay, dejarlo pasar.
- Strict - debe buscarse un esquema XSD para poder procesar el elemento, y debe usarlo con el, si no hay
4.3 - XSD (SCHEMAS) Elementos complejos heredados 31
empleado
nombre
edad
empleadoExtendido
antiguedad
4.3 - XSD (SCHEMAS) Ejercicios: Ejemplo de XSD 32
XML
<Autores>Pedro Porras</Autores>
<Autores>Juan Perez</Autores>
<Editorial>Planeta</Editorial>
</Libro>
libro.xsd
Temario de curso hTML-Css-Js-XML
XML
<?xml version="1.0"?>
<nota xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="note.xsd">
<a>Pepe</a>
<de>Ana</de>
©Iñaki Martín
<cabecera>Cumpleaños</cabecera>
<cuerpo>Comprar regalo de cumple</cuerpo>
</nota>
Nota.XSD
Temario de curso hTML-Css-Js-XML
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.jyoc.com"
elementFormDefault="qualified">
<xs:element name="nota">
<xs:complexType>
<xs:sequence>
<xs:element name="a" type="xs:string"/>
<xs:element name="de" type="xs:string"/>
<xs:element name=“cabecera" type="xs:string"/>
<xs:element name=“cuerpo" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
4.3 - XSD (SCHEMAS) Ejercicios: Ejemplo de XSD 34
XML
<?xml version="1.0"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" shiporder.xsd
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson> <?xml version="1.0" encoding="ISO-8859-1" ?>
<shipto> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<name>Ola Nordmann</name>
<xs:simpleType name="stringtype">
<address>Langgt 23</address> <xs:restriction base="xs:string"/>
<city>4000 Stavanger</city> </xs:simpleType>
<country>Norway</country>
</shipto> <xs:simpleType name="inttype">
©Iñaki Martín
</item> </xs:simpleType>
</shiporder>
<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>
</xs:schema>
4.3 - XSD (SCHEMAS) Ejercicios: Ejemplo de XSD 35
XML
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0"?>
<impresoras> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<impresora numSerie="i245" tipo="laser" compra="2010"> <xs:complexType name="tipo_impresora">
<xs:sequence>
<marca>Epson</marca> <xs:element name="marca" type="xs:string"/>
<modelo>EPL300</modelo>
<peso>4.52</peso> <xs:element name="modelo" type="xs:string"/>
<tamaño>A4</tamaño>
<xs:element name="peso">
<tamaño>A5</tamaño> <xs:simpleType>
<cartucho>C-123BV</cartucho> <xs:restriction base="xs:decimal">
<enred/> <xs:minInclusive value="0"/>
<xs:fractionDigits value="2"/>
</impresora>
©Iñaki Martín
</xs:restriction>
<impresora numSerie="i246" tipo="matricial"> </xs:simpleType>
<marca>HP</marca> </xs:element>
<modelo>LaserJet 2410</modelo>
<xs:element name="tamaño" type="xs:string" maxOccurs="unbounded"/>
<peso>3.2</peso> <xs:element name="cartucho" >
<tamaño>A4</tamaño> <xs:simpleType>
<cartucho>C-456P</cartucho> <xs:restriction base="xs:string">
<xs:pattern value="C-[0-9]{3}[A-Z]{1,2}"/>
</impresora> </xs:restriction>
</impresoras> </xs:simpleType>
</xs:element>
Temario de curso hTML-Css-Js-XML
<xs:attribute name="compra">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:element name="impresoras">
<xs:complexType>
<xs:sequence>
<xs:element name="impresora" type="tipo_impresora"
minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
4.3 - XSD (SCHEMAS) ANEXO: Tipos de datos que se pueden definir en un XSD (1) 36
FECHAS -------------------------
duration Duración representada en "Años + Meses + Días + Horas + Minutos +
Segundos" (P10Y5M4D10H12M50S).
Temario de curso hTML-Css-Js-XML
VARIADOS -----------------------
anyURI Cualquier identificador URI.
QName Cualquier nombre cualificado del espacio de nombres
NOTATION Tipo de datos para atributo compatible con DTD.
4.3 - XSD (SCHEMAS) ANEXO: Tipos de datos que se pueden definir en un XSD (2) 37
tipo IDREF.
ENTITIES Representa el tipo de atributo ENTITIES. Contiene un conjunto de valores de
tipo ENTITY.
NMTOKEN Representa el tipo de atributo NMTOKEN. NMTOKEN es un juego de caracteres de
nombres (letras, dígitos y otros caracteres) en cualquier combinación. A diferencia
de Name y NCName, NMTOKEN, no tiene restricciones del carácter inicial. Este tipo
de datos se deriva de token.
Temario de curso hTML-Css-Js-XML
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 5.1
©Iñaki Martín
XPATH.
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
5.1 - XPath XSL, XPATH y XQUERY 2
Que es Xpath
๏ XPath se usa para navegar por los nodos y su contenido en un XML
๏ Usa una sintaxis similar a la de Unix al navegar por sus directorios, solo que referencia nodos del XML.
manteniendo la referencia de un pah (camino) de acceso a los nodos bien desde el nodo raiz, bien desde un
nodo desde el que estemos localizados
๏ Es un componente vital de XSL, pues el resto de elementos (XSLT, SQuery) usa sus reglas para moverse por un
©Iñaki Martín
documento
๏ En XPath existen siete tipos de nodos: elementos, atributos, texto, namespaces, instructiones, comentarios y
nodos en si (nodos del documento)
๏ UN XML es tratado como un arbol de nodos. El nodo inicial es llamado nodo raiz
XML
Temario de curso hTML-Css-Js-XML
๏ Valores atomicos: son nodos que no tienen ni padre ni hijos, nodos "dato". Ejemplos:
J K. Rowling
"en"
5.1 - XPath XPath: Introducción 4
๏ Children (hijo) Todo nodo elemento tiene ceo, uno o mas hijos.
En el ejemplo, titulo, autor, anio, y precio son hijos de libro
๏ Siblings (hermanos) Son nodos con el mismo padre.
En el ejemplo, titulo, autor, anio, y precio son elementos hermanos
๏ Ancestors (ancestros) Un ancestro de un nodo es su padre, el padre de su padre, y sucesivamente.
En el ejemplo, los ancestros de titulo son libro y tienda
๏ Descendants (descendientes) todos los nodos hijos y los que de ellos desciendan directamente.
En el ejemplo, los descendientes de tienda son libro, titulo, autor, anio, y precio
5.1 - XPath XPath: Introducción 5
XPath Expressions
๏ XPath usa expressions para identificar un nodos de un XML según su path. Estas son las expressions más utiles:
expression Descripción
estenodo Selecciona todos los nodos con el nombre estenodo
/ Selecciona el nodo raiz
// Selecciona todos los nodos desde el raiz
©Iñaki Martín
//unnodo Selecciona todos los nodos unnodo desde el raiz, esten donde estén
. Seleciona el nodo actual
.. Selecciona el nodo padre
@ Seleciona atributos
XPath Predicados
๏ Los predicados XPath se usan para buscar un nodo específico o un nodo con un valor específico
๏ Se escriben encre corchetes tras el elemento que evalúan
๏ Ejemplos:
/tienda/libro[1] Selecciona el primer libro de los hijos de tienda.
Nota: En IE 5,6,7,8,9 el primer nodo es [0], aunque según W3C debe ser [1]. Para paliar este problema,
usa SelectionIdiomauage para XPath: En JavaScript, se usa:
©Iñaki Martín
xml.setProperty("SelectionIdiomauage","XPath");
/tienda/libro[last()] Selecciona el último elemento hijo de los que tenga libro
/tienda/libro[last()-1] Selecciona el penúltimo elemento hijo de los que tenga libro
/tienda/libro[position()<3] Selecciona los elementos libro cuya posicion sea menor que 3 (los
dos primeros por tanto) y que sean hijos de tienda
//titulo[@idioma] Selecciona todos los titulo que tengan un atributo idioma
//titulo[@idioma='en'] Selecciona todos los titulo que tengan un atributo idioma = "es"
/tienda/libro[precio>35.00] Selecciona todos los elementos libro hijos de tienda con un
Temario de curso hTML-Css-Js-XML
XPath comodines
๏ XPath usa comodines para seleccionar elementos que desconoce
comodín Descripción
* Coincide en la búsqueda con cualquier elemento (pero NO con 0 elementos)
@* Coincide en la búsqueda con cualquier atributo (pero no con 0 atributos)
Ejemplos node() Coincide en la búsqueda con cualquier nodo de cualquier tipo
Xpath Axes
๏ XPath axis (ejes) definen un conjunto de nodos, relativos al nodo previamente seleccionado
๏ Se usan indicando qué conjunto de nodos se seleccionan, separandose por :: (dobles dos puntos)
axis Descripción
©Iñaki Martín
descendant::libro Selecciona todos los nodos libro que sean descendientes del nodo actual
ancestor::libro Selecciona todos los nodos libro que sean ascendientes del nodo actual
child::*/child::precio Selecciona todos los nodos precio nietos del nodo actual
ancestor-or-self::libro Selecciona todos los nodos libro que sean ascendientes del nodo actual,
y el mismo nodo actual tambien SI ES UN NODO LIBRO
Temario de curso hTML-Css-Js-XML
5.1 - XPath XPath: Introducción 9
Xpath operadores
matemático div división. Se usa div ya que el símbolo ‘/’ es necesario para indicar caminos 4 div 2
union | une dos conuntos de elementos //libro | //cd
matemático mod resto de una division entera 4 mod 3
relacional = comparacion por igualdad (es igual que) precio = 3.4
relacional != comparacion por desigualdad (es distinto que) precio != 3.4
Temario de curso hTML-Css-Js-XML
relacional < comparacion por minoría (es menor que) precio < 3.4
relacional > comparacion por mayor (es mayos que) precio > 3.4
relacional <= es menor o igual que precio >= 3.4
relacional >= es mayor o igual que precio <= 3.4
relacional or o precio = 3.4 or precio < 0
relacional and y precio = 3.4 and precio < 0
5.2 - Xslt 1
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 5.2
©Iñaki Martín
XSLT
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
5.2 - Xslt XSL 2
Que es XSLT
๏ XSLT (XSL Transformations) en realidad aplicar una Hoja de estilos al XML, para cambiar su resultado
๏ Al hablar de hola de estilo no confundir con CSS, que también (de otra manera) puede aplicarse a un XML.
๏ Es la parte mas importante de XSL si se desea transformar el contenido de un XML en otro XML, o en cualquier
otro formato legible por un navegador (HTML, XHTML...)
©Iñaki Martín
๏ Con XSLT se puede añadir o eliminar elementos y atributos del documento origen, o reordenarlos, recolocarlos,
probar su existencia o contenido, ocultar o mostrar nodos , ramas o atributos...
๏ Xslr usa XPath para navegar entre documentos XML.
๏ Con XPath, busca partes del documento XML origen (nodos, atributos...) que coincidan con un determinado
Temario de curso hTML-Css-Js-XML
patrón (template). Si encuentra una coincidencia, transforma dicha parte en otro formato según se indique
Formato doc XSLT
๏ Deben comenzar con una declaración XML: <?xml version="1.0“?>
๏ Se guardarán siempre en archivos independientes con extensión .xsl
๏ El elemento raíz de la hoja de estilo XSLT es stylesheet
๏ Los nombres de los elementos “reservados” para usarse com identificadores XSLT proceden de un mismo
espacio de nombres, y por lo tanto deben escribirse precedidos por el correspondiente alias.
๏ Dicho alias debe “apuntar” a la URL: http://www.w3.org/1999/XSL/Transform, por lo que el elemento raiz es :
XSLT
<?xml version=“1.0”?>
<?xml-stylesheet type="text/xsl" href="ej1.xsl"?>
<ciudades>
<ciudad>
Temario de curso hTML-Css-Js-XML
<nombre>Madrid</nombre>
<habitantes>3500000</habitantes>
</ciudad>
<ciudad>
<nombre>Málaga</nombre>
<habitantes>800000</habitantes>
</ciudad>
<ciudad>
<nombre>Toledo</nombre>
<habitantes>50000</habitantes>
</ciudad>
</ciudades>
5.2 - Xslt XSLT 5
Reglas XSLT
๏ XSLT Entre las marcas de inicio y de fin del elemento raíz xsl:stylesheet, se escribirán las reglas de
transformación propiamente dichas, con una elemento xsl:template
๏ La regla indica
‣ qué instancias de los elementos del documento XML se van a transformar.
©Iñaki Martín
<xsl:template match="/">
</xsl:template>
๏ ¿Como se transforma el doc origen? Entre las etiquetas del template (antes vistas) se incluye el resultado a
generar cuando se cumpla la regla. Además de texto y etiquetas HTML expresas, se pueden usar varias
funciones par añadir contenido expreso, como <xsl:value-of...>, que recupera y escribe en el documento
resultado el valor del elemento que está siendo procesado
๏ Normalmente se usa como primera regla <xsl:template match="/"> que coincide con el elemento raiz del XML.
๏ Luego, se van evaluando otras reglas mediante nuevos <xsl:template que se crean al final, y se invoca a estas
reglas desde
5.2 - Xslt XSLT 6
๏ Luego, se pueden incluir internamente otras reglas (templates) para procesar otros nodos del documento
๏ Para ello, se escriben nuevos <xsl:template> (detras del <xsl:template match="/">) y se hace alusión a dichas
reglas, desde dentro del <xsl:template match="/"> con la instruccion <xsl:apply-templates select=”...” />
XSLT
Temario de curso hTML-Css-Js-XML
<xsl:template match="/">
<!-- aqui se pueden incliur etiquetas html o funciones xslt --> El template raiz, que indica
que se ha de procesar
<xsl:apply-templates select="unaReglaXpath"/> todo el documento
<!-- aqui se pueden incliur etiquetas html o funciones xslt --> Linea de indica dónde ha
de aplicarse el template
</xsl:template> (escrito mas abajo) que se
dispara al encontrarse
<xsl:template match="//unaReglaXpath"> "unaReglaXpath"
<!-- aqui se incluye el contenido de evaluar unaReglaXpath --> Un segundo template, que
evalua lo que hacer
</xsl:template> cuando se encuentre el
elemento "unaReglaXpath"
</xsl:stylesheet>
5.2 - Xslt XSLT 7
๏ Ejemplo:
XSLT
<xsl:template match="/">
<html> XML
<head>
©Iñaki Martín
<xsl:template match="//nombre">
<h2> <habitantes>800000</habitantes>
<xsl:value-of select="."/> </ciudad>
</h2> <ciudad>
</xsl:template> <nombre>Toledo</nombre>
<habitantes>50000</habitantes>
</xsl:stylesheet> </ciudad>
HTML </ciudades>
<html>
<head>
<title>Ejemplo XSLT</title>
</head>
<body>
<h2>Madrid</h2>
<h2>Málaga</h2>
<h2>Toledo</h2>
</body>
</html>
5.2 - Xslt XSLT 8
xsl:value-of ...
๏ En el elemento <xsl:value-of…> se puede indicar que se quiere mostrar el valor del elemento que estamos
procesando, aunque también podemos indicar que queremos mostrar el valor de un elemento hijo, o
descendiente, del elemento que se está procesando..
๏ Esto es posible porque en el atributo select puede usarse una “expresión XPath”.
©Iñaki Martín
๏ Ejemplo: <xsl:value-of select="./titulo" /> devuelve el valor del nodo titulo que es hijo del nodo actual
Temario de curso hTML-Css-Js-XML
5.3 - XQuery 1
GUIONES DE CLASE
PROGRAMACIÓN HTML - CSS - JAVASCRIPT - XML
CAPÍTULO 5.3
©Iñaki Martín
XQUERY
Temario de curso hTML-Css-Js-XML
© Iñaki Martín Este manual es parte del Curso de Marcas, que junto a
otros cursos están disponible en su totalidad en la web
www.javayotrascosas.wordpress.com
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
5.3 - XQuery XQuery 2
XSL: Xquery
๏ XML se ha convertido en una herramienta de uso cotidiano en los entornos de tratamiento de información y de
programación.
๏ Inicialmente, las herramientas más habituales para manipular, desde un programa, un árbol de datos en XML, eran los
parsers SAX y DOM, no son prácticos
©Iñaki Martín
๏ Pero parsers DOM y SAX tienen un problema: la necesidad de escribir una gran cantidad de código para realizar el
procesamiento. Este código consiste, básicamente, en recorrer un árbol, para un parser DOM, o detallar una lista de
acciones según la etiqueta que se encuentre para parser SAX.
๏ Posteriormente a los parsers DOM y SAX, ha aparecido los bindings, que, si bien en ciertos aspectos son útiles y
ahorran una gran cantidad de trabajo, no son útiles en todas las situaciones en las que se puede utilizar XML.
Temario de curso hTML-Css-Js-XML
๏ Otra solución es el estándar XSLT. Sin embargo XSLT sólo es aplicable en los casos en los que desee obtener una
representación distinta de los datos, no cuando se desea localizar una información concreta de los mismos
๏ Un ejemplo de un escenario donde no es aplicable ninguna de las herramientas comentadas (parsers, binding y XSLT)
se ve a la hora de consultar la información en los actuales servidores de bases de datos XML nativas (Native XML
Database) (o bases de datos antiguas, con funciones para procesar datos en XML)
Dar solución a este escenario de uso mediante código escrito con la ayuda de un parser SAX puede ser bueno si la información origen no es de mucha complejidad.
Otro problema es que el código está fuertemente ligado a la estructura de los datos en XML, por lo que cualquier cambio en la consulta o en la estructura de los
datos obliga a volver a escribir el código. Además el código resultante es muy poco parametrizable y reutilizable. Dar solución a este escenario de uso mediante
código escrito con la ayuda un parser DOM añade, a los problemas de reusabilidad, complejidad y fuerte acoplamiento anteriores, la exigencia de tener cargar los
datos en memoria antes de comenzar el recorrido, lo cual puede resultar imposible para grandes volúmenes de datos. Las herramientas de bindings favorecen la
sencillez en el proceso de carga en memoria de los datos, pero, aplicadas a este escenario de uso, no facilita la tarea a la hora de escribir una consulta
๏ Era pues necesaria la aparición de un lenguaje como xQuery, que permita definir de forma rápida y compacta,
consultas o recorridos complejos sobre colecciones de datos en XML, consultas que devuelvan todos los nodos
que cumplan ciertas condiciones. xQuery es, además, declarativo, es decir, independientemente de la forma en que
se realice el recorrido o de donde se encuentren los datos.
5.3 - XQuery XQuery 3
Que es XQuery
๏ XQuery es a XML lo mismo que SQL es a las bases de datos relacionales.
๏ XQuery es un lenguaje funcional, lo que significa que, en vez de ejecutar una lista secuencial de instrucciones,
como un lenguaje procedimental, cada consulta es una expresión que es evaluada y devuelve un resultado, al igual
que en SQL.
๏ XQuery ha sido construido sobre la base de Xpath, un lenguaje declarativo para la localización de nodos y
©Iñaki Martín
<precio>65.95</precio> <titulo>Marina</titulo>
</libro> <precio>31.20</precio>
<libro anio="1997"> <comentario>
<titulo>Marina</titulo> Un libro iniciatico y recomendable.
<autor> </comentario>
<apellido>Zafon</apellido> </entrada>
<nombre>Carlos Ruiz</nombre> <entrada>
</autor> <titulo>La sombra del viento</titulo>
<editorial>Planeta</editorial> <precio>66.95</precio>
<precio>30.20</precio> <comentario>
Temario de curso hTML-Css-Js-XML
Consultas
๏ Una consulta XQuery es una expresión que lee una secuencia de datos en XML y devuelve como resultado otra
secuencia de datos en XML.
A diferencia de SQL, en XQuery las expresiones y los valores que devuelven son dependientes del donde se encuentran los datos. Por ejemplo los
nodos que aparecerán en el resultado dependen de los namespaces, de la posición donde aparezca la etiqueta raíz del nodo (dentro de otra, por
ejemplo), etc.
๏ El resultado de una ejecución XQuery es un texto. Según con qué herramienta se use XQuery, el texto se puede
©Iñaki Martín
almacenar en un fichero, o enviar a otro proceso como entrada, guardar en una variable para procesarse, etc.
๏ Como el resultado de un XQuery puede formatearse, se puede obtener un texto con formato XML (lo mas habitual y
simple), o un texto HTML/XHTML, o un texto plano...
Este manual supondremos siempre la salida a fichero de los resultados, y que la salida es, si no se indica lo contrario, otro fichero XML
๏ En XQuery las consultas pueden estar compuestas por cláusulas de hasta cinco tipos distintos: For, Let, Where, Order
Temario de curso hTML-Css-Js-XML
Evalua una expresion XPath, y crea un grupo con elementos que cumplan la expresión (al
FOR grupo se le llama tupla). La tupla se almacena además en una variable
Cuando se procese la tupla, se van procesando uno a uno cada uno de sus componentes
Vincula una variable al resultado completo de una expresión añadiendo esos vínculos a las
LET tuplas generadas por una cláusula for o, si no existe ninguna cláusula for, creando una única
tupla que contenga esos vínculos.
WHERE Filtra las tuplas eliminando todos los valores que no cumplan las condiciones dadas
ORDER BY Ordena las tuplas según el criterio dado.
Construye el resultado de la consulta para una tupla dada, después de haber sido filtrada por
RETURN
la cláusula where y ordenada por la cláusula order by
5.3 - XQuery XQuery 6
Reglas generales
En matemáticas, una tupla es una lista ordenada de elementos.
En XQuery, se conoce como tupla al conjunto de valores que toma una variable.
Por ejemplo, un conjunto de nodos de un xml es una tupla.
Una expresion xPath tambien puede dar como resultado una tupla:
//libro/autor Devuelve como respuesta un conjunto (tupla) de todos los nodos autor que tenga cada nodo
©Iñaki Martín
๏ For y Let sirven para crear las tuplas con las que trabajará el resto de las cláusulas de la consulta.
๏ For y Let pueden usarse tantas veces como se desee en una consulta, incluso dentro de otras cláusulas.
๏ Solo puede declararse una única cláusula where, una única cláusula order by y una única cláusula return.
๏ Ninguna de las cláusulas FLWOR es obligatoria en una consulta XQuery.
Temario de curso hTML-Css-Js-XML
Por ejemplo, una expresión XPath, como la que se muestra a continuación, es una consulta válida y no contiene ninguna de las cláusulas FLWOR.
XQuery
doc("libros.xml")/tienda/libro/titulo[/tienda/libro/autor/apellido='Zafon']
๏ Es posible especificar varios criterios de ordenación en la cláusula order by, separándolos por comas. Los
criterios de ordenación se aplican por orden de izquierda a derecha.
๏ Los valores entre llaves { .. } en la clausula return son valores que han de evaluarse, si no, se escriben tal
y como se pongan en el xml destino
๏ Los elementos de búsquedas en las clausulas For son instrucciones XPath.
5.3 - XQuery XQuery 7
๏ Ejemplo de una consulta donde aparecen las 5 clausulas. La siguiente consulta devuelve los títulos de los libros
que tengan más de dos autores ordenados por su título.
XQuery XML
Recordar que en este manual supondremos que Return escribe a fichero de los resultados, y que la salida es otro fichero XML (si no se indica lo contrario)
๏ RETURN no escribe directamente cada uno de los elemento, sino que nos permite:
‣ Decidir qué parte de cada elemento de la tupla se muestra
‣ Qué formato se le da a cada elemento. Los valores entre llaves { .. } en la clausula return son valores que han de
evaluarse, si no, si se añaden otros valores sin llaves, se escriben tal y como se pongan en el fichero destino
Temario de curso hTML-Css-Js-XML
๏ Ejempo: esta busqueda evalúa el documento "libros.xml", y en el, con una expresión XPath, busca cada uno de los
nodos autor, dentro de un nodo libro, que esten dentro de un nodo tienda XML
<autor>
<apellido>Zafon</apellido>
Variable donde se almacena la tupla de nodos Expresion xpath que se evalua <nombre>Carlos Ruiz</nombre>
seleccionados con la expresión XPath </autor>
XQuery <autor>
<apellido>Zafon</apellido>
<nombre>Carlos Ruiz</nombre>
for $b in doc("libros.xml")//tienda/libro/autor </autor>
<autor>
return $b <apellido>Argensol</apellido>
<nombre>Sergio</nombre>
</autor>
<autor>
Cláusula RETURN; va procesando uno a uno los lementos de $b y , en este caso simple, <apellido>Batista</apellido>
devuelve directamente cada elemento de $b <nombre>Pedro</nombre>
Como $b es un nodo, devuelve cada nodo COMPLETO, es decir, con sus etiquetas de </autor>
apertura y cierre, sus atributos, y sus nodos descendientes si los tuviere <autor>
Además, como solo se devuelve un elemento de la tupla, sin ningun caracter mas, no es <apellido>Seros</apellido>
necesario encerrar la respuesta entre llaves { }. Si se hubiera añadido mas texto libre, si <nombre>Daniel</nombre>
hubieran hecho falta (ver ejemplos siguientes) </autor>
5.3 - XQuery XQuery 9
En este caso, las variables que se evaluen (y la expresion donde se usen) deben ir entre llaves.
๏ Mas ejemplos: XML
<cadaautor>
<autor>
XQuery <apellido>Zafon</apellido>
<nombre>Carlos Ruiz</nombre>
for $b in doc("libros.xml")//tienda/libro/autor </autor> XML
</cadaautor>
return <cadaautor>{$b}</cadaautor> <cadaautor> <nodoprincipal>
Temario de curso hTML-Css-Js-XML
<autor> <cadaautor>
<apellido>Zafon</apellido> <autor>
Advertir que las etiquetas añadidas, <cadaautor>, no <nombre>Carlos Ruiz</nombre> <apellido>Zafon</apellido>
</autor> <nombre>Carlos Ruiz</nombre>
existian en el xml original, estamos construyendo un </cadaautor> </autor>
<cadaautor> </cadaautor>
nuevo XML con nueva estructura <autor> <cadaautor>
<apellido>Argensol</apellido> <autor>
<nombre>Sergio</nombre> <apellido>Zafon</apellido>
</autor> <nombre>Carlos Ruiz</nombre>
</cadaautor> </autor>
<cadaautor> </cadaautor>
<autor> <cadaautor>
<apellido>Batista</apellido> <autor>
Nada impide que la ejecucion del For este dentro de otra <nombre>Pedro</nombre>
</autor>
<apellido>Argensol</apellido>
<nombre>Sergio</nombre>
estructura de etiquetas que lo engloben. </cadaautor>
<cadaautor>
</autor>
</cadaautor>
<autor> <cadaautor>
De hecho, puede haber muchos elementos For en un XQuery <apellido>Seros</apellido>
<nombre>Daniel</nombre>
<autor>
<apellido>Batista</apellido>
</autor> <nombre>Pedro</nombre>
XQuery </cadaautor> </autor>
</cadaautor>
<nodoprincipal> <cadaautor>
for $b in doc("libros.xml")//tienda/libro/autor <autor>
<apellido>Seros</apellido>
return <cadaautor>{$b}</cadaautor> <nombre>Daniel</nombre>
</nodoprincipal> </autor>
</cadaautor>
</nodoprincipal>
5.3 - XQuery XQuery 10
๏ Mas ejemplos:
XML
Extraemos un nodo hijo de cada nodo de los de la tupla <nombre>Carlos Ruiz</nombre>
XQuery <nombre>Carlos Ruiz</nombre>
<nombre>Sergio</nombre>
for $b in doc("libros.xml")//tienda/libro/autor <nombre>Pedro</nombre>
return { $b/nombre } <nombre>Daniel</nombre>
©Iñaki Martín
clausula LET
๏ LET es usada para crear una variable que contenga un valor o una secuencia de valores
๏ Los valores pueden ser cadenas, numeros, o una secuencia
๏ Una secuencia es una lista de varios nodos simple de un documento XML, o nodos completos (con todos sus
descendientes), o valores de cadenas o numericos.
©Iñaki Martín
๏ Normalmente las secuencias se extraen del análisis con XPath de un nodo/nodos XML
๏ para asignar un valor a una variable se usa el operador :=
๏ La variable se identifica poniendole delante el signo $
XQuery
Temario de curso hTML-Css-Js-XML
let $A = 'Juan'
๏ Para crear una secuencia los mas sencillo es separando los valores con comas, si no son elementos HTML, y
encuadrandolos entre parentesis
XQuery
let $t := (2,3,4,45,6)
๏ Si la secuencia es de elementos HTML, se pueden enlazar como un documento XML, sin comas ni nada
XQuery
XQuery
XML
let $k := reverse(10 to 15)
15 14 13 12 11 10
©Iñaki Martín
return $k
Temario de curso hTML-Css-Js-XML
data($x/@category)
๏ La mejor manera de explicarlo es con un ejemplo, haciendo una consulta similar con FOR y con LET:
Con FOR Con LET
XQuery XQuery
<titulos>{ $d }</titulos>
return
<titulos>{ $d }</titulos>
XML XML
<titulos> <titulos>
<titulo>La sombra del viento</titulo> <titulo>La sombra del viento</titulo>
Temario de curso hTML-Css-Js-XML
</titulos> <titulo>Marina</titulo>
<titulos> <titulo>Recuerdos inmortales</titulo>
<titulo>Marina</titulo> <titulo>La colmena</titulo>
</titulos> </titulos>
<titulos>
<titulo>Recuerdos inmortales</titulo>
</titulos>
<titulos>
<titulo>La colmena</titulo>
</titulos>
๏ la cláusula FOR vincula una variable con cada ๏ LET, en cambio, vincula una variable con todo el
nodo que encuentra en la coleccion que recorre resultado de una expresión.
5.3 - XQuery XQuery 14
XML
๏ Lo anterior no quiere decir que se pueda usar una clausula let casi <libro>
<titulo>La sombra del viento</
igual que una for titulo>
</libro>
๏ Si una cláusula let aparece en una consulta que ya posee una o <libro>
<titulo>Marina</titulo>
más cláusulas for, los valores de la variable vinculada por la </libro>
<libro>
cláusula let se añaden a cada una de las tuplas generadas por la <titulo>Recuerdos inmortales</
titulo>
©Iñaki Martín
<nombre>Carlos Ruiz</nombre>
return </autor>
<autores>1</autores>
<libro>{ $r }</libro> </libro>
<libro>
<titulo>Marina</titulo>
<autor>
XQuery <nombre>Carlos Ruiz</nombre>
</autor>
for $r in doc("libros.xml")/tienda/libro/titulo <autores>1</autores>
</libro>
let $m := $r/../autor/nombre <libro>
<titulo>Recuerdos inmortales</titulo>
return <autor>
<libro>{ $r, <autor>{$m}</autor>, <nombre>Sergio</nombre>
<nombre>Pedro</nombre>
<autores>{ count($m) }</autores>} <nombre>Daniel</nombre>
</autor>
</libro> <autores>3</autores>
</libro>
<libro>
<titulo>La colmena</titulo>
<autor/>
<autores>0</autores>
</libro>
5.3 - XQuery XQuery 15
CLAUSULA WHERE
XQuery XML
for $b in doc("libros.xml")//libro <librocaro>
where $b\precio > 40 <titulo>La sombra del viento</titulo>
return </libro>
<librocaro> <librocaro>
{$b/titulo} <titulo>La colmena</titulo>
</librocaro> </libro>
Temario de curso hTML-Css-Js-XML
๏ En este ejemplo, en la tupla $b se recogen todos los libros, y la clausula where deja en la
tupla $b los libros que sean de precio mayor de 40
5.3 - XQuery XQuery 16
CLAUSULA ORDER BY
๏ order by ordena el contenido de la tupla resultante de la expresion xQuery, justo antes de ejecutar el Return
order by criterio
๏ el criterio de ordenación puede ser uno de los elementos de la tupla, varios de los elementos (separados por
comas) o cualquier expresion con funciones de cadena o numericas que se pueda ordenar
©Iñaki Martín
๏ En este ejemplo, en la tupla $b se recogen todos los libros, y la clausula where deja en la
tupla $b los libros que sean de precio mayor de 40, y posteriormente, se ordenan los
resultados por el titulo, alfabéticamente.
5.3 - XQuery XQuery 17
necesidad de que exista un nodo documento o nodo raíz. Esta es la función más habitual para
acceder a la información almacenada en una base de datos que tenga capacidad para crear
estructuras de datos XML.
Temario de curso hTML-Css-Js-XML
5.3 - XQuery XQuery 18
If then
XML
๏ XQuery también soporta expresiones condicionales del tipo “if-then-else”. <libro>
<titulo>La sombra del viento</titulo>
๏ Su uso es muy similar a lde otros lenguajes de programación <autor>
<nombre>Carlos Ruiz</nombre>,
<apellido>Zafon</apellido>
if (condicion) </autor>
</libro>
then instruccionesdesalida <libro>
©Iñaki Martín
<titulo>Marina</titulo>
else instruccionesdesalida <autor>
XQuery <nombre>Carlos Ruiz</nombre>,
<apellido>Zafon</apellido>
for $b in doc("libros.xml")//libro </autor>
return </libro>
<libro> <libro>
{$b/titulo} <titulo>Recuerdos inmortales</titulo>
<autor>
{ <nombre>Sergio</nombre>,
for $a at $i in $b/autor
Temario de curso hTML-Css-Js-XML
<apellido>Argensol</apellido>
where $i <= 2 </autor>
return <autor>{$a/nombre, ", ", $a/apellido}</autor> <autor>
} <nombre>Pedro</nombre>,
{ <apellido>Batista</apellido>
if (count($b/autor) > 2) </autor>
then <autor> (y otros autores) </autor> <autor> (y otros autores) </autor>
else () </libro>
<libro>
} <titulo>La colmena</titulo>
</libro> </libro>
๏ A diferencia de la mayoría de los lenguajes, la cláusula else es obligatoria y debe aparecer siempre
en la expresión condicional. El motivo de esto es que toda expresión en XQuery debe devolver un valor.
๏ Si no existe ningún valor a devolver al no cumplirse la cláusula if, se devuelve una secuencia vacía
con ‘else ()’
5.3 - XQuery XQuery 19
XQuery
๏ Otro ejemplo. La siguiente consulta devuelve los títulos de los libros que mencionen “Unix” y “programing” en el
mismo párrafo. Si el libro tiene más de un párrafo solo es necesario que aparezca en, al menos, uno de ellos.
Esto lo indicamos con la palabra reservada “some” justo a continuación de where.
©Iñaki Martín
Temario de curso hTML-Css-Js-XML
5.3 - XQuery XQuery 21
๏ Otro ejemplo. La siguiente consulta devuelve los títulos de los libros que tengan un autor que contenga la letra
"r". Todos los autores han de cumplis la regla, por lo que no se muestra el libro "Recuerdos inmortales" ya que
uno de sus autores no tiene una "r" en su nombre.
๏ Sí se muestra “La colmena" pues no tiene valor para comparar el nombre del autor
๏ En este ejempo ademas se hace uso de una funcion, contains(), que evalua si un valor alfanumérico contiene
©Iñaki Martín
internamente una subcadena, pasandosele ambas cosas como argumento. Mas adelante se hace una
descripcion de ésta y más funciones disponibles
XQuery
XML
for $b in doc("libros.xml")//libro
where every $p in $b//autor/nombre <titulo>La sombra del viento</titulo>
<titulo>Marina</titulo>
Temario de curso hTML-Css-Js-XML
Operadores
๏ XQuery dispone de varios operadores para comparar y operar con los valores que evalua o devuelve
El resultado de un operador aritmético en el que uno, o ambos, de los operandos sea una cadena vacía es
una cadena vacía. Como regla general el funcionamiento de las cadenas vacías en XQuery es análogo al funcionamiento de los valores nulos en SQL.
©Iñaki Martín
matemático + suma
matemático - resta
Temario de curso hTML-Css-Js-XML
matemático * multiplicacion
matemático div división. Se usa div ya que el símbolo ‘/’ es necesario para indicar caminos.
matemático idiv división entera. ‘idiv’ se usa en divisiones con enteros en las que se ignora el resto.
matemático mod resto de una division entera
asignacion := asigna un valor a una variable: $var = 2345
relacional = comparacion por igualdad (es igual que )
relacional != comparacion por desigualdad (es distinto que)
relacional < comparacion por minoría (es menor que)
relacional > comparacion por mayor (es mayos que)
relacional <= es menor o igual que
relacional >= es mayor o igual que
negacion. Recibe como argumento un valor booleano (una expresion o un valor true o false) y devuelve lo
relacional not() contrario. Tambien da true si se evalua una cadena de longitud 0, el numero 0 o una secuencia vacia
5.3 - XQuery XQuery 23
orden << Los operadores de comparación de orden de nodos comparan pares de nodos según sus posiciones en un
documento. En este caso, da true si el primer operando predece (esta antes) que el segundo
orden >> Los operadores de comparación de orden de nodos comparan pares de nodos según sus posiciones en un
documento. En este caso, da true si el primer operando sigue (esta despues) que el segundo
secuencia | Unión. Procesa dos secuencias de nodos (una antes y otra despues del operador) y devuelve una secuencia con
todos los nodos existentes en las dos secuencias originales
©Iñaki Martín
secuencia intersect intersección: Recibe dos secuencias de nodos como operandos y devuelve una secuencia conteniendo todos
los nodos que aparezcan en ambos operandos.
secuencia except sustracción: recibe dos secuencias de nodos como operandos y devuelve una secuencia conteniendo todos los
nodos del primer operando que no aparezcan en el segundo operando.
Ejemplo: sacar todos los atributos del libro "Marina", menos el precio XML
Funciones
๏ XQuery dispone de varias funciones de todo tipo, de las cuales explicamos las más significativas
Tipo Funcion Significado y uso
redondeo floor() redondea con la precisión indicada al decimal inmediatamente inferior al indicado
redondeo ceiling() redondea con la precisión indicada al decimal inmediatamente superior al indicado
redondeo round() redondea con la precisión indicada
©Iñaki Martín
agrupacion count() cuenta cuantos elementos contiene al secuencia pasada como argumento
agrupacion min() indica el elemento menor de los que contiene al secuencia pasada como argumento
agrupacion max() indica el elemento mayor de los que contiene al secuencia pasada como argumento
agrupacion avg() indica la media de los elementos que contiene al secuencia pasada como argumento
Temario de curso hTML-Css-Js-XML
agrupacion sum() indica la suma de los elementos que contiene al secuencia pasada como argumento
cadena concat() concatena los elementos pasados como argumentos: concat('a', 'b', 'c')
cadena string.length() calcula el tamanio de una cadena
cadena starts-with() indica true o false si una cadena empieza por cierta subcadena: starts-with('ahora', 'ho')
cadena ends-with() indica true o false si una cadena acaba por cierta subcadena: ends-with('ahora', 'ho')
devuelve una subcadena del primer argumento, desde la posicion del segundo argumento, y de
cadena substring() tamanio indicado en el tercer argumento: substring('halcon', 2, 3) devuelve 'alc'
cadena upper-case() convierte la cadena argumento a mayúsculas
cadena lower-case() convierte la cadena argumento a minúsculas
genéricas disctinct-values() evalua su secuencia argumento y crea una nueva con valores únicos, sin nodos duplicados
genéricas empty() evalua su secuencia argumento y devuelve cierto si la secuencia está vacía.
genéricas exists() opuesta a empty() devuelve cierto cuando una secuencia contiene, al menos, un elemento
sus dos consultas de argumento son iguales si todos los nodos de la primera secuencia aparecen
genéricas deep-equal() en la segunda secuencia en la misma posición que en la primera secuencia.
5.3 - XQuery XQuery 25
Ejercicios de ejemplos
✦ Escribir una consulta que obtenga el nombre y el anio de todos los libros publicados por Planeta después de
1997
XQuery
for $b in doc("libros.xml")/tienda/libro
where $b/editorial = "Planeta" and $b/@anio> 1997 XML
return
©Iñaki Martín
✦ Escribir una consulta que obtenga el título de los libros que cuestan menos de 50.00. El resultado sale entre
etiquetas <librobarato>
Temario de curso hTML-Css-Js-XML
✦ Advertir que las dos soluciones dan resultados distintos. Para que el resultado salga dentro de otras etiquetas, la
consulta FLWOR ha de estar entre llaves
XQuery XML
XQuery
<librobarato>{ XML
for $b in doc("libros.xml")//libro
where $b/precio < 50.00 <librobarato>
return <titulo>Marina</titulo>
$b/titulo <titulo>Recuerdos inmortales</titulo>
</librobarato>
} </librobarato>
5.3 - XQuery XQuery 26
✦ Escribir una consulta que, de cada libro almadenado en comentarios, muestra de su correpondiente libro en
"libros.xml" el título del libro, y el precio del libro, y luego, el precio del libro en el archivo "comentarios.xml", con
esta estructura:
<los-libros-con-precios>
<libro-con-precios>
<titulo>xxxxxxxx</titulo>
<precio-concomentario>9999</precio-concomentario>
<precio>9999</precio>
</libro-con-precios>
©Iñaki Martín
...
</los-libros-con-precios>
XQuery
<los-libros-con-precios>{
for $b in doc("libros.xml")//libro, $a in doc("comentarios.xml")//entrada
where $b/titulo = $a/titulo
return
Temario de curso hTML-Css-Js-XML
<libro-con-precios>
{ $b/titulo }
<precio-concomentario>{ $a/precio/text() } </precio-concomentario>
<precio>{ $b/precio/text() } </precio>
</libro-con-precios>
}</los-libros-con-precios> <los-libros-con-precios>
<libro-con-precios>
<titulo>La sombra del viento</titulo>
<precio-concomentario>66.95</precio-concomentario>
<precio>65.95</precio>
</libro-con-precios>
<libro-con-precios>
XML
<titulo>Marina</titulo>
<precio-concomentario>31.20</precio-concomentario>
<precio>30.20</precio>
</libro-con-precios>
<libro-con-precios>
<titulo>Recuerdos inmortales</titulo>
<precio-concomentario>40.95</precio-concomentario>
<precio>39.95</precio>
</libro-con-precios>
</los-libros-con-precios>
5.3 - XQuery XQuery 27
✦ Escribir una consulta que, por cada libro con autores, devuelva el título del libro y sus autores. Si el libro no tiene
autores pero sí editor, la consulta devolverá el título del libro y la afiliación del editor.
XQuery XML
<tienda> { <tienda>
<libro>
for $b in doc("libros.xml")//libro[autor]
<titulo>La sombra del viento</titulo>
return <autor>
<libro> <apellido>Zafon</apellido>
©Iñaki Martín
{$b/titulo} </autor>
</libro>
{$b/editor/afiliacion}
<libro>
</referencia> <titulo>Recuerdos inmortales</titulo>
} </tienda> <autor>
<apellido>Argensol</apellido>
<nombre>Sergio</nombre>
</autor>
<autor>
<apellido>Batista</apellido>
<nombre>Pedro</nombre>
</autor>
<autor>
<apellido>Seros</apellido>
<nombre>Daniel</nombre>
</autor>
</libro>
<referencia>
<titulo>La colmena</titulo>
<afiliacion>Historia siglo XX</afiliacion>
</referencia>
</tienda>
5.3 - XQuery XQuery 28
✦ Escribir una consulta que muestre los pares de títulos que sean distintos pero tengan el mismo autor o grupo de
autores. Hay que tener en cuenta que el orden de aparición de los autores puede variar de un libro a otro
XQuery XML
<consulta1> { <consulta1>
©Iñaki Martín
return $a
<tr>
<td>
<titulo>Recuerdos inmortales</titulo>
</td>
</tr>
<tr>
<td>
<titulo>La colmena</titulo>
</td>
</tr>
</table>
</body>
</html