Вы находитесь на странице: 1из 6

¿Qué es XML?

„ Conjunto de reglas para definir lenguajes de


marcado especí
específicos
XML y XQuery „ No se trata de un lenguaje, sino de un metalenguaje
„ XML no es:
BDSI – 2008/09 „ HTML:
HTML: Lenguaje de marcado especí
específico, que
ademá
además no sigue las reglas XML (XHTML sí sí es una
Rafael Caballero instancia de XML)
„ SGML:
SGML: Antepasado, má más general y muy complejo.

¿Qué es XML? (II) Estructura de un documento XML


„ Pretende convertirse en un está
estándar para el „ 2 partes:
intercambio de datos estructurados „ Pró
Prólogo (opcional)
„ Usado por: „ Cuerpo (obligatorio)
„ Aplicaciones en internet (los documentos XML son „ Pró
Prólogo:
logo:
admitidos por los navegadores) „ una declaració
declaración de documento XML:
„ Aplicaciones B2B (Business to Business) <?xml
<?xml version="1.0"
version="1.0" encoding="UTF
encoding="UTF--8"?>

„ Lenguajes de propó
„ una declaració
declaración de tipo de documento
propósito general (serializació
(serialización en
Java) „ uno o má
más comentarios e instrucciones de procesamiento
„ SGBD basados en bases de datos jerá <!--
<!-- Esto es un comentario -->
-->
jerárquicas

Cuerpo de un documento XML Ejemplo de fichero XML


„ Consta de un único elemento principal Fichero nota.xml:
nota.xml:

„ Los atributos siempre deben estar encerrados entre <?xml


<?xml version="1.0"
version="1.0" encoding="ISO
encoding="ISO--8859-
8859-1"?>
comillas simples o dobles. <nota>
<de>Bertoldo
<de>Bertoldo</de>
</de>
<para>Herminia
<para>Herminia</para>
</para>
„ XML distingue mayú
mayúsculas de minú
minúsculas. <asunto>
<asunto>¡No te olvides de comprar el pan!</asunto>
pan!</asunto>
</nota>
„ Las construcciones como etiquetas, referencias de
entidad y declaraciones se denominan marcas;
marcas; son „ Las etiquetas para nota,
nota, para , de y asunto constituyen el
partes del documento que el procesador XML espera lenguaje de marcas concreto.
entender. El resto del documento entre marcas son los
datos inteligibles para las personas.

1
Ejemplo de fichero XML (II) XML Schema
„ En general las estructuras que está
están a un nivel mayor de la raí
raíz se pueden repetir
muchas veces: „ Fichero XLM indicado la estructura de una particular
<?xml
<?xml version="1.0"
version="1.0" encoding="ISO
encoding="ISO--8859-
8859-1"?> instancia XML
<notas>
<nota>
<de>Bertoldo
<de>Bertoldo</de>
</de> <para>Herminia
<para>Herminia</para>
</para>
<asunto>
<asunto>¡No te olvides de comprar el pan!</asunto>
pan!</asunto> „ Da semá
semántica a ficheros XML
</nota>

<nota>
<de>Herminia
<de>Herminia</de>
</de> <para>Bertoldo
<para>Bertoldo</para>
</para> „ Más general que los DTDs
<asunto>
<asunto>¡Te toca a ti comprar el pan!</asunto>
pan!</asunto>
</nota>

</notas>
„ Especifica qué
qué elementos pueden aparecer en el
documento su tipo, su obligatoriedad, etc.

XML Schema: ejemplo XML Schema: ejemplo (II)


<xs:schema xmlns:xs="http://
xmlns:xs="http://www.w3
www.w3..org/2001/
org/2001/XMLSchema
XMLSchema">
"> <?xml
<?xml version="1.0"
version="1.0" encoding="ISO
encoding="ISO--8859-
8859-1"?>
<xs:element name="notas"
name="notas" type=
type=“TNotas"/>
TNotas"/> <notas xmlns:xsi="http://
xmlns:xsi="http://www.w3
www.w3..org/2001/
org/2001/XMLSchema
XMLSchema--instance"
instance"
<xs:complexType name= xsi:noNamespaceSchemaLocation="
xsi:noNamespaceSchemaLocation="notas.xsd
notas.xsd">
"> <!--
<!-- fichero de estilo anterior -->
-->
name=“TNotas">
TNotas">
<nota>
<xs:sequence minOccurs="0"
minOccurs="0" maxOccurs="
maxOccurs="unbounded
unbounded">
"> <de>Bertoldo
<de>Bertoldo</de>
</de>
<xs:element name="nota"
name="nota" type=
type=“TNota"/>
TNota"/> <para>Herminia
<para>Herminia</para>
</para>
</xs:sequence
</xs:sequence>> <fecha>
<mes>2
<mes>2</mes>
</xs:complexType
</xs:complexType> > <dia>
dia>27</
27</dia
dia>
>
</fecha>
<xs:complexType name=
name=“TNota">
TNota"> <xs:sequence
<xs:sequence>> <asunto>¡
<asunto>¡No te olvides comprar el pan!</asunto>
pan!</asunto>
</nota>
<xs:element name="de"
name="de" type="
type="xs:string
xs:string"/>
"/>
<xs:element name="para"
name="para" type="
type="xs:string
xs:string"/>
"/> <nota>
<xs:element name="fecha"
name="fecha" type=
type=“TFecha"/>
TFecha"/> <de>Herminia
<de>Herminia</de>
</de>
<xs:element name="asunto"
name="asunto" type="
type="xs:string
xs:string"/>
"/> <para>Bertoldo
<para>Bertoldo</para>
</para>
<fecha>
</xs:sequence
</xs:sequence>> </xs:complexType
</xs:complexType> > <dia>
dia>2</dia
</dia>
>
<xs:complexType name=
name=“TFecha"><
TFecha"><xs:all
xs:all>
> <mes>27
<mes>27</mes>
</mes>
<xs:element name="
name="dia
dia"
" type="
type="xs:decimal
xs:decimal"/>
"/> </fecha>
<asunto>Hoy
<asunto>Hoy te tocaba a TI comprar el pan</asunto>
pan</asunto>
<xs:element name="mes"
name="mes" type="
type="xs:decimal
xs:decimal"/>
"/> </nota>
</xs:all
</xs:all>
> </notas>
</xs:complexType
</xs:complexType> >
</xs:schema
</xs:schema>>

XPath y XQuery XPath


„ Lenguajes de consulta para documentos XML „ Lenguaje sencillo de consultas en documentos
„ XQuery 1.0 (Enero 07) incluye Xpath 2.0 como XML
subconjunto
„ Xquery a XML Æ SQL a bases de datos „ Usado en XML y en XSLT (eXtensible
(eXtensible
Stylesheet Language Transformation usado para
relacional
traducciones de XML a otros formatos)
„ Desde el punto de vista de Xquery un
documento XML es una base de datos jerá
jerárquica „ Indica caminos dentro de los documentos
considerados como árboles

2
Xpath: árboles XML Xpath: tipos de nodos
/ + notas
| + nota „ Nodo raí
raíz: / No confundir con el elemento raí
raíz
| + de „ Nodos elemento: cualquier nodo interno. Sus hijos
| +texto bertoldo pueden ser:
| + para
„ nodos elemento
| +texto herminia
| + fecha „ nodos texto
| +mes „ nodos comentario
| texto 1 „ nodos de instrucciones de proceso
| +dia
+dia
| texto 21
„ Nodos texto: siempre son hojas
„ Nodos atributo: no existen realmente, asociados a elem.
elem.
| + asunto
| texto no te olvides de comprar el pan
„ Nodos comentario e instrucciones de proceso: de
| + nota
puede acceder con la propiedad string-
string-value
…….
…….

XPath Xpath: ejemplos


( la mayorí
mayoría extraí
extraídos de http://www.zvon.org/xxl/XPathTutorial/General/examples.html )

Elemento raí
raíz AAA : /AAA o equivalentemente /child
/child::AAA
::AAA
„ Gramá
Gramática de expresiones vá
válidas en Xpath:
Xpath: „
<AAA>
<BBB/>
<CCC/>
<BBB/>
(absolute path) ap Æ doc(fileName)/rp | doc(fileName)//rp <BBB/>
<DDD>
(relative path) rp Æ tagName | * | . | .. | text() <BBB/>
| (rp) | rp1/rp2 | rp1//rp2 | rp[f] | rp1, rp2 </DDD>
<CCC/>
(path filter) f Æ rp | rp1 = rp2 | rp1 eq rp2 | rp1 == rp2 | </AAA>
rp1 is rp2 | (f) | f1 and f2 | f1 or f2 | not f „ No hace falta dar el camino completo, ni el nivel al que se encuentra
encuentra el
elemento
(devuelve elementos cuyo atributo color tenga contenido “Rojo” )
//*[@color = "Rojo"]

XPath: ejemplos XPath: ejemplos


„ BBB hijos de DDD y nietos de AAA: „ Elementos BBB hijos de un DDD
„ /AAA/DDD/BBB „ //DDD/BBB :
„ Alternativa: /AAA/DDD/*[name
/AAA/DDD/*[name()=()=““BBB”
BBB”]
<AAA>
<AAA> <BBB/>
<BBB/> <CCC/>
<CCC/> <BBB/>
<BBB/> <DDD>
<BBB/> <BBB/>
<DDD> </DDD>
<BBB/> <CCC>
</DDD> <DDD>
<CCC/> <BBB/>
</AAA> <BBB/>
</DDD>
</CCC>
</AAA>

3
XPath: ejemplos XPath: ejemplos
„ Descendientes de AAA sin contar al propio AAA „ Padres de DDD
„ /A/*// „ //DDD/.. o //DDD/parent
//DDD/parent::*
::*
„ /A/descendant
/A/descendant::*
::* <AAA>
<BBB>
<DDD>
<AAA> <CCC>
<BBB/> <DDD/>
<CCC/> <EEE/>
<BBB/> </CCC>
<DDD> </DDD>
<BBB/> </BBB>
</DDD> <CCC>
<DDD>
<CCC> <EEE>
<DDD> <DDD>
<BBB/> <FFF/>
<BBB/> </DDD>
</DDD> </EEE>
</CCC> </DDD>
</AAA> </CCC>
</AAA>

XPath: ejemplos XPath: ejemplos


„ Elementos BBB con 3 antepasados: /*/*/*/BBB
<AAA>
<XXX>
„Primer BBB hijo de AAA: /AAA/BBB[1]
<DDD>
<BBB/>
<AAA>
<BBB/>
<EEE/>
<FFF/>
<BBB/>
</DDD>
</XXX>
<CCC>
<BBB/>
<DDD>
<BBB/>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
<BBB/>
</CCC>
<CCC> </AAA>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>

XPath: ejemplos XPath: ejemplos


Elementos que tienen dos hijos BBB: //*[count(BBB
//*[count(BBB)=2]
)=2]
„Último BBB hijo de AAA: /AAA/BBB[ last(
last( ) ]
„
<AAA>
<CCC>
<AAA> <BBB/>
<BBB/>
<BBB/> <BBB/>
</CCC>
<BBB/> <DDD>
<BBB/>
<BBB/> <BBB/>
</DDD>
<BBB/> <EEE>
<CCC/>
</AAA> <DDD/>
</EEE>
</AAA>

4
XPath: ejemplos XPath: ejemplos
„ Elementos que tienen dos hijos: //*[count
//*[count(*)=2]
(*)=2] „ Elementos cuyo nombre tiene menos de 3 caracteres:
<AAA>
<CCC>
<BBB/> //*[string
//*[string--length(name())
length(name()) &lt
&lt;; 3]
<BBB/> <AAA>
<BBB/> <Q/>
</CCC> <SSSS/>
<DDD> <BB/>
<BBB/> <CCC/>
<BBB/> <DDDDDDDD/>
</DDD> <EEEE/>
<EEE> </AAA>
<CCC/>
<DDD/> „ Se debe usar &lt
&lt;; como sustituto de < y &gt
&gt;; como sustituto de >
</EEE>
</AAA>

