Llenguatges de publicació
de documents en la xarxa
AAD-FIB
Arquitectura d’Aplicacions Distribuïdes
LEANDRO NAVARRO i JORDI TORRES
Departament d’Arquitectura de Computadors
UPC, març- 2004
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Contingut
•
•
•
•
•
•
•
•
html
css
xml
dtd
schema
xhtml
xsl (xslt, xpath)
dom,sax
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
La nova realitat d’internet
Els nous tipus de terminals i els dispositius empotrarts amb les
seves noves interfícies d’accés, incloent les connexions
inhalambriques.
La web, que encara està basada en bona part en HTML/HTTP,
està en procés de redefinició (XML y Web Services, Web
Semàntic, etc).
La nova arquitectura de serveis multimèdia, basats en
RTP/UDP
Els nous paradigmes P2P i GRID amb el seu enorme potencial.
Les aplicacions primitives que han sobreviscut sense gaires
canvis, com el correu electrònic o el FTP.
El nou marc de seguretat que servirà per autentificar usuaris
de manera eficaç.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Contingut del tema
Descripció dels esquemes per representar informació estructurada en
documents i els mecanismes per restringir-la i transformar-la.
Tecnologies estretament relacionades que es presentaran:
• html
es descriuen els conceptes bàsics i els mecanismes per separar el contingut
de la presentació: fulls d’estil (css).
•xml
es descriu la sintaxi bàsica i a continuació els mecanismes per restringir un
document : dtd i schema.
•xhtml
Es descriu l’unificació de xml i html,
•xsl y xslt
Es descriu com transformar documents xml i com es pot processar un
document XML amb DOM i SAX.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Antecedents
SGML: Standard Generalized Markup Language
Origen: GML el 1969.
Textual, basat en tags …
Un llenguatge amb marcadors i identificadors d’elements del
document que poden també contenir altres elements i que ja afegia
el concepte de definició formal de tipus de documents.
SGML és l’estàndar (ISO 8879) per a la representació de
dades i documents estructurats. Inventat en 1974.
SGML: Inspirat pel concepte d’hipertext
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Hiperdocuments
HTML: Hiperdocuments WWW
html ha seguit una evolució molt ràpida que ha convertit el llenguatge
en un objecte d’una gran disputa entre fabricants de navegadors
(recordeu Netscape i Microsoft) i el consorsi Web encarregat de posar
ordre a l’evolució del llenguatge.
Això ha fet d’html un llenguatge en que el format de presentació està
barrejat amb l’estructura (o contingut) del document.
Cap allà el 1996 html començava a estar fora de control i es va
recuperar les idees de:
sgml – (complicacions de sgml) + (nou nom) = xml
XML? Ho veurem en aquest tema!
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML
XML: SGML lleuger …
En 1998 apareix XML 1.0 amb les seves fulles d’estil. Està pensat no
només per a les persones que miren una finestra de navegador, també
està pensat per processos (o agents) que interactuen entre ells a la
xarxa.
En ocasions es precís transformar els documents xml d’un format a un
altre i per això s’utilitzen els fulls d’estil de transformacions (xslt)
la ràpida introducció de la web i del xml ha estat possible per
la facilitat i gratuïtat d’eines desenvolupades per la comunitat
de manera participativa:
• Universitat d’Illinois al 1993 : Mosaic (html 2.0)
• Diverses llibreries (“parsers”) per tractar documents xml s’han fet
públiques, fet que ha comportat que xml fos un format “de moda”.
• ...
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
el què ens espera
Sembla que HTML ja ha complert i ara li toca a totes
les tecnologies al voltant de XML.
Però …
les especificacions segueixen evolucionant!!!
hi ha moltes bones fonts d’informació a Internet i en llibres que es
publiquen i renoven amb freqüència.
I no hi ha més remei que …
posar-se al dia constantment!
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
html
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
html
Llenguatge per codificar documents de la WWW
Sintaxis i semàntica definida per especificació
Consorci World Wide Web (W3C) http://www.w3.org
HTML 3.2 (1996), HTML4.0 (1998), 4.01…
Característiques:
Basat en etiquetes: <html> … </html>
Codificació d’estructura lògica (no presentació )
Enllaços a altres objectes (per valor o “inline”/per ref a URL)
Cada vegada més complex,…
menor codificació manual  més estricte:
format intern d’editors (de html o genérics)
Netscape, Macromedia Dreamweaver, MS Office, MS FrontPage…
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Importància de l’HTML?
La arquitectura de les aplicacions web fins ara:
• El protocol HTTP per transferir documents web del
servidor al client.
•El llenguatge HTML de representació de la documentació
web, que inclou a més de text, les regles de format i
presentació visual.
•La URL (uniform resource locator) per referènciar
unívocament documents web en la xarxa.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Anatomia d’una pàgina web
- Tot està enmarcat dins de <html> i </html>tags
- Una secció de capçalera opcional està entre
<head> i </head> tags
Pot incloure títol,
- La resta de pàgina està inclosa entre els tags
<body> i </body>
- Exemple de l’estructura bàsica d’un document:
<html>
<head><title>Document bàsic</title></head>
<body>
<p>Un document <i>molt senzill</i>, però complert.</p>
</body>
</html>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
HTML
Etiquetes o atributs:
<a href="http://www.upc.es"> <img src=pdf.gif>
<input name=fitxer AAD size=24 maxlength=80>
Casi tots tenen etiqueta de /final
<tagname att1=“val1” attr2=“val2” ..>
Algunes excepcions:
( o moltes excepcions !!!!!)
• <img>
• <br>
• <hr>
• <meta>
• <base>
•...
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Demo
Un navegador quasi ho accepta tot!
• editar doc txt amb exemple anterior
• anar retallant coses
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
html?
<!-->
&lt;
<A>
<ABBREV>
<ACRONYM>
<ADDRESS>
<APPLET>
<AREA>
<AU>
<AUTHOR>
<B>
<BANNER>
<BASE>
<BASEFONT>
<BGSOUND>
<BIG>
<BLINK>
<BLOCKQUOTE>
<BQ>
<BODY>
<BR>
<CAPTION>
<CENTER>
<CITE>
<CODE>
<COL>
<COLGROUP>
<CREDIT>
<DEL>
<DFN>
<DIR>
<DIV>
<DL>
<DT>
<DD>
<EM>
<EMBED>
<FIG>
<FN>
<FONT>
<FORM>
<FRAME>
<FRAMESET>
<H1>
<H2>
<H3>
<H4>
<H5>
<H6>
<HEAD>
<HR>
<HTML>
<I>
<IFRAME>
<IMG>
<INPUT>
<INS>
<ISINDEX>
<KBD>
<LANG>
<LH>
<LI>
<LINK>
<LISTING>
<MAP>
<MARQUEE>
<MATH>
<MENU>
<META>
<MULTICOL>
<NOBR>
<NOFRAMES>
<NOTE>
<OL>
<OVERLAY>
<P>
<PARAM>
<PERSON>
<PLAINTEXT>
<PRE>
<Q>
<RANGE>
<SAMP>
<SCRIPT>
<SELECT>
<SMALL>
<SPACER>
<SPOT>
<STRIKE>
<STRONG>
<SUB>
<SUP>
<TAB>
<TABLE>
<TBODY>
<TD>
<TEXTAREA>
<TEXTFLOW>
<TFOOT>
<TH>
<THEAD>
<TITLE>
<TR>
<TT>
<U>
<UL>
<VAR>
<WBR>
<XMP>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
HTML
Frames: (documents "inline")
<frameset cols="10%,*">
<frame src="frame1.html"> <frame src="frame2.html">
<noframes>
Visite <a href="frame1.html">este documento</a>.
</noframes>
</frameset>
Taules:
<table width="100%">
<tr><td>A</td><td>B</tr></td><tr><td colspan=2>C</td></tr>
</table>
Formularis
<form method="post" action="/bin/cmd">
Importe <input type="text" name="valor">
Verificar <input type="checkbox" name="ver" value="1">
<input type="submit" value="Comprar">
</form>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
HTML
Tags per llistes
This is an ordered list:
<ol>
<li>First item
<li>Second item
<li>Third item
</ol>
This is an unordered list:
<ul>
<li>First item
<li>Second item
<li>Third item
</ul>
This is an ordered list:
1. First item
2. Second item
3. Third item
This is an unordered list:
• First item
• Second item
•
Third item
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
JavaScript
Gestors de events: Javascript (EcmaScript)
Detecta+reacciona events al carregar, presentar i usar docs
Similar a llenguatge C, interpretat, amb diversos dialectes segons
clients.
<script><a href=x onMouseOver="document.status='¡Pulsa!';return true">
JavaScript, inventat per Netscape,
http://developer.netscape.com/docs/manuals/js/client/jsguide/index.htm
Microsoft té el seu propi dialecte JScript:
http://msdn.microsoft.com/scripting/default.htm
Estandaritzat com EcmaScript
http://www.ecma.ch/stand/ECMA-262.htm
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
JavaScript
<HTML>
<HTML>
<HEAD><TITLE>Using JavaScript for Form Checking</TITLE></HEAD>
<BODY>
<h1>AAD examples</h1>
<h2>Using JavaScript for Form Checking</h2>
<FORM NAME="MyForm" ACTION="SomeCGIProgram" METHOD="POST">
First Name:
<INPUT TYPE="text" NAME="txtFirstName" VALUE="JORDI">
<BR>
Last Name:
<INPUT TYPE="text" NAME="txtLastName" VALUE="">
<BR>
<INPUT TYPE="button" NAME="btnSubmit" VALUE="Submit Form" onClick="checkForm();">
<BR>
<SCRIPT LANGUAGE="JavaScript">
<!-function checkForm()
{
if (document.MyForm.txtFirstName.value == "")
{
alert("Please enter your first name");
document.MyForm.txtFirstName.focus();
}
else if (document.MyForm.txtLastName.value == "")
{
alert("Please enter your last name");
document.MyForm.txtFirstName.focus();
}
else
{
document.MyForm.submit();
}
}
//-->
</SCRIPT>
</FORM>
</BODY>
</HTML>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Demo
Veure què són els events
Veure que això allibera el servidor
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Limitacions de HTML
• La informació de format i estructura està barrejada.
Per exemple s’usen marques com <font> per canviar l’aspecte d’una frase,
enlloc d’indicar el seu significat estructural (és un títol de primer nivell)
O s’usen taules per col·locar un text en una cantonada de la pàgina, enlloc
d’usar-les per indicar l’organització de dades de manera tabulada.
SOLUCIÓ?  CCS
• La varietat de formes acceptables d’expressar.
el què facilita que si un usuari escriu les seves pàgines directament en html,
encara que afegeixi alguns petits errors d’escriptura o omissió d’alguns
símbols, les seves pàgines poden ser visualitzades correctament. Això
complica terriblement el codi del navegador que processa la pàgina donat
que cosidera moltíssims casos.
O els valors dels atributs poden delimitar-se per cometes simples (‘), dobles
(“) o ometres.
SOLUCIÓ XHTML
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 1
Crear aquesta pàgina amb només html
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
css
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
css
Controlan la “apariencia” de un documento
- Incorporado en HTML 4.0
- Complementan la info estructural de HTML
- Importante la separación estructura y estil
¿Por qué “en cascada”?
Info de estilo que se va superponiendo
Van "cayendo" (aplicando) sobre el documento …
Puede quedar una mezcla "curiosa"…
También pueden ser usados en otros markup languages (XHTML, XML)
Referència: http://www.w3.org/MarkUp/Guide/Style
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
css
Regla para mostrar una etiqueta html
"Cascading Style Sheet" (CSS)
Selector
Declaración
H1 { color : green }
Propiedad
valor
¿Que podemos controlar?
Fonts (color, size, caps, font, etc)
Background (image, color, tiling properties)
Text (spacing, line-height, alignment, decoration, word-spacing)
Box properties (margin, border, float)
List properties (image for bullets)
Links (visited, hover, active, link)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Hojas de estilo de presentación
Formas de asociar estilo
- Entremezclado con html (inline), atributo style
<h1 style="color: blue; font-style: italic">Es azul</h1>
- Para todo el documento (document level), elemento style
<head> … <style type="text/css"><!- H1 {color: blue; font-style: italic}
@import url(http://x.org/estilo);
--> </style> …
<!--…--> Para clientes web que no
entienden CSS (sintaxis  html)
- Externo, hoja de estilo externo
estilo_gral.css: H1 {color: blue; font-style: italic}
Doc html: <head>…<link rel=stylesheet type="text/css"
href="http:://x.org/estilo_gral.css">
 compartido por todos los documentos html de un sitio web. Así un cambio en el documento de
estilo afectará inmediatamente a todos los documentos que usen ese estilo.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Demo
Maneras de asociar estilos
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
CSS: Ejemplo
<STYLE type="text/css"><!-Redefinición de elemento
BODY { font-family: sans-serif; color: black; background: white; }
BODY, UL, P, TD, TH, LI, H1, H2, H3
UL, P, TD, TH, LI {font-family: sans-serif;}
H1, H2, H3 { font-weight: bold; color: black }
SPAN.activity { font-family: sans-serif; font-size: .75em }
SPAN: Agrupación
P.copyright { font-size: smaller }
Clases de elemento P
P.large { font-size: 1.1em; }
.teaser { color: #c80028 }
Clases genéricas (no asociadas a un elemento)
.shortquote { font-style: italic }
Pseudo-clase
A:link { color: #004f9c } /* enlaces no visitados */
:visited { color: rgb(153, 0, 153) } /* enlaces ya visitados */
:active { color: rgb(255, 0, 102) } /* cuando se pulsa sobre el enlace */
A:hover { background: cyan } /* cuando ratón pasa sobre enlace: CSS2, difícil de hacer con JavaScript
*/
div.box { border: solid; border-width: thin; width: 100% }
.hide { display: none; }
No mostrar …
H1 EM { color: red; }
Enfatizado dentro de título de nivel 1, en color rojo
--></STYLE>
<H3>Documents</H3>
<A href="TR/">Technical Reports</A></H4>
<SPAN class="activity"><A href="MarkUp/">HTML</A></SPAN>
<div class="box"> Un marco fino rodeará este elemento DIV. </div>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
CSS: Cascading
Hay tres tipos
CSS1 (Nivel 1), 12/96 Formato sencillo, presentación
pantalla, ~50 propiedades: color, font-size, …
CSS2, 5/98 añade más de 70 propiedades: varias
presentaciones ej. impresa, auditiva "aural", saltos de
página, absolute (and fixed) vs. relative
specify coordinates (relative to top left of box)
z-index: for saying what’s on top when things are stacked
…
CSS3 (en definición, ¡creo!)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
CSS2
/* ****************** Style for printing ************** */
@media print {
H1, H2, H3, H4, H5, H6 { page-break-after: avoid; page-break-inside: avoid }
BLOCKQUOTE, PRE
{ page-break-inside: avoid }
UL, OL, DL { page-break-before: avoid }
.navbar
{ background-color: #fff ; border-color: #000; border-width: 1px }
A.navlink, A.bannerLink { font-weight: normal }
}
/* ****************** Style for speech ************** */
@media aural {
H1, H2, H3, H4, H5, H6 { voice-family: paul, male; stress: 20; richness: 90 }
H1
{ pitch: x-low; pitch-range: 90 }
H2
{ pitch: x-low; pitch-range: 80 }
H3
{ pitch: low; pitch-range: 70 }
LI, DT, DD { pitch: medium; richness: 60 }
PRE, CODE, TT { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
EM
{ pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
STRONG
{ pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
DFN
{ pitch: high; pitch-range: 60; stress: 60 }
I
{ pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
B
{ pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
U
{ richness: 0 }
A:link
{ voice-family: harry, male }
A:visited { voice-family: betty, female }
A:active { voice-family: betty, female; pitch-range: 80; pitch: x-high }
}
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 2
Homework 1 con html + css
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
xml
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Datos estructurados en texto: XML
XML: eXtensible Markup Language (lenguage
de etiquetaje extensivo)
A partir de elementos <x> … </x>
Propuesto por el W3C ("SGML Ligero")
Basado en alfabeto universal Textual (Unicode UTF-8)
XML permite a los usuarios crear sus propios tags
Separa contenido con la presentación
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Datos estructurados
A
A:
B:
"foo"
C:
"bar"
C:
"lab"
B
C
C
"foo"
"bar"
"lab"
<A>
<B>foo</B>
<C>bar</C>
<C>lab</C>
</A>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Datos estructurados
AAD
A
B
C
a1
b1
c1
a2
a3
b2
b3
c2
c3
AAD
tuple
tuple
tuple
A B C A B C A B C
a1 b1 c1 a2 b2 c2 a3 b3 c3
AAD
tuple
A a1 /A
B b1 /B
C c1 /C
/tuple
tuple
A a2 /A
B b2 /B
C c2 /C
/tuple
…
/R
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo HTML vs XML
Ejemplo presentación HTML:
<h2>Hamlet, Príncipe de Dinamarca</h2>
<p>
<b>Autor: </b>William Shakespeare<br>
<b>ISBN: </b>84-239-0027-4<br>
<b>Año: </b>1938</p>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo HTML vs XML
La versión HTML puede ser interpretada por personas a través
de los browsers, pero los programas podrian extraer
facilmente información del documento HTML
Ejemplo estructuración con XML, para ser procesado:
<?xml version="1.0"?>
Processing instruction
Tags - "elements"
<libro>
<autor> <apellido>Shakespeare</apellido>
<nombre>William</nombre>
</autor>
<titulo>Hamlet Principe de Dinamarca</titulo>
<isbn>84-239-0027-4</isbn>
<fecha>1938</fecha>
</libro>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo HTML vs XML
Con HTML ahora una persona o un
programa podrá obtener la información
con facilidad:
•
•
•
•
•
apellido,
nombre,
título,
isbn
fecha.
Ha de conocer las siguientes piezas del
puzzle:
• el “lenguaje”:
el xml
• el vocabulario (que se está usando):
<libro>,
<autor>, <apellido>, <nombre>, <titulo>, <isbn>, <fecha>
• las restricciones de uso:
cuando se pueden usar y
qué valores podemos colocar en cada palabra clave, también
llamadas elemento.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Datos en XML
¿Y la representación de un documento
en XML en el navegador?
El navegador no conoce como “pintar” mi
vocabulario (mis tags)

podemos asociar a cada
elemento un estilo de
presentación en hojas de estilo
CSS
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Visualización de XML
• XML no tiene implícita ninguna definición de estilo
• Visión Jerárquica (browser si no encuentra hoja de estilo)
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
<CD>
<TITLE>Four Women (4CDs)</TITLE>
<ARTIST>Nina Simone</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Verve</COMPANY>
<PRICE>60.58</PRICE>
<YEAR>2003</YEAR>
</CD>
<CD>
<TITLE>Fallen</TITLE>
<ARTIST>Evanescence</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Wind-up Records</COMPANY>
<PRICE>14.49</PRICE>
<YEAR>2003</YEAR>
</CD>
.
.
.
</CATALOG>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Visualización de XML
• La hoja de estilo CSS es el primer
camino para visualizar un
documento XML
Una hoja de estilo para un documento XML es
justo una lista de tags y un tipo asociado.
La conexión de un documento XML y su hoja de
estilo se consigue mediante una instrucción de procesado
xml-stylesheet
<?xml-stylesheet type = "text/css"
href = “cd_catalog.css“
?>
cd_catalog.css:
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
font-size: 20pt;
}
ARTIST
{
color: #0000FF;
font-size: 20pt;
}
COUNTRY,PRICE,YEAR,COMPANY
{
Display: block;
color: #000000;
margin-left: 20pt;
}
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
CSS Demo
Aunque con CCS se pueda dar formato a los ficheros XML
parece que el nuevo estandar va a ser XSL (más
adelante lo trataremos)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML en 10 puntos…
(según w3c)
1. XML es un método para poner datos estructurados en texto
2. XML parece HTML pero no es HTML
3. XML es texto, pero no está hecho para ser leído
4. XML es una familia de tecnologías
5. XML es muy prolijo, pero eso no es problema …
6. XML es nuevo, pero no tan nuevo
7. XML ha pasado HTML a XHTML
8.XML es modular
http://www.w3.org/XML/1999/XML-in-10-points.html
“This summary in 10 points attempts to capture enough
of the basic concepts to enable a beginner to see the
forest through the trees” (W3C)
9. XML is the basis for Resource Description Framework (RDF) and the Semantic Web
10. XML no precisa licencia, independiente de plataforma y bien soportado por muchas
herramientas: XML no es siempre la solución, pero vale la pena considerarlo
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Usos de XML
Usos de XML:
•Para transporte de información entre bases de datos
•Para enviar información que se muestra a usuarios
•Como formato legible para expresar datos estructurados
•Para codificar datos en la red (wire-format)
Como alternativa a formatos de datos binarios en RPC
Restricciones:
Datos binarios deben enviarse como Base64 o enviar aparte
del documento XML (un enlace, como hace HTML)
Bastante texto (puede comprimirse: compresor general
gzip, compress; compresor específico: bXML)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Características de XML
• Marcas elegidas por usuario
<libro>, <canción> …
• Marcas pueden tener atributos
<libro autor=“William S” titulo=“Hamlet”>
• Marcas sin datos pueden
cerrarse al final de la etiqueta
<libro autor=“William S” titulo=“Hamlet”/> en lugar de
<libro autor=“William S” titulo=“Hamlet”></libro>
• Marcas anidadas
<libro><autor>William S.</autor>…</libro>
• Marcas deben cerrarse
(Incorrecto) <libro><autor>William S.</libro>
• Codificar algunos caracteres
<libro titulo=“El &quot;Aleph&quot;”/>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Características de XML
XML és más restrictivo que los usos de HTML
Legal:
Aceptado en html:
<p>Parrafo 1.</p><p>Parrafo 2.</p>
<p>Parrafo 1.<p>Parrafo 2.</p>
Legal:
Aceptado en html:
<b><i>Negrita e Itálica</i></b>
<b><i>Negrita e Itálica</b></i>
Legal:
Aceptado en html:
<FONT COLOR=“#FFFF66”>
<FONT COLOR=#FFFF66>
Entidades:
< &lt;
& &amp;
> &gt;
‘
&apos;
“ &quot;
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Comunidades en XML
• “comunidades” que han definido su “vocabulario”
Si se quieren intercambiar datos codificados en xml, quienes
intercambien esos documentos deberán ponerse de acuerdo en el
nombre de los elementos y la forma de organizarlos
e.g. MathML (Mathematics Markup Language)
<expr>
<mci>x</mci>
<power/>
<mcn>2</mcn>
</expr>
<plus/>
<mcn>4</mcn>
x2+4
http://www.w3.org/Math/
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Restricción de documentos XML
Definiciones:
•
Documento XML “bien formado”:
•
Documento XML “válido”:
Un documento que cumple con la sintaxis de xml
Si además si el documento cumple con un conjunto de
restricciones adicionales especificados por cierta “comunidad”
Las características del lenguaje de una comunidad, su gramática
(elementos de una lengua y sus combinaciones) puede expresarse en
una sección del documento, o en un documento aparte de dos
formas:
1) DTD: Definición Tipo Documento;
1ª generación: heredado de SGML, sintaxis no XML, sin tipos de
datos, …
2) XML Schema: formato XML, tipos de datos, más restricciones
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 3:
expresar en XML estos datos
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 4:
visualitzar el fichero XML anterior con CSS
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
dtd
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
documentos XML
<?xml?>
DTD
o
schema
<weather-report>
<date>August 15,
2000</date>
<time>08:00
</time>
<area>
<city>Darmstadt</city
> <temperature
scale=“C”>25</tempe
rature>
Parser
Bien formados
Validos
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD
•
La DTD describe la sintaxis
Estructura, elementos, atributos, valores permitidos
Heredado de SGML, formato no XML
Situado al comienzo, contenido o referenciado
•
Referenciado
<?xml version=“1.0” encoding="UTF-8" standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/libro.dtd”>
<saludo>¡Bienvenidos a XML!</saludo>
El documento XML expresa con la instrucción <!DOCTYPE> que el resto del documento XML cumple con
el vocabulario “libro” que se identifica con el identificador “http://www.x.org/xml/libro.dtd”:
•
Contenido
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE saludos [
<!ELEMENT saludo (#PCDATA)>
]>
<saludo>¡Bienvenidos a XML!</saludo>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo XML de uso del DTD
Ejemplo sencillo de DTD:
<!ELEMENT libro (autor+) >
<!ATTLIST libro
titulo CDATA #REQUIRED
fecha CDATA #IMPLIED >
<!ELEMENT autor (#PCDATA) >
Tipos de datos que pueden aparecer en una DTD se reducen a texto:
PCDATA: texto y posibles marcas, secuencia de caracteres procesados
CDATA: texto, secuencia de caracteres excepto marca de final ]]>
Una declaración de elemento <!ELEMENT>
asocia un nombre a una plantilla de contenido definida por una expresión que
indica qué puede contener:
- otros elementos delimitados por (ver siguientes transparencias).
- texto #PCDATA (una secuencia de 0 o más caracteres, que puede a su
vez contener otros elementos)
- vacío (EMPTY).
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con subelems (a,b)
(a,b) significa el elemento a seguido de b
Ejemplo de DTD
<!ELEMENT autor (nombre, apellido)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/autor.dtd”>
<autor>
<nombre>Jorge Luis</nombre><apellido>Borges</apellido>
</autor>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con subelems (a*)
(a*) significa que a está repetido 0, 1 o más veces
Ejemplo de DTD
<!ELEMENT familia (padre,madre,hijo*)>
<!ELEMENT padre (#PCDATA)>
<!ELEMENT madre (#PCDATA)>
<!ELEMENT hijo (#PCDATA)>
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/familia.dtd”>
<familia>
<padre>Luis</padre>
<madre>Luisa</madre>
<hijo>Luisito</hijo>
<hijo>Luisita</hijo>
</familia>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con subelems (a+)
(a+) significa que a está repetido 1 o más veces
Ejemplo de DTD
<!ELEMENT familia-con-hijos (padre,madre,hijo+)>
<!ELEMENT padre (#PCDATA)>
<!ELEMENT madre (#PCDATA)>
<!ELEMENT hijo (#PCDATA)>
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/familia.dtd”>
<familia-con-hijos>
<padre>Luis</padre>
<madre>Luisa</madre>
<hijo>Luisito</hijo>
<hijo>Luisita</hijo>
</familia-con-hijos>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con subelems (a?)
(a?) significa que a está repetido 0 o 1 veces
Ejemplo de DTD
<!ELEMENT familia-minima (padre?,madre?,hijo*)>
<!ELEMENT padre (#PCDATA)>
<!ELEMENT madre (#PCDATA)>
<!ELEMENT hijo (#PCDATA)>
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/familia.dtd”>
<familia-minima>
<madre>Luisa</madre>
<hijo>Luisito</hijo>
<hijo>Luisita</hijo>
</familia-minima>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con subelems
“|” significa o “,” significa sucesión
EMPTY (sin paréntesis) significa que no contiene
datos
Ejemplo de DTD
<!ELEMENT operaciones (((get | put),uri)*)>
<!ELEMENT get EMPTY>
<!ELEMENT put EMPTY>
<!ELEMENT uri (#PCDATA)>
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/ops.dtd”>
<operaciones>
<get/><uri>http://www.upc.es/doc1</uri>
<get/><uri>http://www.upc.es/doc2</uri>
<put/><uri>http://www.upc.es/doc3</uri>
</operaciones>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo XML de uso del DTD
declaración de atributos
<!ATTLIST>
•asocia a un nombre de elemento, una lista de atributos.
•Cada atributo está declarado por: su nombre; texto
que puede contener: CDATA o lista de valores textuales que puede
tomar; modificadores o valor por defecto.
•Los modificadores pueden ser:
#REQUIRED: atributo debe proveerse
#IMPLIED: no tiene valor por defecto
#FIXED: siempre ha de tener el valor por defecto
Al omitir un atributo con valor por defecto, equivale a que tenga ese
valor
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Declaración de Atributos
<!ATTLIST
libro
Tipo de
Elemento
titulo
Nombre del
Atributo
CDATA
#IMPLIED>
Tipo de
Atributo
Valor por
Default
<!ELEMENT libro (autor+) >
<!ATTLIST libro
titulo CDATA #REQUIRED
fecha CDATA #IMPLIED >
<!ELEMENT autor (#PCDATA) >
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo XML de uso del DTD
<!ELEMENT libro (autor+) >
<!ATTLIST libro
titulo CDATA #REQUIRED
fecha CDATA #IMPLIED >
<!ELEMENT autor (#PCDATA) >
Instrucción de procesado
Juego caracteres
Autocontenido: refs
a entidades externas
<?xml version=“1.0” encoding="UTF-8" standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/libro.dtd”>
<!--Aquí vienen los datos xml-->
Comentario
<libro titulo="El Aleph" fecha="1968" >
<autor>Jorge Luis Borges</autor>
</libro>
Caracteres Dato: no se analizan
<autor><![CDATA[Texto <especial> con "&']]>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Elementos o atributos
Un documento XML puede imaginarse como un árbol
<libro>
<autor>
<nombre>Jorge Luis</nombre>
<apellido>Borges</apellido>
</autor>
</libro>
frente a
<libro autor=“Jorge Luis Borges”>
Elementos:
Contenido de una
marca (datos)
Valor de atributo
(la metainfo)
ramas que pueden subdividirse
(y extenderse)
Atributos:
<libro>
\
<autor>
\
<nombre>
|\
| Jorge Luis
|
<apellido>
\
Borges
<libro>
\
=autor
\
Jorge Luis Borges
hojas (terminales) que no pueden dividirse más (no estructurados) sin
modificar el documento anterior.
Adecuados para identificadores, URLs, refs o info simple no principal
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DTD ELEMENT con atributos XML
Ejemplo de DTD
Sin contenido
<!ELEMENT libro EMPTY> Lista de atributos
<!ATTLIST libro
titulo CDATA #REQUIRED
autor CDATA 'anonimo'
Valores permitidos
peso CDATA #IMPLIED
formato (tapa-dura | tapa-blanda) 'tapa-blanda'
>
Valor por defecto
Ejemplo XML de uso del DTD
<?xml version=“1.0” standalone=“no”?>
<!DOCTYPE libro SYSTEM “http://www.x.org/xml/libro.dtd”>
<libro
titulo="El Aleph"
autor="Jorge Luis Borges"
formato="tapa-dura"
/>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Entidades en DTD
Declaradas dentro de un DTD que permite usar una referenca para
substituir una serie de caracteres por otro carácter en un documento
XML (similar a macros).
Declaración de una entidad general:
<!ENTITY name “replacement_characters">
En el documento XML la referencia comienza con & y finalizan con ; .
- Entidades predefinidas (para la interpretación) :
“  &quot;
&  &amp;
<  &lt;
>  &gt;
‘  &apos;
&#  Unicode
&#x  hexa
&#169 = ©
&#xA9; = ©
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Entidades en DTD
- Entidades internas
Se pueden añadir nuevas declaraciones para representar carácteres o
secuencias de carácteres. Por ejemplo:
<!ENTITY UPC "Universitat Politècnica de Catalunya">
<desc>La &UPC; es una universidad técnica.</desc>
es idéntico a:
<desc>La Universitat Politècnica de Catalunya es una universidad técnica.</desc>
- Parameter Entity reference només en DTDs
Comencen amb %
No poden ser usats en document XML
<!ENTITY % PD "(#PCDATA)">
<!ELEMENT marca %PD;>
<!ELEMENT marca (#PCDATA)>
- Entidades externas
<!ENTITY infogeneral SYSTEM "http://www.upc.es/info.xml">
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Identificadores ID
Nombres únicos para referencias entre varios lugares de un
documento
Ejemplo XML:
<autor ref="borges">Jorge Luis Borges</autor>
...
<libro autor="borges">El reloj de arena</libro>
Basado en el DTD:
<!ELEMENT autor (#PCDATA)>
<!ATTLIST autor
ref ID #REQUIRED> no dos autores pueden tener el mismo nombre
<!ELEMENT libro (#PCDATA)>
<!ATTLIST libro
autor IDREF #IMPLIED> atributos que solo apuntan a otros elementos
Tipos de atributos:
ID = Nombre asociado a un elemento que lo distingue de entre todos.
IDREF = Una sola referencia a atributo ID
IDREFS = Lista de nombres (referencias a ID) separada por blancos
…
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Espacios de nombres (namespaces)
Mezclando lenguajes XML!
http://www.w3.org/TR/REC-xml-names/
Considerar un lenguaje que usa XHTML como sublenguaje para mensajes
de help:
<example type="gadget">
<head size="medium"/>
<big><subwidget ref="gizmo"/></big>
<info>
<head>
<title>Description of gadget</title>
</head>
<body>
<h1>Gadget</h1>
A gadget contains a big gizmo
</body>
</info>
</example>
Problema: El significado de head y big dependen del contexto.
Esto puede complicar las cosas a los procesadores de XML y pueden
causar ambiguedades.
La causa del problema radica en: un espacio de nombres común.
Solución: cualificar los nombres con URIs (que no se supone que apunten
a ningún sítio, es solo la manera más simple de conseguir un
nombreúnico).
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Espacios de nombres (namespaces)
Para construir documentos xml que combinan entidades de
varias comunidades (espacios de nombres):
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <colección xmlns:a="http://www.alianza.es">
<a:libro título="El aleph" />
</colección>
Ejemplo WebDAV:
PROPPATCH /WebDavDocs/webdav-xml.htm HTTP/1.1
Host: miservidor.com
Content-Type: text/xml
Content-Length: 138
<?xml version="1.0" ?>
- <d:propertyupdate xmlns:d="DAV:"
xmlns:o="urn:schemas-microsoft-com:office:office">
- <d:set>
- <d:prop>
<o:Author>Sean Purcell</o:Author>
</d:prop>
</d:set>
</d:propertyupdate>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 5:
realizar el DTD del fitxer XML del homework 4
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
schema
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML schema
Limitaciones de los DTDs:
• La sintaxis es diferente de XML. No puede ser parseada
con un parser XML.
• No es cómodo manejarse con dos tipos de sintaxis
diferentes.
• DTDs no permiten especificar tipos particulares de
datos.
¿Solución?  XML Schema
• Basados en la sintaxis, herramientas y tecnología de
XML.
• La definición va de acuerdo con la sintaxis de XML.
• Permite la definición y tipos de datos complejos.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML Schema (DTD-Nueva Gen)
Funciones:
• Definir/restringir el contenido y estructura de documentos XML en XML
• Sustituir DTD  XML Schema
Características:
•Facilita mapeos automáticos con estructuras de datos programa
• Escrito también en xml (parsers xml pueden tratar)
Y más a partir de las limitaciones de los DTD:
•
•
•
•
Tipos de datos definidos por el usuario
Indicadores de ocurrencia (minOccurs, maxOccurs)
Importación/Exportación de elementos
Refinamiento (herencia esquema) p. ex. Persona  Empleado
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML Schema vs. DTD
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
address
company
name
street
city
state
zip
phone
(company?, name, street, city, state, zip, phone+)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
schema en XML
<elementType name="address" >
<sequence>
<elementType name="company"
<elementType name="name"
<elementType name="street"
<elementType name="city"
<elementType name="state"
<elementType name="zip"
<elementType name="phone"
<sequence>
</elementType>
minOccur="0"
minOccur="1"
minOccur="1"
minOccur="1"
minOccur="1"
minOccur="1"
minOccur="1"
maxOccur ="1"/>
maxOccur ="1"/>
maxOccur ="1"/>
maxOccur ="1"/>
maxOccur ="1"/>
maxOccur ="1"/>
maxOccur ="5"/>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML Schema
•Tipos de datos:
• string (secuencia de carácter, iso10646, unicode),
• boolean, real, decimal (real, no Exp), integer [-,0,], nonnegative integer[0,], positive integer [1,], non-positive
integer [-,0], negative integer [-,-1],
• dateTime (iso8601), date (dateTime), time (dateTime), timePeriod
(dateTime),
• binary (datos+codif hex/base64),
• uri (rfc2396),
• language (ca, en, rfc1766),
• definidos
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML Schema
•Restricciones:
length (núm caracteres string, binario), maxlenght (máx longitud string, binario),
lexical representation (repr posibles ej. DD-MM-AAAA), enumeration,
maxInclusive (máx posible, maxExclusive (máx excl) minInclusive
(mín posible), minExclusive (mín excl), precision (núm dígitos), scale (dígitos
parte decimal), encoding (binario)
•Ocurrencia: 0-1 ?; 0,… *; 1,… +; (nada) Uno y sólo
uno
•Refinamiento (herencia, extensión)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 1: XML Schema
• <?XML version="1.0">
<libro isbn="123456">
<título>El Aleph</título>
<autor>J. L. Borges</autor>
<año>1946</año>
<precio>1560</precio>
</libro>
• El DTD correspondiente es:
<!ELEMENT libro (título, autor+, año?, precio)>
<!ELEMENT título (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT año (#PCDATA)> (entero positivo, mayor de 1900)
<!ELEMENT precio (#PCDATA)> (non-negative integer)
<!ATTLIST libro
isbn ID #REQUIRED>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 1: XML Schema
•El esquema libro.xsd correspondiente al documento xml es:
<schema targetNamespace='http://www.ac.upc.es/aad/libro' version="Id: libro.xsd,v 1.1 2001/04/10 17:37:02"
xmlns='http://www.w3.org/2001/XMLSchema'>
<simpleType name='linea'>
<restriction base='string'> <maxLength value='50'/> </restriction>
</simpleType>
<simpleType name='sigloXX'>
<restriction base='integer'> <minInclusive value='1900'/> <maxInclusive value='1999'/> </restriction>
</simpleType>
<element name='libro' type='TipoLibro'/>
<complexType name='TipoLibro'>
<sequence>
<element name='titulo' type='linea'/>
<element name='autor' type='linea'/>
<element name='anyo' type='sigloXX'/>
<element name='precio' type='decimal'>
<complexType> <attribute name='divisa' type='string'/> </complexType>
</element>
</sequence>
Versión XML Schema 20010330
<attribute name='isbn' type='ID'/>
Validado por http://www.w3.org/2001/03/webdata/xsv
</complexType>
</schema>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 1: XML Schema
• El lenguaje XML Schema se reconoce por el espacio de nombres
http://www.w3.org/2001/XMLSchema.
• El esquema anterior es un documento xml con un único elemento “schema”
donde se ha definido los tipos de datos específicos para este esquema:
-
el nuevo tipo de datos “línea” como un “string” de longitud limitada a 50
caracteres,
- el nuevo tipo “sigloXX” como un “integer” restringido a los valores entre 1900
y 1999 ambos inclusive,
- y el nuevo tipo complejo “TipoLibro” como secuencia de varios elementos.
<simpleType name='linea'>
<restriction base='string'> <maxLength value='50'/> </restriction>
</simpleType>
<simpleType name='sigloXX'>
<restriction base='integer'> <minInclusive value='1900'/> <maxInclusive value='1999'/> </restriction>
</simpleType>
<complexType name='TipoLibro'>
<sequence>
<element name='titulo' type='linea'/>
...
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 1: XML Schema
• Finalmente, se declara que los documentos conforme a este esquema
tendrán al elemento “libro” de tipo “TipoLibro” como elemento raíz.
<element name='libro' type='TipoLibro'/>
Resulta más largo que un DTD,
pero a cambio, la verificación de los datos es más rigurosa y por tanto
la exportación e importación de datos en formato xml más sencilla para
cualquiera que use un procesador de documentos xml que previamente
valide el documento contra un esquema.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML schema
“Simple” and “complex” elements:
A “simple” element is one that contains text and nothing
else
A simple element cannot have attributes
A simple element cannot contain other elements
A simple element cannot be empty
However, the text can be of many different types, and may have
various restrictions applied to it
If an element isn’t simple, it’s “complex”
A complex element may have attributes
A complex element may be empty, or it may contain text, other
elements, or both text and other elements
transp. entretes de: http://www.cis.upenn.edu/~matuszek/
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Defining a simple element
A simple element is defined as
<xs:element name="name" type="type" />
where:
name is the name of the element
the most common values for type are
xs:boolean
xs:date
xs:decimal
xs:integer
xs:string
xs:time
Other attributes a simple element may have:
default="default value" if no other value is specified
fixed="value"
no other value may be specified
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Defining an attribute
Attributes themselves are always declared as simple
types
An attribute is defined as
<xs:attribute name="name" type="type" />
where:
name and type are the same as for xs:element
Other attributes a simple element may have:
default="default value" if no other value is specified
fixed="value"
no other value may be specified
use="optional"
the attribute is not required
(default)
use="required"
the attribute must be present
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Restrictions, or “facets”
The general form for putting a restriction on a
text value is:
(or xs:attribute)
<xs:element name="name">
<xs:restriction base="type">
... the restrictions ...
</xs:restriction>
</xs:element>
For example:
<xs:element name="age">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0">
<xs:maxInclusive value="140">
</xs:restriction>
</xs:element>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Restrictions on numbers
minInclusive -- number must be ≥ the given value
minExclusive -- number must be > the given value
maxInclusive -- number must be ≤ the given value
maxExclusive -- number must be < the given value
totalDigits -- number must have exactly value digits
fractionDigits -- number must have no more than
value digits after the decimal point
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Restrictions on strings
length -- the string must contain exactly value characters
minLength -- the string must contain at least value characters
maxLength -- the string must contain no more than value
characters
pattern -- the value is a regular expression that the string
must match
whiteSpace -- not really a “restriction”--tells what to do with
whitespace
value="preserve" Keep all whitespace
value="replace"
Change all whitespace characters to spaces
value="collapse"
Remove leading and trailing whitespace, and
space
replace all sequences of whitespace with a single
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Enumeration
An enumeration restricts the value to be one of
a fixed set of values
Example:
<xs:element name="season">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Spring"/>
<xs:enumeration value="Summer"/>
<xs:enumeration value="Autumn"/>
<xs:enumeration value="Fall"/>
<xs:enumeration value="Winter"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Complex elements
A complex element is defined as
<xs:element name="name">
<xs:complexType>
... information about the complex type...
</xs:complexType>
</xs:element>
Example:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:sequence> says that elements must occur in this
order
Remember that attributes are always simple types
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Global and local definitions
Elements declared at the “top level” of a <schema> are available for
use throughout the schema
Elements declared within a xs:complexType are local to that type
Thus, in
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
the elements firstName and lastName are only locally declared
The order of declarations at the “top level” of a <schema> do not
specify the order in the XML data document
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Declaration and use
So far we’ve been talking about how to
declare types, not how to use them
To use a type we have declared, use it as the
value of type="..."
Examples:
<xs:element name="student" type="person"/>
<xs:element name="professor" type="person"/>
Scope is important: you cannot use a type if is
local to some other type
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
xs:sequence
We’ve already seen an example of a complex
type whose elements must occur in a
specific order:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
xs:all
xs:all allows elements to appear in any order
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
Despite the name, the members of an xs:all group
can occur once or not at all
You can use minOccurs="0" to specify that an element is
optional (default value is 1)
In this context, maxOccurs is always 1
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Referencing
Once you have defined an element or
attribute (with name="..."), you can refer to it
with ref="..."
Example:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="student" ref="person">
Or just: <xs:element ref="person">
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Text element with attributes
If a text element has attributes, it is no longer
a simple type
<xs:element name="population">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="year”
type="xs:integer">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Empty elements
Empty elements are (ridiculously) complex
<xs:complexType name="counter">
<xs:complexContent>
<xs:extension base="xs:anyType"/>
<xs:attribute name="count" type="xs:integer"/>
</xs:complexContent>
</xs:complexType>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Mixed elements
Mixed elements may contain both text and
elements
We add mixed="true" to the xs:complexType element
The text itself is not mentioned in the element,
and may go anywhere (it is basically ignored)
<xs:complexType name="paragraph" mixed="true">
<xs:sequence>
<xs:element name="someName”
type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Extensions
You can base a complex type on another complex
type
<xs:complexType name="newType">
<xs:complexContent>
<xs:extension base="otherType">
...new stuff...
</xs:extension>
</xs:complexContent>
</xs:complexType>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML Schema
Por ejemplo los tipos pueden derivar de otros tipos:
<complexType name="car">
<complexContent>
<extension base="vehicle">
<element name="wheel" minOccurs="3"
maxOccurs="4"/>
</extension>
</complexContent>
</complexType>
 Este código crea el tipo car a partir del tipo vehiculo extendiendolo con 3 o 4
ruedas como subelemento.
¡Cierto!, también es complicado.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Predefined string types
Recall that a simple element is defined as:
<xs:element name="name" type="type"
/>
Here are a few of the possible string types:
xs:string -- a string
xs:normalizedString -- a string that doesn’t contain
tabs, newlines, or carriage returns
xs:token -- a string that doesn’t contain any
whitespace other than single spaces
Allowable restrictions on strings:
enumeration, length, maxLength, minLength,
pattern, whiteSpace
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Predefined date and time types
xs:date -- A date in the format CCYY-MM-DD, for
example, 2002-11-05
xs:time -- A date in the format hh:mm:ss (hours,
minutes, seconds)
xs:dateTime -- Format is CCYY-MM-DDThh:mm:ss
The T is part of the syntax
Allowable restrictions on dates and times:
enumeration, minInclusive, minExclusive, maxInclusive,
maxExclusive, pattern, whiteSpace
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Predefined numeric types
Here are some of the predefined numeric types:
xs:decimal
xs:byte
xs:short
xs:int
xs:long
xs:positiveInteger
xs:negativeInteger
xs:nonPositiveInteger
xs:nonNegativeInteger
Allowable restrictions on numeric types:
enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive,
fractionDigits, totalDigits, pattern, whiteSpace
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 2: XML Schema
<?xml version="1.0" encoding="utf-8"?>
<book isbn="0836217462">
<title>Being a Dog Is a Full-Time Job</title>
<author>Charles M. Schulz</author>
<character>
<name>Snoopy</name>
<friend-of>Peppermint Patty</friend-of>
<since>1950-10-04</since>
<qualification>extroverted beagle</qualification>
</character>
<character>
<name>Peppermint Patty</name>
<since>1966-08-22</since>
<qualification>bold, brash and tomboyish</qualification>
</character>
</book>
(c) ejemplo obtenido de:
La Revolución del e-business,
Euridici Gonzalez y Tomàs Mendicoa
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 2: XML Schema
Una manera de diseñar el esquema:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="character" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="friend-of" type="xsd:string“
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="since" type="xsd:date"/>
<xsd:element name="qualification" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="isbn" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 2: XML Schema
Otra manera de diseñar el esquema:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema“
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="friend-of" type="xsd:string"/>
<xsd:element name="since" type="xsd:date"/>
<xsd:element name="qualification" type="xsd:string"/>
<xsd:attribute name="isbn" type="xsd:string"/>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo 2: XML Schema
Otra manera de diseñar el esquema (continuación):
<xsd:element name="character">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name"/>
<xsd:element ref="friend-of"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="since"/>
<xsd:element ref="qualification"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="title"/>
<xsd:element ref="author"/>
<xsd:element ref="character"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="isbn"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XML schema
Parsers para validar:
•Xerces del proyecto Jakarta Project (http://xml.apache.org),con
versiones Java y C++. Soporta DTDs y XML Schema.
•Otros:
•Nsgmls.
•XML4J and XML4C …
Conclusions:
• Los schema mejora y aplica los conceptos de DTDs a un nivel más
actual y consistente.
• El schema de XML es la especificación del W3C que puede reemplazar
la sintaxis de la DTD.
• Con los schemas de XML se puede construir modelos de contenido
muy complejos y proporcionar un concepto para definir tipos de datos.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 6:
realizar el schema del fitxer XML del homework 4
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
xhtml
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.0
Formulación de HTML 4.01
(24/12/1999)
en XML
("limpiar" HTML, DTD, extensible, más simple para
nuevas plataformas)
Tidy: http://www.w3.org/People/Raggett/tidy/
Limpieza de html a xhtml
Validator: validator.w3.org
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.0
Diferencias respecto HTML
- elementos y atributos en minúsculas <body bgcolor="#ffffff">
- valores de atributos entre comillas <table border="0">
- elementos no vacíos terminados <p>Párrafo 1</p>
- elementos anidados, no solapados <p>here is a bolded<b>word.</b></p>
- elementos necesarios: <head>, <body>; <title> (1er elemento tras
<head>)
- Cambian algunas entidades: <br/>, <hr/>, <img src="image.gif" />
- Valores de atributos no "minimizados":
<option value="somevalue" selected>
<option value="somevalue" selected="selected">
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.0
El lenguaje xhtml 1.0 por ser una adaptación a xml
de html tiene un aspecto muy similar a html tal como
puede verse en el siguiente ejemplo:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
<title>Virtual Library</title>
</head>
- <body>
- <p> Moved to
<a href="http://vlib.org/">vlib.org</a>
</p>
</body>
</html>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.0
DOCTYPE: obligatorio (documento con 3 partes básicas)
•DOCTYPE
•head
•body
En HTML4.0: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
En XHTML1.0: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/strict.dtd">
XHTML está especificado en un 'DTD‘. Actualmente hay tres
documentos de tipos de XHTML:
- Strict.dtd: limpio, formateo sólo con CSS
-Transitional.dtd: cuando no CSS
- Frameset.dtd: usando frames
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.0
También puede ser útil para poner fragmentos dentro de documentos xml.
No sería correcto poner código html pues no sigue la sintaxis de xml, pero
sí es posible mezclar documentos xml y xhmtl pues al menos el documento
resultante estará bien formado. Puede verse en el siguiente ejemplo:
<?xml version="1.0" encoding="UTF-8" ?>
<!– inicialmente, "books" es el espacio de nombres por defecto -->
<book xmlns="urn:loc.gov:books" xmlns:isbn="urn:ISBN:0-395-36341-6"
xml:lang="en" lang="en">
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes> <!-- Ahora HTML será el espacio de nombres por defecto -->
<p xmlns="http://www.w3.org/1999/xhtml">
This is also available <a href="http://www.w3.org/">online</a>
</p>
</notes>
</book>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.1
XHTML 1.0: limpia, fija y da esplendor a HTML 4.01
XHTML 1.1: XHTML Modular (10/4/2001)
• Se descompone la especificación en varios módulos
1. Attribute Collections
2. Core Modules
2.1. Structure Module
2.2. Text Module
2.3. Hypertext Module
2.4. List Module
3. Applet Module
4. Text Extension Modules
4.1. Presentation Module
4.2. Edit Module
4.3. Bi-directional Text Module
5. Forms Modules
5.1. Basic Forms Module
5.2. Forms Module
6. Table Modules
6.1. Basic Tables Module
6.2. Tables Module
7. Image Module
8. Client-side Image Map Module
9. Server-side Image Map Module
10. Object Module
11. Frames Module
12. Target Module
13. Iframe Module
14. Intrinsic Events Module
15. Metainformation Module
16. Scripting Module
17. Style Sheet Module
18. Style Attribute Module
19. Link Module
20. Base Module
21. Name Identification Module
22. Legacy Module
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.1
• XHTML Basic reúne un conjunto mínimo de módulos
• Incluye images, forms, basic tables, y object support
• Un dispositivo puede soportar ciertos módulos: ej. un PDA,
teléfono móvil, un set-top-box, dispositivo braille,
sintentizador de voz, impresor, proyector, … pueden
soportar XHTML 1.1
• Cada módulo puede extenderse y añadir nuevos
• Incorporación de: gráficos vectoriales (SVG), multimedia,
MathML, comercio electrónico, …
• Por ejemplo la funcionalidad de WML podría añadirse como módulo
a XHTML 1.1
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XHTML 1.1
Este formato es prometedor puesto que algunos dispositivos
pequeños para acceder al Web (como teléfonos u otros
terminales móviles) no tienen la capacidad de tratar
documentos con todas las funciones de XHTML 1.0 (como
HTML 4.01).
Con XTHML 1.1 un dispositivo puede implementar sólo los
módulos que pueda o necesite, y estas páginas no tienen
porqué ser compatibles con navegadores que entienden HTML
4.01.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 7:
Pasar el homework 1 a XHTML
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
xsl (xslt, xpath)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
hojas de estilo
<?xml?>
Document de la classe d‘ADD de la
FIB
Xzcxcxzcxz
Xcxzcxzcxzcxzcxcx
Xzcxzcxzc
Xzcxzcxz
Cxzcxz
Cxzcxz
Cxz
Cxzc
Xzc
Xzcxz
Cxzxzcxz
Cxzcxz
Cxzcxz
<Property PropertyReference="CASAN00007"
Category="Sell" PropertyType="House">
<Address>
<State>CA</State>
<Zip>94112</Zip>
<City>San Francisco</City>
<Street>9695 Garth Lane</Street>
</Address>
<Description>
<Text>Hardwood Floors, Fireplace, Gas Heat; Lot
Area: 2729; Lot Features: Swimming Pool, Garage,
Golf Course</Text>
<Area>1020</Area>
<NumberOfBedRooms>6</NumberOfBedRooms>
<NumberOfBathRooms>2</NumberOfBathRooms>
</Description>
<ContactPerson>
<Name>Rowan Atkinson</Name>
<Phone>1-916-730-7460</Phone>
<Email>[email protected]</Email
>
</ContactPerson>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
¿CSS Y XSL?
http://www.w3.org/Style/
Why two Style Sheet languages?
Web Style Sheets home page
The fact that W3C has started developing XSL in addition to CSS has caused some
confusion. Why develop a second style sheet language when implementors haven't
even finished the first one? The answer can be found in the table below:
CSS XSL
Can be used with HTML?
Can be used with XML?
Transformation language?
Syntax
yes no
yes yes
no yes
CSS XML
The unique features are that CSS can be used to style HTML & XML documents. XSL,
on the other hand, is able to transform documents. For example, XSL can be used to
transform XML data into HTML/CSS documents on the Web server. This way, the two
languages complement each other and can be used together.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
XSL: Extensible Stylesheet Language
http://www.w3.org/Style/XSL
XSL
XSLT
XSLFO
(Transformación)
(Formateo de
objetos)
XPath
(Selección,
Navegación)
XSL es un W3C Standard
(XSLT and XPath) Noviembre 1999.
La especificación completa en Octubre 2001.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
XSLT Transformación (nuevos documentos)
XPath Lenguaje para definir partes de un documento XML
XSL-FO Marcas para controlar presentación en varios medios
( a más bajo nivel y detalle que el que permite HTML+CSS)
En el futuro los navegadores web solo necesitaran entender
XSLT y XSL-FO
•HTML/XHTML puede ser obtenido usando hojas de estilo estandares.
•El lenguaje usual es XHTML que es entendido por los navegadores
actuales.
•XSLT está completamente implementado, mientras que XSL-FO aun
no.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Idea básica de XSL
XSLT stylesheet:
Es declarativo y usa reconocimiento de patrones y plantillas
para especificar las transformaciones
Una forma común de describir el proceso de transformación es
que XSL usa XSLT para transformar un XML source tree en un
XML result tree.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Cómo funciona el XSL.
Arbol fuente
(XML)
XSL
Arbol resultado
(xmlsn:fo)
Transform.
XSL
Intérprete
Intérprete
Intérprete
¿?
Hoja de estilo
(xmlns:xsl)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Árbol XML
Árbol  Árbol (p. ej. XML  HTML, XML  XML)
Aplica reglas de formato  transforma doc XML en otro
Puede añadir nuevos elementos o eliminar
(*) fuente: Learning XML, O’Really
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Árbol XML
Igual que en otros lenguajes de hoja de estilo, una transformación es un
conjunto de reglas que que se aplican a los elementos
Cada regla describe cual es el output a partir del input (en XML)
Hay diferentes clases de nodos (repres. en arbol):
Element
Pueden contener otros nodos element, type
Attribute
Text
Se representan como nodos (y no como partes de los elementos)
(Son nodos hoja porque no tienen hijos)
También son nodos hoja.
Comment
También un nodo aunque no contribuye en nada en el contenido del
documento.
Processing instruction
Solo tienen sentido para los procesadores XML.
Namespace
La declaración del espacio de nombre no es tratado como un atributo,
puesto que tiene una implicación especial sobre el resto de documento.
Root
El nodo Root contine todo en el documento.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Árbol XML
En el proceso de tranformación XSLT (usando XPath)
define partes del documento fuente que se mapea en
uno o más plantillas (templates) predefinidas.
Un archivo XSL es una secuencia de plantillas que se aplican a
una o más etiquetas XML de acuerdo a un patrón.
Cuando se consigue un mapeo, XSLT transformará la parte que se
ha podido mapear del documento fuente en el documento
resultante.
Las partes del documento fuente que no pueden mapearse en
una plantilla quedaran sin modificar en el documento resultado.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Estructura básica de XSL
Estructura de doc XSL:
La hoja de estilo es un documento XML en si mismo,
está encabezada con una declaración XML
La marca <xsl:stylesheet> define
<?xml version="1.0" encoding="ISO-8859-1"?>.?>
el inicio de la hoja de estilo
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:import/> <xsl:include/>
<xsl:id/> <xsl:strip-space/> <xsl:preserve-space/> <xsl:macro/>
<xsl:attribute-set/> <xsl:constant/>
Patrón para seleccionar nodos
<xsl:template match="expresión">
y aplicar transformaciones
acción de la plantilla
</xsl:template>
</xsl:stylesheet>
Desde XML se referencia como:
<?xml-stylesheet href="http://www.x.org/estilo.xsl" type=text/xsl"?>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
XPath: navegando en xml
(el arbol xml es similar a una estructura de ficheros)
por ejemplo con xpath podemos seleccionar más de un
nodo a la vez:
//Class/Student
<Class>
Class
Student
Student
Text:
Jeff
Text:
Pat
<Student>Jeff</Student>
<Student>Pat</Student>
</Class>
(c) transparencias de Xpath: Jeff Derstadt
http://www.cs.cornell.edu/courses/cs433
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
Expresiones básicas de XPath:
Los elementos se acceden como /<element>/
Los atributos se acceden como @attribute
Cualquier cosa que satisface la expresión es
seleccionado
Se pueden añadir restricciones con [ ] para afinar la
selección.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
Ejemplo: Seleccionar los nodos que contengan un
atributo id
<class name=‘CS 433’>
<location building=‘Olin’ room=‘255’/>
<professor>Johannes Gehrke</professor>
<ta>Dan Kifer </ta>
<student_list>
<student id=‘999-991’>John Smith</student>
<student id=‘999-992’>Jane Doe</student>
</student_list>
</class>
Elemento de inicio
restricciones de atributo
//class[@name=‘CS 433’][email protected]
Path
selección
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath - Context
Context : el punto de trabajo actual en un
documento xml.
XPath: List/Student
Prof
Location
Text:
Gehrke
Attr:
Olin
Class
List
Student
Student
Text:
Jeff
Text:
Pat
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath - Context
XPath: Student
Class
Prof
Location
Text:
Gehrke
Attr:
Olin
List
Student
Student
Text:
Jeff
Text:
Pat
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
Ejemplo:
<Basket>
<Cherry flavor=‘sweet’/>
<Cherry flavor=‘bitter’/>
<Cherry/>
<Apple color=‘red’/>
<Apple color=‘red’/>
<Apple color=‘green’/>
…
</Basket>
Seleccionar las manzanas rojas:
//Basket/Apple[@color=‘red’]
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
Ejemplo:
<Basket>
<Cherry flavor=‘sweet’/>
<Cherry flavor=‘bitter’/>
<Cherry/>
<Apple color=‘red’/>
<Apple color=‘red’/>
<Apple color=‘green’/>
…
</Basket>
Seleccionar sólo las cerezas que tienen algun sabor
//Basket/Cherry[@flavor]
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XPath
Ejemplo:
<orchard>
<tree>
<apple color=‘red’/>
<apple color=‘red’/>
</tree>
<basket>
<apple color=‘green’/>
<orange/>
</basket>
</orchard>
Seleccionar todas las manzanas de la huerta:
//orchard/descendant()/apple
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Igualación de patrones
<xsl:template match="pattern">
Etiquetas HTML y
más procesamiento
de Hoja de Estilo
</xsl:template>
XPath
Aplicación de las transformaciones:
-<xsl:template match="*|/">
- - <html>
- <xsl:apply-templates />
- </html>
-</xsl:template>
Obtención de valores de elementos:
-<xsl:template match="capitulo">
- <xsl:value-of select=".">
-</xsl:template>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplos de selección de nodos
Todos los hijos del nodo raíz:
<xsl:template match "/*">
Cualquiera entre varios nodos:
<xsl:template match "cabecera|cuerpo">
Elems que contienen otro elemento:
<xsl:template match "capitulo[imagen]">
Elems en que un atributo tiene valor:
<xsl:template match "capitulo[@fecha]">
Elementos que contienen otro elemento que cumple condición:
<xsl:template match "capitulo[palabras]>5">
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
<xsl:template>
Una hoja de estilo XSL consiste en un conjunto de reglas llamadas
template.
Cada elemento <xsl:template> contiene reglas para aplicar cuando un
nodo determinado hace matching.
El atributo match se usa para asociar el template con un elemento
XML.
El atributo match también puede ser usado para definir templates para
toda una rama de un documento XML (p.e. match="/" define todo el
elemento).
<xsl:value-of>
Extrae el valor del nodo seleccionado.
El atributo puede contener una expresión.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<?xml version="1.0" encoding="ISO<xsl:template match="/">
8859-1"?>
<?xml-stylesheet type="text/xsl"
<html>
href="cdcatalog.xsl"?>
<body>
<CATALOG>
<CD>
<h2>My CD Collection</h2>
<TITLE>Four Women (4CDs)</TITLE>
<ARTIST>Nina Simone</ARTIST>
<table border="1">
<COUNTRY>USA</COUNTRY>
<tr bgcolor="#9acd32">
<COMPANY>Verve</COMPANY>
<PRICE>60.58</PRICE>
<th>Title</th>
<YEAR>2003</YEAR>
<th>Artist</th>
</CD>
.
.
</tr>
.
</CATALOG>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
Pero solo nos daría el primero, ¿no?
<xsl:for-each>
nos permite realizar bucles en XSL (selecciona cada XML
elemento de un conjunto de nodos especificados.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
Filtrado de la salida
Podemos filtrar la salida de un documento XML añadiendo un
criterio en el atributo select del elemento <xsl:for-each>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<xsl:sort>
para ordenar la salida (IE5 no xsl:sort)
<xsl:if>
cierta
contiene un template que será aplicado solo si la condición es
<xsl:if test="price &gt; 10">
some output ...
</xsl:if>
<xsl:choose>
se usa junto con <xsl:when>y <xsl:otherwise> para expresar
múltiples condicionales.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price &gt; 9 and price &lt;= 10">
<td bgcolor="#cccccc">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template></xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL
<xsl:apply-templates>
Este elemento aplica la regla template al elemento actual o a los nodos hijos.
Si se añade el atributo select a este element solo procesará los elementos hijos que
hacen match con el valor del atributo.
Podemos usar el atributo select para especificar en que orden los nodos hijos
deben ser procesados.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template><xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template><xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template><xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template></xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="CD">
<p>
<xsl:apply-templates select="TITLE"/>
<xsl:apply-templates select="ARTIST"/>
</p>
</xsl:template>
<xsl:template match="TITLE">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br/>
</xsl:template>
<xsl:template match="ARTIST">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
afegit per classe teoria grups 10/20
<br/>
</xsl:template>
</xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
afegit per classe teoria grups 10/20
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
XSL: Selección avanzada
Sobre los nodos: position() last() count(conjunto) …
Booleanos: = > >= &lt; &lt;=
Numéricos: + - * div mod sum() floor() ceiling() round() …
Cadenas caracteres: contains() concat() …
Selección en árbol: from-ancestors() from-descendants() from-childred() fromfollowing-siblings() from-parent() from-attributes()
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd/artist">
Current node: <xsl:value-of select="current()"/>
<br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Motores de transformación
Las transformaciones XSLT en la web:
• en el cliente, p. e. Explorer o Mozilla
• en el servidor, p. e. Xalan
• tanto como pre-processing o on-the-fly
• en Java y C++ dentro del proyecto Apache XML
Procesando documentos XML
• Document Object Model (DOM)
• Simple API for XML (SAX)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo de Xalan (en java)
import
import
import
import
import
import
java.net.*;
java.io.*;
org.w3c.dom.*;
org.xml.sax.*;
org.apache.xerces.parsers.*;
org.apache.xalan.xslt.*;
class ExampleXalanToString {
static public void main(String args[]) {
String xmlDoc = „input.xml";
String xslDoc = „fitxerEstils.xsl";
String outDoc; // The resulting document from style sheet processing
ByteArrayOutputStream os = new ByteArrayOutputStream();
XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
XSLTInputSource xmlSource = new XSLTInputSource (xmlDoc);
XSLTInputSource xslSheet = new XSLTInputSource (xslDoc);
XSLTResultTarget xmlResult = new XSLTResultTarget (os);
processor.process(xmlSource, xslSheet, xmlResult);
outDoc = os.toString();
System.out.println(outDoc);
...
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Homework 8:
Obtener el mismo resultado que en el homework 1
aplicando una transformación XSL al homework 4
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
dom, sax
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Parsers XML
Parsers XML: Análisis sintáctico de documentos XML
Tipo de parsers:
Parsers que no validan:
sólo miran que el documento XML sea sintácticamente bien formado.
Parsers que validan:
miran que el documento XML sea valido dado un DTD o SCHEMA.
Los parsers se pueden basar en:
una representación del documento xml en arbol/objetos que van
recorriendo:
Document Object Model (DOM) API
O bien en eventos (open/close tag, data):
Simple API for XML (SAX)
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM vs SAX
Documento
DTD
Parser
startDocument
startElement
startElement
La Aplicación
instrumenta el
DocumentHandler
endElement
endElement
endDocument
Arbol del documento
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM vs SAX
DOM
Crear una instancia de parser
Hacer un parsing de todo el documento
Procesar el árbol de DOM
SAX
Creación de una instancia de parser
Registro de manejadores de evento con el parser
El parser llama al manejador de eventos durante el parsing
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM
Documento de XML
<?xml version="1.0"?>
<books>
<book>
<title>The XML Handbook</title>
<author>Goldfarb</author>
<author>Prescod</author>
<publisher>Prentice Hall</publisher>
<pages>688</pages>
<isbn>0130811521</isbn>
<price currency="USD">44.95</price>
</book>
<book>
<title>XML Design</title>
<author>Spencer</author>
<publisher>Wrox Press</publisher>
...
</book>
</books>
Estructura
libros
libro
título
El manual
de XML
autor
Goldfarb
Prescod
editor
Prentice
Hall
páginas
655
isbn
...
(c) ejemplo obtenido de:
La Revolución del e-business,
Euridici Gonzalez y Tomàs Mendicoa
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM
Provee una interface estandar para el acceso y la
manipulación de estructuras de XML
Representa los documentos en la forma de una
jerarquía de nodos
Es neutral de plataforma y lenguaje de programación
Es una recomendación del W3C (Octubre 1, 1998)
Es implementado por muchos parser
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM - Modelo de Estructura
Document
libros
libro
Node
título
autor
páginas
editor
isbn
Element
El manual
de XML
Goldfarb
Prescod
Prentice
Hall
655
...
Node List
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM - La Interfaz Document
Método
docType
implementation
documentElement
getElementsByTagName(String)
createTextNode(String)
createComment(String)
createElement(String)
create CDATASection(String)
Resultado
DocumentType
DOMImplementation
Element
NodeList
String
Comment
Element
CDATASection
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM - La Interfaz Node
Método
nodeName
nodeValue
nodeType
parentNode
childNodes
firstChild
lastChild
previousSibling
nextSibling
attributes
insertBefore(Node new,Node ref)
replaceChild(Node new,Node old)
removeChild(Node)
hasChildNode
Resultado
String
String
short
Node
NodeList
Node
Node
Node
Node
NodeNamedMap
Node
Node
Node
Boolean
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM- Tipo/Nombre de Nodo
Resultado: Tipo de Nodo/Nombre de Nodo
Campos de
Tipo Nombre del
Nodo
Nodo Nodo
ELEMENT_NODE
1
tagName
ATTRIBUTE_NODE
2
name of attribute
TEXT_NODE
3
"#text"
CDATA_SECTION_NODE
4
"#cdata-section"
ENTITY_REFERENCE_NODE
5
name of entity referenced
ENTITY_NODE
6
entity name
PROCESSING_INSTRUCTION_NODE 7
target
COMMENT_NODE
8
"#comment"
DOCUMENT_NODE
9
"#document"
DOCUMENT_TYPE_NODE
10 document type name
DOCUMENT_FRAGMENT_NODE
11 "#document-fragment"
NOTATION_NODE
12 notation name
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM - La Interfaz de Node List
Método
Resultado
Length
item(int)
Int
Node
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
DOM - La Interfaz Element
Método
Resultado
tagName
getAttribute(String)
setAttribute(String name, String value)
removeAttribute(String)
getAttributeNode(String)
setAttributeNode(Attr)
removeAttributeNode(String)
getElementsByTagName
String
String
Attr
Attr
Attr
NodeList
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Métodos de DOM para navegación
parentNode
previousSibling
nextSibling
firstChild
lastChild
childNodes
(length, item())
getElementsByTagName
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Métodos de DOM para manipulación
createElement
createAttribute
createTextNode
appendChild
insertBefore
replaceChild
removeChild
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo
libros
libro
libro
autor
autor
autor
Goldfarb
Prescod
Spencer
doc.documentElement.childNodes.item(0).getElementsByTagName("author").
item(1).childNodes.item(0).data
Objeto
de DOM
Nodo
Raíz
Libro
Primer
libro
Segundo Subnodos Primero
Texto
autor
de Texto
del
mismoTorres; v2.0
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi
Autores
Script
<HTML>
<HEAD><TITLE>DOM Example</TITLE></HEAD>
<BODY>
<H1>DOM Example</H1>
<SCRIPT LANGUAGE="JavaScript">
var doc, root, book1, authors, author2;
doc = new ActiveXObject("Microsoft.XMLDOM");
doc.async = false;
doc.load("books.xml");
if (doc.parseError != 0)
alert(doc.parseError.reason);
else {
root = doc.documentElement;
document.write("Name of Root node: " + root.nodeName + "<BR>");
document.write("Type of Root node: " + root.nodeType + "<BR>");
book1 = root.childNodes.item(0);
authors = book1.getElementsByTagName("author");
document.write("Number of authors: " + authors.length + "<BR>");
author2 = authors.item(1);
document.write("Name of second author: " + author2.childNodes.item(0).data);}
</SCRIPT>
</BODY></HTML>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
SAX - Simple API para XML
Documento
DTD
Parser
startDocument
startElement
La Aplicación
Instrumenta el
DocumentHandler
startElement
endElement
endElement
endDocument
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
SAX - Simple API para XML
Modelo de parsing controlado-por-evento
“No llame al DOM, el parser le llamará.”
Desarrollado por los miembros del XML-DEV Mailing List
Se terminó el 11 de Mayo de 1998.
SAX funciona con muchos parsers...
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo de SAX en Java
<yacht yachtid='147'>
<name>VENTANA</name>
<image file='yacht147.jpg'/>
<description>Any text describing this yacht 147</description>
<details>
<type>GULFSTAR 55</type>
<length>1700</length>
<width>480</width>
<draft>170</draft>
<sailsurface>112</sailsurface>
<motor>84</motor>
<headroom>202</headroom>
<bunks>8</bunks>
</details>
</yacht>
Tarea: Obtener el valor del elemento length
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo de SAX en Java
SAXApp.java
import org.xml.sax.Parser;
import org.xml.sax.DocumentHandler;
import org.xml.sax.helpers.ParserFactory;
public class SAXApp{
public static void main (String args[])
throws Exception
{
Parser parser = ParserFactory.makeParser();
DocumentHandler handler = new MyHandler();
parser.setDocumentHandler(handler);
parser.parse("File:<LW>:/.../yacht.xml");
}
//
//
//
//
Parser instance
D-H instance
Registration of handler
Parsing the document
}
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Ejemplo de SAX en Java
MyHandler.java
import org.xml.sax.*;
public class MyHandler extends HandlerBase {
private Boolean hit;
public void startElement(String name, AttributeList atts)
{
if (name.equals("length"))
{
hit = new Boolean("true");
System.out.println("Start element: " + name);}
else {
hit = new Boolean("false"); }
}
public void characters(char[] ch, int start, int length)
{
if (hit.booleanValue())
{
System.out.println("Characters : " + new String(ch,start,length));
hit = new Boolean("false");
}
}
}
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 1: recepta de cuina
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Exemples de recepta de cuina
FRICANDÓ AMB MOIXARNONS
Ingredients:
½ quilo de vedella tallada prim
200 grams de tomata
400 grams de moixernons (Poseu en remull els moixernons en
aigua freda durant dues o tres hores)
Un gra d’all
Un carquinyoli
15 grams d’ametlles torrades
400 c.c.de brou
Preparació:
Poseu sal i pebre a la carn i passeu-la per farina. A continuació,
fregiu-la en la cassola amb una mica d'oli. Un cop fregida, retireula. En aquest mateix oli sofregiu-hi la ceba tallada a rodelles. Un
cop cuita afegiu-hi la tomata tallada a trossos. Deixeu-la coure uns
minuts i aboqueu-hi quatre-cents centimetres cúbics de brou.
Afegiu-hi la carn de vedella i deixeu-ho coure tot plegat durant uns
vint minuts.
Retireu la carn i coleu la salsa amb el colador xines. Torneu a posar
la carn i la salsa colada junts i afegiu-hi els moixernons que abans
haureu saltejat amb una mica d'oli en la paella.
Un cop arranqui el bull afegiu-hi la picada feta amb el gra d'all, les
ametlles i el carquinyoli. (Abans de posar-la dins de la cassola, és
bo dil.luir-la amb un xic de la mateixa salsa).
Deixeu-ho coure tot plegat uns quinze minuts.
MONGETES AMB CLOÏSES
Ingredients:
1 quilo de cloïsses
1 quilo de mongetes del ganxet
1 cabeça d'alls
Julivert
Cirereta
60 grams de pinyons
60 grams d'ametlles torrades
1 got de vi blanc
Preparació:
Renteu les cloïsses i poseu-les en aigua, sal i vinagre per tal que
deixin anar tota la sorra.
Prepareu una picada amb els alls, i julivert, les ametlles torrades
i els pinyons. En una cassola de fang, poseu oli fins cobrir el
fons. Un cop calent l'oli, afegiu-hi la picada i deixeu-ho coure
sense que quedi daurat. Tireu-hi un tros de cirereta, les cloïsses,
remeneu, afegiu-hi el got de vi blanc, tapeu i remeneu de tant
en tant per tal que no es cremi la picada, fins que s'obrin les
cloïsses. Una vegada obertes, afegiu-hi les mongetes que haureu
cuit prèviament i una mica del brou d'elles mateixes. Rectifiqueu
de sal, deixeu coure uns minuts i ja està llest per servir.
Valor nutricional:
Valor nutricional:
Calories 1167
Proteines 71g
Greixos 52g
Hidrats 101g
Calories 907 Kcal
Proteines 13 g
Greixos 35 g
Hidrats 30 g
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Comentaris sobre una recepta de cuina
Una recepta consisteix en
- ingredients,
- Els passos (steps) per a la preparació (preparation),
- amb alguns comentaris (comments),
- i la especificació del seu valor nutricional (nutrition)
an ingredient pot ser simple o composat (composite), com els
moixernons
- un ingredient simple te nom (name), quantitat
(amount) (possiblement sense especificar), i una
unitat (unit)
-un ingredient compost és en el fons una una recepta
en si mateixa (recursivament).
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Es demana:
1. Una versió amb html
2. Una versió amb html+css
3. Una versió xml
4. Un dtd per validar la versió xml
5. Un schema per validar la versió xml
6. Una versió xhtml
7. Un xsl que ens doni només els titols a
partir del xml
8. Una versió que ens doni la versió xhtml a
partir del xml
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 2:
•
En la FIB están diseñando una base de datos de la
bibliografía básica de las asignaturas del plan de
estudios. La estructura básica del registro de un
libro sigue la declaración en lenguaje C siguiente:
typedef struct {
char titulo[100]; /* obligatorio */
char autores[100]; /* obligatorio, puede haber 1..10 aut. */
int anyo; /* año. sin valor por defecto */
char editorial[20]; /* txt, word, pdf, etc...*/
enum {AAD, STD, CASO, SPD, CBXC} asignatura;
/* obligatorio, por defecto AAD */
} libro;
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
se pide:
- Escribe un dtd para codificar los datos bibliográficos
expresados en esta declaración en lenguaje C.
- Indica qué aspectos del dtd anterior se podrían controlar
mejor con un “esquema xml”. Expresar el dtd anterior en
schema.
-Expresa la siguiente bibliografía en un documento xml que
utilice la estructura básica indicada en el dtd anterior:
CASO Mukesh Singhal, Niranjan G. Shivaratri Advanced Concepts in Operating
Systems McGraw-Hill, Inc., 2001
CBXC Larry L. Peterson & Bruce S. Davie Computer Networks Morgan Kaufman
Publishers, 2nd Ed., 2000
- Escribe el fragmento relevante de un documento xslt para
generar un fragmento de código xhtml con una lista que
incluya en cada línea el año y título de cada libro del
documento xml anterior.
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 3:
En DTD:
<!ELEMENT A(B, C, D)>
i en SCHEMA?
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 4:
En DTD:
<!ELEMENT A (B|C|D)>
i en SCHEMA?
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 5:
En SCHEMA?
<xs:element name="A" >
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="B"
type="xs:string"/>
<xs:element name="C"
type="xs:string"/>
</xs:sequence>
<xs:element name="D"
type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
En DTD?
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 6:
En DTD:
<!ELEMENT A (B?, (C*, D+)*)>
i en SCHEMA?
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 7:
Quins dels següents documents XML estan ben formats? i
perquè?

<xdoc>Hello World</xdoc>

<xdoc type=greeting>Hello World</xdoc>

<xdoc><greeting>Hello World</greeting></xdoc>

<xdoc><xdoc>Hello World</xdoc></xdoc>

<xdoc manner='cordial">Hello World</xdoc>

<xdoc><xdoc>Hello World</xdoc>Hello XML</xdoc>

<xdoc>Hello World</xdoc><xdoc>Hello XML</xdoc>

<xdoc>Hello World</xdoc><greeting>Hello XML</greeting>

<xdoc>Hello World<greeting>Hello XML</greeting></xdoc>

<xdoc>Hello World><xdoc>Hello XHTML</xdoc><greeting>Hello
XML</greeting></xdoc>

<xdoc>Hello World><greeting>Hello XML</greeting><xdoc>Hello
XHTML</xdoc></xdoc>

<xdoc>Hello World><xdoc>Hello XHTML</xdoc></xdoc><greeting>Hello
XML</greeting>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 8:
Quins dels següents documents XML estan ben formats? i
perquè? (cont.)








•
<xdoc type="greeting"/>
<xdoc type='greeting'>Hello World</xdoc>
<xdoc type=greeting"/>
<xdoc><greeting>Hello World</xdoc></greeting>
<xdoc type='peaches & cream'>Hello World</xdoc>
<xdoc type's='peaches, cream'>Hello World</xdoc>
<xdoc type's="peaches, cream">Hello World</xdoc>
<xdoc mail@[email protected]">Hello World</xdoc>
<xdoc [email protected]">Hello World</xdoc>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 9:
2. Segons els següent DTD
<!ELEMENT a (a)+ >
Quins dels següents són documents vàlids?
1.
2.
3.
4.
5.
6.
<a/>
<a></a>
<a><a></a></a>
<a></a><a></a>
<a><a><a></a></a></a>
<a><a></a><a></a></a>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 10:
Preguntes curtes:
•
Quina és la diferència entre CDATA i PCDATA?
•
Perquè necessitem “XML namespaces” i com funcionen?
•
Com es defineixen i s’usen les entitats dins d’un document XML?
•
Quines són les regles per a que un document XML estigui “ben
format”?
•
En poques paraules dir que indiquen les següents expressions
XPath
a. [email protected]
b. //[@size]
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
EXERCICI 11:
És correcte el següent tros de codi XSLT? (10 points)
<xsl:template match="listing">
<xsl:if test="@type='commercial'">
<business>
</xsl:if>
<xsl:if test="@type='residential'">
<personal>
</xsl:if>
<name><xsl:value-of select="name/first/text()"/>
<xsl:value-of select="name/last/text()"/>
</name>
<number><xsl:value-of select="phone/text()"/></number>
<xsl:if test="@type='commercial'">
</business>
</xsl:if>
<xsl:if test="@type='residential'">
</personal>
</xsl:if>
</xsl:template>
UPC-DAC/FIB-AAD-Leandro Navarro/Jordi Torres; v2.0
Descargar

Transparencias de clase AAD