XPath: ejemplos XPath: Aplicaciones


„ Seleccionar todos los elementos BBB y todos los CCC: „ Quizá
Quizás el entorno en el que má
más se usa actualmente
XPath es en XSLT
//BBB | //CCC
<AAA>
<BBB/> „ XSLT está
estándar W3C para transformar documentos
<CCC/>
<DDD> XML en otros documentos XML o incluso en formatos
<CCC/> diferentes
</DDD>
<EEE/>
</AAA>
„ Habitualmente utilizado para convertir XML en HTML
„ El OR se representa por |
„ Permite tener separada la informació
información (XML) de la
forma de presentarla (HTML)

Xquery, sintaxis Xquery, sintaxis (II)


„ Consulta en XQuery es una expresió
expresión que lee una secuencia de datos en
XML y devuelve como resultado otra secuencia de datos en XML. „ Toda consulta escrita en XQuery debe cumplir las
„ Las consultas siguen la norma FLWOR (For, For, Let,
Let, Where,
Where, Order y Return):
Return): siguientes reglas:
„ FOR:
FOR: Vincula una o má más variables a expresiones escritas en XPath,
XPath, FOR y LET sirven para crear las tuplas con las que trabajará
creando un flujo de tuplas en el que cada tupla está
„ trabajará
está vinculada a una de las
variables. el resto de las clá
cláusulas de la consulta y pueden usarse tantas
„ LET:
LET: Vincula una variable al resultado completo de una expresió
expresión veces como se desee en una consulta, incluso dentro de otras
añadiendo esos ví
vínculos a las tuplas generadas por una claú
claúsula for o, si
no existe ninguna clá
cláusula for,
for, creando una única tupla que contenga esos claú
claúsulas.
sulas.
vínculos. „ Sin embargo solo puede declararse una única clá cláusula
„ WHERE:
WHERE: Filtra las tuplas eliminando todos los valores que no cumplan
las condiciones dadas. WHERE, una única clá cláusula ORDER BY y una única
„ ORDER BY: BY: Ordena las tuplas segú
según el criterio dado. claú
claúsula RETURN.
„ RETURN:
RETURN: Construye el resultado de la consulta para una tupla dada,
despué
después de haber sido filtrada por la clá
clásula where y ordenada por la
„ Ninguna de las clácláusulas FLWOR es obligatoria en una
clá
cláusula order by. consulta XQuery.

5
XQuery: sintaxis XQuery: construyendo expresiones
„ XQuery distingue mayúsculas y minúsculas „ Se permite el uso de if-
if-then-
then-else,
else, con la parte else
obligatoria (else
(else () para devolver la tupla vací
vacía)
„ Las palabras clave van siempre en minúsculas „ Cuantificadores: some y every
„ Las consultas en XQuery son expresiones „ Operadores:
„ Matemá
Matemáticos:
ticos: +, -, * , div,
div, idiv,
idiv, mod.
„ Cada expresión se evalúa sin efectos laterales „ Comparació
Comparación: =, !=, < , <=, > , >=, not(). not().
„ Las expresiones se pueden componer „ Secuencia:
Secuencia: union,
union, intersect,
intersect, except.
except.
„ Redondeo:
Redondeo: floor(),
floor(), ceiling(),
ceiling(), round().
„ Funciones de agrupació
agrupación: count(),
count(), min(),
min(), max(),
max(), avg(),
avg(), sum().
sum().
„ Funciones de cadena:
cadena: concat(),
concat(), string-
string-length(),
length(), startswith(),
startswith(),
ends-
ends-with(),
with(), substring(), upper-
upper-case(), lower-
lower-case(), string().
string().
„ Uso general:
general: distinct-
distinct-values(),
values(), empty(),
empty(), exits().
exits().

XQuery: expresiones
„ Literales: “Hola”
Hola”, 3.141592,
„ Valores construidos: true(),
true(), date(“
date(“2007-
2007-12-
12-31”
31”)
„ Variables: $x
„ Secuencias:
„ (1,(2,3),4) es lo mismo que 1,2,3,4
„ ($a, $b) es lo mismo que $a, $b
„ 3 to 8 es lo mismo que 3,4,5,6,7,8